兼容扩展样板供应器

This commit is contained in:
GaLi 2026-03-23 15:15:38 +08:00
parent 12548a109a
commit 66de0dea40
3 changed files with 37 additions and 12 deletions

View File

@ -9,6 +9,7 @@ import appeng.blockentity.crafting.PatternProviderBlockEntity;
import appeng.helpers.patternprovider.PatternProviderLogic; import appeng.helpers.patternprovider.PatternProviderLogic;
import appeng.util.SettingsFrom; import appeng.util.SettingsFrom;
import appeng.util.inv.AppEngInternalInventory; import appeng.util.inv.AppEngInternalInventory;
import com.extendedae_plus.config.ModConfigs;
import com.extendedae_plus.init.ModBlockEntities; import com.extendedae_plus.init.ModBlockEntities;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; 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_DIMENSION = "dimension";
private static final String TAG_MASTER_POS = "pos"; private static final String TAG_MASTER_POS = "pos";
private static final int SYNC_INTERVAL = 2; 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); private static final InternalInventory DISABLED_PATTERN_INVENTORY = new AppEngInternalInventory(0);
@Nullable @Nullable
@ -61,7 +64,7 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
@Override @Override
protected PatternProviderLogic createLogic() { 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) { 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())) { if (masterLevel != null && masterLevel.hasChunkAt(master.pos())) {
var blockEntity = masterLevel.getBlockEntity(master.pos()); var blockEntity = masterLevel.getBlockEntity(master.pos());
if (isValidMaster(blockEntity)) { if (isValidMaster(blockEntity)) {
return this.syncFromMaster((PatternProviderBlockEntity) blockEntity); this.syncFromMaster((PatternProviderBlockEntity) blockEntity);
return true;
} }
return false; return false;
} }
@ -356,13 +360,13 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
private boolean syncMirroredPatterns(PatternProviderBlockEntity master) { private boolean syncMirroredPatterns(PatternProviderBlockEntity master) {
var mirrorInventory = this.getPatternInventory(); 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; return false;
} }
mirrorInventory.fromItemContainerContents(masterInventory.toItemContainerContents()); mirrorInventory.fromItemContainerContents(desiredInventory.toItemContainerContents());
this.getLogic().updatePatterns(); this.getLogic().updatePatterns();
return true; return true;
} }
@ -406,10 +410,33 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
return ((MirrorLogic) this.getLogic()).getActualPatternInventory(); 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) { private static AppEngInternalInventory asPatternInventory(Object inventory) {
return (AppEngInternalInventory) 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) { private static boolean sameStack(ItemStack left, ItemStack right) {
if (left.isEmpty() && right.isEmpty()) { if (left.isEmpty() && right.isEmpty()) {
return true; return true;
@ -425,11 +452,9 @@ public class MirrorPatternProviderBlockEntity extends PatternProviderBlockEntity
} }
private static final class MirrorLogic extends PatternProviderLogic { private static final class MirrorLogic extends PatternProviderLogic {
private final MirrorPatternProviderBlockEntity mirrorHost; private MirrorLogic(IManagedGridNode mainNode, MirrorPatternProviderBlockEntity mirrorHost,
int patternInventorySize) {
private MirrorLogic(IManagedGridNode mainNode, MirrorPatternProviderBlockEntity mirrorHost) { super(mainNode, mirrorHost, patternInventorySize);
super(mainNode, mirrorHost);
this.mirrorHost = mirrorHost;
} }
@Override @Override

View File

@ -31,7 +31,7 @@
"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": "Binding cleared", "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.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.selected": "Selected master provider: (%d, %d, %d)",
"item.extendedae_plus.mirror_pattern_binding_tool.dimension": "Dimension: %s", "item.extendedae_plus.mirror_pattern_binding_tool.dimension": "Dimension: %s",
"item.extendedae_plus.mirror_pattern_binding_tool.unset": "No master provider selected", "item.extendedae_plus.mirror_pattern_binding_tool.unset": "No master provider selected",

View File

@ -31,7 +31,7 @@
"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": "已清除绑定",
"item.extendedae_plus.mirror_pattern_binding_tool.tip.select": "潜行右键主样板供应器:选中主供应器", "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.selected": "当前选中主供应器:(%d, %d, %d)",
"item.extendedae_plus.mirror_pattern_binding_tool.dimension": "维度:%s", "item.extendedae_plus.mirror_pattern_binding_tool.dimension": "维度:%s",
"item.extendedae_plus.mirror_pattern_binding_tool.unset": "当前未选中主供应器", "item.extendedae_plus.mirror_pattern_binding_tool.unset": "当前未选中主供应器",