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:
@@ -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: "凝固火药块"
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user