aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java
diff options
context:
space:
mode:
authorJason Mitchell <mitchej@gmail.com>2024-06-29 10:48:10 -0700
committerJason Mitchell <mitchej+github@gmail.com>2024-07-09 21:38:05 -0700
commit59766c69f7622309075efd577c9543a8ac24c3f9 (patch)
tree1181f958421381e1a1464d1d004a9b7c849a7df3 /src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java
parent3724fbbcb67ee2566419654e31eb88eb5b7f88f6 (diff)
downloadGT5-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.java34
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();
}
}
}