9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-24 09:29:33 +00:00

feat(core): 添加自定义方块名称翻译支持

This commit is contained in:
jhqwqmc
2025-03-30 00:56:51 +08:00
parent 8ee787b1b8
commit fc37a8192c
2 changed files with 92 additions and 3 deletions

View File

@@ -0,0 +1,37 @@
lang:
en_us:
block_name:default:chinese_lantern: "Chinese Lantern"
block_name:default:netherite_anvil: "Netherite Anvil"
block_name:default:topaz_ore: "Topaz Ore"
block_name:default:deepslate_topaz_ore: "Deepslate Topaz Ore"
block_name:default:palm_log: "Palm Log"
block_name:default:stripped_palm_log: "Stripped Palm Log"
block_name:default:palm_wood: "Palm Wood"
block_name:default:stripped_palm_wood: "Stripped Palm Wood"
block_name:default:palm_planks: "Palm Planks"
block_name:default:palm_sapling: "Palm Sapling"
block_name:default:palm_leaves: "Palm Leaves"
block_name:default:fairy_flower: "Fairy Flower"
block_name:default:reed: "Reed"
block_name:default:flame_cane: "Flame Cane"
block_name:default:ender_pearl_flower: "Ender Pearl Flower"
block_name:default:gunpowder_block: "GunPowder Block"
block_name:default:solid_gunpowder_block: "Solid GunPowder Block"
zh_cn:
block_name:default:chinese_lantern: "灯笼"
block_name:default:netherite_anvil: "下界合金砧"
block_name:default:topaz_ore: "黄玉矿石"
block_name:default:deepslate_topaz_ore: "深层黄玉矿石"
block_name:default:palm_log: "棕榈原木"
block_name:default:stripped_palm_log: "去皮棕榈原木"
block_name:default:palm_wood: "棕榈木"
block_name:default:stripped_palm_wood: "去皮棕榈木"
block_name:default:palm_planks: "棕榈木板"
block_name:default:palm_sapling: "棕榈树苗"
block_name:default:palm_leaves: "棕榈树叶"
block_name:default:fairy_flower: "仙灵花"
block_name:default:reed: "芦苇"
block_name:default:flame_cane: "烈焰甘蔗"
block_name:default:ender_pearl_flower: "末影珍珠花"
block_name:default:gunpowder_block: "火药粉末"
block_name:default:solid_gunpowder_block: "凝固火药块"

View File

@@ -1,14 +1,19 @@
package net.momirealms.craftengine.core.plugin.locale;
import net.momirealms.craftengine.core.block.BlockStateParser;
import net.momirealms.craftengine.core.block.BlockStateVariantProvider;
import net.momirealms.craftengine.core.block.ImmutableBlockState;
import net.momirealms.craftengine.core.plugin.CraftEngine;
import org.jetbrains.annotations.Nullable;
import java.util.HashMap;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
public class I18NData {
public final Map<String, String> translations = new HashMap<>();
public void addTranslations(Map<String, String> data) {
addBlockName(data);
translations.putAll(data);
}
@@ -36,4 +41,51 @@ public class I18NData {
});
});
}
}
private static void addBlockName(Map<String, String> data) {
String[] keyBuffer = new String[data.size()];
int validKeyCount = 0;
for (Map.Entry<String, String> entry : data.entrySet()) {
String key = entry.getKey();
if (key != null && key.length() > 11 && key.startsWith("block_name:")) {
keyBuffer[validKeyCount++] = key;
}
}
for (String key : keyBuffer) {
String value = data.remove(key);
ImmutableBlockState states = BlockStateParser.deserialize(key.substring(11));
if (states == null) continue;
BlockStateVariantProvider variantProvider = states.owner().value().variantProvider();
Collection<ImmutableBlockState> stateCollection = variantProvider.states();
for (ImmutableBlockState state : stateCollection) {
Object blockState = state.customBlockState().handle();
String id = blockState.toString();
int first = -1, last = -1;
for (int i = 0; i < id.length(); i++) {
char c = id.charAt(i);
if (c == '{' && first == -1) {
first = i;
} else if (c == '}') {
last = i;
}
}
if (first == -1 || last == -1 || last <= first) {
CraftEngine.instance().logger().warn("Invalid block ID format: " + id);
continue;
}
int length = last - first - 1;
char[] chars = new char[length];
id.getChars(first + 1, last, chars, 0);
for (int i = 0; i < length; i++) {
if (chars[i] == ':') {
chars[i] = '.';
}
}
String blockId = new String(chars);
data.put("block." + blockId, value);
}
}
}
}