From 66de0dea40239b4313115c03abf694b41d8e8a2e Mon Sep 17 00:00:00 2001 From: GaLi <3096147684@qq.com> Date: Mon, 23 Mar 2026 15:15:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=BC=E5=AE=B9=E6=89=A9=E5=B1=95=E6=A0=B7?= =?UTF-8?q?=E6=9D=BF=E4=BE=9B=E5=BA=94=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ae2/MirrorPatternProviderBlockEntity.java | 45 ++++++++++++++----- .../assets/extendedae_plus/lang/en_us.json | 2 +- .../assets/extendedae_plus/lang/zh_cn.json | 2 +- 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/extendedae_plus/content/ae2/MirrorPatternProviderBlockEntity.java b/src/main/java/com/extendedae_plus/content/ae2/MirrorPatternProviderBlockEntity.java index 1be57e2..83bc154 100644 --- a/src/main/java/com/extendedae_plus/content/ae2/MirrorPatternProviderBlockEntity.java +++ b/src/main/java/com/extendedae_plus/content/ae2/MirrorPatternProviderBlockEntity.java @@ -9,6 +9,7 @@ import appeng.blockentity.crafting.PatternProviderBlockEntity; import appeng.helpers.patternprovider.PatternProviderLogic; import appeng.util.SettingsFrom; import appeng.util.inv.AppEngInternalInventory; +import com.extendedae_plus.config.ModConfigs; import com.extendedae_plus.init.ModBlockEntities; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -37,6 +38,8 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity private static final String TAG_MASTER_DIMENSION = "dimension"; private static final String TAG_MASTER_POS = "pos"; private static final int SYNC_INTERVAL = 2; + private static final int AE2_PATTERN_SLOTS = 9; + private static final int EXTENDED_PATTERN_PROVIDER_BASE_SLOTS = 36; private static final InternalInventory DISABLED_PATTERN_INVENTORY = new AppEngInternalInventory(0); @Nullable @@ -61,7 +64,7 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity @Override protected PatternProviderLogic createLogic() { - return new MirrorLogic(this.getMainNode(), this); + return new MirrorLogic(this.getMainNode(), this, getMirrorPatternSlotCapacity()); } public static void serverTick(Level level, BlockPos pos, BlockState state, MirrorPatternProviderBlockEntity blockEntity) { @@ -163,7 +166,8 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity if (masterLevel != null && masterLevel.hasChunkAt(master.pos())) { var blockEntity = masterLevel.getBlockEntity(master.pos()); if (isValidMaster(blockEntity)) { - return this.syncFromMaster((PatternProviderBlockEntity) blockEntity); + this.syncFromMaster((PatternProviderBlockEntity) blockEntity); + return true; } return false; } @@ -356,13 +360,13 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity private boolean syncMirroredPatterns(PatternProviderBlockEntity master) { var mirrorInventory = this.getPatternInventory(); - var masterInventory = asPatternInventory(master.getLogic().getPatternInv()); + var desiredInventory = this.createDesiredPatternInventory(master); - if (this.hasSamePatterns(masterInventory, mirrorInventory)) { + if (this.hasSamePatterns(desiredInventory, mirrorInventory)) { return false; } - mirrorInventory.fromItemContainerContents(masterInventory.toItemContainerContents()); + mirrorInventory.fromItemContainerContents(desiredInventory.toItemContainerContents()); this.getLogic().updatePatterns(); return true; } @@ -406,10 +410,33 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity return ((MirrorLogic) this.getLogic()).getActualPatternInventory(); } + private AppEngInternalInventory createDesiredPatternInventory(PatternProviderBlockEntity master) { + var desiredInventory = new AppEngInternalInventory(this.getPatternInventory().size()); + var masterInventory = asPatternInventory(master.getLogic().getPatternInv()); + var copySlotCount = Math.min(masterInventory.size(), desiredInventory.size()); + + for (int slot = 0; slot < copySlotCount; slot++) { + desiredInventory.setItemDirect(slot, masterInventory.getStackInSlot(slot).copy()); + } + + return desiredInventory; + } + private static AppEngInternalInventory asPatternInventory(Object inventory) { return (AppEngInternalInventory) inventory; } + private static int getMirrorPatternSlotCapacity() { + int pageMultiplier = 1; + try { + pageMultiplier = ModConfigs.PAGE_MULTIPLIER.get(); + } catch (Throwable ignored) { + } + + pageMultiplier = Math.max(1, Math.min(64, pageMultiplier)); + return Math.max(AE2_PATTERN_SLOTS, EXTENDED_PATTERN_PROVIDER_BASE_SLOTS * pageMultiplier); + } + private static boolean sameStack(ItemStack left, ItemStack right) { if (left.isEmpty() && right.isEmpty()) { return true; @@ -425,11 +452,9 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity } private static final class MirrorLogic extends PatternProviderLogic { - private final MirrorPatternProviderBlockEntity mirrorHost; - - private MirrorLogic(IManagedGridNode mainNode, MirrorPatternProviderBlockEntity mirrorHost) { - super(mainNode, mirrorHost); - this.mirrorHost = mirrorHost; + private MirrorLogic(IManagedGridNode mainNode, MirrorPatternProviderBlockEntity mirrorHost, + int patternInventorySize) { + super(mainNode, mirrorHost, patternInventorySize); } @Override diff --git a/src/main/resources/assets/extendedae_plus/lang/en_us.json b/src/main/resources/assets/extendedae_plus/lang/en_us.json index ef3f961..133245f 100644 --- a/src/main/resources/assets/extendedae_plus/lang/en_us.json +++ b/src/main/resources/assets/extendedae_plus/lang/en_us.json @@ -31,7 +31,7 @@ "item.extendedae_plus.channel_card.owner.bound": "Bound to: %s", "item.extendedae_plus.channel_card.owner.cleared": "Binding cleared", "item.extendedae_plus.mirror_pattern_binding_tool.tip.select": "Sneak-right-click a master pattern provider to select it", - "item.extendedae_plus.mirror_pattern_binding_tool.tip.bind": "Right-click a mirror pattern provider to bind it to the selected master", + "item.extendedae_plus.mirror_pattern_binding_tool.tip.bind": "Sneak-right-click a mirror pattern provider to bind it to the selected master", "item.extendedae_plus.mirror_pattern_binding_tool.selected": "Selected master provider: (%d, %d, %d)", "item.extendedae_plus.mirror_pattern_binding_tool.dimension": "Dimension: %s", "item.extendedae_plus.mirror_pattern_binding_tool.unset": "No master provider selected", diff --git a/src/main/resources/assets/extendedae_plus/lang/zh_cn.json b/src/main/resources/assets/extendedae_plus/lang/zh_cn.json index 166b583..6cc7212 100644 --- a/src/main/resources/assets/extendedae_plus/lang/zh_cn.json +++ b/src/main/resources/assets/extendedae_plus/lang/zh_cn.json @@ -31,7 +31,7 @@ "item.extendedae_plus.channel_card.owner.bound": "已绑定到: %s", "item.extendedae_plus.channel_card.owner.cleared": "已清除绑定", "item.extendedae_plus.mirror_pattern_binding_tool.tip.select": "潜行右键主样板供应器:选中主供应器", - "item.extendedae_plus.mirror_pattern_binding_tool.tip.bind": "右键镜像样板供应器:绑定到当前选中的主供应器", + "item.extendedae_plus.mirror_pattern_binding_tool.tip.bind": "潜行右键镜像样板供应器:绑定到当前选中的主供应器", "item.extendedae_plus.mirror_pattern_binding_tool.selected": "当前选中主供应器:(%d, %d, %d)", "item.extendedae_plus.mirror_pattern_binding_tool.dimension": "维度:%s", "item.extendedae_plus.mirror_pattern_binding_tool.unset": "当前未选中主供应器",