diff --git a/src/main/java/de/ellpeck/prettypipes/network/PipeNetwork.java b/src/main/java/de/ellpeck/prettypipes/network/PipeNetwork.java index 6e354ca..b800811 100644 --- a/src/main/java/de/ellpeck/prettypipes/network/PipeNetwork.java +++ b/src/main/java/de/ellpeck/prettypipes/network/PipeNetwork.java @@ -55,6 +55,7 @@ public class PipeNetwork implements ICapabilitySerializable, GraphL private final ListMultimap pipeItems = ArrayListMultimap.create(); private final ListMultimap networkLocks = ArrayListMultimap.create(); private final World world; + private final LazyOptional lazyThis = LazyOptional.of(() -> this); public PipeNetwork(World world) { this.world = world; @@ -66,7 +67,7 @@ public class PipeNetwork implements ICapabilitySerializable, GraphL @Nonnull @Override public LazyOptional getCapability(@Nonnull Capability cap, @Nullable Direction side) { - return cap == Registry.pipeNetworkCapability ? LazyOptional.of(() -> (T) this) : LazyOptional.empty(); + return cap == Registry.pipeNetworkCapability ? this.lazyThis.cast() : LazyOptional.empty(); } @Override diff --git a/src/main/java/de/ellpeck/prettypipes/pipe/PipeTileEntity.java b/src/main/java/de/ellpeck/prettypipes/pipe/PipeTileEntity.java index d8a0fcc..66038c0 100644 --- a/src/main/java/de/ellpeck/prettypipes/pipe/PipeTileEntity.java +++ b/src/main/java/de/ellpeck/prettypipes/pipe/PipeTileEntity.java @@ -73,6 +73,7 @@ public class PipeTileEntity extends TileEntity implements INamedContainerProvide protected List items; private int lastItemAmount; private int priority; + private final LazyOptional lazyThis = LazyOptional.of(() -> this); public PipeTileEntity() { this(Registry.pipeTileEntity); @@ -351,6 +352,7 @@ public class PipeTileEntity extends TileEntity implements INamedContainerProvide PipeNetwork network = PipeNetwork.get(this.world); for (NetworkLock lock : this.craftIngredientRequests) network.resolveNetworkLock(lock); + this.lazyThis.invalidate(); } @Override @@ -374,7 +376,7 @@ public class PipeTileEntity extends TileEntity implements INamedContainerProvide @Override public LazyOptional getCapability(Capability cap, Direction side) { if (cap == Registry.pipeConnectableCapability) - return LazyOptional.of(() -> (T) this); + return this.lazyThis.cast(); return LazyOptional.empty(); } diff --git a/src/main/java/de/ellpeck/prettypipes/pressurizer/PressurizerTileEntity.java b/src/main/java/de/ellpeck/prettypipes/pressurizer/PressurizerTileEntity.java index f516053..f70f532 100644 --- a/src/main/java/de/ellpeck/prettypipes/pressurizer/PressurizerTileEntity.java +++ b/src/main/java/de/ellpeck/prettypipes/pressurizer/PressurizerTileEntity.java @@ -36,6 +36,8 @@ import javax.annotation.Nullable; public class PressurizerTileEntity extends TileEntity implements INamedContainerProvider, ITickableTileEntity, IPipeConnectable { private final ModifiableEnergyStorage storage = new ModifiableEnergyStorage(64000, 512, 0); + private final LazyOptional lazyStorage = LazyOptional.of(() -> this.storage); + private final LazyOptional lazyThis = LazyOptional.of(() -> this); private int lastEnergy; public PressurizerTileEntity() { @@ -100,14 +102,21 @@ public class PressurizerTileEntity extends TileEntity implements INamedContainer @Override public LazyOptional getCapability(Capability cap, Direction side) { if (cap == CapabilityEnergy.ENERGY) { - return LazyOptional.of(() -> (T) this.storage); + return this.lazyStorage.cast(); } else if (cap == Registry.pipeConnectableCapability) { - return LazyOptional.of(() -> (T) this); + return this.lazyThis.cast(); } else { return LazyOptional.empty(); } } + @Override + public void remove() { + super.remove(); + this.lazyStorage.invalidate(); + this.lazyThis.invalidate(); + } + @Override public void tick() { if (this.world.isRemote) diff --git a/src/main/java/de/ellpeck/prettypipes/terminal/ItemTerminalTileEntity.java b/src/main/java/de/ellpeck/prettypipes/terminal/ItemTerminalTileEntity.java index 3ef6214..ec3930d 100644 --- a/src/main/java/de/ellpeck/prettypipes/terminal/ItemTerminalTileEntity.java +++ b/src/main/java/de/ellpeck/prettypipes/terminal/ItemTerminalTileEntity.java @@ -60,6 +60,7 @@ public class ItemTerminalTileEntity extends TileEntity implements INamedContaine }; protected Map networkItems; private final Queue existingRequests = new LinkedList<>(); + private final LazyOptional lazyThis = LazyOptional.of(() -> this); protected ItemTerminalTileEntity(TileEntityType tileEntityTypeIn) { super(tileEntityTypeIn); @@ -113,6 +114,7 @@ public class ItemTerminalTileEntity extends TileEntity implements INamedContaine PipeNetwork network = PipeNetwork.get(this.world); for (NetworkLock lock : this.existingRequests) network.resolveNetworkLock(lock); + this.lazyThis.invalidate(); } public PipeTileEntity getConnectedPipe() { @@ -217,7 +219,7 @@ public class ItemTerminalTileEntity extends TileEntity implements INamedContaine @Override public LazyOptional getCapability(Capability cap, Direction side) { if (cap == Registry.pipeConnectableCapability) - return LazyOptional.of(() -> (T) this); + return this.lazyThis.cast(); return LazyOptional.empty(); }