Merge branch 'develop/fix' into develop/gtl_support
# Conflicts: # build.gradle # src/main/java/com/extendedae_plus/mixin/ae2/autopattern/CraftingTreeProcessMixin.java # src/main/resources/assets/extendedae_plus/lang/en_us.json # src/main/resources/assets/extendedae_plus/lang/zh_cn.json
This commit is contained in:
commit
5996882b72
36
CHANGELOG.md
36
CHANGELOG.md
|
|
@ -2,6 +2,42 @@
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [1.4.5] / [未发布]
|
||||||
|
|
||||||
|
### Added / 新增
|
||||||
|
- 全新的智能倍增,极端情况下(合成深度 > 100万)不再造成由本模组引起的AE2计算合成树时数据包过大
|
||||||
|
- Completely revamped Smart Multiplication, now prevents excessively large data packets caused by this mod when AE2 calculates crafting trees in extreme scenarios (crafting depth > 1 million)
|
||||||
|
- 添加智能倍增对AAE高级处理样板的支持
|
||||||
|
- Added Smart Multiplication support for AAE Advanced Processing Patterns
|
||||||
|
- 添加单独供应器翻倍限制,可以设置单样物品发配数量上限(具体例子查看GuideME中的介绍)
|
||||||
|
- Added individual provider doubling limit, allowing to set the maximum distribution quantity per item type (see the GuideME for specific examples)
|
||||||
|
- 添加本模组的GuideME介绍
|
||||||
|
- Added GuideME introduction for this mod
|
||||||
|
- 添加上传样板列表自然排序功能
|
||||||
|
- Added natural sorting functionality for the upload pattern list
|
||||||
|
- 添加合成计划字节数显示的格式化功能
|
||||||
|
- Added formatted display for crafting plan byte count
|
||||||
|
|
||||||
|
### Changed / 变更
|
||||||
|
- 调整实体加速器模型
|
||||||
|
- Adjusted Entity Accelerator model
|
||||||
|
- 优化实体加速器性能
|
||||||
|
- Optimized Entity Accelerator performance
|
||||||
|
- 调整接口倍增按钮位置
|
||||||
|
- Adjusted the position of the interface multiplication button
|
||||||
|
- 去除智能倍增最小收益因子配置项
|
||||||
|
- Removed the minimum benefit factor configuration option for Smart Multiplication
|
||||||
|
- 添加对MAE2版本的限制
|
||||||
|
- Added version restrictions for MAE2
|
||||||
|
- 为部分文本添加翻译键支持,改善国际化体验
|
||||||
|
- Added translation key support for some previously hardcoded text, improving internationalization experience
|
||||||
|
|
||||||
|
### Fixed / 修复
|
||||||
|
- 修复供应器高亮在服务器中不显示的问题
|
||||||
|
- Fixed the issue where provider highlighting was not displayed on servers
|
||||||
|
- 修复上传核心挖掘无掉落物和加速的问题
|
||||||
|
- Fixed the issue where the upload core had no drops and acceleration when mined
|
||||||
|
|
||||||
## [1.4.4]
|
## [1.4.4]
|
||||||
### Added / 新增
|
### Added / 新增
|
||||||
- 实体加速器支持对 AppliedFlux 存储电量的扣除
|
- 实体加速器支持对 AppliedFlux 存储电量的扣除
|
||||||
|
|
|
||||||
|
|
@ -117,7 +117,7 @@ dependencies {
|
||||||
// Runtime test
|
// Runtime test
|
||||||
modRuntimeOnly "curse.maven:curios-309927:${curios_version}"
|
modRuntimeOnly "curse.maven:curios-309927:${curios_version}"
|
||||||
modImplementation "curse.maven:jade-324717:5339264"
|
modImplementation "curse.maven:jade-324717:5339264"
|
||||||
modRuntimeOnly "curse.maven:architectury-api-419699:${architectury_version}"
|
modRuntimeOnly "dev.architectury:architectury-forge:9.2.14"
|
||||||
modRuntimeOnly "curse.maven:applied-energistics-2-wireless-terminals-459929:${wireless_terminals_version}"
|
modRuntimeOnly "curse.maven:applied-energistics-2-wireless-terminals-459929:${wireless_terminals_version}"
|
||||||
modRuntimeOnly "mezz.jei:jei-${minecraft_version}-forge:${jei_version}"
|
modRuntimeOnly "mezz.jei:jei-${minecraft_version}-forge:${jei_version}"
|
||||||
modRuntimeOnly "curse.maven:cloth-config-348521:5729105"
|
modRuntimeOnly "curse.maven:cloth-config-348521:5729105"
|
||||||
|
|
|
||||||
|
|
@ -49,15 +49,15 @@ public class EntitySpeedTickerScreen<C extends EntitySpeedTickerMenu> extends Up
|
||||||
public List<Component> getTooltipMessage() {
|
public List<Component> getTooltipMessage() {
|
||||||
if (menu.targetBlacklisted) {
|
if (menu.targetBlacklisted) {
|
||||||
return List.of(
|
return List.of(
|
||||||
Component.literal("实体加速"),
|
Component.translatable("extendedae_plus.gui.entity_acceleration.title"),
|
||||||
Component.literal("已禁用(目标在黑名单)")
|
Component.translatable("extendedae_plus.gui.entity_acceleration.blacklisted")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
boolean enabled = eap$entitySpeedTickerEnabled;
|
boolean enabled = eap$entitySpeedTickerEnabled;
|
||||||
return List.of(
|
return List.of(
|
||||||
Component.literal("实体加速"),
|
Component.translatable("extendedae_plus.gui.entity_acceleration.title"),
|
||||||
enabled ? Component.literal("已启用: 将加速目标方块实体的tick") :
|
enabled ? Component.translatable("extendedae_plus.gui.entity_acceleration.enabled") :
|
||||||
Component.literal("已关闭: 不会对目标方块实体进行加速")
|
Component.translatable("extendedae_plus.gui.entity_acceleration.disabled")
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
package com.extendedae_plus.api.smartDoubling;
|
||||||
|
|
||||||
|
import appeng.api.networking.IGrid;
|
||||||
|
|
||||||
|
public interface ICraftingCalculationExt {
|
||||||
|
IGrid getGrid();
|
||||||
|
}
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
package com.extendedae_plus.api.smartDoubling;
|
|
||||||
|
|
||||||
import appeng.crafting.CraftingTreeProcess;
|
|
||||||
|
|
||||||
public interface ICraftingSimulationStateExt {
|
|
||||||
void setSourceProcess(CraftingTreeProcess process);
|
|
||||||
CraftingTreeProcess getSourceProcess();
|
|
||||||
}
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
package com.extendedae_plus.api.smartDoubling;
|
|
||||||
|
|
||||||
import appeng.api.networking.crafting.ICraftingService;
|
|
||||||
|
|
||||||
public interface ICraftingTreeProcessExt {
|
|
||||||
ICraftingService getCraftingService();
|
|
||||||
}
|
|
||||||
|
|
@ -50,18 +50,18 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
|
||||||
BlockEntity be = level.getBlockEntity(pos);
|
BlockEntity be = level.getBlockEntity(pos);
|
||||||
if (be instanceof WirelessTransceiverBlockEntity te) {
|
if (be instanceof WirelessTransceiverBlockEntity te) {
|
||||||
ItemStack mainHand = player.getMainHandItem();
|
ItemStack mainHand = player.getMainHandItem();
|
||||||
|
|
||||||
// 潜行左键频道卡:写入频道卡信息到收发器
|
// 潜行左键频道卡:写入频道卡信息到收发器
|
||||||
if (player.isShiftKeyDown() && mainHand.getItem() == ModItems.CHANNEL_CARD.get()) {
|
if (player.isShiftKeyDown() && mainHand.getItem() == ModItems.CHANNEL_CARD.get()) {
|
||||||
handleChannelCardBinding(te, mainHand, player);
|
handleChannelCardBinding(te, mainHand, player);
|
||||||
super.attack(state, level, pos, player);
|
super.attack(state, level, pos, player);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 潜行左键(其他物品):减频(-1 或 -10)
|
// 潜行左键(其他物品):减频(-1 或 -10)
|
||||||
if (player.isShiftKeyDown()) {
|
if (player.isShiftKeyDown()) {
|
||||||
if (te.isLocked()) {
|
if (te.isLocked()) {
|
||||||
player.displayClientMessage(Component.literal("收发器已锁定,无法修改频道"), true);
|
player.displayClientMessage(Component.translatable("extendedae_plus.chat.wireless_transceiver.locked"), true);
|
||||||
super.attack(state, level, pos, player);
|
super.attack(state, level, pos, player);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -72,31 +72,32 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
|
||||||
f -= step;
|
f -= step;
|
||||||
if (f < 0) f = 0;
|
if (f < 0) f = 0;
|
||||||
te.setFrequency(f);
|
te.setFrequency(f);
|
||||||
player.displayClientMessage(Component.literal("频道:" + te.getFrequency()), true);
|
player.displayClientMessage(Component.translatable("extendedae_plus.chat.wireless_transceiver.channel", te.getFrequency()), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
super.attack(state, level, pos, player);
|
super.attack(state, level, pos, player);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理频道卡绑定到收发器
|
* 处理频道卡绑定到收发器
|
||||||
*/
|
*/
|
||||||
private void handleChannelCardBinding(WirelessTransceiverBlockEntity te, ItemStack channelCard, Player player) {
|
private void handleChannelCardBinding(WirelessTransceiverBlockEntity te, ItemStack channelCard, Player player) {
|
||||||
UUID cardOwner = ChannelCardItem.getOwnerUUID(channelCard);
|
UUID cardOwner = ChannelCardItem.getOwnerUUID(channelCard);
|
||||||
|
|
||||||
if (cardOwner != null) {
|
if (cardOwner != null) {
|
||||||
// 写入频道卡的所有者到收发器
|
// 写入频道卡的所有者到收发器
|
||||||
String teamName = ChannelCardItem.getTeamName(channelCard);
|
String teamName = ChannelCardItem.getTeamName(channelCard);
|
||||||
te.setPlacerId(cardOwner, teamName);
|
te.setPlacerId(cardOwner, teamName);
|
||||||
|
String displayName = teamName != null ? teamName : cardOwner.toString().substring(0, 8);
|
||||||
player.displayClientMessage(
|
player.displayClientMessage(
|
||||||
Component.literal("已将收发器绑定至:" + (teamName != null ? teamName : cardOwner.toString().substring(0, 8))),
|
Component.translatable("extendedae_plus.chat.wireless_transceiver.bound_to", displayName),
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
// 频道卡未绑定所有者,使用当前玩家
|
// 频道卡未绑定所有者,使用当前玩家
|
||||||
te.setPlacerId(player.getUUID(), player.getName().getString());
|
te.setPlacerId(player.getUUID(), player.getName().getString());
|
||||||
player.displayClientMessage(Component.literal("频道卡未绑定,已使用当前玩家"), true);
|
player.displayClientMessage(Component.translatable("extendedae_plus.chat.wireless_transceiver.card_unbound"), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -110,7 +111,7 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
|
||||||
boolean sneaking = player.isShiftKeyDown();
|
boolean sneaking = player.isShiftKeyDown();
|
||||||
if (sneaking) {
|
if (sneaking) {
|
||||||
if (te.isLocked()) {
|
if (te.isLocked()) {
|
||||||
player.displayClientMessage(Component.literal("收发器已锁定,无法修改频道"), true);
|
player.displayClientMessage(Component.translatable("extendedae_plus.chat.wireless_transceiver.locked"), true);
|
||||||
return InteractionResult.CONSUME;
|
return InteractionResult.CONSUME;
|
||||||
}
|
}
|
||||||
// 频率调节:主手 +1(或 +10),副手 -1(或 -10)
|
// 频率调节:主手 +1(或 +10),副手 -1(或 -10)
|
||||||
|
|
@ -127,14 +128,15 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
|
||||||
if (f < 0) f = 0;
|
if (f < 0) f = 0;
|
||||||
}
|
}
|
||||||
te.setFrequency(f);
|
te.setFrequency(f);
|
||||||
player.displayClientMessage(Component.literal("频道:" + te.getFrequency()), true);
|
player.displayClientMessage(Component.translatable("extendedae_plus.chat.wireless_transceiver.channel", te.getFrequency()), true);
|
||||||
} else {
|
} else {
|
||||||
if (te.isLocked()) {
|
if (te.isLocked()) {
|
||||||
player.displayClientMessage(Component.literal("收发器已锁定,无法切换模式"), true);
|
player.displayClientMessage(Component.translatable("extendedae_plus.chat.wireless_transceiver.locked"), true);
|
||||||
return InteractionResult.CONSUME;
|
return InteractionResult.CONSUME;
|
||||||
}
|
}
|
||||||
te.setMasterMode(!te.isMasterMode());
|
te.setMasterMode(!te.isMasterMode());
|
||||||
player.displayClientMessage(Component.literal(te.isMasterMode() ? "模式:主端" : "模式:从端"), true);
|
String modeKey = te.isMasterMode() ? "extendedae_plus.chat.wireless_transceiver.mode_master" : "extendedae_plus.chat.wireless_transceiver.mode_slave";
|
||||||
|
player.displayClientMessage(Component.translatable("extendedae_plus.chat.wireless_transceiver.mode", Component.translatable(modeKey)), true);
|
||||||
}
|
}
|
||||||
return InteractionResult.CONSUME;
|
return InteractionResult.CONSUME;
|
||||||
}
|
}
|
||||||
|
|
@ -159,4 +161,4 @@ public class WirelessTransceiverBlock extends Block implements EntityBlock {
|
||||||
? (lvl, pos, st, be) -> WirelessTransceiverBlockEntity.serverTick(lvl, pos, st, (WirelessTransceiverBlockEntity) be)
|
? (lvl, pos, st, be) -> WirelessTransceiverBlockEntity.serverTick(lvl, pos, st, (WirelessTransceiverBlockEntity) be)
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -95,7 +95,8 @@ public final class WrenchHook {
|
||||||
boolean newLocked = !te.isLocked();
|
boolean newLocked = !te.isLocked();
|
||||||
te.setLocked(newLocked);
|
te.setLocked(newLocked);
|
||||||
// 提示玩家
|
// 提示玩家
|
||||||
player.displayClientMessage(Component.literal(newLocked ? "已锁定收发器" : "已解锁收发器"), true);
|
String translationKey = newLocked ? "extendedae_plus.chat.wireless_transceiver.locked_status" : "extendedae_plus.chat.wireless_transceiver.unlocked_status";
|
||||||
|
player.displayClientMessage(Component.translatable(translationKey), true);
|
||||||
// 轻微反馈音效
|
// 轻微反馈音效
|
||||||
level.playSound(player, hit.getBlockPos(), SoundEvents.LEVER_CLICK, SoundSource.BLOCKS, 0.5F, newLocked ? 0.6F : 0.9F);
|
level.playSound(player, hit.getBlockPos(), SoundEvents.LEVER_CLICK, SoundSource.BLOCKS, 0.5F, newLocked ? 0.6F : 0.9F);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ public enum WirelessTransceiverJadePluginComponents implements IBlockComponentPr
|
||||||
protected void add(BlockAccessor accessor, ITooltip tooltip, IPluginConfig config, CompoundTag data) {
|
protected void add(BlockAccessor accessor, ITooltip tooltip, IPluginConfig config, CompoundTag data) {
|
||||||
if (data.contains("frequency")) {
|
if (data.contains("frequency")) {
|
||||||
long frequency = data.getLong("frequency");
|
long frequency = data.getLong("frequency");
|
||||||
tooltip.add(Component.translatable("extendedae_plus.tooltip.frequency", frequency));
|
tooltip.add(Component.translatable("extendedae_plus.jade.frequency", frequency));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -27,7 +27,8 @@ public enum WirelessTransceiverJadePluginComponents implements IBlockComponentPr
|
||||||
protected void add(BlockAccessor accessor, ITooltip tooltip, IPluginConfig config, CompoundTag data) {
|
protected void add(BlockAccessor accessor, ITooltip tooltip, IPluginConfig config, CompoundTag data) {
|
||||||
if (data.contains("masterMode")) {
|
if (data.contains("masterMode")) {
|
||||||
boolean masterMode = data.getBoolean("masterMode");
|
boolean masterMode = data.getBoolean("masterMode");
|
||||||
tooltip.add(Component.translatable("extendedae_plus.tooltip.master_mode", masterMode ? "主模式" : "从模式"));
|
String modeKey = masterMode ? "extendedae_plus.jade.mode_master" : "extendedae_plus.jade.mode_slave";
|
||||||
|
tooltip.add(Component.translatable("extendedae_plus.jade.mode", Component.translatable(modeKey)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -39,12 +40,14 @@ public enum WirelessTransceiverJadePluginComponents implements IBlockComponentPr
|
||||||
String dim = data.contains("masterDim") ? data.getString("masterDim") : "";
|
String dim = data.contains("masterDim") ? data.getString("masterDim") : "";
|
||||||
String customName = data.contains("customName") ? data.getString("customName") : null;
|
String customName = data.contains("customName") ? data.getString("customName") : null;
|
||||||
if (customName != null) {
|
if (customName != null) {
|
||||||
tooltip.add(Component.literal("主节点: " + customName + "(" + pos.getX() + ", " + pos.getY() + ", " + pos.getZ() + ")"));
|
tooltip.add(Component.translatable("extendedae_plus.jade.master_node_with_name",
|
||||||
|
customName, pos.getX(), pos.getY(), pos.getZ()));
|
||||||
} else {
|
} else {
|
||||||
tooltip.add(Component.literal("主节点位置: (" + pos.getX() + ", " + pos.getY() + ", " + pos.getZ() + ")"));
|
tooltip.add(Component.translatable("extendedae_plus.jade.master_node_location",
|
||||||
|
pos.getX(), pos.getY(), pos.getZ()));
|
||||||
}
|
}
|
||||||
if (!dim.isEmpty()) {
|
if (!dim.isEmpty()) {
|
||||||
tooltip.add(Component.literal("维度: " + dim));
|
tooltip.add(Component.translatable("extendedae_plus.jade.dimension", dim));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -54,16 +57,8 @@ public enum WirelessTransceiverJadePluginComponents implements IBlockComponentPr
|
||||||
protected void add(BlockAccessor accessor, ITooltip tooltip, IPluginConfig config, CompoundTag data) {
|
protected void add(BlockAccessor accessor, ITooltip tooltip, IPluginConfig config, CompoundTag data) {
|
||||||
if (data.contains("locked")) {
|
if (data.contains("locked")) {
|
||||||
boolean locked = data.getBoolean("locked");
|
boolean locked = data.getBoolean("locked");
|
||||||
tooltip.add(Component.translatable("extendedae_plus.tooltip.locked", locked ? "已锁定" : "未锁定"));
|
String statusKey = locked ? "extendedae_plus.jade.locked" : "extendedae_plus.jade.unlocked";
|
||||||
}
|
tooltip.add(Component.translatable("extendedae_plus.jade.lock_status", Component.translatable(statusKey)));
|
||||||
}
|
|
||||||
},
|
|
||||||
NETWORK_USABLE("wt_network_usable") {
|
|
||||||
@Override
|
|
||||||
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 ? "设备在线" : "设备离线")));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -76,10 +71,10 @@ public enum WirelessTransceiverJadePluginComponents implements IBlockComponentPr
|
||||||
// 参考AE2的显示方式
|
// 参考AE2的显示方式
|
||||||
if (maxChannels <= 0) {
|
if (maxChannels <= 0) {
|
||||||
// 无限频道或未设置
|
// 无限频道或未设置
|
||||||
tooltip.add(Component.translatable("extendedae_plus.tooltip.channels", usedChannels));
|
tooltip.add(Component.translatable("extendedae_plus.jade.channels", usedChannels));
|
||||||
} else {
|
} else {
|
||||||
// 显示 "已使用/最大"
|
// 显示 "已使用/最大"
|
||||||
tooltip.add(Component.translatable("extendedae_plus.tooltip.channels_of", usedChannels, maxChannels));
|
tooltip.add(Component.translatable("extendedae_plus.jade.channels_of", usedChannels, maxChannels));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -89,14 +84,24 @@ public enum WirelessTransceiverJadePluginComponents implements IBlockComponentPr
|
||||||
protected void add(BlockAccessor accessor, ITooltip tooltip, IPluginConfig config, CompoundTag data) {
|
protected void add(BlockAccessor accessor, ITooltip tooltip, IPluginConfig config, CompoundTag data) {
|
||||||
if (data.contains("ownerName")) {
|
if (data.contains("ownerName")) {
|
||||||
String ownerName = data.getString("ownerName");
|
String ownerName = data.getString("ownerName");
|
||||||
tooltip.add(Component.translatable("extendedae_plus.tooltip.owner", ownerName));
|
tooltip.add(Component.translatable("extendedae_plus.jade.owner", ownerName));
|
||||||
} else if (data.contains("placerId")) {
|
} else if (data.contains("placerId")) {
|
||||||
// 有placerId但没有名称,显示UUID
|
// 有placerId但没有名称,显示UUID
|
||||||
java.util.UUID placerId = data.getUUID("placerId");
|
java.util.UUID placerId = data.getUUID("placerId");
|
||||||
tooltip.add(Component.translatable("extendedae_plus.tooltip.owner", placerId.toString().substring(0, 8) + "..."));
|
tooltip.add(Component.translatable("extendedae_plus.jade.owner", placerId.toString().substring(0, 8) + "..."));
|
||||||
} else {
|
} else {
|
||||||
// 没有所有者信息(公共收发器)
|
// 没有所有者信息(公共收发器)
|
||||||
tooltip.add(Component.translatable("extendedae_plus.tooltip.owner.public"));
|
tooltip.add(Component.translatable("extendedae_plus.jade.owner.public"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
NETWORK_USABLE("wt_network_usable") {
|
||||||
|
@Override
|
||||||
|
protected void add(BlockAccessor accessor, ITooltip tooltip, IPluginConfig config, CompoundTag data) {
|
||||||
|
if (data.contains("networkUsable")) {
|
||||||
|
boolean usable = data.getBoolean("networkUsable");
|
||||||
|
String statusKey = usable ? "extendedae_plus.jade.online" : "extendedae_plus.jade.offline";
|
||||||
|
tooltip.add(Component.translatable(statusKey));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -120,6 +125,4 @@ public enum WirelessTransceiverJadePluginComponents implements IBlockComponentPr
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void add(BlockAccessor accessor, ITooltip tooltip, IPluginConfig config, CompoundTag data);
|
protected abstract void add(BlockAccessor accessor, ITooltip tooltip, IPluginConfig config, CompoundTag data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -79,10 +79,10 @@ public abstract class AdvPatternProviderScreenMixin extends AEBaseScreen<AdvPatt
|
||||||
eap$AdvancedBlockingEnabled,
|
eap$AdvancedBlockingEnabled,
|
||||||
() -> ModNetwork.CHANNEL.sendToServer(new ToggleAdvancedBlockingC2SPacket()),
|
() -> ModNetwork.CHANNEL.sendToServer(new ToggleAdvancedBlockingC2SPacket()),
|
||||||
() -> {
|
() -> {
|
||||||
var t = Component.literal("智能阻挡");
|
var t = Component.translatable("extendedae_plus.gui.advanced_blocking.title");
|
||||||
var line = eap$AdvancedBlockingEnabled
|
var line = eap$AdvancedBlockingEnabled
|
||||||
? Component.literal("已启用:对于同一种配方将不再阻挡 (需要启用原版阻挡模式)")
|
? Component.translatable("extendedae_plus.gui.advanced_blocking.enabled_desc")
|
||||||
: Component.literal("已禁用:建议开启以获得更智能的阻挡行为");
|
: Component.translatable("extendedae_plus.gui.advanced_blocking.disabled_desc");
|
||||||
return List.of(t, line);
|
return List.of(t, line);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
@ -94,10 +94,10 @@ public abstract class AdvPatternProviderScreenMixin extends AEBaseScreen<AdvPatt
|
||||||
eap$SmartDoublingEnabled,
|
eap$SmartDoublingEnabled,
|
||||||
() -> ModNetwork.CHANNEL.sendToServer(new ToggleSmartDoublingC2SPacket()),
|
() -> ModNetwork.CHANNEL.sendToServer(new ToggleSmartDoublingC2SPacket()),
|
||||||
() -> {
|
() -> {
|
||||||
var t = Component.literal("智能翻倍");
|
var t = Component.translatable("extendedae_plus.gui.smart_doubling.title");
|
||||||
var line = eap$SmartDoublingEnabled
|
var line = eap$SmartDoublingEnabled
|
||||||
? Component.literal("已启用:根据请求量对处理样板进行智能缩放")
|
? Component.translatable("extendedae_plus.gui.smart_doubling.enabled_desc")
|
||||||
: Component.literal("已禁用:按原始样板数量进行发配");
|
: Component.translatable("extendedae_plus.gui.smart_doubling.disabled_desc");
|
||||||
return List.of(t, line);
|
return List.of(t, line);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
@ -186,7 +186,7 @@ public abstract class AdvPatternProviderScreenMixin extends AEBaseScreen<AdvPatt
|
||||||
// 设置 tooltip
|
// 设置 tooltip
|
||||||
String cur = this.eap$PerProviderLimitInput.getValue();
|
String cur = this.eap$PerProviderLimitInput.getValue();
|
||||||
if (cur.isBlank()) cur = "0";
|
if (cur.isBlank()) cur = "0";
|
||||||
this.eap$PerProviderLimitInput.setTooltip(Tooltip.create(Component.literal("单样物品发配数量上限: " + cur)));
|
this.eap$PerProviderLimitInput.setTooltip(Tooltip.create(Component.translatable("extendedae_plus.gui.per_provider_limit.tooltip", cur)));
|
||||||
} else {
|
} else {
|
||||||
// 智能翻倍未启用时,移除输入框
|
// 智能翻倍未启用时,移除输入框
|
||||||
this.removeWidget(this.eap$PerProviderLimitInput);
|
this.removeWidget(this.eap$PerProviderLimitInput);
|
||||||
|
|
|
||||||
|
|
@ -80,10 +80,10 @@ public abstract class SmallAdvPatternProviderScreenMixin extends AEBaseScreen<Sm
|
||||||
eap$AdvancedBlockingEnabled,
|
eap$AdvancedBlockingEnabled,
|
||||||
() -> ModNetwork.CHANNEL.sendToServer(new ToggleAdvancedBlockingC2SPacket()),
|
() -> ModNetwork.CHANNEL.sendToServer(new ToggleAdvancedBlockingC2SPacket()),
|
||||||
() -> {
|
() -> {
|
||||||
var t = Component.literal("智能阻挡");
|
var t = Component.translatable("extendedae_plus.gui.advanced_blocking.title");
|
||||||
var line = eap$AdvancedBlockingEnabled
|
var line = eap$AdvancedBlockingEnabled
|
||||||
? Component.literal("已启用:对于同一种配方将不再阻挡 (需要启用原版阻挡模式)")
|
? Component.translatable("extendedae_plus.gui.advanced_blocking.enabled_desc")
|
||||||
: Component.literal("已禁用:建议开启以获得更智能的阻挡行为");
|
: Component.translatable("extendedae_plus.gui.advanced_blocking.disabled_desc");
|
||||||
return List.of(t, line);
|
return List.of(t, line);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
@ -95,10 +95,10 @@ public abstract class SmallAdvPatternProviderScreenMixin extends AEBaseScreen<Sm
|
||||||
eap$SmartDoublingEnabled,
|
eap$SmartDoublingEnabled,
|
||||||
() -> ModNetwork.CHANNEL.sendToServer(new ToggleSmartDoublingC2SPacket()),
|
() -> ModNetwork.CHANNEL.sendToServer(new ToggleSmartDoublingC2SPacket()),
|
||||||
() -> {
|
() -> {
|
||||||
var t = Component.literal("智能翻倍");
|
var t = Component.translatable("extendedae_plus.gui.smart_doubling.title");
|
||||||
var line = eap$SmartDoublingEnabled
|
var line = eap$SmartDoublingEnabled
|
||||||
? Component.literal("已启用:根据请求量对处理样板进行智能缩放")
|
? Component.translatable("extendedae_plus.gui.smart_doubling.enabled_desc")
|
||||||
: Component.literal("已禁用:按原始样板数量进行发配");
|
: Component.translatable("extendedae_plus.gui.smart_doubling.disabled_desc");
|
||||||
return List.of(t, line);
|
return List.of(t, line);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
@ -187,7 +187,7 @@ public abstract class SmallAdvPatternProviderScreenMixin extends AEBaseScreen<Sm
|
||||||
// 设置 tooltip
|
// 设置 tooltip
|
||||||
String cur = this.eap$PerProviderLimitInput.getValue();
|
String cur = this.eap$PerProviderLimitInput.getValue();
|
||||||
if (cur.isBlank()) cur = "0";
|
if (cur.isBlank()) cur = "0";
|
||||||
this.eap$PerProviderLimitInput.setTooltip(Tooltip.create(Component.literal("单样物品发配数量上限: " + cur)));
|
this.eap$PerProviderLimitInput.setTooltip(Tooltip.create(Component.translatable("extendedae_plus.gui.per_provider_limit.tooltip", cur)));
|
||||||
} else {
|
} else {
|
||||||
// 智能翻倍未启用时,移除输入框
|
// 智能翻倍未启用时,移除输入框
|
||||||
this.removeWidget(this.eap$PerProviderLimitInput);
|
this.removeWidget(this.eap$PerProviderLimitInput);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
package com.extendedae_plus.mixin.ae2.autopattern;
|
||||||
|
|
||||||
|
import appeng.api.networking.IGrid;
|
||||||
|
import appeng.api.networking.crafting.CalculationStrategy;
|
||||||
|
import appeng.api.networking.crafting.ICraftingSimulationRequester;
|
||||||
|
import appeng.api.stacks.GenericStack;
|
||||||
|
import appeng.crafting.CraftingCalculation;
|
||||||
|
import com.extendedae_plus.api.smartDoubling.ICraftingCalculationExt;
|
||||||
|
import net.minecraft.world.level.Level;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
@SuppressWarnings({"AddedMixinMembersNamePattern"})
|
||||||
|
@Mixin(value = CraftingCalculation.class, remap = false)
|
||||||
|
public class CraftingCalculationMixin implements ICraftingCalculationExt {
|
||||||
|
@Unique private IGrid grid;
|
||||||
|
|
||||||
|
@Inject(method = "<init>",at = @At("RETURN"))
|
||||||
|
private void init(Level level, IGrid grid, ICraftingSimulationRequester simRequester, GenericStack output, CalculationStrategy strategy, CallbackInfo ci) {
|
||||||
|
this.grid = grid;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IGrid getGrid() {
|
||||||
|
return grid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,19 +3,16 @@ package com.extendedae_plus.mixin.ae2.autopattern;
|
||||||
import appeng.api.crafting.IPatternDetails;
|
import appeng.api.crafting.IPatternDetails;
|
||||||
import appeng.crafting.CraftingCalculation;
|
import appeng.crafting.CraftingCalculation;
|
||||||
import appeng.crafting.CraftingPlan;
|
import appeng.crafting.CraftingPlan;
|
||||||
import appeng.crafting.CraftingTreeProcess;
|
|
||||||
import appeng.crafting.inv.CraftingSimulationState;
|
import appeng.crafting.inv.CraftingSimulationState;
|
||||||
import appeng.crafting.pattern.AEProcessingPattern;
|
import appeng.crafting.pattern.AEProcessingPattern;
|
||||||
import appeng.me.service.CraftingService;
|
import appeng.me.service.CraftingService;
|
||||||
import com.extendedae_plus.ae.api.crafting.ScaledProcessingPattern;
|
import com.extendedae_plus.ae.api.crafting.ScaledProcessingPattern;
|
||||||
import com.extendedae_plus.api.smartDoubling.ICraftingSimulationStateExt;
|
import com.extendedae_plus.api.smartDoubling.ICraftingCalculationExt;
|
||||||
import com.extendedae_plus.api.smartDoubling.ICraftingTreeProcessExt;
|
|
||||||
import com.extendedae_plus.api.smartDoubling.ISmartDoublingAwarePattern;
|
import com.extendedae_plus.api.smartDoubling.ISmartDoublingAwarePattern;
|
||||||
import com.extendedae_plus.config.ModConfig;
|
import com.extendedae_plus.config.ModConfig;
|
||||||
import com.extendedae_plus.util.smartDoubling.PatternScaler;
|
import com.extendedae_plus.util.smartDoubling.PatternScaler;
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
@ -23,11 +20,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@SuppressWarnings({"AddedMixinMembersNamePattern"})
|
|
||||||
@Mixin(value = CraftingSimulationState.class, remap = false)
|
@Mixin(value = CraftingSimulationState.class, remap = false)
|
||||||
public abstract class CraftingSimulationStateMixin implements ICraftingSimulationStateExt {
|
public abstract class CraftingSimulationStateMixin {
|
||||||
@Unique private CraftingTreeProcess sourceProcess;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 替换 CraftingPlan 构建逻辑,在此统一处理样板倍率
|
* 替换 CraftingPlan 构建逻辑,在此统一处理样板倍率
|
||||||
*/
|
*/
|
||||||
|
|
@ -64,15 +58,12 @@ public abstract class CraftingSimulationStateMixin implements ICraftingSimulatio
|
||||||
perCraftLimit = ModConfig.INSTANCE.smartScalingMaxMultiplier;
|
perCraftLimit = ModConfig.INSTANCE.smartScalingMaxMultiplier;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取供应器数量
|
|
||||||
CraftingTreeProcess process = ((ICraftingSimulationStateExt) state).getSourceProcess();
|
|
||||||
CraftingService craftingService = (CraftingService) ((ICraftingTreeProcessExt) process).getCraftingService();
|
|
||||||
long providerCount = Iterables.size(craftingService.getProviders(processingPattern));
|
|
||||||
if (providerCount <= 0) providerCount = 1;
|
|
||||||
|
|
||||||
if (perCraftLimit <= 0) {
|
if (perCraftLimit <= 0) {
|
||||||
// 检查是否开启 provider 轮询分配功能
|
// 检查是否开启 provider 轮询分配功能
|
||||||
if (ModConfig.INSTANCE.providerRoundRobinEnable) {
|
if (ModConfig.INSTANCE.providerRoundRobinEnable) {
|
||||||
|
CraftingService craftingService = (CraftingService) ((ICraftingCalculationExt) calculation).getGrid().getCraftingService();
|
||||||
|
int providerCount = Math.max(Iterables.size(craftingService.getProviders(processingPattern)), 1);
|
||||||
|
|
||||||
long base = totalAmount / providerCount;
|
long base = totalAmount / providerCount;
|
||||||
long remainder = totalAmount % providerCount;
|
long remainder = totalAmount % providerCount;
|
||||||
|
|
||||||
|
|
@ -112,14 +103,4 @@ public abstract class CraftingSimulationStateMixin implements ICraftingSimulatio
|
||||||
crafts.clear();
|
crafts.clear();
|
||||||
crafts.putAll(finalCrafts);
|
crafts.putAll(finalCrafts);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public CraftingTreeProcess getSourceProcess() {
|
|
||||||
return this.sourceProcess;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setSourceProcess(CraftingTreeProcess process) {
|
|
||||||
this.sourceProcess = process;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,39 +0,0 @@
|
||||||
package com.extendedae_plus.mixin.ae2.autopattern;
|
|
||||||
|
|
||||||
import appeng.api.crafting.IPatternDetails;
|
|
||||||
import appeng.api.networking.crafting.ICraftingService;
|
|
||||||
import appeng.crafting.CraftingCalculation;
|
|
||||||
import appeng.crafting.CraftingTreeNode;
|
|
||||||
import appeng.crafting.CraftingTreeProcess;
|
|
||||||
import appeng.crafting.inv.CraftingSimulationState;
|
|
||||||
import com.extendedae_plus.api.smartDoubling.ICraftingSimulationStateExt;
|
|
||||||
import com.extendedae_plus.api.smartDoubling.ICraftingTreeProcessExt;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
|
||||||
import org.spongepowered.asm.mixin.Unique;
|
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|
||||||
|
|
||||||
@SuppressWarnings({"AddedMixinMembersNamePattern"})
|
|
||||||
@Mixin(value = CraftingTreeProcess.class, remap = false, priority = 2000)
|
|
||||||
public class CraftingTreeProcessMixin implements ICraftingTreeProcessExt {
|
|
||||||
@Unique private ICraftingService craftingService;
|
|
||||||
|
|
||||||
@Inject(method = "<init>",at = @At("RETURN"))
|
|
||||||
private void init(ICraftingService cc, CraftingCalculation job, IPatternDetails details, CraftingTreeNode craftingTreeNode, CallbackInfo ci) {
|
|
||||||
this.craftingService = cc;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject(
|
|
||||||
method = "ultraFastRequest",
|
|
||||||
at = @At("HEAD")
|
|
||||||
)
|
|
||||||
private void bindSimulationState(CraftingSimulationState inv, long times, CallbackInfo ci) {
|
|
||||||
((ICraftingSimulationStateExt) inv).setSourceProcess((CraftingTreeProcess) (Object) this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ICraftingService getCraftingService() {
|
|
||||||
return this.craftingService;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -82,10 +82,10 @@ public abstract class PatternProviderSmartFeaturesMixin<C extends PatternProvide
|
||||||
eap$AdvancedBlockingEnabled,
|
eap$AdvancedBlockingEnabled,
|
||||||
() -> ModNetwork.CHANNEL.sendToServer(new ToggleAdvancedBlockingC2SPacket()),
|
() -> ModNetwork.CHANNEL.sendToServer(new ToggleAdvancedBlockingC2SPacket()),
|
||||||
() -> {
|
() -> {
|
||||||
var t = Component.literal("智能阻挡");
|
var t = Component.translatable("extendedae_plus.gui.advanced_blocking.title");
|
||||||
var line = eap$AdvancedBlockingEnabled
|
var line = eap$AdvancedBlockingEnabled
|
||||||
? Component.literal("已启用:对于同一种配方将不再阻挡 (需要启用原版阻挡模式)")
|
? Component.translatable("extendedae_plus.gui.advanced_blocking.enabled_desc")
|
||||||
: Component.literal("已禁用:建议开启以获得更智能的阻挡行为");
|
: Component.translatable("extendedae_plus.gui.advanced_blocking.disabled_desc");
|
||||||
return List.of(t, line);
|
return List.of(t, line);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
@ -97,10 +97,10 @@ public abstract class PatternProviderSmartFeaturesMixin<C extends PatternProvide
|
||||||
eap$SmartDoublingEnabled,
|
eap$SmartDoublingEnabled,
|
||||||
() -> ModNetwork.CHANNEL.sendToServer(new ToggleSmartDoublingC2SPacket()),
|
() -> ModNetwork.CHANNEL.sendToServer(new ToggleSmartDoublingC2SPacket()),
|
||||||
() -> {
|
() -> {
|
||||||
var t = Component.literal("智能翻倍");
|
var t = Component.translatable("extendedae_plus.gui.smart_doubling.title");
|
||||||
var line = eap$SmartDoublingEnabled
|
var line = eap$SmartDoublingEnabled
|
||||||
? Component.literal("已启用:根据请求量对处理样板进行智能缩放")
|
? Component.translatable("extendedae_plus.gui.smart_doubling.enabled_desc")
|
||||||
: Component.literal("已禁用:按原始样板数量进行发配");
|
: Component.translatable("extendedae_plus.gui.smart_doubling.disabled_desc");
|
||||||
return List.of(t, line);
|
return List.of(t, line);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
@ -190,7 +190,7 @@ public abstract class PatternProviderSmartFeaturesMixin<C extends PatternProvide
|
||||||
// 设置 tooltip
|
// 设置 tooltip
|
||||||
String cur = this.eap$PerProviderLimitInput.getValue();
|
String cur = this.eap$PerProviderLimitInput.getValue();
|
||||||
if (cur.isBlank()) cur = "0";
|
if (cur.isBlank()) cur = "0";
|
||||||
this.eap$PerProviderLimitInput.setTooltip(Tooltip.create(Component.literal("单样物品发配数量上限: " + cur)));
|
this.eap$PerProviderLimitInput.setTooltip(Tooltip.create(Component.translatable("extendedae_plus.gui.per_provider_limit.tooltip", cur)));
|
||||||
} else {
|
} else {
|
||||||
// 智能翻倍未启用时,移除输入框
|
// 智能翻倍未启用时,移除输入框
|
||||||
this.removeWidget(this.eap$PerProviderLimitInput);
|
this.removeWidget(this.eap$PerProviderLimitInput);
|
||||||
|
|
|
||||||
|
|
@ -14,69 +14,69 @@ import java.util.function.Supplier;
|
||||||
* 客户端发送到服务端,用于通过输入框设置频率
|
* 客户端发送到服务端,用于通过输入框设置频率
|
||||||
*/
|
*/
|
||||||
public class SetWirelessFrequencyC2SPacket {
|
public class SetWirelessFrequencyC2SPacket {
|
||||||
|
|
||||||
private final BlockPos pos;
|
private final BlockPos pos;
|
||||||
private final long frequency;
|
private final long frequency;
|
||||||
|
|
||||||
public SetWirelessFrequencyC2SPacket(BlockPos pos, long frequency) {
|
public SetWirelessFrequencyC2SPacket(BlockPos pos, long frequency) {
|
||||||
this.pos = pos;
|
this.pos = pos;
|
||||||
this.frequency = frequency;
|
this.frequency = frequency;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void encode(SetWirelessFrequencyC2SPacket packet, FriendlyByteBuf buf) {
|
public static void encode(SetWirelessFrequencyC2SPacket packet, FriendlyByteBuf buf) {
|
||||||
buf.writeBlockPos(packet.pos);
|
buf.writeBlockPos(packet.pos);
|
||||||
buf.writeLong(packet.frequency);
|
buf.writeLong(packet.frequency);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SetWirelessFrequencyC2SPacket decode(FriendlyByteBuf buf) {
|
public static SetWirelessFrequencyC2SPacket decode(FriendlyByteBuf buf) {
|
||||||
BlockPos pos = buf.readBlockPos();
|
BlockPos pos = buf.readBlockPos();
|
||||||
long frequency = buf.readLong();
|
long frequency = buf.readLong();
|
||||||
return new SetWirelessFrequencyC2SPacket(pos, frequency);
|
return new SetWirelessFrequencyC2SPacket(pos, frequency);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void handle(SetWirelessFrequencyC2SPacket packet, Supplier<NetworkEvent.Context> ctx) {
|
public static void handle(SetWirelessFrequencyC2SPacket packet, Supplier<NetworkEvent.Context> ctx) {
|
||||||
ctx.get().enqueueWork(() -> {
|
ctx.get().enqueueWork(() -> {
|
||||||
ServerPlayer player = ctx.get().getSender();
|
ServerPlayer player = ctx.get().getSender();
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查方块实体是否存在
|
// 检查方块实体是否存在
|
||||||
var level = player.serverLevel();
|
var level = player.serverLevel();
|
||||||
if (!level.hasChunkAt(packet.pos)) {
|
if (!level.hasChunkAt(packet.pos)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var blockEntity = level.getBlockEntity(packet.pos);
|
var blockEntity = level.getBlockEntity(packet.pos);
|
||||||
if (!(blockEntity instanceof WirelessTransceiverBlockEntity te)) {
|
if (!(blockEntity instanceof WirelessTransceiverBlockEntity te)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 通过GUI设置频率时,忽略锁定状态
|
// 通过GUI设置频率时,忽略锁定状态
|
||||||
// 临时保存锁定状态
|
// 临时保存锁定状态
|
||||||
boolean wasLocked = te.isLocked();
|
boolean wasLocked = te.isLocked();
|
||||||
|
|
||||||
// 临时解锁以允许设置
|
// 临时解锁以允许设置
|
||||||
if (wasLocked) {
|
if (wasLocked) {
|
||||||
te.setLocked(false);
|
te.setLocked(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置频率
|
// 设置频率
|
||||||
long newFreq = packet.frequency;
|
long newFreq = packet.frequency;
|
||||||
if (newFreq < 0) {
|
if (newFreq < 0) {
|
||||||
newFreq = 0;
|
newFreq = 0;
|
||||||
}
|
}
|
||||||
te.setFrequency(newFreq);
|
te.setFrequency(newFreq);
|
||||||
|
|
||||||
// 恢复锁定状态
|
// 恢复锁定状态
|
||||||
if (wasLocked) {
|
if (wasLocked) {
|
||||||
te.setLocked(true);
|
te.setLocked(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 发送反馈消息
|
// 发送反馈消息
|
||||||
player.displayClientMessage(
|
player.displayClientMessage(
|
||||||
Component.literal("频道已设置为:" + te.getFrequency()),
|
Component.translatable("extendedae_plus.chat.wireless_transceiver.channel_set", te.getFrequency()),
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
ctx.get().setPacketHandled(true);
|
ctx.get().setPacketHandled(true);
|
||||||
|
|
|
||||||
|
|
@ -90,8 +90,7 @@ public class GlobalToggleProviderModesC2SPacket {
|
||||||
|
|
||||||
int affected = applyToAllProviders(grid, msg);
|
int affected = applyToAllProviders(grid, msg);
|
||||||
// 向发起玩家反馈影响数量,便于判断按钮是否生效
|
// 向发起玩家反馈影响数量,便于判断按钮是否生效
|
||||||
player.displayClientMessage(Component.literal("E+ 全局切换已应用到 " + affected + " 个样板供应器"), true);
|
player.displayClientMessage(Component.translatable("extendedae_plus.chat.pattern_provider.global_toggle_applied", affected), true); });
|
||||||
});
|
|
||||||
ctx.setPacketHandled(true);
|
ctx.setPacketHandled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,12 +31,12 @@ public class InfinityDiskGiveCommand {
|
||||||
try {
|
try {
|
||||||
ServerPlayer player = source.getPlayerOrException();
|
ServerPlayer player = source.getPlayerOrException();
|
||||||
if (player.level() == null || !(player.level() instanceof ServerLevel)) {
|
if (player.level() == null || !(player.level() instanceof ServerLevel)) {
|
||||||
source.sendFailure(Component.literal("This command must be run on server side."));
|
source.sendFailure(Component.translatable("extendedae_plus.command.server_side_only"));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
InfinityStorageManager mgr = ExtendedAEPlus.STORAGE_INSTANCE;
|
InfinityStorageManager mgr = ExtendedAEPlus.STORAGE_INSTANCE;
|
||||||
if (mgr == null) {
|
if (mgr == null) {
|
||||||
source.sendFailure(Component.literal("InfinityStorageManager is not initialized."));
|
source.sendFailure(Component.translatable("extendedae_plus.command.storage_manager_not_initialized"));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -50,13 +50,11 @@ public class InfinityDiskGiveCommand {
|
||||||
given++;
|
given++;
|
||||||
}
|
}
|
||||||
final int finalGiven = given;
|
final int finalGiven = given;
|
||||||
source.sendSuccess(() -> Component.literal("Gave " + finalGiven + " infinity disks."), false);
|
source.sendSuccess(() -> Component.translatable("extendedae_plus.command.gave_infinity_disks", finalGiven), false);
|
||||||
return given;
|
return given;
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
source.sendFailure(Component.literal("Error: " + ex.getMessage()));
|
source.sendFailure(Component.translatable("extendedae_plus.command.error", ex.getMessage()));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -181,8 +181,7 @@ public final class RecipeTypeNameConfig {
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
} catch (IOException | JsonSyntaxException e) {
|
} catch (IOException | JsonSyntaxException e) {
|
||||||
sendPlayerMessage(Component.literal("ExtendedAE_Plus: 配置文件更新失败: " + e.getMessage()));
|
sendPlayerMessage(Component.translatable("extendedae_plus.message.config_update_failed", e.getMessage())); return false;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -230,7 +229,7 @@ public final class RecipeTypeNameConfig {
|
||||||
}
|
}
|
||||||
return toRemove.size();
|
return toRemove.size();
|
||||||
} catch (IOException | JsonSyntaxException e) {
|
} catch (IOException | JsonSyntaxException e) {
|
||||||
sendPlayerMessage(Component.literal("ExtendedAE_Plus: 配置文件删除失败: " + e.getMessage()));
|
sendPlayerMessage(Component.translatable("extendedae_plus.message.config_delete_failed", e.getMessage()));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,14 @@
|
||||||
modLoader = "javafml"
|
modLoader = "javafml"
|
||||||
loaderVersion = "[47,)"
|
loaderVersion = "[47,)"
|
||||||
#issueTrackerURL = ""
|
|
||||||
license = "LGPL-3.0-or-later"
|
license = "LGPL-3.0-or-later"
|
||||||
|
|
||||||
[[mods]]
|
[[mods]]
|
||||||
modId = "extendedae_plus"
|
modId = "extendedae_plus"
|
||||||
|
displayURL="https://github.com/GaLicn/ExtendedAE_Plus"
|
||||||
|
issueTrackerURL = "https://github.com/GaLicn/ExtendedAE_Plus/issues"
|
||||||
version = "${version}"
|
version = "${version}"
|
||||||
displayName = "ExtendedAE Plus"
|
displayName = "ExtendedAE Plus"
|
||||||
authors = "GaLi"
|
authors = "GaLi, C-H716"
|
||||||
description = "Add more practical features and auxiliary operations to the Applied Energistics 2 mod"
|
description = "Add more practical features and auxiliary operations to the Applied Energistics 2 mod"
|
||||||
logoFile = "extendedae_plus.png"
|
logoFile = "extendedae_plus.png"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
---
|
||||||
|
navigation:
|
||||||
|
parent: introduction/index.md
|
||||||
|
title: 装配矩阵上传核心
|
||||||
|
position: 8
|
||||||
|
icon: extendedae_plus:assembler_matrix_upload_core
|
||||||
|
categories:
|
||||||
|
- extendedae_plus devices
|
||||||
|
item_ids:
|
||||||
|
- extendedae_plus:assembler_matrix_upload_core
|
||||||
|
---
|
||||||
|
|
||||||
|
# 装配矩阵上传核心
|
||||||
|
|
||||||
|
<BlockImage id="extendedae_plus:assembler_matrix_upload_core" scale="5" />
|
||||||
|
|
||||||
|
装配矩阵上传核心是一个功能模块,它为装配矩阵添加了从样板编码终端自动接收并上传样板的能力。
|
||||||
|
|
||||||
|
## 功能概述
|
||||||
|
|
||||||
|
将此核心安装到装配矩阵后,当您在样板编码终端中编码**合成样板**、**锻造台样板**或**切石机样板**时,终端将能够自动将这些样板上传至装配矩阵的存储中,无需手动转移。
|
||||||
|
|
||||||
|
## 版本历史与重要变更
|
||||||
|
|
||||||
|
- **版本 1.4.3**:此物品被添加至游戏中。
|
||||||
|
- **重要变更**:在 **1.4.3 版本之前**,装配矩阵**无需**此核心即具备自动上传上述样板的功能。
|
||||||
|
- **当前要求**:从 **1.4.3 版本开始**,您必须为装配矩阵安装此核心,才能启用自动上传功能。
|
||||||
|
|
||||||
|
> **请注意此次版本变更是破坏性的**。如果您从旧版本更新到 1.4.3 或更高版本,需要为您正在使用的每个装配矩阵手动添加此核心,以恢复自动上传功能。
|
||||||
|
|
||||||
|
> **注意**:此核心仅影响从**样板编码终端**到**装配矩阵**的**样板自动上传**功能。它不影响将处理样板上传到**样板供应器**的逻辑。
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
---
|
||||||
|
navigation:
|
||||||
|
parent: introduction/index.md
|
||||||
|
title: 并行处理单元
|
||||||
|
position: 4
|
||||||
|
icon: extendedae_plus:1024x_crafting_accelerator
|
||||||
|
categories:
|
||||||
|
- extendedae_plus devices
|
||||||
|
item_ids:
|
||||||
|
- extendedae_plus:4x_crafting_accelerator
|
||||||
|
- extendedae_plus:16x_crafting_accelerator
|
||||||
|
- extendedae_plus:64x_crafting_accelerator
|
||||||
|
- extendedae_plus:256x_crafting_accelerator
|
||||||
|
- extendedae_plus:1024x_crafting_accelerator
|
||||||
|
---
|
||||||
|
|
||||||
|
# 并行处理单元
|
||||||
|
本模组新增了五种更高阶的并行处理单元,它们是原版并行处理单元的压缩升级版本,提供了更强的并行处理能力。
|
||||||
|
|
||||||
|
<Row>
|
||||||
|
<BlockImage id="extendedae_plus:4x_crafting_accelerator" scale="5" />
|
||||||
|
<BlockImage id="extendedae_plus:16x_crafting_accelerator" scale="5" />
|
||||||
|
<BlockImage id="extendedae_plus:64x_crafting_accelerator" scale="5" />
|
||||||
|
<BlockImage id="extendedae_plus:256x_crafting_accelerator" scale="5" />
|
||||||
|
<BlockImage id="extendedae_plus:1024x_crafting_accelerator" scale="5" />
|
||||||
|
</Row>
|
||||||
|
|
||||||
|
|
||||||
|
## 合成配方
|
||||||
|
### 4x并行处理单元
|
||||||
|
<Recipe id="extendedae_plus:4x_crafting_accelerator" />
|
||||||
|
|
||||||
|
### 16x并行处理单元
|
||||||
|
<Recipe id="extendedae_plus:16x_crafting_accelerator" />
|
||||||
|
|
||||||
|
### 64x并行处理单元
|
||||||
|
<Recipe id="extendedae_plus:64x_crafting_accelerator" />
|
||||||
|
|
||||||
|
### 256x并行处理单元
|
||||||
|
<Recipe id="extendedae_plus:256x_crafting_accelerator" />
|
||||||
|
|
||||||
|
### 1024x并行处理单元
|
||||||
|
<Recipe id="extendedae_plus:1024x_crafting_accelerator" />
|
||||||
|
|
@ -0,0 +1,95 @@
|
||||||
|
---
|
||||||
|
navigation:
|
||||||
|
parent: introduction/index.md
|
||||||
|
title: 实体加速器
|
||||||
|
position: 5
|
||||||
|
icon: extendedae_plus:entity_speed_ticker
|
||||||
|
categories:
|
||||||
|
- extendedae_plus devices
|
||||||
|
item_ids:
|
||||||
|
- extendedae_plus:entity_speed_ticker
|
||||||
|
---
|
||||||
|
|
||||||
|
# 实体加速器
|
||||||
|
实体加速器通过消耗应用能源2(AE2)网络中的能量,为前方一格方块实体提供运行加速,其功能与“加速火把”类似。
|
||||||
|
|
||||||
|
<GameScene zoom="8" background="transparent">
|
||||||
|
<ImportStructure src="../../structure/entity_speed_ticker.snbt"></ImportStructure>
|
||||||
|
</GameScene>
|
||||||
|
|
||||||
|
## 工作机制
|
||||||
|
1. **启用条件**:必须在加速器中插入“**<ItemLink id="extendedae_plus:entity_speed_card" tag="{'EAS:mult':2}" />**”才能激活加速功能
|
||||||
|
2. **加速效果**:最高可为方块实体提供**1024倍**的加速倍率
|
||||||
|
3. **能量供应**:加速过程持续消耗AE网络能量。当AE能量不足时,加速功能将自动暂停直至能量恢复。如安装Applied Flux模组,网络磁盘中存在FE能量且AE能量不足时,可消耗磁盘存储的FE能量继续加速(优先级可配置)
|
||||||
|
4. **配置选项**:可通过配置文件调整基础能耗、设置实体黑名单,以及为特定实体配置独立的能量消耗倍率
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## 能量消耗机制
|
||||||
|
|
||||||
|
### 基础能量计算
|
||||||
|
|
||||||
|
实体加速器的能量消耗由基础配置值 `baseCost` 和目标加速倍率共同决定。
|
||||||
|
|
||||||
|
令:
|
||||||
|
- \( M \) = 目标加速倍率(2, 4, 8, ..., 1024)
|
||||||
|
- \( B \) = 基础能量配置值(默认512)
|
||||||
|
- \( L \) = log_2(M)
|
||||||
|
|
||||||
|
**基础能量消耗公式:**
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
**基础能耗参考表(baseCost = 512)**
|
||||||
|
|
||||||
|
| 加速倍率 | 基础能量消耗(AE) |
|
||||||
|
| -------- | ------------------ |
|
||||||
|
| 2 | 256 |
|
||||||
|
| 4 | 1,024 |
|
||||||
|
| 8 | 2,048 |
|
||||||
|
| 16 | 8,192 |
|
||||||
|
| 32 | 16,384 |
|
||||||
|
| 64 | 65,536 |
|
||||||
|
| 128 | 131,072 |
|
||||||
|
| 256 | 524,288 |
|
||||||
|
| 512 | 268,435,456 |
|
||||||
|
| 1024 | 2,147,483,648 |
|
||||||
|
|
||||||
|
### 能量卡节能效果
|
||||||
|
|
||||||
|
安装能量卡可有效降低设备能耗,节能效果随卡数量增加而提升,但存在边际递减效应。
|
||||||
|
|
||||||
|
令 \( N \) = 安装的能量卡数量
|
||||||
|
|
||||||
|
**能耗比例公式:**
|
||||||
|

|
||||||
|
|
||||||
|
**能量卡节能效果表:**
|
||||||
|
|
||||||
|
| 能量卡数量 | 节能效果 | 实际能耗比例 |
|
||||||
|
| ---------- | -------- | ------------ |
|
||||||
|
| 0 | 0% | 100% |
|
||||||
|
| 1 | 10% | 90% |
|
||||||
|
| 2 | 14.5% | 85.5% |
|
||||||
|
| 3 | 17.15% | 82.85% |
|
||||||
|
| 4 | 19.0% | 81.0% |
|
||||||
|
| 5 | 20.21% | 79.79% |
|
||||||
|
| 6 | 21.15% | 78.85% |
|
||||||
|
| 7 | 21.9% | 78.1% |
|
||||||
|
| ≥8 | 50% | 50% |
|
||||||
|
|
||||||
|
### 最终能耗计算
|
||||||
|
|
||||||
|
**最终能量消耗公式:**
|
||||||
|
|
||||||
|
**finalPower = basePower × energyRatio**
|
||||||
|
|
||||||
|
**计算示例:**
|
||||||
|
|
||||||
|
- 目标加速倍率:64倍
|
||||||
|
- 安装能量卡:3张
|
||||||
|
- 基础能耗:65,536 AE
|
||||||
|
- 能耗比例:82.85%
|
||||||
|
- **最终能耗**:65,536 × 0.8285 ≈ 54,267AE
|
||||||
|
|
||||||
|
> 实际能耗可能因实体类型配置而有所调整
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
---
|
||||||
|
navigation:
|
||||||
|
parent: introduction/index.md
|
||||||
|
title: 样板供应器状态控制器
|
||||||
|
position: 3
|
||||||
|
icon: extendedae_plus:network_pattern_controller
|
||||||
|
categories:
|
||||||
|
- extendedae_plus devices
|
||||||
|
item_ids:
|
||||||
|
- extendedae_plus:network_pattern_controller
|
||||||
|
---
|
||||||
|
|
||||||
|
# 样板供应器状态控制器
|
||||||
|
|
||||||
|
<BlockImage id="extendedae_plus:network_pattern_controller" scale="5" />
|
||||||
|
|
||||||
|
样板供应器状态控制器是一个中央控制单元,允许您通过一个统一的界面,批量管理网络中所有样板供应器的工作模式。
|
||||||
|
|
||||||
|
## 用户界面与操作
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
控制器UI提供以下控制选项:
|
||||||
|
|
||||||
|
### 模式切换
|
||||||
|
- **切换阻挡模式**:全局启用或禁用所有样板供应器的“阻挡模式”
|
||||||
|
- **切换高级阻挡**:全局切换“高级阻挡模式”
|
||||||
|
- **切换智能翻倍**:全局启用或禁用“智能翻倍”功能
|
||||||
|
|
||||||
|
### 批量操作
|
||||||
|
- **全部开启**:一键开启网络中所有样板供应器的上述三个功能
|
||||||
|
- **全部关闭**:一键关闭网络中所有样板供应器的上述三个功能
|
||||||
|
|
||||||
|
## 使用方法
|
||||||
|
1. 将**样板供应器状态控制器**放置在您的ME网络中
|
||||||
|
2. 右键点击控制器打开配置界面
|
||||||
|
3. 根据您的管理需求,点击相应的按钮即可全局调整所有样板供应器的状态
|
||||||
|
|
||||||
|
> **注意**:该控制器影响网络中**所有**样板供应器。如需对单个供应器进行独立配置,仍需直接在该供应器的界面中进行操作。
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
---
|
||||||
|
navigation:
|
||||||
|
parent: introduction/index.md
|
||||||
|
title: 无线收发器
|
||||||
|
position: 1
|
||||||
|
icon: extendedae_plus:wireless_transceiver
|
||||||
|
categories:
|
||||||
|
- extendedae_plus devices
|
||||||
|
item_ids:
|
||||||
|
- extendedae_plus:wireless_transceiver
|
||||||
|
---
|
||||||
|
|
||||||
|
# 无线收发器
|
||||||
|
|
||||||
|
<BlockImage id="extendedae_plus:wireless_transceiver" scale="5" />
|
||||||
|
无线收发器是一种高级无线AE设备,它融合了无线连接器的便捷性与量子环的跨维度能力,能够将ME网络的频道以无线方式远程传输至多个地点。
|
||||||
|
|
||||||
|
## 工作机制
|
||||||
|
|
||||||
|
### 基本概念
|
||||||
|
无线收发器采用**一主多从**的架构:
|
||||||
|
- **主端 (Master)**: 连接至提供频道的源ME网络
|
||||||
|
- **从端 (Slave)**: 放置在需要频道的位置,从一个主端接收频道。**一个主端可以为多个从端提供频道**
|
||||||
|
|
||||||
|
### 跨维度传输
|
||||||
|
支持跨维度传输频道,传输的前提是**主端与从端所在的区块均必须保持加载状态**
|
||||||
|
|
||||||
|
## 操作指南
|
||||||
|
|
||||||
|
### 模式与频率设置
|
||||||
|
|
||||||
|
- **空手右键**: 切换设备的**主从模式**
|
||||||
|
- **Shift + 右键**: **增加**设备的配对频率
|
||||||
|
- **Shift + 左键**: **减少**设备的配对频率
|
||||||
|
- **手持扳手左键**: 快捷调整无线收发器的频率
|
||||||
|
- **扳手右键**: **锁定**设备当前的工作模式与频率,防止意外更改
|
||||||
|
- **石英切割刀**: 可为无线收发器重命名。重命名后,从端的Jade将显示其所连接的主端名称,便于识别和管理
|
||||||
|
|
||||||
|
### 所有权与安全 (v1.4.4+)
|
||||||
|
|
||||||
|
自版本 1.4.4 起,无线收发器支持绑定所有权,以增强安全性与频道隔离。
|
||||||
|
- **默认归属**: 1.4.4 版本前放置的无线收发器将被视为**公用**设备。
|
||||||
|
- **自动绑定**: 1.4.4 及之后版本,玩家放置的无线收发器在放下时即会自动绑定到该玩家。
|
||||||
|
- **FTB Teams 支持**: 设备可绑定至FTB队伍。**不同队伍或玩家的无线收发器,即使频率相同,也无法互通**,实现了频道隔离。
|
||||||
|
|
||||||
|
> **重要更新提示**
|
||||||
|
> 如果您从旧版本更新至 1.4.4 或更高版本,请务必注意:
|
||||||
|
> - 破坏掉旧的**公共主端**后,您需要将对应的**从端挖下并重新放置**,以完成其所有权的绑定,否则将无法连接。
|
||||||
|
|
@ -0,0 +1,143 @@
|
||||||
|
---
|
||||||
|
navigation:
|
||||||
|
title: 辅助功能总览
|
||||||
|
parent: introduction/index.md
|
||||||
|
position: 0
|
||||||
|
categories:
|
||||||
|
- extendedae_plus features
|
||||||
|
---
|
||||||
|
|
||||||
|
# 模组功能总览
|
||||||
|
|
||||||
|
## 一、样板供应器增强
|
||||||
|
|
||||||
|
以下功能若无特殊说明,默认仅支持 **AE2 样板供应器** 与 **ExtendedAE 扩展样板供应器**。
|
||||||
|
|
||||||
|
### 1、智能阻挡模式
|
||||||
|
|
||||||
|
在 AE2 原有阻挡机制基础上进行了强化。 当相同样板的相同配方材料持续发配时,可避免配方串联造成的并行浪费。 (支持 AdvancedAE 系列供应器)
|
||||||
|
|
||||||
|
> 需开启原版阻挡功能。
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
### 2、智能倍增模式
|
||||||
|
|
||||||
|
在 AE2 下单操作中自动计算一次性发配所需的全部材料。 该机制等效于玩家手动将样板翻倍至对应数量的效果。 (支持 AdvancedAE 系列供应器)
|
||||||
|
|
||||||
|
可通过配置文件自定义以下选项:
|
||||||
|
- 翻倍上限
|
||||||
|
- 多样板供应器轮询发配(提升并发与分摊效率)
|
||||||
|
- 最小收益因子
|
||||||
|
|
||||||
|
**示例:**
|
||||||
|
|
||||||
|
样板:1 圆石 + 2 熔岩 → 1 石头
|
||||||
|
|
||||||
|
下单 1000 石头时,系统一次性发配 1000 圆石与 2000 熔岩。
|
||||||
|
|
||||||
|
**额外配置:**
|
||||||
|
|
||||||
|
可在样板供应器左侧输入框手动设定单样物品的发配上限
|
||||||
|
|
||||||
|
例:样板 1 圆石 + 2 熔岩 → 1 石头,限制 64,则下单 1000 石头时单次发配仅 32 圆石与 64 熔岩。
|
||||||
|
|
||||||
|
支持类型:物品、流体、Mek 化学品。
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
### 3、手动倍增按钮
|
||||||
|
|
||||||
|
在样板供应器 GUI 内提供倍增控制按钮,玩家可快速设定样板倍数,无需重复编辑。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 二、AE2 相关功能
|
||||||
|
|
||||||
|
### 1、快捷操作增强
|
||||||
|
|
||||||
|
- **中键拉取方块:** 鼠标中键点击任意方块时,若 AE 网络中有库存,将自动将该方块拉取至手上(需携带无线终端)。
|
||||||
|
- **自动填充空白样板:** 打开样板编码终端时,系统将自动填充 AE 网络中的空白样板至槽位。
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
### 2、合成监控界面强化
|
||||||
|
|
||||||
|
- **Shift + 点击 材料:** 快速打开对应机器界面。
|
||||||
|
|
||||||
|
- **Shift + 右键 材料:** 打开对应供应器 UI,并高亮对应样板槽位。同时在世界中高亮目标供应器位置。
|
||||||
|
|
||||||
|
- **Shift + 点击 取消按钮:** 自动将缺失材料添加至 JEI 书签。
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
### 3、样板编码终端增强
|
||||||
|
|
||||||
|
- **上传功能:** 可通过上传按钮直接将样板上传至对应机器的样板供应器。JEI 拉取的处理配方可识别对应机器名称,并自动搜索匹配供应器。 自动搜索采用映射表。可在上传界面添加映射键。
|
||||||
|
- **快捷清空:** 右键点击上传搜索框可快速清空输入内容。
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
### 4、样板数量显示与命名优化
|
||||||
|
|
||||||
|
- 在 AE2 与 ExtendedAE 的样板管理终端及样板供应器中,添加“样板制作数量”显示。
|
||||||
|
- 样板供应器的 UI 标题将显示玩家自定义名称。
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
### 5、 AE 性能优化
|
||||||
|
|
||||||
|
- 新增配置项 **合成暂停检查阈值**(默认值:100000)。 该项用于调节 AE 在构建合成计划时的线程 Sleep 行为, 对大量样板的合成计划可显著提升计算速度。
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
### 6、石英切割刀功能扩展
|
||||||
|
|
||||||
|
- **Shift + 右键 方块或 AE 部件:** 复制其名称。 支持复制 **格雷大型机器** 的不同处理配方子名称。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、ExtendedAE 增强功能
|
||||||
|
|
||||||
|
### 1、样板快速上传功能
|
||||||
|
|
||||||
|
- **自动检测装配矩阵:**
|
||||||
|
若网络中存在装配矩阵,则样板编码终端完成的合成、锻造台、切石机样板将自动上传。 若已有相同样板,系统将自动检测并返还,避免重复上传。
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
### 2、配置属性:
|
||||||
|
|
||||||
|
可通过配置文件调整扩展样板供应器的样板槽位数倍率。
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
### 3、终端交互强化
|
||||||
|
|
||||||
|
- **搜索高亮:** 为 ME 扩展样板管理终端增加搜索高亮功能(18x18 边框 + 彩虹流转高亮)。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、JEI 与 AE2 深度联动
|
||||||
|
|
||||||
|
### 1、双向交互增强
|
||||||
|
|
||||||
|
- **Shift + 左键(JEI → AE 网络):** 若 AE 网络中有该物品,将直接取出至玩家手上;若缺失,则自动跳转至下单界面。
|
||||||
|
> 需携带无线终端(饰品槽亦可)。
|
||||||
|
|
||||||
|
- **中键点击JEI界面物品:** 若 AE 网络存在该物品的自动化合成方案,将自动跳转至下单界面。
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
### 2、 JEI 与终端同步操作
|
||||||
|
|
||||||
|
- **F 键:** 将 JEI 中的物品名称同步至 AE2 搜索栏与 ExtendedAE 扩展样板管理界面。
|
||||||
|
- **样板优先匹配:** 编写样板时优先匹配 JEI 书签靠前的物品。
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
## 五、其他改进与实用功能
|
||||||
|
|
||||||
|
### 样板信息显示
|
||||||
|
|
||||||
|
- 在编码完成的样板上显示编写者信息: `由 <玩家名> 编写`
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
---
|
||||||
|
navigation:
|
||||||
|
title: Extendedae_plus Introduction
|
||||||
|
position: 60
|
||||||
|
---
|
||||||
|
# Extendedae_plus 指南
|
||||||
|
|
||||||
|
欢迎使用 **Extendedae_plus**。这是一个基于 Applied Energistics 2 (AE2) 的附属模组,在 ExtendedAE 的基础上进行了功能增强,聚焦于「样板供应器」的改进与玩家体验优化,并可与多种 AE2 扩展生态(如 AAE等)共存。 它提供更灵活、可控的样板执行行为,以及更直观、友好的 GUI 交互。
|
||||||
|
|
||||||
|
## 指南目录
|
||||||
|
|
||||||
|
### 功能特性
|
||||||
|
<CategoryIndex category="extendedae_plus features"></CategoryIndex>
|
||||||
|
|
||||||
|
### 设备介绍
|
||||||
|
<CategoryIndex category="extendedae_plus devices"></CategoryIndex>
|
||||||
|
|
||||||
|
### 物品介绍
|
||||||
|
<CategoryIndex category="extendedae_plus items"></CategoryIndex>
|
||||||
|
|
||||||
|
如需更详细的开发/构建与排错说明, 请在此处报告:
|
||||||
|
[ExtendedAE_Plus GitHub](https://github.com/GaLicn/ExtendedAE_Plus)
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
---
|
||||||
|
navigation:
|
||||||
|
parent: introduction/index.md
|
||||||
|
title: 频道卡
|
||||||
|
position: 2
|
||||||
|
icon: extendedae_plus:channel_card
|
||||||
|
categories:
|
||||||
|
- extendedae_plus items
|
||||||
|
item_ids:
|
||||||
|
- extendedae_plus:channel_card
|
||||||
|
---
|
||||||
|
|
||||||
|
# 频道卡
|
||||||
|
|
||||||
|
<ItemImage id="extendedae_plus:channel_card" scale="4" />
|
||||||
|
|
||||||
|
频道卡是一种功能升级卡,它将<ItemLink id="extendedae_plus:wireless_transceiver" />的从端功能浓缩为一张卡片。将其安装到支持的AE设备后,该设备即可直接连接到同频率的无线收发器主端,无需使用线缆。
|
||||||
|
|
||||||
|
## 功能与使用
|
||||||
|
|
||||||
|
### 基本功能
|
||||||
|
- **无线连接**:插入频道卡的AE设备会自动寻找并连接至**相同频率**的无线收发器主端,从而接入其提供的ME网络频道。
|
||||||
|
- **调整频率**:
|
||||||
|
- **手持频道卡右键**:**增加**卡片自身的频率。
|
||||||
|
- **手持频道卡Shift+右键**:**减少**卡片自身的频率。
|
||||||
|
|
||||||
|
### 所有权绑定 (v1.4.4+)
|
||||||
|
- **绑定操作**:手持频道卡**Shift+左键**(无需对准方块),即可将其绑定到你的队伍或个人UUID。
|
||||||
|
- **绑定要求**:**必须完成绑定后**,频道卡才能成功连接到同样绑定了所有权的无线收发器。
|
||||||
|
|
||||||
|
### 支持设备
|
||||||
|
频道卡可以安装到以下AE设备(及其对应的ExtendedAE扩展版本)中,使其获得无线连接能力。安装后,设备将自动尝试连接至同频率的无线收发器主端。
|
||||||
|
|
||||||
|
- <ItemLink id="ae2:interface" />
|
||||||
|
- <ItemLink id="ae2:import_bus" />
|
||||||
|
- <ItemLink id="ae2:export_bus" />
|
||||||
|
- <ItemLink id="ae2:storage_bus" />
|
||||||
|
- <ItemLink id="ae2:pattern_provider" />
|
||||||
|
|
||||||
|
## 工作流程
|
||||||
|
|
||||||
|
1. 确保已有一个设置好频率和模式的无线收发器**主端**接入源ME网络。
|
||||||
|
2. 手持频道卡,通过**Shift+左键**完成所有权绑定。
|
||||||
|
3. 手持频道卡**右键**或**Shift+右键**调整至所需频率。
|
||||||
|
4. 将频道卡安装到目标AE设备(如ME接口)中。
|
||||||
|
5. 该设备将自动连接到同频率且所有权匹配的无线收发器主端。
|
||||||
|
|
||||||
|
> **注意**:频道卡与无线收发器主端必须在**频率**和**所有权**(v1.4.4+)上都匹配,才能建立连接。
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
---
|
||||||
|
navigation:
|
||||||
|
parent: introduction/index.md
|
||||||
|
title: 实体加速卡
|
||||||
|
position: 6
|
||||||
|
icon: extendedae_plus:entity_speed_card
|
||||||
|
categories:
|
||||||
|
- extendedae_plus items
|
||||||
|
item_ids:
|
||||||
|
- extendedae_plus:entity_speed_card
|
||||||
|
---
|
||||||
|
|
||||||
|
# 实体加速卡
|
||||||
|
|
||||||
|
<Row>
|
||||||
|
<ItemImage id="extendedae_plus:entity_speed_card" tag="{'EAS:mult':2}" scale="3" />
|
||||||
|
<ItemImage id="extendedae_plus:entity_speed_card" tag="{'EAS:mult':4}" scale="3" />
|
||||||
|
<ItemImage id="extendedae_plus:entity_speed_card" tag="{'EAS:mult':8}" scale="3" />
|
||||||
|
<ItemImage id="extendedae_plus:entity_speed_card" tag="{'EAS:mult':16}" scale="3" />
|
||||||
|
</Row>
|
||||||
|
|
||||||
|
实体加速卡是一种升级组件,可插入<ItemLink id="extendedae_plus:entity_speed_ticker" />中,为其提供不同级别的加速能力。加速卡的等级直接决定了实体加速器所能达到的**最大加速倍率上限**。
|
||||||
|
|
||||||
|
## 加速卡等级与效果
|
||||||
|
|
||||||
|
实体加速器最多可同时放入**4张**加速卡。最终的加速倍率为所有插入加速卡的**基础倍率相乘**,但**不能超过**当前装配的**最高等级加速卡**所规定的最大速率上限。
|
||||||
|
|
||||||
|
| 加速卡类型 | 基础加速倍率 | 单卡最大速率上限 |
|
||||||
|
| :--- | :--- | :--- |
|
||||||
|
| 实体加速卡 (x2) | 2倍 | 8倍 |
|
||||||
|
| 实体加速卡 (x4) | 4倍 | 64倍 |
|
||||||
|
| 实体加速卡 (x8) | 8倍 | 256倍 |
|
||||||
|
| 实体加速卡 (x16) | 16倍 | 1024倍 |
|
||||||
|
|
||||||
|
> **混合插入规则**:当插入不同等级的加速卡时,总倍率为所有卡基础倍率的乘积,但最终结果不能超过其中**最高级单卡的最大速率上限**。
|
||||||
|
>
|
||||||
|
> **示例**:同时插入1张 **x2卡** 和3张 **x4卡**。
|
||||||
|
>
|
||||||
|
> - 计算倍率:2 × 4^3 = 128
|
||||||
|
> - 最高级单卡为 **x4卡**,其上限为 **64倍**,因此**最终加速倍率为64倍**
|
||||||
|
|
||||||
|
## 合成配方
|
||||||
|
<RecipesFor id="extendedae_plus:entity_speed_card"/>
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
---
|
||||||
|
navigation:
|
||||||
|
parent: introduction/index.md
|
||||||
|
title: "吞噬万籁的寂静"
|
||||||
|
position: 7
|
||||||
|
icon: extendedae_plus:infinity_biginteger_cell
|
||||||
|
categories:
|
||||||
|
- extendedae_plus items
|
||||||
|
item_ids:
|
||||||
|
- extendedae_plus:infinity_biginteger_cell
|
||||||
|
---
|
||||||
|
|
||||||
|
# 吞噬万籁的寂静
|
||||||
|
|
||||||
|
<ItemImage id="extendedae_plus:infinity_biginteger_cell" scale="4" />
|
||||||
|
|
||||||
|
“吞噬万籁的寂静”是一种终极的ME存储磁盘,它提供了无限的物品种类支持与无限的存储容量。
|
||||||
|
|
||||||
|
## 功能特性
|
||||||
|
|
||||||
|
- **无限类型**:**不限制**可存储的物品种类数量。
|
||||||
|
- **无限容量**:存储容量为 **BigInteger** 级别,理论上是无限的。
|
||||||
|
- **显示限制**:受AE2系统自身界面显示的限制,在ME终端中最大显示存储量为 **9.2E (9,223,372,036,854,775,808)**,但**实际上可以继续向其中存入物品**,远超此显示数值。
|
||||||
|
- **广泛兼容**:能够存储通过附属模组(如Applied Flux、Applied Mekanistics等)接入AE2系统的各类资源(如FE、Mek化学品、魔源等)。存储这些资源需要安装对应的附属模组。
|
||||||
|
|
||||||
|
## 数据安全与恢复
|
||||||
|
|
||||||
|
此磁盘包含一项数据安全保障机制:
|
||||||
|
- 使用指令 `/eap give_infinity_disks` 可以获得存档中存储数据对应的磁盘副本。
|
||||||
|
- 此功能作为**保底手段**,可在原始磁盘意外丢失的情况下**恢复存储数据**。
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
navigation:
|
navigation:
|
||||||
parent: introduction/index.md
|
parent: introduction/index.md
|
||||||
title: 装配矩阵上传核心
|
title: Assembler Matrix Upload Core
|
||||||
position: 8
|
position: 8
|
||||||
icon: extendedae_plus:assembler_matrix_upload_core
|
icon: extendedae_plus:assembler_matrix_upload_core
|
||||||
categories:
|
categories:
|
||||||
|
|
@ -10,22 +10,22 @@ item_ids:
|
||||||
- extendedae_plus:assembler_matrix_upload_core
|
- extendedae_plus:assembler_matrix_upload_core
|
||||||
---
|
---
|
||||||
|
|
||||||
# 装配矩阵上传核心
|
# Assembler Matrix Upload Core
|
||||||
|
|
||||||
<BlockImage id="extendedae_plus:assembler_matrix_upload_core" scale="5" />
|
<BlockImage id="extendedae_plus:assembler_matrix_upload_core" scale="5" />
|
||||||
|
|
||||||
装配矩阵上传核心是一个功能模块,它为装配矩阵添加了从样板编码终端自动接收并上传样板的能力。
|
The **Assembler Matrix Upload Core** is a functional module that adds the ability for an Assembler Matrix to automatically receive and upload patterns from the Pattern Encoding Terminal.
|
||||||
|
|
||||||
## 功能概述
|
## Feature Overview
|
||||||
|
|
||||||
将此核心安装到装配矩阵后,当您在样板编码终端中编码**合成样板**、**锻造台样板**或**切石机样板**时,终端将能够自动将这些样板上传至装配矩阵的存储中,无需手动转移。
|
When installed in an Assembler Matrix, patterns created in the Pattern Encoding Terminal — including **crafting patterns**, **smelter patterns**, or **stonecutter patterns** — are automatically uploaded into the Assembler Matrix storage without manual transfer.
|
||||||
|
|
||||||
## 版本历史与重要变更
|
## Version History & Important Changes
|
||||||
|
|
||||||
- **版本 1.4.3**:此物品被添加至游戏中。
|
- **Version 1.4.3**: This item was added to the game.
|
||||||
- **重要变更**:在 **1.4.3 版本之前**,装配矩阵**无需**此核心即具备自动上传上述样板的功能。
|
- **Important Change**: Prior to **version 1.4.3**, Assembler Matrices **did not require** this core to automatically upload the above patterns.
|
||||||
- **当前要求**:从 **1.4.3 版本开始**,您必须为装配矩阵安装此核心,才能启用自动上传功能。
|
- **Current Requirement**: Starting from **version 1.4.3**, you must install this core in an Assembler Matrix to enable automatic upload.
|
||||||
|
|
||||||
> **请注意此次版本变更是破坏性的**。如果您从旧版本更新到 1.4.3 或更高版本,需要为您正在使用的每个装配矩阵手动添加此核心,以恢复自动上传功能。
|
> **Warning:** This is a breaking change. When updating from older versions to 1.4.3 or higher, you need to manually install this core in each Assembler Matrix you use to restore automatic upload functionality.
|
||||||
|
|
||||||
> **注意**:此核心仅影响从**样板编码终端**到**装配矩阵**的**样板自动上传**功能。它不影响将处理样板上传到**样板供应器**的逻辑。
|
> **Note:** This core only affects the **automatic upload of patterns from the Pattern Encoding Terminal to the Assembler Matrix**. It does not affect the logic for uploading processing patterns to **Pattern Providers**.
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
navigation:
|
navigation:
|
||||||
parent: introduction/index.md
|
parent: introduction/index.md
|
||||||
title: 并行处理单元
|
title: Parallel Processing Unit
|
||||||
position: 4
|
position: 4
|
||||||
icon: extendedae_plus:1024x_crafting_accelerator
|
icon: extendedae_plus:1024x_crafting_accelerator
|
||||||
categories:
|
categories:
|
||||||
|
|
@ -14,8 +14,9 @@ item_ids:
|
||||||
- extendedae_plus:1024x_crafting_accelerator
|
- extendedae_plus:1024x_crafting_accelerator
|
||||||
---
|
---
|
||||||
|
|
||||||
# 并行处理单元
|
# Parallel Processing Unit
|
||||||
本模组新增了五种更高阶的并行处理单元,它们是原版并行处理单元的压缩升级版本,提供了更强的并行处理能力。
|
|
||||||
|
This mod introduces five higher-tier **Parallel Processing Units**, which are compressed upgrades of the vanilla units, providing significantly enhanced parallel processing capabilities.
|
||||||
|
|
||||||
<Row>
|
<Row>
|
||||||
<BlockImage id="extendedae_plus:4x_crafting_accelerator" scale="5" />
|
<BlockImage id="extendedae_plus:4x_crafting_accelerator" scale="5" />
|
||||||
|
|
@ -25,19 +26,19 @@ item_ids:
|
||||||
<BlockImage id="extendedae_plus:1024x_crafting_accelerator" scale="5" />
|
<BlockImage id="extendedae_plus:1024x_crafting_accelerator" scale="5" />
|
||||||
</Row>
|
</Row>
|
||||||
|
|
||||||
|
## Crafting Recipes
|
||||||
|
|
||||||
## 合成配方
|
### 4x Parallel Processing Unit
|
||||||
### 4x并行处理单元
|
|
||||||
<Recipe id="extendedae_plus:4x_crafting_accelerator" />
|
<Recipe id="extendedae_plus:4x_crafting_accelerator" />
|
||||||
|
|
||||||
### 16x并行处理单元
|
### 16x Parallel Processing Unit
|
||||||
<Recipe id="extendedae_plus:16x_crafting_accelerator" />
|
<Recipe id="extendedae_plus:16x_crafting_accelerator" />
|
||||||
|
|
||||||
### 64x并行处理单元
|
### 64x Parallel Processing Unit
|
||||||
<Recipe id="extendedae_plus:64x_crafting_accelerator" />
|
<Recipe id="extendedae_plus:64x_crafting_accelerator" />
|
||||||
|
|
||||||
### 256x并行处理单元
|
### 256x Parallel Processing Unit
|
||||||
<Recipe id="extendedae_plus:256x_crafting_accelerator" />
|
<Recipe id="extendedae_plus:256x_crafting_accelerator" />
|
||||||
|
|
||||||
### 1024x并行处理单元
|
### 1024x Parallel Processing Unit
|
||||||
<Recipe id="extendedae_plus:1024x_crafting_accelerator" />
|
<Recipe id="extendedae_plus:1024x_crafting_accelerator" />
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
navigation:
|
navigation:
|
||||||
parent: introduction/index.md
|
parent: introduction/index.md
|
||||||
title: 实体加速器
|
title: Entity Accelerator
|
||||||
position: 5
|
position: 5
|
||||||
icon: extendedae_plus:entity_speed_ticker
|
icon: extendedae_plus:entity_speed_ticker
|
||||||
categories:
|
categories:
|
||||||
|
|
@ -10,86 +10,89 @@ item_ids:
|
||||||
- extendedae_plus:entity_speed_ticker
|
- extendedae_plus:entity_speed_ticker
|
||||||
---
|
---
|
||||||
|
|
||||||
# 实体加速器
|
# Entity Accelerator
|
||||||
实体加速器通过消耗应用能源2(AE2)网络中的能量,为前方一格方块实体提供运行加速,其功能与“加速火把”类似。
|
|
||||||
|
The **Entity Accelerator** consumes energy from the AE2 network to accelerate block entities in the front block space, functioning similarly to a “Speed Torch”.
|
||||||
|
|
||||||
<GameScene zoom="8" background="transparent">
|
<GameScene zoom="8" background="transparent">
|
||||||
<ImportStructure src="../../structure/entity_speed_ticker.snbt"></ImportStructure>
|
<ImportStructure src="../../structure/entity_speed_ticker.snbt"></ImportStructure>
|
||||||
</GameScene>
|
</GameScene>
|
||||||
|
|
||||||
## 工作机制
|
## Operating Mechanism
|
||||||
1. **启用条件**:必须在加速器中插入“**<ItemLink id="extendedae_plus:entity_speed_card" tag="{'EAS:mult':2}" />**”才能激活加速功能
|
|
||||||
2. **加速效果**:最高可为方块实体提供**1024倍**的加速倍率
|
|
||||||
3. **能量供应**:加速过程持续消耗AE网络能量。当AE能量不足时,加速功能将自动暂停直至能量恢复。如安装Applied Flux模组,网络磁盘中存在FE能量且AE能量不足时,可消耗磁盘存储的FE能量继续加速(优先级可配置)
|
|
||||||
4. **配置选项**:可通过配置文件调整基础能耗、设置实体黑名单,以及为特定实体配置独立的能量消耗倍率
|
|
||||||
|
|
||||||

|
1. **Activation Requirement:** The accelerator must contain at least one **<ItemLink id="extendedae_plus:entity_speed_card" tag="{'EAS:mult':2}" />** to enable acceleration.
|
||||||
|
2. **Acceleration Effect:** Can accelerate block entities up to **1024×**.
|
||||||
|
3. **Energy Supply:** Acceleration continuously consumes AE network energy. When AE energy is insufficient, acceleration automatically pauses until energy is restored.
|
||||||
|
- If the *Applied Flux* mod is installed, FE energy stored in network disks can be consumed to continue acceleration when AE energy is insufficient (priority configurable).
|
||||||
|
4. **Configuration Options:** Base energy consumption, entity blacklist, and per-entity energy multiplier can be adjusted via the config file.
|
||||||
|
|
||||||
## 能量消耗机制
|

|
||||||
|
|
||||||
### 基础能量计算
|
## Energy Consumption Mechanism
|
||||||
|
|
||||||
实体加速器的能量消耗由基础配置值 `baseCost` 和目标加速倍率共同决定。
|
### Base Energy Calculation
|
||||||
|
|
||||||
令:
|
The energy consumption of the Entity Accelerator is determined by the base configuration value `baseCost` and the target acceleration multiplier.
|
||||||
- \( M \) = 目标加速倍率(2, 4, 8, ..., 1024)
|
|
||||||
- \( B \) = 基础能量配置值(默认512)
|
|
||||||
- \( L \) = log_2(M)
|
|
||||||
|
|
||||||
**基础能量消耗公式:**
|
Let:
|
||||||
|
- \( M \) = target multiplier (2, 4, 8, ..., 1024)
|
||||||
|
- \( B \) = base energy config (default 512)
|
||||||
|
- \( L \) = log₂(M)
|
||||||
|
|
||||||
|
**Base energy consumption formula:**
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
**基础能耗参考表(baseCost = 512)**
|
**Base Energy Reference Table (baseCost = 512)**
|
||||||
|
|
||||||
| 加速倍率 | 基础能量消耗(AE) |
|
| Multiplier | Base Energy (AE) |
|
||||||
| -------- | ------------------ |
|
|------------|----------------|
|
||||||
| 2 | 256 |
|
| 2 | 256 |
|
||||||
| 4 | 1,024 |
|
| 4 | 1,024 |
|
||||||
| 8 | 2,048 |
|
| 8 | 2,048 |
|
||||||
| 16 | 8,192 |
|
| 16 | 8,192 |
|
||||||
| 32 | 16,384 |
|
| 32 | 16,384 |
|
||||||
| 64 | 65,536 |
|
| 64 | 65,536 |
|
||||||
| 128 | 131,072 |
|
| 128 | 131,072 |
|
||||||
| 256 | 524,288 |
|
| 256 | 524,288 |
|
||||||
| 512 | 268,435,456 |
|
| 512 | 268,435,456 |
|
||||||
| 1024 | 2,147,483,648 |
|
| 1024 | 2,147,483,648 |
|
||||||
|
|
||||||
### 能量卡节能效果
|
### Energy Card Efficiency
|
||||||
|
|
||||||
安装能量卡可有效降低设备能耗,节能效果随卡数量增加而提升,但存在边际递减效应。
|
Installing Energy Cards reduces power consumption. The effect increases with the number of cards but has diminishing returns.
|
||||||
|
|
||||||
令 \( N \) = 安装的能量卡数量
|
Let \( N \) = number of installed energy cards
|
||||||
|
|
||||||
**能耗比例公式:**
|
**Energy Ratio Formula:**
|
||||||

|

|
||||||
|
|
||||||
**能量卡节能效果表:**
|
**Energy Card Efficiency Table:**
|
||||||
|
|
||||||
| 能量卡数量 | 节能效果 | 实际能耗比例 |
|
| Number of Cards | Efficiency | Actual Energy Ratio |
|
||||||
| ---------- | -------- | ------------ |
|
|----------------|------------|------------------|
|
||||||
| 0 | 0% | 100% |
|
| 0 | 0% | 100% |
|
||||||
| 1 | 10% | 90% |
|
| 1 | 10% | 90% |
|
||||||
| 2 | 14.5% | 85.5% |
|
| 2 | 14.5% | 85.5% |
|
||||||
| 3 | 17.15% | 82.85% |
|
| 3 | 17.15% | 82.85% |
|
||||||
| 4 | 19.0% | 81.0% |
|
| 4 | 19.0% | 81.0% |
|
||||||
| 5 | 20.21% | 79.79% |
|
| 5 | 20.21% | 79.79% |
|
||||||
| 6 | 21.15% | 78.85% |
|
| 6 | 21.15% | 78.85% |
|
||||||
| 7 | 21.9% | 78.1% |
|
| 7 | 21.9% | 78.1% |
|
||||||
| ≥8 | 50% | 50% |
|
| ≥8 | 50% | 50% |
|
||||||
|
|
||||||
### 最终能耗计算
|
### Final Energy Calculation
|
||||||
|
|
||||||
**最终能量消耗公式:**
|
**Final Power Formula:**
|
||||||
|
|
||||||
**finalPower = basePower × energyRatio**
|
**finalPower = basePower × energyRatio**
|
||||||
|
|
||||||
**计算示例:**
|
**Calculation Example:**
|
||||||
|
|
||||||
- 目标加速倍率:64倍
|
- Target Multiplier: 64×
|
||||||
- 安装能量卡:3张
|
- Energy Cards Installed: 3
|
||||||
- 基础能耗:65,536 AE
|
- Base Energy: 65,536 AE
|
||||||
- 能耗比例:82.85%
|
- Energy Ratio: 82.85%
|
||||||
- **最终能耗**:65,536 × 0.8285 ≈ 54,267AE
|
- **Final Energy Consumption:** 65,536 × 0.8285 ≈ 54,267 AE
|
||||||
|
|
||||||
> 实际能耗可能因实体类型配置而有所调整
|
> Actual energy consumption may vary depending on entity-specific configuration.
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
navigation:
|
navigation:
|
||||||
parent: introduction/index.md
|
parent: introduction/index.md
|
||||||
title: 样板供应器状态控制器
|
title: Pattern Provider Status Controller
|
||||||
position: 3
|
position: 3
|
||||||
icon: extendedae_plus:network_pattern_controller
|
icon: extendedae_plus:network_pattern_controller
|
||||||
categories:
|
categories:
|
||||||
|
|
@ -10,30 +10,30 @@ item_ids:
|
||||||
- extendedae_plus:network_pattern_controller
|
- extendedae_plus:network_pattern_controller
|
||||||
---
|
---
|
||||||
|
|
||||||
# 样板供应器状态控制器
|
# Pattern Provider Status Controller
|
||||||
|
|
||||||
<BlockImage id="extendedae_plus:network_pattern_controller" scale="5" />
|
<BlockImage id="extendedae_plus:network_pattern_controller" scale="5" />
|
||||||
|
|
||||||
样板供应器状态控制器是一个中央控制单元,允许您通过一个统一的界面,批量管理网络中所有样板供应器的工作模式。
|
The **Pattern Provider Status Controller** is a central control unit that allows you to manage the working modes of all pattern providers in your network through a single unified interface.
|
||||||
|
|
||||||
## 用户界面与操作
|
## User Interface & Operations
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
控制器UI提供以下控制选项:
|
The controller UI provides the following control options:
|
||||||
|
|
||||||
### 模式切换
|
### Mode Switching
|
||||||
- **切换阻挡模式**:全局启用或禁用所有样板供应器的“阻挡模式”
|
- **Toggle Blocking Mode:** Globally enable or disable "Blocking Mode" for all pattern providers.
|
||||||
- **切换高级阻挡**:全局切换“高级阻挡模式”
|
- **Toggle Advanced Blocking:** Globally switch "Advanced Blocking Mode."
|
||||||
- **切换智能翻倍**:全局启用或禁用“智能翻倍”功能
|
- **Toggle Smart Multiplication:** Globally enable or disable the "Smart Multiplication" feature.
|
||||||
|
|
||||||
### 批量操作
|
### Batch Operations
|
||||||
- **全部开启**:一键开启网络中所有样板供应器的上述三个功能
|
- **Enable All:** One-click to enable all three features for every pattern provider in the network.
|
||||||
- **全部关闭**:一键关闭网络中所有样板供应器的上述三个功能
|
- **Disable All:** One-click to disable all three features for every pattern provider in the network.
|
||||||
|
|
||||||
## 使用方法
|
## How to Use
|
||||||
1. 将**样板供应器状态控制器**放置在您的ME网络中
|
1. Place the **Pattern Provider Status Controller** in your ME network.
|
||||||
2. 右键点击控制器打开配置界面
|
2. Right-click the controller to open the configuration interface.
|
||||||
3. 根据您的管理需求,点击相应的按钮即可全局调整所有样板供应器的状态
|
3. Click the corresponding buttons to adjust the status of all pattern providers globally according to your management needs.
|
||||||
|
|
||||||
> **注意**:该控制器影响网络中**所有**样板供应器。如需对单个供应器进行独立配置,仍需直接在该供应器的界面中进行操作。
|
> **Note:** This controller affects **all** pattern providers in the network. To configure individual providers separately, you must still use the UI of each provider.
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
navigation:
|
navigation:
|
||||||
parent: introduction/index.md
|
parent: introduction/index.md
|
||||||
title: 无线收发器
|
title: Wireless Transceiver
|
||||||
position: 1
|
position: 1
|
||||||
icon: extendedae_plus:wireless_transceiver
|
icon: extendedae_plus:wireless_transceiver
|
||||||
categories:
|
categories:
|
||||||
|
|
@ -10,39 +10,41 @@ item_ids:
|
||||||
- extendedae_plus:wireless_transceiver
|
- extendedae_plus:wireless_transceiver
|
||||||
---
|
---
|
||||||
|
|
||||||
# 无线收发器
|
# Wireless Transceiver
|
||||||
|
|
||||||
<BlockImage id="extendedae_plus:wireless_transceiver" scale="5" />
|
<BlockImage id="extendedae_plus:wireless_transceiver" scale="5" />
|
||||||
无线收发器是一种高级无线AE设备,它融合了无线连接器的便捷性与量子环的跨维度能力,能够将ME网络的频道以无线方式远程传输至多个地点。
|
|
||||||
|
|
||||||
## 工作机制
|
The **Wireless Transceiver** is an advanced wireless AE device that combines the convenience of wireless connectors with the cross-dimensional capabilities of Quantum Rings, allowing ME network channels to be transmitted wirelessly to multiple locations.
|
||||||
|
|
||||||
### 基本概念
|
## Operating Mechanism
|
||||||
无线收发器采用**一主多从**的架构:
|
|
||||||
- **主端 (Master)**: 连接至提供频道的源ME网络
|
|
||||||
- **从端 (Slave)**: 放置在需要频道的位置,从一个主端接收频道。**一个主端可以为多个从端提供频道**
|
|
||||||
|
|
||||||
### 跨维度传输
|
### Basic Concept
|
||||||
支持跨维度传输频道,传输的前提是**主端与从端所在的区块均必须保持加载状态**
|
The Wireless Transceiver uses a **master-slave** architecture:
|
||||||
|
- **Master:** Connected to the source ME network providing the channel.
|
||||||
|
- **Slave:** Placed where the channel is needed, receiving it from a master. **One master can serve multiple slaves.**
|
||||||
|
|
||||||
## 操作指南
|
### Cross-Dimensional Transmission
|
||||||
|
Supports cross-dimensional channel transmission.
|
||||||
|
**Requirement:** Both master and slave chunks must remain loaded.
|
||||||
|
|
||||||
### 模式与频率设置
|
## Operation Guide
|
||||||
|
|
||||||
- **空手右键**: 切换设备的**主从模式**
|
### Mode & Frequency Settings
|
||||||
- **Shift + 右键**: **增加**设备的配对频率
|
|
||||||
- **Shift + 左键**: **减少**设备的配对频率
|
|
||||||
- **手持扳手左键**: 快捷调整无线收发器的频率
|
|
||||||
- **扳手右键**: **锁定**设备当前的工作模式与频率,防止意外更改
|
|
||||||
- **石英切割刀**: 可为无线收发器重命名。重命名后,从端的Jade将显示其所连接的主端名称,便于识别和管理
|
|
||||||
|
|
||||||
### 所有权与安全 (v1.4.4+)
|
- **Right-click empty hand:** Toggle the device's **Master/Slave mode**.
|
||||||
|
- **Shift + Right-click:** **Increase** the device’s pairing frequency.
|
||||||
|
- **Shift + Left-click:** **Decrease** the device’s pairing frequency.
|
||||||
|
- **Hold Wrench + Left-click:** Quickly adjust the transceiver’s frequency.
|
||||||
|
- **Wrench + Right-click:** **Lock** the current mode and frequency to prevent accidental changes.
|
||||||
|
- **Quartz Cutter:** Rename the transceiver. The slave’s Jade UI will display the connected master’s name for easier identification and management.
|
||||||
|
|
||||||
自版本 1.4.4 起,无线收发器支持绑定所有权,以增强安全性与频道隔离。
|
### Ownership & Security (v1.4.4+)
|
||||||
- **默认归属**: 1.4.4 版本前放置的无线收发器将被视为**公用**设备。
|
|
||||||
- **自动绑定**: 1.4.4 及之后版本,玩家放置的无线收发器在放下时即会自动绑定到该玩家。
|
|
||||||
- **FTB Teams 支持**: 设备可绑定至FTB队伍。**不同队伍或玩家的无线收发器,即使频率相同,也无法互通**,实现了频道隔离。
|
|
||||||
|
|
||||||
> **重要更新提示**
|
Starting from version 1.4.4, the Wireless Transceiver supports ownership binding for enhanced security and channel isolation:
|
||||||
> 如果您从旧版本更新至 1.4.4 或更高版本,请务必注意:
|
- **Default Ownership:** Transceivers placed before 1.4.4 are considered **public devices**.
|
||||||
> - 破坏掉旧的**公共主端**后,您需要将对应的**从端挖下并重新放置**,以完成其所有权的绑定,否则将无法连接。
|
- **Automatic Binding:** From 1.4.4 onward, newly placed transceivers automatically bind to the player who placed them.
|
||||||
|
- **FTB Teams Support:** Devices can be bound to FTB teams. **Transceivers from different teams or players cannot communicate even if frequencies match**, ensuring channel isolation.
|
||||||
|
|
||||||
|
> **Important Update Notice:**
|
||||||
|
> When updating from an older version to 1.4.4 or later:
|
||||||
|
> - If the old **public master** is removed, you must break and replace the corresponding **slave devices** to complete ownership binding, otherwise they will fail to connect.
|
||||||
|
|
@ -1,143 +1,141 @@
|
||||||
---
|
---
|
||||||
navigation:
|
navigation:
|
||||||
title: 辅助功能总览
|
title: Feature Overview
|
||||||
parent: introduction/index.md
|
parent: introduction/index.md
|
||||||
position: 0
|
position: 0
|
||||||
categories:
|
categories:
|
||||||
- extendedae_plus features
|
- extendedae_plus features
|
||||||
---
|
---
|
||||||
|
|
||||||
# 模组功能总览
|
# Mod Feature Overview
|
||||||
|
|
||||||
## 一、样板供应器增强
|
## I. Pattern Provider Enhancements
|
||||||
|
|
||||||
以下功能若无特殊说明,默认仅支持 **AE2 样板供应器** 与 **ExtendedAE 扩展样板供应器**。
|
Unless otherwise stated, the following features support **AE2 Pattern Providers** and **ExtendedAE Pattern Providers** only.
|
||||||
|
|
||||||
### 1、智能阻挡模式
|
### 1. Smart Blocking Mode
|
||||||
|
|
||||||
在 AE2 原有阻挡机制基础上进行了强化。 当相同样板的相同配方材料持续发配时,可避免配方串联造成的并行浪费。 (支持 AdvancedAE 系列供应器)
|
Enhanced based on AE2’s original blocking mechanism. When identical pattern materials are continuously dispatched, this prevents waste caused by concurrent recipe execution. (Supports AdvancedAE series providers)
|
||||||
|
|
||||||
> 需开启原版阻挡功能。
|
> Requires the original blocking feature to be enabled.
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
### 2、智能倍增模式
|
### 2. Smart Multiplication Mode
|
||||||
|
|
||||||
在 AE2 下单操作中自动计算一次性发配所需的全部材料。 该机制等效于玩家手动将样板翻倍至对应数量的效果。 (支持 AdvancedAE 系列供应器)
|
Automatically calculates the total materials required for a crafting order in AE2.
|
||||||
|
This mechanism is equivalent to manually duplicating the pattern to the corresponding quantity. (Supports AdvancedAE series providers)
|
||||||
|
|
||||||
可通过配置文件自定义以下选项:
|
Configurable options include:
|
||||||
- 翻倍上限
|
- Maximum multiplication limit
|
||||||
- 多样板供应器轮询发配(提升并发与分摊效率)
|
- Multi-pattern provider polling dispatch (improves concurrency and distribution efficiency)
|
||||||
- 最小收益因子
|
- Minimum yield factor
|
||||||
|
|
||||||
**示例:**
|
**Example:**
|
||||||
|
|
||||||
样板:1 圆石 + 2 熔岩 → 1 石头
|
Pattern: 1 Cobblestone + 2 Lava → 1 Stone
|
||||||
|
|
||||||
下单 1000 石头时,系统一次性发配 1000 圆石与 2000 熔岩。
|
When ordering 1000 Stone, the system dispatches 1000 Cobblestone and 2000 Lava at once.
|
||||||
|
|
||||||
**额外配置:**
|
**Additional Configuration:**
|
||||||
|
|
||||||
可在样板供应器左侧输入框手动设定单样物品的发配上限
|
Manually set the single-item dispatch limit in the left input box of the pattern provider.
|
||||||
|
|
||||||
例:样板 1 圆石 + 2 熔岩 → 1 石头,限制 64,则下单 1000 石头时单次发配仅 32 圆石与 64 熔岩。
|
Example: Pattern 1 Cobblestone + 2 Lava → 1 Stone, limit 64; ordering 1000 Stone will dispatch only 32 Cobblestone and 64 Lava at a time.
|
||||||
|
|
||||||
支持类型:物品、流体、Mek 化学品。
|
Supported types: Items, Fluids, Mekanism chemicals.
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
### 3、手动倍增按钮
|
### 3. Manual Multiplication Button
|
||||||
|
|
||||||
在样板供应器 GUI 内提供倍增控制按钮,玩家可快速设定样板倍数,无需重复编辑。
|
A multiplication control button is added in the pattern provider GUI, allowing players to quickly set pattern multipliers without repeated editing.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 二、AE2 相关功能
|
## II. AE2 Related Features
|
||||||
|
|
||||||
### 1、快捷操作增强
|
### 1. Enhanced Quick Operations
|
||||||
|
|
||||||
- **中键拉取方块:** 鼠标中键点击任意方块时,若 AE 网络中有库存,将自动将该方块拉取至手上(需携带无线终端)。
|
- **Middle-click to pull blocks:** Middle-clicking any block will automatically pull it from the AE network if available (requires a wireless terminal).
|
||||||
- **自动填充空白样板:** 打开样板编码终端时,系统将自动填充 AE 网络中的空白样板至槽位。
|
- **Auto-fill blank patterns:** Opening the Pattern Encoding Terminal automatically fills empty patterns from the AE network into slots.
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
### 2、合成监控界面强化
|
### 2. Crafting Monitoring Interface Enhancements
|
||||||
|
|
||||||
- **Shift + 点击 材料:** 快速打开对应机器界面。
|
- **Shift + Click Material:** Quickly opens the corresponding machine interface.
|
||||||
|
- **Shift + Right-click Material:** Opens the corresponding provider UI and highlights the matching pattern slot. The target provider is also highlighted in the world.
|
||||||
- **Shift + 右键 材料:** 打开对应供应器 UI,并高亮对应样板槽位。同时在世界中高亮目标供应器位置。
|
- **Shift + Click Cancel Button:** Automatically adds missing materials to JEI bookmarks.
|
||||||
|
|
||||||
- **Shift + 点击 取消按钮:** 自动将缺失材料添加至 JEI 书签。
|
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
### 3、样板编码终端增强
|
### 3. Pattern Encoding Terminal Enhancements
|
||||||
|
|
||||||
- **上传功能:** 可通过上传按钮直接将样板上传至对应机器的样板供应器。JEI 拉取的处理配方可识别对应机器名称,并自动搜索匹配供应器。 自动搜索采用映射表。可在上传界面添加映射键。
|
- **Upload Feature:** Directly upload patterns to the corresponding machine’s pattern provider via the upload button. JEI-pulled recipes detect the machine name and automatically search for matching providers. Automatic search uses a mapping table; mapping keys can be added in the upload interface.
|
||||||
- **快捷清空:** 右键点击上传搜索框可快速清空输入内容。
|
- **Quick Clear:** Right-click the upload search box to clear input quickly.
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
### 4、样板数量显示与命名优化
|
### 4. Pattern Quantity Display & Naming Optimization
|
||||||
|
|
||||||
- 在 AE2 与 ExtendedAE 的样板管理终端及样板供应器中,添加“样板制作数量”显示。
|
- Adds “Pattern Craft Quantity” display in AE2 and ExtendedAE pattern management terminals and providers.
|
||||||
- 样板供应器的 UI 标题将显示玩家自定义名称。
|
- Pattern provider UI title displays player-customized names.
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
### 5、 AE 性能优化
|
### 5. AE Performance Optimization
|
||||||
|
|
||||||
- 新增配置项 **合成暂停检查阈值**(默认值:100000)。 该项用于调节 AE 在构建合成计划时的线程 Sleep 行为, 对大量样板的合成计划可显著提升计算速度。
|
- New config option **Crafting Pause Threshold** (default: 100000) adjusts AE’s thread sleep behavior during crafting plan calculation, significantly improving speed for large crafting plans.
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
### 6、石英切割刀功能扩展
|
### 6. Quartz Cutter Function Extension
|
||||||
|
|
||||||
- **Shift + 右键 方块或 AE 部件:** 复制其名称。 支持复制 **格雷大型机器** 的不同处理配方子名称。
|
- **Shift + Right-click Block or AE Component:** Copies its name, supporting copying of sub-recipe names from large GregTech machines.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 三、ExtendedAE 增强功能
|
## III. ExtendedAE Enhancements
|
||||||
|
|
||||||
### 1、样板快速上传功能
|
### 1. Fast Pattern Upload
|
||||||
|
|
||||||
- **自动检测装配矩阵:**
|
- **Auto-detect Assembly Matrix:** If an assembly matrix exists in the network, patterns completed in the Pattern Encoding Terminal (for crafting, smelting, or cutting) are automatically uploaded. Existing identical patterns are detected and returned, avoiding duplicates.
|
||||||
若网络中存在装配矩阵,则样板编码终端完成的合成、锻造台、切石机样板将自动上传。 若已有相同样板,系统将自动检测并返还,避免重复上传。
|
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
### 2、配置属性:
|
### 2. Configurable Properties
|
||||||
|
|
||||||
可通过配置文件调整扩展样板供应器的样板槽位数倍率。
|
- Extendable pattern provider slot multipliers can be adjusted via the config file.
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
### 3、终端交互强化
|
### 3. Terminal Interaction Enhancements
|
||||||
|
|
||||||
- **搜索高亮:** 为 ME 扩展样板管理终端增加搜索高亮功能(18x18 边框 + 彩虹流转高亮)。
|
- **Search Highlight:** Adds a search highlight feature to ExtendedAE pattern management terminals (18x18 border + rainbow flow highlight).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 四、JEI 与 AE2 深度联动
|
## IV. Deep JEI & AE2 Integration
|
||||||
|
|
||||||
### 1、双向交互增强
|
### 1. Bidirectional Interaction
|
||||||
|
|
||||||
- **Shift + 左键(JEI → AE 网络):** 若 AE 网络中有该物品,将直接取出至玩家手上;若缺失,则自动跳转至下单界面。
|
- **Shift + Left-click (JEI → AE Network):** Pulls the item directly if available in AE network; if missing, jumps to ordering interface.
|
||||||
> 需携带无线终端(饰品槽亦可)。
|
> Requires a wireless terminal (can also be in accessory slot).
|
||||||
|
|
||||||
- **中键点击JEI界面物品:** 若 AE 网络存在该物品的自动化合成方案,将自动跳转至下单界面。
|
- **Middle-click JEI item:** If an automated crafting plan exists in AE, jumps to ordering interface.
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
### 2、 JEI 与终端同步操作
|
### 2. JEI & Terminal Synchronization
|
||||||
|
|
||||||
- **F 键:** 将 JEI 中的物品名称同步至 AE2 搜索栏与 ExtendedAE 扩展样板管理界面。
|
|
||||||
- **样板优先匹配:** 编写样板时优先匹配 JEI 书签靠前的物品。
|
|
||||||
|
|
||||||
|
- **F Key:** Syncs the JEI item name to AE2 search bar and ExtendedAE pattern management interface.
|
||||||
|
- **Pattern Priority Matching:** Prioritize JEI bookmarks when writing patterns.
|
||||||
|
|
||||||
---
|
---
|
||||||
## 五、其他改进与实用功能
|
|
||||||
|
|
||||||
### 样板信息显示
|
## V. Other Improvements & Utilities
|
||||||
|
|
||||||
- 在编码完成的样板上显示编写者信息: `由 <玩家名> 编写`
|
### Pattern Information Display
|
||||||
|
|
||||||
|
- Shows author information on completed patterns: `Written by <PlayerName>`
|
||||||
|
|
@ -3,20 +3,22 @@ navigation:
|
||||||
title: Extendedae_plus Introduction
|
title: Extendedae_plus Introduction
|
||||||
position: 60
|
position: 60
|
||||||
---
|
---
|
||||||
# Extendedae_plus 指南
|
# Extendedae_plus GuideME
|
||||||
|
|
||||||
欢迎使用 **Extendedae_plus**。这是一个基于 Applied Energistics 2 (AE2) 的附属模组,在 ExtendedAE 的基础上进行了功能增强,聚焦于「样板供应器」的改进与玩家体验优化,并可与多种 AE2 扩展生态(如 AAE等)共存。 它提供更灵活、可控的样板执行行为,以及更直观、友好的 GUI 交互。
|
Welcome to **Extendedae_plus**.
|
||||||
|
This is an add-on mod for Applied Energistics 2 (AE2), built upon **ExtendedAE** with enhanced functionality. It focuses on improving the **Pattern Provider** and optimizing player experience, while maintaining compatibility with multiple AE2 extension ecosystems (such as AAE, etc.).
|
||||||
|
It provides more flexible and controllable pattern execution behavior, along with a more intuitive and user-friendly GUI.
|
||||||
|
|
||||||
## 指南目录
|
## Guide Index
|
||||||
|
|
||||||
### 功能特性
|
### Features
|
||||||
<CategoryIndex category="extendedae_plus features"></CategoryIndex>
|
<CategoryIndex category="extendedae_plus features"></CategoryIndex>
|
||||||
|
|
||||||
### 设备介绍
|
### Devices
|
||||||
<CategoryIndex category="extendedae_plus devices"></CategoryIndex>
|
<CategoryIndex category="extendedae_plus devices"></CategoryIndex>
|
||||||
|
|
||||||
### 物品介绍
|
### Items
|
||||||
<CategoryIndex category="extendedae_plus items"></CategoryIndex>
|
<CategoryIndex category="extendedae_plus items"></CategoryIndex>
|
||||||
|
|
||||||
如需更详细的开发/构建与排错说明, 请在此处报告:
|
For detailed development/build instructions or troubleshooting, please report here:
|
||||||
[ExtendedAE_Plus GitHub](https://github.com/GaLicn/ExtendedAE_Plus)
|
[ExtendedAE_Plus GitHub](https://github.com/GaLicn/ExtendedAE_Plus)
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
navigation:
|
navigation:
|
||||||
parent: introduction/index.md
|
parent: introduction/index.md
|
||||||
title: 频道卡
|
title: Channel Card
|
||||||
position: 2
|
position: 2
|
||||||
icon: extendedae_plus:channel_card
|
icon: extendedae_plus:channel_card
|
||||||
categories:
|
categories:
|
||||||
|
|
@ -10,26 +10,30 @@ item_ids:
|
||||||
- extendedae_plus:channel_card
|
- extendedae_plus:channel_card
|
||||||
---
|
---
|
||||||
|
|
||||||
# 频道卡
|
# Channel Card
|
||||||
|
|
||||||
<ItemImage id="extendedae_plus:channel_card" scale="4" />
|
<ItemImage id="extendedae_plus:channel_card" scale="4" />
|
||||||
|
|
||||||
频道卡是一种功能升级卡,它将<ItemLink id="extendedae_plus:wireless_transceiver" />的从端功能浓缩为一张卡片。将其安装到支持的AE设备后,该设备即可直接连接到同频率的无线收发器主端,无需使用线缆。
|
The **Channel Card** is an upgrade card that encapsulates the slave-end functionality of the <ItemLink id="extendedae_plus:wireless_transceiver" /> into a compact form.
|
||||||
|
When installed into compatible AE devices, it allows them to connect directly to a wireless transceiver master of the same frequency — no cables required.
|
||||||
|
|
||||||
## 功能与使用
|
## Function & Usage
|
||||||
|
|
||||||
### 基本功能
|
### Basic Features
|
||||||
- **无线连接**:插入频道卡的AE设备会自动寻找并连接至**相同频率**的无线收发器主端,从而接入其提供的ME网络频道。
|
- **Wireless Connection**:
|
||||||
- **调整频率**:
|
AE devices equipped with a Channel Card will automatically search for and connect to a **wireless transceiver master** operating on the **same frequency**, gaining access to its ME network channels.
|
||||||
- **手持频道卡右键**:**增加**卡片自身的频率。
|
- **Frequency Adjustment**:
|
||||||
- **手持频道卡Shift+右键**:**减少**卡片自身的频率。
|
- **Right-click while holding the card**: **Increase** its frequency.
|
||||||
|
- **Shift + Right-click**: **Decrease** its frequency.
|
||||||
|
|
||||||
### 所有权绑定 (v1.4.4+)
|
### Ownership Binding (v1.4.4+)
|
||||||
- **绑定操作**:手持频道卡**Shift+左键**(无需对准方块),即可将其绑定到你的队伍或个人UUID。
|
- **Binding Operation**:
|
||||||
- **绑定要求**:**必须完成绑定后**,频道卡才能成功连接到同样绑定了所有权的无线收发器。
|
Hold the Channel Card and **Shift + Left-click** (without targeting a block) to bind it to your **team** or **personal UUID**.
|
||||||
|
- **Binding Requirement**:
|
||||||
|
The card **must be bound** before it can connect to a wireless transceiver master with matching ownership.
|
||||||
|
|
||||||
### 支持设备
|
### Supported Devices
|
||||||
频道卡可以安装到以下AE设备(及其对应的ExtendedAE扩展版本)中,使其获得无线连接能力。安装后,设备将自动尝试连接至同频率的无线收发器主端。
|
The Channel Card can be installed into the following AE devices (and their ExtendedAE variants) to grant them wireless connectivity. Once installed, the device will automatically attempt to connect to a wireless transceiver master of the same frequency.
|
||||||
|
|
||||||
- <ItemLink id="ae2:interface" />
|
- <ItemLink id="ae2:interface" />
|
||||||
- <ItemLink id="ae2:import_bus" />
|
- <ItemLink id="ae2:import_bus" />
|
||||||
|
|
@ -37,12 +41,13 @@ item_ids:
|
||||||
- <ItemLink id="ae2:storage_bus" />
|
- <ItemLink id="ae2:storage_bus" />
|
||||||
- <ItemLink id="ae2:pattern_provider" />
|
- <ItemLink id="ae2:pattern_provider" />
|
||||||
|
|
||||||
## 工作流程
|
## Workflow
|
||||||
|
|
||||||
1. 确保已有一个设置好频率和模式的无线收发器**主端**接入源ME网络。
|
1. Ensure a wireless transceiver **master** with the desired frequency and mode is connected to the source ME network.
|
||||||
2. 手持频道卡,通过**Shift+左键**完成所有权绑定。
|
2. Hold the Channel Card and **Shift + Left-click** to complete ownership binding.
|
||||||
3. 手持频道卡**右键**或**Shift+右键**调整至所需频率。
|
3. Adjust the card’s frequency using **Right-click** or **Shift + Right-click**.
|
||||||
4. 将频道卡安装到目标AE设备(如ME接口)中。
|
4. Install the Channel Card into the target AE device (e.g., ME Interface).
|
||||||
5. 该设备将自动连接到同频率且所有权匹配的无线收发器主端。
|
5. The device will automatically connect to the wireless transceiver master with the same frequency and matching ownership.
|
||||||
|
|
||||||
> **注意**:频道卡与无线收发器主端必须在**频率**和**所有权**(v1.4.4+)上都匹配,才能建立连接。
|
> **Note**:
|
||||||
|
> Both the Channel Card and the wireless transceiver master must have **matching frequency** and **ownership** (v1.4.4+) to successfully establish a connection.
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
navigation:
|
navigation:
|
||||||
parent: introduction/index.md
|
parent: introduction/index.md
|
||||||
title: 实体加速卡
|
title: Entity Speed Card
|
||||||
position: 6
|
position: 6
|
||||||
icon: extendedae_plus:entity_speed_card
|
icon: extendedae_plus:entity_speed_card
|
||||||
categories:
|
categories:
|
||||||
|
|
@ -10,7 +10,7 @@ item_ids:
|
||||||
- extendedae_plus:entity_speed_card
|
- extendedae_plus:entity_speed_card
|
||||||
---
|
---
|
||||||
|
|
||||||
# 实体加速卡
|
# Entity Speed Card
|
||||||
|
|
||||||
<Row>
|
<Row>
|
||||||
<ItemImage id="extendedae_plus:entity_speed_card" tag="{'EAS:mult':2}" scale="3" />
|
<ItemImage id="extendedae_plus:entity_speed_card" tag="{'EAS:mult':2}" scale="3" />
|
||||||
|
|
@ -19,25 +19,29 @@ item_ids:
|
||||||
<ItemImage id="extendedae_plus:entity_speed_card" tag="{'EAS:mult':16}" scale="3" />
|
<ItemImage id="extendedae_plus:entity_speed_card" tag="{'EAS:mult':16}" scale="3" />
|
||||||
</Row>
|
</Row>
|
||||||
|
|
||||||
实体加速卡是一种升级组件,可插入<ItemLink id="extendedae_plus:entity_speed_ticker" />中,为其提供不同级别的加速能力。加速卡的等级直接决定了实体加速器所能达到的**最大加速倍率上限**。
|
The **Entity Speed Card** is an upgrade component that can be inserted into the <ItemLink id="extendedae_plus:entity_speed_ticker" /> to provide various levels of acceleration.
|
||||||
|
The card’s tier directly determines the **maximum acceleration multiplier limit** that the Entity Accelerator can achieve.
|
||||||
|
|
||||||
## 加速卡等级与效果
|
## Card Tiers & Effects
|
||||||
|
|
||||||
实体加速器最多可同时放入**4张**加速卡。最终的加速倍率为所有插入加速卡的**基础倍率相乘**,但**不能超过**当前装配的**最高等级加速卡**所规定的最大速率上限。
|
An Entity Accelerator can hold up to **4 speed cards** simultaneously.
|
||||||
|
The final acceleration multiplier equals the **product of all inserted cards’ base multipliers**, but it **cannot exceed** the **maximum speed limit** defined by the **highest-tier card** installed.
|
||||||
|
|
||||||
| 加速卡类型 | 基础加速倍率 | 单卡最大速率上限 |
|
| Card Type | Base Multiplier | Maximum Speed Limit (per card) |
|
||||||
| :--- | :--- | :--- |
|
| :--- | :--- | :--- |
|
||||||
| 实体加速卡 (x2) | 2倍 | 8倍 |
|
| Entity Speed Card (x2) | ×2 | ×8 |
|
||||||
| 实体加速卡 (x4) | 4倍 | 64倍 |
|
| Entity Speed Card (x4) | ×4 | ×64 |
|
||||||
| 实体加速卡 (x8) | 8倍 | 256倍 |
|
| Entity Speed Card (x8) | ×8 | ×256 |
|
||||||
| 实体加速卡 (x16) | 16倍 | 1024倍 |
|
| Entity Speed Card (x16) | ×16 | ×1024 |
|
||||||
|
|
||||||
> **混合插入规则**:当插入不同等级的加速卡时,总倍率为所有卡基础倍率的乘积,但最终结果不能超过其中**最高级单卡的最大速率上限**。
|
> **Mixed Insertion Rule**:
|
||||||
|
> When mixing cards of different tiers, the total multiplier is the product of all base multipliers, but the final result **cannot exceed** the **maximum speed limit** of the highest-tier card installed.
|
||||||
>
|
>
|
||||||
> **示例**:同时插入1张 **x2卡** 和3张 **x4卡**。
|
> **Example**: Insert one **x2 card** and three **x4 cards**.
|
||||||
>
|
>
|
||||||
> - 计算倍率:2 × 4^3 = 128
|
> - Calculated multiplier: 2 × 4³ = 128
|
||||||
> - 最高级单卡为 **x4卡**,其上限为 **64倍**,因此**最终加速倍率为64倍**
|
> - Highest-tier card: **x4**, with a limit of **×64**
|
||||||
|
> - **Final acceleration multiplier = ×64**
|
||||||
|
|
||||||
## 合成配方
|
## Crafting Recipe
|
||||||
<RecipesFor id="extendedae_plus:entity_speed_card"/>
|
<RecipesFor id="extendedae_plus:entity_speed_card" />
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
navigation:
|
navigation:
|
||||||
parent: introduction/index.md
|
parent: introduction/index.md
|
||||||
title: "吞噬万籁的寂静"
|
title: "Devourer of Cosmic Silence"
|
||||||
position: 7
|
position: 7
|
||||||
icon: extendedae_plus:infinity_biginteger_cell
|
icon: extendedae_plus:infinity_biginteger_cell
|
||||||
categories:
|
categories:
|
||||||
|
|
@ -10,21 +10,27 @@ item_ids:
|
||||||
- extendedae_plus:infinity_biginteger_cell
|
- extendedae_plus:infinity_biginteger_cell
|
||||||
---
|
---
|
||||||
|
|
||||||
# 吞噬万籁的寂静
|
# Devourer of Cosmic Silence
|
||||||
|
|
||||||
<ItemImage id="extendedae_plus:infinity_biginteger_cell" scale="4" />
|
<ItemImage id="extendedae_plus:infinity_biginteger_cell" scale="4" />
|
||||||
|
|
||||||
“吞噬万籁的寂静”是一种终极的ME存储磁盘,它提供了无限的物品种类支持与无限的存储容量。
|
**Devourer of Cosmic Silence** is an ultimate ME storage disk that provides truly infinite item-type support and storage capacity.
|
||||||
|
|
||||||
## 功能特性
|
## Features
|
||||||
|
|
||||||
- **无限类型**:**不限制**可存储的物品种类数量。
|
- **Infinite Types**:
|
||||||
- **无限容量**:存储容量为 **BigInteger** 级别,理论上是无限的。
|
There is **no limit** to the number of item types it can store.
|
||||||
- **显示限制**:受AE2系统自身界面显示的限制,在ME终端中最大显示存储量为 **9.2E (9,223,372,036,854,775,808)**,但**实际上可以继续向其中存入物品**,远超此显示数值。
|
- **Infinite Capacity**:
|
||||||
- **广泛兼容**:能够存储通过附属模组(如Applied Flux、Applied Mekanistics等)接入AE2系统的各类资源(如FE、Mek化学品、魔源等)。存储这些资源需要安装对应的附属模组。
|
Storage capacity is based on the **BigInteger** data type, effectively making it limitless.
|
||||||
|
- **Display Limitation**:
|
||||||
|
Due to AE2’s interface constraints, the ME terminal can display a maximum stored value of **9.2E (9,223,372,036,854,775,808)**.
|
||||||
|
However, the disk **continues to accept items** far beyond this displayed number.
|
||||||
|
- **Broad Compatibility**:
|
||||||
|
Capable of storing various resources integrated into AE2 via add-on mods (such as *Applied Flux*, *Applied Mekanistics*, etc.), including FE, Mekanism chemicals, Ars Nouveau mana, and more.
|
||||||
|
Storing these resources requires the corresponding add-on mod to be installed.
|
||||||
|
|
||||||
## 数据安全与恢复
|
## Data Security & Recovery
|
||||||
|
|
||||||
此磁盘包含一项数据安全保障机制:
|
This disk includes a built-in data protection mechanism:
|
||||||
- 使用指令 `/eap give_infinity_disks` 可以获得存档中存储数据对应的磁盘副本。
|
- Use the command `/eap give_infinity_disks` to obtain a copy of the disk corresponding to the saved storage data in the current world.
|
||||||
- 此功能作为**保底手段**,可在原始磁盘意外丢失的情况下**恢复存储数据**。
|
- This serves as a **failsafe measure**, allowing you to **recover stored data** if the original disk is accidentally lost.
|
||||||
|
|
@ -71,6 +71,19 @@
|
||||||
"extendedae_plus.upload_to_matrix.repetition": "The Assembly Matrix already contains the same pattern, upload skipped and blank pattern returned",
|
"extendedae_plus.upload_to_matrix.repetition": "The Assembly Matrix already contains the same pattern, upload skipped and blank pattern returned",
|
||||||
"extendedae_plus.upload_to_GTMatrix.repetition": "The Molecular Manipulator already contains the same pattern, upload skipped and blank pattern returned",
|
"extendedae_plus.upload_to_GTMatrix.repetition": "The Molecular Manipulator already contains the same pattern, upload skipped and blank pattern returned",
|
||||||
|
|
||||||
|
"extendedae_plus.gui.advanced_blocking.title": "Smart Blocking",
|
||||||
|
"extendedae_plus.gui.advanced_blocking.enabled_desc": "Will not block the same recipe type (requires vanilla blocking mode enabled)",
|
||||||
|
"extendedae_plus.gui.advanced_blocking.disabled_desc": "Use vanilla blocking logic",
|
||||||
|
"extendedae_plus.gui.smart_doubling.title": "Smart Doubling",
|
||||||
|
"extendedae_plus.gui.smart_doubling.enabled_desc": "Intelligently double processing patterns based on request quantity",
|
||||||
|
"extendedae_plus.gui.smart_doubling.disabled_desc": "Distribute according to original pattern quantity",
|
||||||
|
"extendedae_plus.gui.per_provider_limit.tooltip": "Per-item distribution limit: %s",
|
||||||
|
|
||||||
|
"extendedae_plus.gui.entity_acceleration.title": "Entity Acceleration",
|
||||||
|
"extendedae_plus.gui.entity_acceleration.blacklisted": "Target is blacklisted",
|
||||||
|
"extendedae_plus.gui.entity_acceleration.enabled": "Accelerate target block entity ticks",
|
||||||
|
"extendedae_plus.gui.entity_acceleration.disabled": "Do not accelerate target block entities",
|
||||||
|
|
||||||
"extendedae_plus.screen.reload_mapping": "Reload Mapping",
|
"extendedae_plus.screen.reload_mapping": "Reload Mapping",
|
||||||
"extendedae_plus.screen.reload_mapping_success": "Overloading mapping successful",
|
"extendedae_plus.screen.reload_mapping_success": "Overloading mapping successful",
|
||||||
"extendedae_plus.screen.reload_mapping_fail": "Overloading mapping failed: %s",
|
"extendedae_plus.screen.reload_mapping_fail": "Overloading mapping failed: %s",
|
||||||
|
|
@ -104,20 +117,6 @@
|
||||||
"item.extendedae_plus.entity_speed_ticker.tip.max": "Maximum up to 1024x speed",
|
"item.extendedae_plus.entity_speed_ticker.tip.max": "Maximum up to 1024x speed",
|
||||||
"item.extendedae_plus.entity_speed_ticker.tip.energy": "Acceleration consumes AE network power; insufficient power disables acceleration",
|
"item.extendedae_plus.entity_speed_ticker.tip.energy": "Acceleration consumes AE network power; insufficient power disables acceleration",
|
||||||
|
|
||||||
"config.jade.plugin_extendedae_plus.wireless_transceiver_info": "Wireless Transceiver Info",
|
|
||||||
"config.jade.plugin_extendedae_plus.wt_frequency": "Show Frequency",
|
|
||||||
"config.jade.plugin_extendedae_plus.wt_master_mode": "Show Master/Slave Mode",
|
|
||||||
"config.jade.plugin_extendedae_plus.wt_master_location": "Show Master Position",
|
|
||||||
"config.jade.plugin_extendedae_plus.wt_locked": "Show Locked State",
|
|
||||||
"config.jade.plugin_extendedae_plus.wt_network_usable": "Show Network Online State",
|
|
||||||
"config.jade.plugin_extendedae_plus.wt_channels": "Show Channel Usage",
|
|
||||||
"config.jade.plugin_extendedae_plus.wt_owner": "Show Owner Information",
|
|
||||||
"extendedae_plus.tooltip.frequency": "Frequency: %d",
|
|
||||||
"extendedae_plus.tooltip.master_mode": "Mode: %s",
|
|
||||||
"extendedae_plus.tooltip.locked": "Locked: %s",
|
|
||||||
"extendedae_plus.tooltip.channels": "Channels: %d",
|
|
||||||
"extendedae_plus.tooltip.channels_of": "Channels: %d / %d",
|
|
||||||
|
|
||||||
"config.screen.extendedae_plus": "ExtendedAE Plus Config",
|
"config.screen.extendedae_plus": "ExtendedAE Plus Config",
|
||||||
"config.extendedae_plus.option.pageMultiplier": "Pattern Provider Page Multiplier",
|
"config.extendedae_plus.option.pageMultiplier": "Pattern Provider Page Multiplier",
|
||||||
"config.extendedae_plus.option.pageMultiplier_with_range": "Pattern Provider Page Multiplier",
|
"config.extendedae_plus.option.pageMultiplier_with_range": "Pattern Provider Page Multiplier",
|
||||||
|
|
@ -148,17 +147,57 @@
|
||||||
"item.extendedae_plus.channel_card.owner.player": "Owner: Player %s",
|
"item.extendedae_plus.channel_card.owner.player": "Owner: Player %s",
|
||||||
"item.extendedae_plus.channel_card.owner.bound": "Bound to: %s",
|
"item.extendedae_plus.channel_card.owner.bound": "Bound to: %s",
|
||||||
"item.extendedae_plus.channel_card.owner.cleared": "Owner binding cleared",
|
"item.extendedae_plus.channel_card.owner.cleared": "Owner binding cleared",
|
||||||
|
|
||||||
"extendedae_plus.tooltip.owner": "Owner: %s",
|
|
||||||
"extendedae_plus.tooltip.owner.unset": "Owner: Unset",
|
|
||||||
"extendedae_plus.tooltip.owner.public": "Owner: Public",
|
|
||||||
|
|
||||||
"extendedae_plus.screen.frequency_input.title": "Set Frequency",
|
"extendedae_plus.screen.frequency_input.title": "Set Frequency",
|
||||||
"extendedae_plus.screen.frequency_input.current": "Current Frequency: %s",
|
"extendedae_plus.screen.frequency_input.current": "Current Frequency: %s",
|
||||||
"extendedae_plus.screen.frequency_input.field": "Frequency",
|
"extendedae_plus.screen.frequency_input.field": "Frequency",
|
||||||
"extendedae_plus.screen.frequency_input.confirm": "Confirm",
|
"extendedae_plus.screen.frequency_input.confirm": "Confirm",
|
||||||
|
|
||||||
"group.pattern_provider.name": "Pattern Provider",
|
"group.pattern_provider.name": "Pattern Provider",
|
||||||
"group.entity_ticker.name": "Entity Accelerator",
|
"group.entity_ticker.name": "Entity Accelerator",
|
||||||
"group.storage.name": "StorageBus"
|
"group.storage.name": "StorageBus",
|
||||||
|
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.locked": "Transceiver locked, cannot modify",
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.channel": "Channel: %s",
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.bound_to": "Transceiver bound to: %s",
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.card_unbound": "Channel card unbound, using current player",
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.mode": "Mode: %s",
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.mode_master": "Master",
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.mode_slave": "Slave",
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.locked_status": "Transceiver Locked",
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.unlocked_status": "Transceiver Unlocked",
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.channel_set": "Channel set to: %s",
|
||||||
|
"extendedae_plus.chat.pattern_provider.global_toggle_applied": "Global toggle applied to %s pattern providers",
|
||||||
|
"extendedae_plus.message.config_update_failed": "Mapping file update failed: %s",
|
||||||
|
"extendedae_plus.message.config_delete_failed": "Mapping file delete failed: %s",
|
||||||
|
|
||||||
|
"config.jade.plugin_extendedae_plus.wireless_transceiver_info": "Wireless Transceiver Info",
|
||||||
|
"config.jade.plugin_extendedae_plus.wt_frequency": "Show Frequency",
|
||||||
|
"config.jade.plugin_extendedae_plus.wt_master_mode": "Show Master/Slave Mode",
|
||||||
|
"config.jade.plugin_extendedae_plus.wt_master_location": "Show Master Position",
|
||||||
|
"config.jade.plugin_extendedae_plus.wt_locked": "Show Locked State",
|
||||||
|
"config.jade.plugin_extendedae_plus.wt_network_usable": "Show Network Online State",
|
||||||
|
"config.jade.plugin_extendedae_plus.wt_channels": "Show Channel Usage",
|
||||||
|
"config.jade.plugin_extendedae_plus.wt_owner": "Show Owner Information",
|
||||||
|
"extendedae_plus.jade.frequency": "Frequency: %s",
|
||||||
|
"extendedae_plus.jade.mode": "Mode: %s",
|
||||||
|
"extendedae_plus.jade.mode_master": "Master",
|
||||||
|
"extendedae_plus.jade.mode_slave": "Slave",
|
||||||
|
"extendedae_plus.jade.master_node_with_name": "Master Node: %s(%s, %s, %s)",
|
||||||
|
"extendedae_plus.jade.master_node_location": "Master Node Location: (%s, %s, %s)",
|
||||||
|
"extendedae_plus.jade.dimension": "Dimension: %s",
|
||||||
|
"extendedae_plus.jade.lock_status": "Lock Status: %s",
|
||||||
|
"extendedae_plus.jade.locked": "Locked",
|
||||||
|
"extendedae_plus.jade.unlocked": "Unlocked",
|
||||||
|
"extendedae_plus.jade.online": "Device Online",
|
||||||
|
"extendedae_plus.jade.offline": "Device Offline",
|
||||||
|
"extendedae_plus.jade.channels": "Channels: %s",
|
||||||
|
"extendedae_plus.jade.channels_of": "Channels: %s/%s",
|
||||||
|
"extendedae_plus.jade.owner": "Owner: %s",
|
||||||
|
"extendedae_plus.jade.owner.public": "Owner: Public",
|
||||||
|
|
||||||
|
"extendedae_plus.command.server_side_only": "This command must be run on server side",
|
||||||
|
"extendedae_plus.command.storage_manager_not_initialized": "InfinityStorageManager is not initialized",
|
||||||
|
"extendedae_plus.command.gave_infinity_disks": "Gave %s infinity disks",
|
||||||
|
"extendedae_plus.command.error": "Error: %s"
|
||||||
}
|
}
|
||||||
|
|
@ -59,6 +59,19 @@
|
||||||
"chat.extendedae_plus.terminal.pos": "合成计划对应供应器现在突出显示在:%s,维度:%s (%s个方块外)",
|
"chat.extendedae_plus.terminal.pos": "合成计划对应供应器现在突出显示在:%s,维度:%s (%s个方块外)",
|
||||||
"extendedae_plus.upload_to_GTMatrix.repetition": "分子操纵者已存在相同样板,已跳过上传并返还空白样板",
|
"extendedae_plus.upload_to_GTMatrix.repetition": "分子操纵者已存在相同样板,已跳过上传并返还空白样板",
|
||||||
|
|
||||||
|
"extendedae_plus.gui.advanced_blocking.title": "智能阻挡",
|
||||||
|
"extendedae_plus.gui.advanced_blocking.enabled_desc": "对于同一种配方将不再阻挡 (需要启用原版阻挡模式)",
|
||||||
|
"extendedae_plus.gui.advanced_blocking.disabled_desc": "使用原版阻挡逻辑",
|
||||||
|
"extendedae_plus.gui.smart_doubling.title": "智能翻倍",
|
||||||
|
"extendedae_plus.gui.smart_doubling.enabled_desc": "根据请求量对处理样板进行智能翻倍",
|
||||||
|
"extendedae_plus.gui.smart_doubling.disabled_desc": "按原始样板数量进行发配",
|
||||||
|
"extendedae_plus.gui.per_provider_limit.tooltip": "单样物品发配数量上限: %s",
|
||||||
|
|
||||||
|
"extendedae_plus.gui.entity_acceleration.title": "实体加速",
|
||||||
|
"extendedae_plus.gui.entity_acceleration.blacklisted": "目标在黑名单中",
|
||||||
|
"extendedae_plus.gui.entity_acceleration.enabled": "加速目标方块实体的tick",
|
||||||
|
"extendedae_plus.gui.entity_acceleration.disabled": "不加速目标方块实体",
|
||||||
|
|
||||||
"extendedae_plus.screen.reload_mapping": "重载映射",
|
"extendedae_plus.screen.reload_mapping": "重载映射",
|
||||||
"extendedae_plus.screen.reload_mapping_success": "重载映射成功",
|
"extendedae_plus.screen.reload_mapping_success": "重载映射成功",
|
||||||
"extendedae_plus.screen.reload_mapping_fail": "重载映射失败: %s",
|
"extendedae_plus.screen.reload_mapping_fail": "重载映射失败: %s",
|
||||||
|
|
@ -92,20 +105,6 @@
|
||||||
"item.extendedae_plus.entity_speed_ticker.tip.max": "最高可达 1024x 加速",
|
"item.extendedae_plus.entity_speed_ticker.tip.max": "最高可达 1024x 加速",
|
||||||
"item.extendedae_plus.entity_speed_ticker.tip.energy": "加速将消耗 AE 网络能量,网络能量不足时无法加速",
|
"item.extendedae_plus.entity_speed_ticker.tip.energy": "加速将消耗 AE 网络能量,网络能量不足时无法加速",
|
||||||
|
|
||||||
"config.jade.plugin_extendedae_plus.wireless_transceiver_info": "无线收发器信息",
|
|
||||||
"config.jade.plugin_extendedae_plus.wt_frequency": "显示频率",
|
|
||||||
"config.jade.plugin_extendedae_plus.wt_master_mode": "显示主/从模式",
|
|
||||||
"config.jade.plugin_extendedae_plus.wt_master_location": "显示主节点位置",
|
|
||||||
"config.jade.plugin_extendedae_plus.wt_locked": "显示锁定状态",
|
|
||||||
"config.jade.plugin_extendedae_plus.wt_network_usable": "显示网络在线状态",
|
|
||||||
"config.jade.plugin_extendedae_plus.wt_channels": "显示频道使用情况",
|
|
||||||
"config.jade.plugin_extendedae_plus.wt_owner": "显示所有者信息",
|
|
||||||
"extendedae_plus.tooltip.frequency": "频率: %d",
|
|
||||||
"extendedae_plus.tooltip.master_mode": "模式: %s",
|
|
||||||
"extendedae_plus.tooltip.locked": "锁定状态: %s",
|
|
||||||
"extendedae_plus.tooltip.channels": "频道: %d",
|
|
||||||
"extendedae_plus.tooltip.channels_of": "频道: %d / %d",
|
|
||||||
|
|
||||||
"config.screen.extendedae_plus": "ExtendedAE Plus 配置",
|
"config.screen.extendedae_plus": "ExtendedAE Plus 配置",
|
||||||
"config.extendedae_plus.option.pageMultiplier": "扩展样板供应器槽位倍率",
|
"config.extendedae_plus.option.pageMultiplier": "扩展样板供应器槽位倍率",
|
||||||
"config.extendedae_plus.option.pageMultiplier_with_range": "扩展样板供应器槽位倍率",
|
"config.extendedae_plus.option.pageMultiplier_with_range": "扩展样板供应器槽位倍率",
|
||||||
|
|
@ -137,10 +136,6 @@
|
||||||
"item.extendedae_plus.channel_card.owner.bound": "已绑定至:%s",
|
"item.extendedae_plus.channel_card.owner.bound": "已绑定至:%s",
|
||||||
"item.extendedae_plus.channel_card.owner.cleared": "已清除所有者绑定",
|
"item.extendedae_plus.channel_card.owner.cleared": "已清除所有者绑定",
|
||||||
|
|
||||||
"extendedae_plus.tooltip.owner": "所有者: %s",
|
|
||||||
"extendedae_plus.tooltip.owner.unset": "所有者: 未设置",
|
|
||||||
"extendedae_plus.tooltip.owner.public": "所有者: 公共",
|
|
||||||
|
|
||||||
"extendedae_plus.screen.frequency_input.title": "设置频率",
|
"extendedae_plus.screen.frequency_input.title": "设置频率",
|
||||||
"extendedae_plus.screen.frequency_input.current": "当前频率:%s",
|
"extendedae_plus.screen.frequency_input.current": "当前频率:%s",
|
||||||
"extendedae_plus.screen.frequency_input.field": "频率",
|
"extendedae_plus.screen.frequency_input.field": "频率",
|
||||||
|
|
@ -148,5 +143,49 @@
|
||||||
|
|
||||||
"group.pattern_provider.name": "样板供应器",
|
"group.pattern_provider.name": "样板供应器",
|
||||||
"group.entity_ticker.name": "实体加速器",
|
"group.entity_ticker.name": "实体加速器",
|
||||||
"group.storage.name": "存储总线"
|
"group.storage.name": "存储总线",
|
||||||
|
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.locked": "收发器已锁定,无法修改",
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.channel": "频道:%s",
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.bound_to": "已将收发器绑定至:%s",
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.card_unbound": "频道卡未绑定,已使用当前玩家",
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.mode": "模式:%s",
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.mode_master": "主端",
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.mode_slave": "从端",
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.locked_status": "已锁定收发器",
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.unlocked_status": "已解锁收发器",
|
||||||
|
"extendedae_plus.chat.wireless_transceiver.channel_set": "频道已设置为:%s",
|
||||||
|
"extendedae_plus.chat.pattern_provider.global_toggle_applied": "全局切换已应用到 %s 个样板供应器",
|
||||||
|
"extendedae_plus.message.config_update_failed": "映射文件更新失败: %s",
|
||||||
|
"extendedae_plus.message.config_delete_failed": "映射文件删除失败: %s",
|
||||||
|
|
||||||
|
"config.jade.plugin_extendedae_plus.wireless_transceiver_info": "无线收发器信息",
|
||||||
|
"config.jade.plugin_extendedae_plus.wt_frequency": "显示频率",
|
||||||
|
"config.jade.plugin_extendedae_plus.wt_master_mode": "显示主/从模式",
|
||||||
|
"config.jade.plugin_extendedae_plus.wt_master_location": "显示主节点位置",
|
||||||
|
"config.jade.plugin_extendedae_plus.wt_locked": "显示锁定状态",
|
||||||
|
"config.jade.plugin_extendedae_plus.wt_network_usable": "显示网络在线状态",
|
||||||
|
"config.jade.plugin_extendedae_plus.wt_channels": "显示频道使用情况",
|
||||||
|
"config.jade.plugin_extendedae_plus.wt_owner": "显示所有者信息",
|
||||||
|
"extendedae_plus.jade.frequency": "频率: %s",
|
||||||
|
"extendedae_plus.jade.mode": "模式: %s",
|
||||||
|
"extendedae_plus.jade.mode_master": "主模式",
|
||||||
|
"extendedae_plus.jade.mode_slave": "从模式",
|
||||||
|
"extendedae_plus.jade.master_node_with_name": "主节点: %s(%s, %s, %s)",
|
||||||
|
"extendedae_plus.jade.master_node_location": "主节点位置: (%s, %s, %s)",
|
||||||
|
"extendedae_plus.jade.dimension": "维度: %s",
|
||||||
|
"extendedae_plus.jade.lock_status": "锁定状态: %s",
|
||||||
|
"extendedae_plus.jade.locked": "已锁定",
|
||||||
|
"extendedae_plus.jade.unlocked": "未锁定",
|
||||||
|
"extendedae_plus.jade.online": "设备在线",
|
||||||
|
"extendedae_plus.jade.offline": "设备离线",
|
||||||
|
"extendedae_plus.jade.channels": "频道: %s",
|
||||||
|
"extendedae_plus.jade.channels_of": "频道: %s/%s",
|
||||||
|
"extendedae_plus.jade.owner": "所有者: %s",
|
||||||
|
"extendedae_plus.jade.owner.public": "所有者: 公共",
|
||||||
|
|
||||||
|
"extendedae_plus.command.server_side_only": "此命令必须在服务器端执行",
|
||||||
|
"extendedae_plus.command.storage_manager_not_initialized": "InfinityStorageManager未初始化",
|
||||||
|
"extendedae_plus.command.gave_infinity_disks": "已发放 %s 个无限磁盘",
|
||||||
|
"extendedae_plus.command.error": "错误: %s"
|
||||||
}
|
}
|
||||||
|
|
@ -54,10 +54,10 @@
|
||||||
"ae2.accessor.PatternEncodingTermMenuAccessor",
|
"ae2.accessor.PatternEncodingTermMenuAccessor",
|
||||||
"ae2.accessor.PatternProviderLogicAccessor",
|
"ae2.accessor.PatternProviderLogicAccessor",
|
||||||
"ae2.accessor.PatternProviderMenuAccessor",
|
"ae2.accessor.PatternProviderMenuAccessor",
|
||||||
|
"ae2.autopattern.CraftingCalculationMixin",
|
||||||
"ae2.autopattern.CraftingServiceGetProvidersMixin",
|
"ae2.autopattern.CraftingServiceGetProvidersMixin",
|
||||||
"ae2.autopattern.CraftingSimulationStateAccessor",
|
"ae2.autopattern.CraftingSimulationStateAccessor",
|
||||||
"ae2.autopattern.CraftingSimulationStateMixin",
|
"ae2.autopattern.CraftingSimulationStateMixin",
|
||||||
"ae2.autopattern.CraftingTreeProcessMixin",
|
|
||||||
"ae2.autopattern.PatternProviderLogicContainsRedirectMixin",
|
"ae2.autopattern.PatternProviderLogicContainsRedirectMixin",
|
||||||
"ae2.autopattern.gtceu.GTLCoreMEPatternBufferPartMachineMixin",
|
"ae2.autopattern.gtceu.GTLCoreMEPatternBufferPartMachineMixin",
|
||||||
"ae2.autopattern.gtceu.MEPatternBufferPartMachineMixin",
|
"ae2.autopattern.gtceu.MEPatternBufferPartMachineMixin",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user