本地化处理
This commit is contained in:
parent
145d57370b
commit
63494cfdf5
|
|
@ -19,7 +19,7 @@ license = "LGPL-3.0-or-later"
|
|||
# A list of mods - how many allowed here is determined by the individual mod loader
|
||||
[[mods]]
|
||||
modId = "extendedae_plus"
|
||||
version = "1.21.1-1.5.0"
|
||||
version = "1.21.1-1.5.1"
|
||||
displayName = "ExtendedAE-Plus"
|
||||
issueTrackerURL = "https://github.com/GaLicn/ExtendedAE_Plus/issues"
|
||||
displayURL = "https://github.com/GaLicn/ExtendedAE_Plus"
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import net.minecraft.world.entity.player.Inventory;
|
|||
import net.neoforged.neoforge.network.PacketDistributor;
|
||||
|
||||
public class GlobalProviderModesScreen extends AbstractContainerScreen<NetworkPatternControllerMenu> {
|
||||
private static final Component CUSTOM_TITLE = Component.literal("样板供应器状态控制器");
|
||||
private static final Component CUSTOM_TITLE = Component.translatable("extendedae_plus.screen.global_controller_title");
|
||||
public GlobalProviderModesScreen(NetworkPatternControllerMenu menu, Inventory inv, Component title) {
|
||||
super(menu, inv, title);
|
||||
this.imageWidth = 240;
|
||||
|
|
|
|||
|
|
@ -106,13 +106,13 @@ public class ProviderSelectScreen extends Screen {
|
|||
ExtendedAEPatternUploadUtil.loadRecipeTypeNames();
|
||||
var player = Minecraft.getInstance().player;
|
||||
if (player != null) {
|
||||
player.sendSystemMessage(Component.literal("ExtendedAE Plus: 已重载映射表"));
|
||||
player.sendSystemMessage(Component.translatable("extendedae_plus.message.mapping.reload_success"));
|
||||
}
|
||||
// 重载后不强制刷新筛选,但如需立即应用到名称匹配,可手动编辑搜索框或翻页
|
||||
} catch (Throwable t) {
|
||||
var player = Minecraft.getInstance().player;
|
||||
if (player != null) {
|
||||
player.sendSystemMessage(Component.literal("ExtendedAE Plus: 重载映射表失败: " + t.getClass().getSimpleName()));
|
||||
player.sendSystemMessage(Component.translatable("extendedae_plus.message.mapping.reload_fail", t.getClass().getSimpleName()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -335,16 +335,16 @@ public class ProviderSelectScreen extends Screen {
|
|||
String val = this.cnInput == null ? "" : this.cnInput.getValue().trim();
|
||||
var player = Minecraft.getInstance().player;
|
||||
if (key.isEmpty()) {
|
||||
if (player != null) player.sendSystemMessage(Component.literal("请输入搜索关键字后再添加映射"));
|
||||
if (player != null) player.sendSystemMessage(Component.translatable("extendedae_plus.message.mapping.search_required"));
|
||||
return;
|
||||
}
|
||||
if (val.isEmpty()) {
|
||||
if (player != null) player.sendSystemMessage(Component.literal("请输入中文名称"));
|
||||
if (player != null) player.sendSystemMessage(Component.translatable("extendedae_plus.message.mapping.cn_required"));
|
||||
return;
|
||||
}
|
||||
boolean ok = ExtendedAEPatternUploadUtil.addOrUpdateAliasMapping(key, val);
|
||||
if (ok) {
|
||||
if (player != null) player.sendSystemMessage(Component.literal("已添加/更新映射: " + key + " -> " + val));
|
||||
if (player != null) player.sendSystemMessage(Component.translatable("extendedae_plus.message.mapping.add_success", key, val));
|
||||
// 将刚添加的中文名写入搜索框,作为当前查询
|
||||
this.query = val;
|
||||
if (this.searchBox != null) {
|
||||
|
|
@ -356,7 +356,7 @@ public class ProviderSelectScreen extends Screen {
|
|||
this.page = 0;
|
||||
this.needsRefresh = true;
|
||||
} else {
|
||||
if (player != null) player.sendSystemMessage(Component.literal("写入映射失败"));
|
||||
if (player != null) player.sendSystemMessage(Component.translatable("extendedae_plus.message.mapping.add_fail"));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -365,16 +365,16 @@ public class ProviderSelectScreen extends Screen {
|
|||
String val = this.cnInput == null ? "" : this.cnInput.getValue().trim();
|
||||
var player = Minecraft.getInstance().player;
|
||||
if (val.isEmpty()) {
|
||||
if (player != null) player.sendSystemMessage(Component.literal("请输入中文名称后再删除映射"));
|
||||
if (player != null) player.sendSystemMessage(Component.translatable("extendedae_plus.message.mapping.delete_cn_required"));
|
||||
return;
|
||||
}
|
||||
int removed = ExtendedAEPatternUploadUtil.removeMappingsByCnValue(val);
|
||||
if (removed > 0) {
|
||||
if (player != null) player.sendSystemMessage(Component.literal("已删除 " + removed + " 条映射,中文= " + val));
|
||||
if (player != null) player.sendSystemMessage(Component.translatable("extendedae_plus.message.mapping.delete_success", removed, val));
|
||||
this.applyFilter();
|
||||
this.needsRefresh = true;
|
||||
} else {
|
||||
if (player != null) player.sendSystemMessage(Component.literal("未找到中文为 '" + val + "' 的映射"));
|
||||
if (player != null) player.sendSystemMessage(Component.translatable("extendedae_plus.message.mapping.delete_not_found", val));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -76,13 +76,13 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
|
|||
String teamName = ChannelCardItem.getTeamName(channelCard);
|
||||
te.setPlacerId(cardOwner, teamName);
|
||||
player.displayClientMessage(
|
||||
Component.literal("已将收发器绑定至:" + (teamName != null ? teamName : cardOwner.toString().substring(0, 8))),
|
||||
Component.translatable("extendedae_plus.message.transceiver.bound", teamName != null ? teamName : cardOwner.toString().substring(0, 8)),
|
||||
true
|
||||
);
|
||||
} else {
|
||||
// 频道卡未绑定所有者,使用当前玩家
|
||||
te.setPlacerId(player.getUUID(), player.getName().getString());
|
||||
player.displayClientMessage(Component.literal("频道卡未绑定,已使用当前玩家"), true);
|
||||
player.displayClientMessage(Component.translatable("extendedae_plus.message.transceiver.card_unbound_use_self"), true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -107,7 +107,7 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
|
|||
if (sneaking) {
|
||||
if (te.isLocked()) {
|
||||
if (!level.isClientSide) {
|
||||
player.displayClientMessage(Component.literal("收发器已锁定,无法修改频道"), true);
|
||||
player.displayClientMessage(Component.translatable("extendedae_plus.message.transceiver.locked_change_channel"), true);
|
||||
}
|
||||
} else {
|
||||
long f = te.getFrequency();
|
||||
|
|
@ -115,20 +115,22 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
|
|||
f += 1;
|
||||
te.setFrequency(f);
|
||||
if (!level.isClientSide) {
|
||||
player.displayClientMessage(Component.literal("频道:" + te.getFrequency()), true);
|
||||
player.displayClientMessage(Component.translatable("extendedae_plus.message.transceiver.channel", te.getFrequency()), true);
|
||||
}
|
||||
}
|
||||
return InteractionResult.sidedSuccess(level.isClientSide);
|
||||
} else {
|
||||
if (te.isLocked()) {
|
||||
if (!level.isClientSide) {
|
||||
player.displayClientMessage(Component.literal("收发器已锁定,无法切换模式"), true);
|
||||
player.displayClientMessage(Component.translatable("extendedae_plus.message.transceiver.locked_toggle_mode"), true);
|
||||
}
|
||||
return InteractionResult.sidedSuccess(level.isClientSide);
|
||||
}
|
||||
te.setMasterMode(!te.isMasterMode());
|
||||
if (!level.isClientSide) {
|
||||
player.displayClientMessage(Component.literal(te.isMasterMode() ? "模式:主端" : "模式:从端"), true);
|
||||
player.displayClientMessage(Component.translatable(te.isMasterMode()
|
||||
? "extendedae_plus.message.transceiver.mode_master"
|
||||
: "extendedae_plus.message.transceiver.mode_slave"), true);
|
||||
}
|
||||
return InteractionResult.sidedSuccess(level.isClientSide);
|
||||
}
|
||||
|
|
@ -147,7 +149,7 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
|
|||
if (sneaking) {
|
||||
if (te.isLocked()) {
|
||||
if (!level.isClientSide) {
|
||||
player.displayClientMessage(Component.literal("收发器已锁定,无法修改频道"), true);
|
||||
player.displayClientMessage(Component.translatable("extendedae_plus.message.transceiver.locked_change_channel"), true);
|
||||
}
|
||||
} else {
|
||||
int step = 1;
|
||||
|
|
@ -163,20 +165,22 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
|
|||
}
|
||||
te.setFrequency(f);
|
||||
if (!level.isClientSide) {
|
||||
player.displayClientMessage(Component.literal("频道:" + te.getFrequency()), true);
|
||||
player.displayClientMessage(Component.translatable("extendedae_plus.message.transceiver.channel", te.getFrequency()), true);
|
||||
}
|
||||
}
|
||||
return ItemInteractionResult.sidedSuccess(level.isClientSide);
|
||||
} else {
|
||||
if (te.isLocked()) {
|
||||
if (!level.isClientSide) {
|
||||
player.displayClientMessage(Component.literal("收发器已锁定,无法切换模式"), true);
|
||||
player.displayClientMessage(Component.translatable("extendedae_plus.message.transceiver.locked_toggle_mode"), true);
|
||||
}
|
||||
return ItemInteractionResult.sidedSuccess(level.isClientSide);
|
||||
}
|
||||
te.setMasterMode(!te.isMasterMode());
|
||||
if (!level.isClientSide) {
|
||||
player.displayClientMessage(Component.literal(te.isMasterMode() ? "模式:主端" : "模式:从端"), true);
|
||||
player.displayClientMessage(Component.translatable(te.isMasterMode()
|
||||
? "extendedae_plus.message.transceiver.mode_master"
|
||||
: "extendedae_plus.message.transceiver.mode_slave"), true);
|
||||
}
|
||||
return ItemInteractionResult.sidedSuccess(level.isClientSide);
|
||||
}
|
||||
|
|
@ -199,7 +203,7 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
|
|||
// 潜行左键(其他物品):减频(-1 或 -10)
|
||||
if (player.isShiftKeyDown()) {
|
||||
if (te.isLocked()) {
|
||||
player.displayClientMessage(Component.literal("收发器已锁定,无法修改频道"), true);
|
||||
player.displayClientMessage(Component.translatable("extendedae_plus.message.transceiver.locked_change_channel"), true);
|
||||
super.attack(state, level, pos, player);
|
||||
return;
|
||||
}
|
||||
|
|
@ -210,7 +214,7 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
|
|||
f -= step;
|
||||
if (f < 0) f = 0;
|
||||
te.setFrequency(f);
|
||||
player.displayClientMessage(Component.literal("频道:" + te.getFrequency()), true);
|
||||
player.displayClientMessage(Component.translatable("extendedae_plus.message.transceiver.channel", te.getFrequency()), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,8 @@ public enum WirelessTransceiverJadePluginComponents implements IBlockComponentPr
|
|||
protected void add(BlockAccessor accessor, ITooltip tooltip, IPluginConfig config, CompoundTag data) {
|
||||
if (data.contains("masterMode")) {
|
||||
boolean masterMode = data.getBoolean("masterMode");
|
||||
tooltip.add(Component.translatable("extendedae_plus.tooltip.master_mode", masterMode ? "主模式" : "从模式"));
|
||||
tooltip.add(Component.translatable("extendedae_plus.tooltip.master_mode",
|
||||
Component.translatable(masterMode ? "extendedae_plus.state.master" : "extendedae_plus.state.slave")));
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -39,12 +40,12 @@ public enum WirelessTransceiverJadePluginComponents implements IBlockComponentPr
|
|||
String dim = data.contains("masterDim") ? data.getString("masterDim") : "";
|
||||
String customName = data.contains("customName") ? data.getString("customName") : null;
|
||||
if (customName != null) {
|
||||
tooltip.add(Component.literal("主节点: " + customName + "(" + pos.getX() + ", " + pos.getY() + ", " + pos.getZ() + ")"));
|
||||
tooltip.add(Component.translatable("extendedae_plus.jade.master_named", customName, pos.getX(), pos.getY(), pos.getZ()));
|
||||
} else {
|
||||
tooltip.add(Component.literal("主节点位置: (" + pos.getX() + ", " + pos.getY() + ", " + pos.getZ() + ")"));
|
||||
tooltip.add(Component.translatable("extendedae_plus.jade.master_pos", pos.getX(), pos.getY(), pos.getZ()));
|
||||
}
|
||||
if (!dim.isEmpty()) {
|
||||
tooltip.add(Component.literal("维度: " + dim));
|
||||
tooltip.add(Component.translatable("extendedae_plus.jade.dimension", dim));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -54,7 +55,8 @@ public enum WirelessTransceiverJadePluginComponents implements IBlockComponentPr
|
|||
protected void add(BlockAccessor accessor, ITooltip tooltip, IPluginConfig config, CompoundTag data) {
|
||||
if (data.contains("locked")) {
|
||||
boolean locked = data.getBoolean("locked");
|
||||
tooltip.add(Component.translatable("extendedae_plus.tooltip.locked", locked ? "已锁定" : "未锁定"));
|
||||
tooltip.add(Component.translatable("extendedae_plus.tooltip.locked",
|
||||
Component.translatable(locked ? "extendedae_plus.state.locked" : "extendedae_plus.state.unlocked")));
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
@ -63,7 +65,9 @@ public enum WirelessTransceiverJadePluginComponents implements IBlockComponentPr
|
|||
protected void add(BlockAccessor accessor, ITooltip tooltip, IPluginConfig config, CompoundTag data) {
|
||||
if (data.contains("networkUsable")) {
|
||||
boolean usable = data.getBoolean("networkUsable");
|
||||
tooltip.add(Component.literal((usable ? "设备在线" : "设备离线")));
|
||||
tooltip.add(Component.translatable(usable
|
||||
? "extendedae_plus.jade.network.online"
|
||||
: "extendedae_plus.jade.network.offline"));
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ public abstract class HighlightButtonMixin {
|
|||
// 提示玩家已选择供应器
|
||||
if (minecraft.player != null) {
|
||||
minecraft.player.displayClientMessage(
|
||||
Component.literal("ExtendedAE Plus: 已选择样板供应器 (ID=" + serverId + "),可按住Shift左键快速上传样板"),
|
||||
Component.translatable("extendedae_plus.message.provider.selected", serverId),
|
||||
true
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen<AEBaseMenu>
|
|||
// 显示提示消息:请先选择一个样板供应器
|
||||
if (this.minecraft.player != null) {
|
||||
this.minecraft.player.displayClientMessage(
|
||||
Component.literal("ExtendedAE Plus: 请先选择一个样板供应器(点击GroupHeader旁的按钮)"),
|
||||
Component.translatable("extendedae_plus.message.provider.select_first"),
|
||||
true
|
||||
);
|
||||
}
|
||||
|
|
@ -150,13 +150,13 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen<AEBaseMenu>
|
|||
} catch (Throwable t) {
|
||||
// 理论上不会失败,若失败则给出简要提示
|
||||
this.minecraft.player.displayClientMessage(
|
||||
Component.literal("❌ ExtendedAE Plus: 客户端发送上传请求失败"),
|
||||
Component.translatable("extendedae_plus.message.upload.client_fail"),
|
||||
true
|
||||
);
|
||||
}
|
||||
} else {
|
||||
this.minecraft.player.displayClientMessage(
|
||||
Component.literal("❌ ExtendedAE Plus: 无效的样板物品"),
|
||||
Component.translatable("extendedae_plus.message.upload.invalid_item"),
|
||||
true
|
||||
);
|
||||
}
|
||||
|
|
@ -209,7 +209,7 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen<AEBaseMenu>
|
|||
if (info == null) {
|
||||
// 无位置信息,提示
|
||||
if (this.minecraft != null && this.minecraft.player != null) {
|
||||
this.minecraft.player.displayClientMessage(Component.literal("未找到该供应器的位置信息,无法打开UI"), true);
|
||||
this.minecraft.player.displayClientMessage(Component.translatable("extendedae_plus.message.provider.location_missing"), true);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
@ -534,7 +534,7 @@ public abstract class GuiExPatternTerminalMixin extends AEBaseScreen<AEBaseMenu>
|
|||
btn = Button.builder(Component.literal("UI"), (b) -> {
|
||||
eap$tryOpenProviderUI(rowIndex);
|
||||
}).size(14, 12).build();
|
||||
btn.setTooltip(Tooltip.create(Component.literal("打开该供应器目标容器的界面")));
|
||||
btn.setTooltip(Tooltip.create(Component.translatable("extendedae_plus.tooltip.provider.open_ui")));
|
||||
eap$openUIButtons.put(rowIndex, btn);
|
||||
this.addRenderableWidget(btn);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@ public class GlobalToggleProviderModesC2SPacket implements CustomPacketPayload {
|
|||
|
||||
var level = player.serverLevel();
|
||||
var blockEntity = level.getBlockEntity(message.controllerBlockPos);
|
||||
|
||||
if (!(blockEntity instanceof IInWorldGridNodeHost gridNodeHost)) return;
|
||||
|
||||
var gridNode = gridNodeHost.getGridNode(null);
|
||||
|
|
@ -87,7 +88,7 @@ public class GlobalToggleProviderModesC2SPacket implements CustomPacketPayload {
|
|||
|
||||
// 给发起者一个短暂的行动条提示,方便知道本次操作实际影响了多少个供应器
|
||||
player.displayClientMessage(
|
||||
Component.literal("E+ 全局切换已应用到 " + affectedCount + " 个样板供应器"),
|
||||
Component.translatable("extendedae_plus.message.global_toggle_applied", affectedCount),
|
||||
true);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,10 +51,9 @@ public class ExtendedAEPatternUploadUtil {
|
|||
// --------------------------- 配置:RecipeType 中文名称映射 ---------------------------
|
||||
private static final String CONFIG_RELATIVE = "extendedae_plus/recipe_type_names.json";
|
||||
private static final Map<ResourceLocation, String> CUSTOM_NAMES = new ConcurrentHashMap<>();
|
||||
// 允许使用最终搜索关键字(通常为 path 或自定义短语)作为键,例如:"assembler": "组装机"
|
||||
private static final Map<String, String> CUSTOM_ALIASES = new ConcurrentHashMap<>();
|
||||
private static final Gson GSON = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
|
||||
// 最近一次通过 JEI 填充到编码终端的“处理配方”的中文名称(如:烧炼/高炉/烟熏...)
|
||||
// 最近一次通过 JEI 填充到编码终端的“处理配方”的中文名称(如:烧炼/高炉/烟熏...)
|
||||
public static volatile String lastProcessingName = null;
|
||||
|
||||
static {
|
||||
|
|
@ -413,7 +412,7 @@ public class ExtendedAEPatternUploadUtil {
|
|||
.eap$getEncodedPatternSlot();
|
||||
ItemStack stack = encodedSlot.getItem();
|
||||
if (stack.isEmpty() || !PatternDetailsHelper.isEncodedPattern(stack)) {
|
||||
sendMessage(player, "ExtendedAE Plus: 没有可上传的编码样板");
|
||||
sendMessage(player, "extendedae_plus.message.upload.no_pattern");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -437,7 +436,7 @@ public class ExtendedAEPatternUploadUtil {
|
|||
}
|
||||
} catch (Throwable ignored) {}
|
||||
if (grid == null) {
|
||||
sendMessage(player, "ExtendedAE Plus: 当前不在有效的 AE 网络中");
|
||||
sendMessage(player, "extendedae_plus.message.network.invalid");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -445,7 +444,7 @@ public class ExtendedAEPatternUploadUtil {
|
|||
if (matrixContainsPattern(grid, stack)) {
|
||||
// 直接提醒并跳过上传,并将同等数量的空白样板放回空白样板槽,否则退回玩家背包
|
||||
if (player != null) {
|
||||
player.sendSystemMessage(Component.literal("ExtendedAE Plus: 装配矩阵已存在相同样板,已跳过上传并返还空白样板"));
|
||||
player.sendSystemMessage(Component.translatable("extendedae_plus.message.matrix.duplicate"));
|
||||
}
|
||||
try {
|
||||
var accessor = (PatternEncodingTermMenuAccessor) (Object) menu;
|
||||
|
|
@ -644,34 +643,34 @@ public class ExtendedAEPatternUploadUtil {
|
|||
// 1. 验证玩家是否打开了样板访问终端
|
||||
PatternAccessTermMenu menu = getPatternAccessMenu(player);
|
||||
if (menu == null) {
|
||||
sendMessage(player, "ExtendedAE Plus: 请先打开样板访问终端或扩展样板管理终端");
|
||||
sendMessage(player, "extendedae_plus.message.open_terminal_first");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 2. 获取玩家背包中的物品
|
||||
ItemStack playerItem = player.getInventory().getItem(playerSlotIndex);
|
||||
if (playerItem.isEmpty()) {
|
||||
sendMessage(player, "ExtendedAE Plus: 背包槽位为空");
|
||||
sendMessage(player, "extendedae_plus.message.inventory_slot_empty");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 3. 验证是否是编码样板
|
||||
if (!PatternDetailsHelper.isEncodedPattern(playerItem)) {
|
||||
sendMessage(player, "ExtendedAE Plus: 该物品不是有效的编码样板");
|
||||
sendMessage(player, "extendedae_plus.message.invalid_pattern_item");
|
||||
return false;
|
||||
}
|
||||
|
||||
// 4. 获取目标样板供应器
|
||||
PatternContainer patternContainer = getPatternContainerById(menu, providerId);
|
||||
if (patternContainer == null) {
|
||||
sendMessage(player, "ExtendedAE Plus: 找不到指定的样板供应器 (ID: " + providerId + ")");
|
||||
sendMessage(player, "extendedae_plus.message.provider.not_found", providerId);
|
||||
return false;
|
||||
}
|
||||
|
||||
// 5. 获取样板供应器的库存
|
||||
InternalInventory patternInventory = patternContainer.getTerminalPatternInventory();
|
||||
if (patternInventory == null) {
|
||||
sendMessage(player, "ExtendedAE Plus: 无法访问样板供应器的库存");
|
||||
sendMessage(player, "extendedae_plus.message.provider.inventory_unavailable");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -681,22 +680,24 @@ public class ExtendedAEPatternUploadUtil {
|
|||
|
||||
// 7. 尝试插入样板
|
||||
ItemStack itemToInsert = playerItem.copy();
|
||||
ItemStack remaining = filteredInventory.addItems(itemToInsert);
|
||||
|
||||
if (remaining.getCount() < itemToInsert.getCount()) {
|
||||
// 插入成功(部分或全部)
|
||||
int insertedCount = itemToInsert.getCount() - remaining.getCount();
|
||||
ItemStack remain = filteredInventory.addItems(itemToInsert);
|
||||
int insertedCount = itemToInsert.getCount() - remain.getCount();
|
||||
if (insertedCount > 0) {
|
||||
playerItem.shrink(insertedCount);
|
||||
|
||||
if (playerItem.isEmpty()) {
|
||||
player.getInventory().setItem(playerSlotIndex, ItemStack.EMPTY);
|
||||
} else {
|
||||
player.getInventory().setItem(playerSlotIndex, playerItem);
|
||||
}
|
||||
|
||||
String terminalType = isExtendedAETerminal(player) ? "扩展样板管理终端" : "样板访问终端";
|
||||
sendMessage(player, "ExtendedAE Plus: 通过" + terminalType + "成功上传 " + insertedCount + " 个样板");
|
||||
|
||||
String terminalTypeKey = isExtendedAETerminal(player)
|
||||
? "extendedae_plus.terminal.expattern"
|
||||
: "extendedae_plus.terminal.pattern_access";
|
||||
sendMessage(player, "extendedae_plus.message.upload.success_single",
|
||||
Component.translatable(terminalTypeKey), insertedCount);
|
||||
return true;
|
||||
} else {
|
||||
sendMessage(player, "ExtendedAE Plus: 上传失败 - 样板供应器已满或样板无效");
|
||||
sendMessage(player, "extendedae_plus.message.upload.fail");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -718,8 +719,11 @@ public class ExtendedAEPatternUploadUtil {
|
|||
}
|
||||
}
|
||||
|
||||
String terminalType = isExtendedAETerminal(player) ? "扩展样板管理终端" : "样板访问终端";
|
||||
sendMessage(player, "ExtendedAE Plus: 通过" + terminalType + "批量上传完成,成功上传 " + successCount + " 个样板");
|
||||
String terminalTypeKey = isExtendedAETerminal(player)
|
||||
? "extendedae_plus.terminal.expattern"
|
||||
: "extendedae_plus.terminal.pattern_access";
|
||||
sendMessage(player, "extendedae_plus.message.upload.success_batch",
|
||||
Component.translatable(terminalTypeKey), successCount);
|
||||
return successCount;
|
||||
}
|
||||
|
||||
|
|
@ -796,7 +800,7 @@ public class ExtendedAEPatternUploadUtil {
|
|||
// 通过反射访问byId字段(ExtendedAE继承了这个字段)
|
||||
Field byIdField = findByIdField(menu.getClass());
|
||||
if (byIdField == null) {
|
||||
System.err.println("ExtendedAE Plus: 无法找到byId字段");
|
||||
System.err.println("ExtendedAE Plus: Unable to find byId field");
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
@ -813,7 +817,7 @@ public class ExtendedAEPatternUploadUtil {
|
|||
// 从ContainerTracker中获取PatternContainer
|
||||
Field containerField = findContainerField(containerTracker.getClass());
|
||||
if (containerField == null) {
|
||||
System.err.println("ExtendedAE Plus: 无法找到container字段");
|
||||
System.err.println("ExtendedAE Plus: Unable to find container field");
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
@ -821,7 +825,7 @@ public class ExtendedAEPatternUploadUtil {
|
|||
return (PatternContainer) containerField.get(containerTracker);
|
||||
|
||||
} catch (Exception e) {
|
||||
System.err.println("ExtendedAE Plus: 无法获取PatternContainer,错误: " + e.getMessage());
|
||||
System.err.println("ExtendedAE Plus: Failed to get PatternContainer, error: " + e.getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -860,13 +864,14 @@ public class ExtendedAEPatternUploadUtil {
|
|||
* 发送消息给玩家
|
||||
*
|
||||
* @param player 玩家
|
||||
* @param message 消息内容
|
||||
* @param key 翻译键
|
||||
* @param args 参数
|
||||
*/
|
||||
private static void sendMessage(ServerPlayer player, String message) {
|
||||
private static void sendMessage(ServerPlayer player, String key, Object... args) {
|
||||
// 静默:不再向玩家左下角发送任何提示信息
|
||||
// 如需恢复,取消下面注释即可:
|
||||
// if (player != null) {
|
||||
// player.sendSystemMessage(Component.literal(message));
|
||||
// player.sendSystemMessage(Component.translatable(key, args));
|
||||
// }
|
||||
// 如果玩家为null,静默忽略(用于测试环境)
|
||||
}
|
||||
|
|
@ -881,7 +886,7 @@ public class ExtendedAEPatternUploadUtil {
|
|||
public static String getProviderDisplayName(long providerId, PatternAccessTermMenu menu) {
|
||||
PatternContainer container = getPatternContainerById(menu, providerId);
|
||||
if (container == null) {
|
||||
return "未知供应器";
|
||||
return Component.translatable("extendedae_plus.provider.unknown").getString();
|
||||
}
|
||||
|
||||
try {
|
||||
|
|
@ -894,7 +899,7 @@ public class ExtendedAEPatternUploadUtil {
|
|||
// 忽略异常,使用默认名称
|
||||
}
|
||||
|
||||
return "样板供应器 #" + providerId;
|
||||
return Component.translatable("extendedae_plus.provider.named_id", providerId).getString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -927,11 +932,11 @@ public class ExtendedAEPatternUploadUtil {
|
|||
*/
|
||||
public static String getTerminalTypeDescription(ServerPlayer player) {
|
||||
if (isExtendedAETerminal(player)) {
|
||||
return "ExtendedAE扩展样板管理终端";
|
||||
return Component.translatable("extendedae_plus.terminal.expattern").getString();
|
||||
} else if (getPatternAccessMenu(player) != null) {
|
||||
return "AE2样板访问终端";
|
||||
return Component.translatable("extendedae_plus.terminal.pattern_access").getString();
|
||||
} else {
|
||||
return "未知终端类型";
|
||||
return Component.translatable("extendedae_plus.terminal.unknown").getString();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -170,5 +170,65 @@
|
|||
"gui.tooltips.extendedae_plus.AdvancedBlockingDisabled": "Use vanilla blocking logic",
|
||||
"gui.tooltips.extendedae_plus.SmartDoubling": "Smart Doubling",
|
||||
"gui.tooltips.extendedae_plus.SmartDoublingEnabled": "Intelligently double processing patterns based on request quantity",
|
||||
"gui.tooltips.extendedae_plus.SmartDoublingDisabled": "Distribute according to original pattern quantity"
|
||||
"gui.tooltips.extendedae_plus.SmartDoublingDisabled": "Distribute according to original pattern quantity",
|
||||
|
||||
"extendedae_plus.message.mapping.reload_success": "Mapping reloaded.",
|
||||
"extendedae_plus.message.mapping.reload_fail": "Failed to reload mapping (%s).",
|
||||
"extendedae_plus.message.mapping.search_required": "Please enter a search keyword.",
|
||||
"extendedae_plus.message.mapping.cn_required": "Please enter a Chinese name.",
|
||||
"extendedae_plus.message.mapping.add_success": "Added mapping: %s -> %s.",
|
||||
"extendedae_plus.message.mapping.add_fail": "Failed to add mapping.",
|
||||
"extendedae_plus.message.mapping.delete_cn_required": "Please enter the Chinese name to delete.",
|
||||
"extendedae_plus.message.mapping.delete_success": "Deleted %d mapping(s) for \"%s\".",
|
||||
"extendedae_plus.message.mapping.delete_not_found": "No mapping found for \"%s\".",
|
||||
|
||||
"extendedae_plus.message.upload.no_pattern": "No encoded pattern found.",
|
||||
"extendedae_plus.message.network.invalid": "Unable to access AE network.",
|
||||
"extendedae_plus.message.matrix.duplicate": "Assembly matrix already contains this pattern.",
|
||||
"extendedae_plus.message.open_terminal_first": "Please open a pattern terminal first.",
|
||||
"extendedae_plus.message.inventory_slot_empty": "The selected inventory slot is empty.",
|
||||
"extendedae_plus.message.invalid_pattern_item": "Item is not an encoded pattern.",
|
||||
"extendedae_plus.message.provider.not_found": "Pattern provider %s not found.",
|
||||
"extendedae_plus.message.provider.inventory_unavailable": "Provider inventory is unavailable.",
|
||||
"extendedae_plus.message.upload.success_single": "Uploaded to %s: %d pattern(s).",
|
||||
"extendedae_plus.message.upload.fail": "Pattern upload failed.",
|
||||
"extendedae_plus.message.upload.success_batch": "Batch uploaded to %s: %d patterns.",
|
||||
"extendedae_plus.message.upload.quick_success": "✅ Pattern quick-upload succeeded!",
|
||||
"extendedae_plus.message.upload.quick_fail": "❌ Pattern quick-upload failed. Check provider status.",
|
||||
"extendedae_plus.message.upload.client_fail": "❌ Failed to send upload request from client.",
|
||||
"extendedae_plus.message.upload.invalid_item": "❌ Invalid pattern item.",
|
||||
"extendedae_plus.message.provider.select_first": "Select a pattern provider first (use the button beside GroupHeader).",
|
||||
"extendedae_plus.message.provider.location_missing": "Location info for this provider not found; cannot open UI.",
|
||||
"extendedae_plus.message.provider.selected": "Selected pattern provider (ID=%s). Hold Shift+Left Click to quick upload.",
|
||||
"extendedae_plus.message.global_toggle_applied": "Applied mode toggle to %d provider(s).",
|
||||
|
||||
"extendedae_plus.provider.unknown": "Unknown provider",
|
||||
"extendedae_plus.provider.named_id": "Provider #%s",
|
||||
|
||||
"extendedae_plus.terminal.expattern": "ExtendedAE Pattern Terminal",
|
||||
"extendedae_plus.terminal.pattern_access": "AE2 Pattern Access Terminal",
|
||||
"extendedae_plus.terminal.unknown": "Unknown terminal",
|
||||
|
||||
"extendedae_plus.tooltip.provider.open_ui": "Open this provider's target container UI",
|
||||
|
||||
"extendedae_plus.message.transceiver.bound": "Transceiver bound to: %s",
|
||||
"extendedae_plus.message.transceiver.card_unbound_use_self": "Channel card unbound; using current player.",
|
||||
"extendedae_plus.message.transceiver.locked_change_channel": "Transceiver is locked; cannot change channel.",
|
||||
"extendedae_plus.message.transceiver.locked_toggle_mode": "Transceiver is locked; cannot toggle mode.",
|
||||
"extendedae_plus.message.transceiver.channel": "Channel: %d",
|
||||
"extendedae_plus.message.transceiver.mode_master": "Mode: Master",
|
||||
"extendedae_plus.message.transceiver.mode_slave": "Mode: Slave",
|
||||
|
||||
"extendedae_plus.state.master": "Master",
|
||||
"extendedae_plus.state.slave": "Slave",
|
||||
"extendedae_plus.state.locked": "Locked",
|
||||
"extendedae_plus.state.unlocked": "Unlocked",
|
||||
|
||||
"extendedae_plus.jade.master_named": "Master Node: %s (%d, %d, %d)",
|
||||
"extendedae_plus.jade.master_pos": "Master Node: (%d, %d, %d)",
|
||||
"extendedae_plus.jade.dimension": "Dimension: %s",
|
||||
"extendedae_plus.jade.network.online": "Online",
|
||||
"extendedae_plus.jade.network.offline": "Offline",
|
||||
|
||||
"extendedae_plus.screen.global_controller_title": "Pattern Provider Status Controller"
|
||||
}
|
||||
|
|
@ -169,5 +169,61 @@
|
|||
"gui.tooltips.extendedae_plus.AdvancedBlockingDisabled": "使用原版阻挡逻辑",
|
||||
"gui.tooltips.extendedae_plus.SmartDoubling": "智能翻倍",
|
||||
"gui.tooltips.extendedae_plus.SmartDoublingEnabled": "根据请求量对处理样板进行智能翻倍",
|
||||
"gui.tooltips.extendedae_plus.SmartDoublingDisabled": "按原始样板数量进行发配"
|
||||
"gui.tooltips.extendedae_plus.SmartDoublingDisabled": "按原始样板数量进行发配",
|
||||
|
||||
"extendedae_plus.message.mapping.reload_success": "映射已重载。",
|
||||
"extendedae_plus.message.mapping.reload_fail": "重载映射失败(%s)。",
|
||||
"extendedae_plus.message.mapping.search_required": "请输入搜索关键字。",
|
||||
"extendedae_plus.message.mapping.cn_required": "请输入中文名称。",
|
||||
"extendedae_plus.message.mapping.add_success": "已添加映射:%s -> %s。",
|
||||
"extendedae_plus.message.mapping.add_fail": "添加映射失败。",
|
||||
"extendedae_plus.message.mapping.delete_cn_required": "请输入要删除的中文名称。",
|
||||
"extendedae_plus.message.mapping.delete_success": "已删除 \"%s\" 的映射,共 %d 条。",
|
||||
"extendedae_plus.message.mapping.delete_not_found": "未找到 \"%s\" 的映射。",
|
||||
|
||||
"extendedae_plus.message.upload.no_pattern": "未找到已编码样板。",
|
||||
"extendedae_plus.message.network.invalid": "无法访问 AE 网络。",
|
||||
"extendedae_plus.message.matrix.duplicate": "装配矩阵已存在该样板。",
|
||||
"extendedae_plus.message.open_terminal_first": "请先打开样板终端。",
|
||||
"extendedae_plus.message.inventory_slot_empty": "选中的物品栏槽位为空。",
|
||||
"extendedae_plus.message.invalid_pattern_item": "该物品不是编码样板。",
|
||||
"extendedae_plus.message.provider.not_found": "未找到样板供应器 %s。",
|
||||
"extendedae_plus.message.provider.inventory_unavailable": "供应器库存不可用。",
|
||||
"extendedae_plus.message.upload.success_single": "已上传到 %s:%d 个样板。",
|
||||
"extendedae_plus.message.upload.fail": "样板上传失败。",
|
||||
"extendedae_plus.message.upload.success_batch": "批量上传到 %s:%d 个样板。",
|
||||
"extendedae_plus.message.upload.quick_success": "✅ 样板快速上传成功!",
|
||||
"extendedae_plus.message.upload.quick_fail": "❌ 样板快速上传失败,请检查供应器状态。",
|
||||
"extendedae_plus.message.upload.client_fail": "❌ 客户端发送上传请求失败。",
|
||||
"extendedae_plus.message.upload.invalid_item": "❌ 无效的样板物品。",
|
||||
"extendedae_plus.message.provider.select_first": "请先选择一个样板供应器(点击 GroupHeader 旁的按钮)。",
|
||||
"extendedae_plus.message.provider.location_missing": "未找到该供应器的位置信息,无法打开 UI。",
|
||||
"extendedae_plus.message.provider.selected": "已选择样板供应器 (ID=%s),按住 Shift+左键可快速上传样板。",
|
||||
"extendedae_plus.message.global_toggle_applied": "已对 %d 个供应器应用模式切换。",
|
||||
"extendedae_plus.provider.unknown": "未知供应器",
|
||||
"extendedae_plus.provider.named_id": "供应器 #%s",
|
||||
"extendedae_plus.terminal.expattern": "ExtendedAE 样板终端",
|
||||
"extendedae_plus.terminal.pattern_access": "AE2 样板访问终端",
|
||||
"extendedae_plus.terminal.unknown": "未知终端",
|
||||
"extendedae_plus.tooltip.provider.open_ui": "打开该供应器目标容器的界面",
|
||||
"extendedae_plus.message.transceiver.bound": "已将收发器绑定至:%s",
|
||||
"extendedae_plus.message.transceiver.card_unbound_use_self": "频道卡未绑定,已使用当前玩家。",
|
||||
"extendedae_plus.message.transceiver.locked_change_channel": "收发器已锁定,无法修改频道。",
|
||||
"extendedae_plus.message.transceiver.locked_toggle_mode": "收发器已锁定,无法切换模式。",
|
||||
"extendedae_plus.message.transceiver.channel": "频道:%d",
|
||||
"extendedae_plus.message.transceiver.mode_master": "模式:主端",
|
||||
"extendedae_plus.message.transceiver.mode_slave": "模式:从端",
|
||||
|
||||
"extendedae_plus.state.master": "主模式",
|
||||
"extendedae_plus.state.slave": "从模式",
|
||||
"extendedae_plus.state.locked": "已锁定",
|
||||
"extendedae_plus.state.unlocked": "未锁定",
|
||||
|
||||
"extendedae_plus.jade.master_named": "主节点:%s (%d, %d, %d)",
|
||||
"extendedae_plus.jade.master_pos": "主节点位置:(%d, %d, %d)",
|
||||
"extendedae_plus.jade.dimension": "维度:%s",
|
||||
"extendedae_plus.jade.network.online": "设备在线",
|
||||
"extendedae_plus.jade.network.offline": "设备离线",
|
||||
|
||||
"extendedae_plus.screen.global_controller_title": "样板供应器状态控制器"
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user