diff options
author | Jason Mitchell <mitchej@gmail.com> | 2024-06-29 10:48:10 -0700 |
---|---|---|
committer | Jason Mitchell <mitchej+github@gmail.com> | 2024-07-09 21:38:05 -0700 |
commit | 59766c69f7622309075efd577c9543a8ac24c3f9 (patch) | |
tree | 1181f958421381e1a1464d1d004a9b7c849a7df3 /src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java | |
parent | 3724fbbcb67ee2566419654e31eb88eb5b7f88f6 (diff) | |
download | GT5-Unofficial-59766c69f7622309075efd577c9543a8ac24c3f9.tar.gz GT5-Unofficial-59766c69f7622309075efd577c9543a8ac24c3f9.tar.bz2 GT5-Unofficial-59766c69f7622309075efd577c9543a8ac24c3f9.zip |
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
Diffstat (limited to 'src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java')
-rw-r--r-- | src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java | 34 |
1 files changed, 19 insertions, 15 deletions
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<ChunkCoordinates> targetPositions = new ArrayList<>(); + protected List<WeakTargetRef<IMultiBlockController>> 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>(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<IMultiBlockController> 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(); } } } |