From 59766c69f7622309075efd577c9543a8ac24c3f9 Mon Sep 17 00:00:00 2001 From: Jason Mitchell Date: Sat, 29 Jun 2024 10:48:10 -0700 Subject: MultiTileEntityBlock work * Merge MultiTileEntityBlockRegistryInternal into MultiTileEntityBlock * Add a hard dep on NEID for meta extension * Use in world block meta for MuTE ID * Use one block per MuTE Registry * Add WeakTargetRef * Migrate `controller` reference for parts over to a non non cachable WeakTargetRef * Migrate controller WeakReference usage to WeakTargetRef --- .../multiblock/base/WallShareablePart.java | 34 ++++++++++++---------- 1 file changed, 19 insertions(+), 15 deletions(-) (limited to 'src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java') diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java b/src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java index 7005e3a60a..238ce1eb2d 100644 --- a/src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java +++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java @@ -8,32 +8,34 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChunkCoordinates; import net.minecraftforge.common.util.ForgeDirection; +import gregtech.api.multitileentity.WeakTargetRef; import gregtech.api.multitileentity.interfaces.IMultiBlockController; public class WallShareablePart extends MultiBlockPart { - protected List targetPositions = new ArrayList<>(); + protected List> targets = new ArrayList<>(); @Override - public void setTarget(IMultiBlockController aTarget, int aAllowedModes) { - if (targetPositions.size() >= 1) { - allowedModes = 0; + public void setTarget(IMultiBlockController newController, int allowedModes) { + if (targets.size() >= 1) { + this.allowedModes = 0; setMode((byte) 0); - targetPosition = null; + controller.invalidate(); } else { - allowedModes = aAllowedModes; + this.allowedModes = allowedModes; + controller.setTarget(newController); } - if (aTarget == null) { + if (newController == null) { return; } - targetPositions.add(aTarget.getCoords()); + targets.add(new WeakTargetRef(IMultiBlockController.class, true)); } @Override public UUID getLockedInventory() { - if (targetPositions.size() > 1) { + if (targets.size() > 1) { return null; } return super.getLockedInventory(); @@ -41,11 +43,13 @@ public class WallShareablePart extends MultiBlockPart { @Override public IMultiBlockController getTarget(boolean aCheckValidity) { - if (targetPositions.size() != 1) { + if (targets.size() != 1) { return null; } - targetPosition = targetPositions.get(0); + controller.setTarget( + targets.get(0) + .get()); return super.getTarget(aCheckValidity); } @@ -56,8 +60,8 @@ public class WallShareablePart extends MultiBlockPart { @Override public boolean onBlockBroken() { - for (final ChunkCoordinates coordinates : targetPositions) { - IMultiBlockController target = getTarget(coordinates, false); + for (final WeakTargetRef tar : targets) { + IMultiBlockController target = getTarget(tar.getPosition(), false); if (target == null) { continue; } @@ -73,8 +77,8 @@ public class WallShareablePart extends MultiBlockPart { if (te instanceof MultiBlockPart part) { final IMultiBlockController tController = part.getTarget(false); if (tController != null) tController.onStructureChange(); - } else if (te instanceof IMultiBlockController controller) { - controller.onStructureChange(); + } else if (te instanceof IMultiBlockController tController) { + tController.onStructureChange(); } } } -- cgit