diff --git a/CHANGELOG.md b/CHANGELOG.md index deb110ab7..292897b18 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ - Updated Dutch translation for Fluid Storage (raoulvdberge) - Added Chinese translation (TartaricAcid) - Added Crafting Tweaks integration (blay09) +- Reworked storage network code, should fix weird machine disconnection issues (raoulvdberge) +- Fixed that the Fluid Storage Disk recipe returns an invalid disk (raoulvdberge) ### 0.9.2 **Bugfixes** diff --git a/src/main/java/refinedstorage/api/RefinedStorageAPI.java b/src/main/java/refinedstorage/api/RefinedStorageAPI.java index ebef434ae..d767cf120 100755 --- a/src/main/java/refinedstorage/api/RefinedStorageAPI.java +++ b/src/main/java/refinedstorage/api/RefinedStorageAPI.java @@ -1,10 +1,55 @@ package refinedstorage.api; +import net.minecraft.world.World; +import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.network.INetworkNode; +import refinedstorage.api.network.registry.INetworkRegistry; +import refinedstorage.api.network.registry.INetworkRegistryProvider; import refinedstorage.api.solderer.ISoldererRegistry; +import java.util.HashMap; +import java.util.Map; + public final class RefinedStorageAPI { /** * The solderer registry, set in pre-initialization */ public static ISoldererRegistry SOLDERER_REGISTRY; + + /** + * The network registry provider, set in pre-initialization + */ + public static INetworkRegistryProvider NETWORK_REGISTRY_PROVIDER; + + private static final Map NETWORK_REGISTRY = new HashMap<>(); + + public static INetworkRegistry getNetworkRegistry(World world) { + return getNetworkRegistry(world.provider.getDimension()); + } + + public static void removeNetworkRegistry(World world) { + NETWORK_REGISTRY.remove(world.provider.getDimension()); + } + + public static INetworkRegistry getNetworkRegistry(int dimension) { + if (!NETWORK_REGISTRY.containsKey(dimension)) { + NETWORK_REGISTRY.put(dimension, NETWORK_REGISTRY_PROVIDER.provide(dimension)); + } + + return NETWORK_REGISTRY.get(dimension); + } + + public static INetworkMaster getNetwork(INetworkNode node) { + for (INetworkRegistry registry : NETWORK_REGISTRY.values()) { + for (INetworkMaster network : registry.getNetworks()) { + for (INetworkNode otherNode : network.getNodeGraph().all()) { + if (node.equals(otherNode)) { + return network; + } + } + } + } + + return null; + } } diff --git a/src/main/java/refinedstorage/api/network/registry/INetworkRegistry.java b/src/main/java/refinedstorage/api/network/registry/INetworkRegistry.java new file mode 100755 index 000000000..6a11bce5a --- /dev/null +++ b/src/main/java/refinedstorage/api/network/registry/INetworkRegistry.java @@ -0,0 +1,41 @@ +package refinedstorage.api.network.registry; + +import net.minecraft.util.math.BlockPos; +import refinedstorage.api.network.INetworkMaster; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.Collection; + +/** + * A registry of all Refined Storage networks on this server. + */ +public interface INetworkRegistry { + /** + * Adds a network to the registry. + * + * @param network The network + */ + void addNetwork(@Nonnull INetworkMaster network); + + /** + * Removes a network from the registry. + * + * @param pos The position of the network + */ + void removeNetwork(@Nonnull BlockPos pos); + + /** + * @return All the networks in this registry + */ + Collection getNetworks(); + + /** + * Returns a network at a position. + * + * @param pos The position of the network + * @return The network + */ + @Nullable + INetworkMaster getNetwork(@Nonnull BlockPos pos); +} diff --git a/src/main/java/refinedstorage/api/network/registry/INetworkRegistryProvider.java b/src/main/java/refinedstorage/api/network/registry/INetworkRegistryProvider.java new file mode 100755 index 000000000..fb160d8fb --- /dev/null +++ b/src/main/java/refinedstorage/api/network/registry/INetworkRegistryProvider.java @@ -0,0 +1,5 @@ +package refinedstorage.api.network.registry; + +public interface INetworkRegistryProvider { + INetworkRegistry provide(int dimension); +} diff --git a/src/main/java/refinedstorage/apiimpl/network/registry/NetworkRegistry.java b/src/main/java/refinedstorage/apiimpl/network/registry/NetworkRegistry.java new file mode 100755 index 000000000..30cc31785 --- /dev/null +++ b/src/main/java/refinedstorage/apiimpl/network/registry/NetworkRegistry.java @@ -0,0 +1,39 @@ +package refinedstorage.apiimpl.network.registry; + +import net.minecraft.util.math.BlockPos; +import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.network.registry.INetworkRegistry; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +public class NetworkRegistry implements INetworkRegistry { + private Map networks = new HashMap<>(); + + @Override + public void addNetwork(@Nonnull INetworkMaster network) { + networks.put(network.getPosition(), network); + System.out.println("Added " + network.getPosition()); + } + + @Override + public void removeNetwork(@Nonnull BlockPos pos) { + networks.remove(pos); + + System.out.println("Removed " + pos); + } + + @Override + public Collection getNetworks() { + return networks.values(); + } + + @Nullable + @Override + public INetworkMaster getNetwork(@Nonnull BlockPos pos) { + return networks.get(pos); + } +} diff --git a/src/main/java/refinedstorage/apiimpl/network/registry/NetworkRegistryProvider.java b/src/main/java/refinedstorage/apiimpl/network/registry/NetworkRegistryProvider.java new file mode 100755 index 000000000..1e8323bb8 --- /dev/null +++ b/src/main/java/refinedstorage/apiimpl/network/registry/NetworkRegistryProvider.java @@ -0,0 +1,11 @@ +package refinedstorage.apiimpl.network.registry; + +import refinedstorage.api.network.registry.INetworkRegistry; +import refinedstorage.api.network.registry.INetworkRegistryProvider; + +public class NetworkRegistryProvider implements INetworkRegistryProvider { + @Override + public INetworkRegistry provide(int dimension) { + return new NetworkRegistry(); + } +} diff --git a/src/main/java/refinedstorage/apiimpl/network/registry/NetworkRegistryUnloader.java b/src/main/java/refinedstorage/apiimpl/network/registry/NetworkRegistryUnloader.java new file mode 100755 index 000000000..fd60845e9 --- /dev/null +++ b/src/main/java/refinedstorage/apiimpl/network/registry/NetworkRegistryUnloader.java @@ -0,0 +1,13 @@ +package refinedstorage.apiimpl.network.registry; + +import net.minecraftforge.event.world.WorldEvent; +import net.minecraftforge.fml.common.Mod; +import refinedstorage.api.RefinedStorageAPI; + +public class NetworkRegistryUnloader { + @Mod.EventHandler + public void onWorldUnload(WorldEvent.Unload e) { + System.out.println("Unloaded " + e.getWorld().provider.getDimension()); + RefinedStorageAPI.removeNetworkRegistry(e.getWorld()); + } +} diff --git a/src/main/java/refinedstorage/block/BlockController.java b/src/main/java/refinedstorage/block/BlockController.java index ec991271c..e76c79aca 100755 --- a/src/main/java/refinedstorage/block/BlockController.java +++ b/src/main/java/refinedstorage/block/BlockController.java @@ -106,7 +106,7 @@ public class BlockController extends BlockBase { @Override public void breakBlock(World world, BlockPos pos, IBlockState state) { if (!world.isRemote) { - ((TileController) world.getTileEntity(pos)).getNodeGraph().disconnectAll(); + ((TileController) world.getTileEntity(pos)).onDestroyed(); } super.breakBlock(world, pos, state); diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index c332dc8c2..781f2dbf1 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -9,7 +9,6 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; -import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.registry.GameRegistry; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.oredict.OreDictionary; @@ -18,6 +17,8 @@ import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageItems; import refinedstorage.api.RefinedStorageAPI; +import refinedstorage.apiimpl.network.registry.NetworkRegistryProvider; +import refinedstorage.apiimpl.network.registry.NetworkRegistryUnloader; import refinedstorage.apiimpl.solderer.*; import refinedstorage.apiimpl.storage.item.ItemStorageNBT; import refinedstorage.block.*; @@ -44,6 +45,10 @@ public class CommonProxy { RefinedStorageAPI.SOLDERER_REGISTRY = new SoldererRegistry(); + RefinedStorageAPI.NETWORK_REGISTRY_PROVIDER = new NetworkRegistryProvider(); + + MinecraftForge.EVENT_BUS.register(new NetworkRegistryUnloader()); + int id = 0; RefinedStorage.INSTANCE.network.registerMessage(MessageTileDataParameter.class, MessageTileDataParameter.class, id++, Side.CLIENT); @@ -65,7 +70,7 @@ public class CommonProxy { RefinedStorage.INSTANCE.network.registerMessage(MessageProcessingPatternEncoderClear.class, MessageProcessingPatternEncoderClear.class, id++, Side.SERVER); RefinedStorage.INSTANCE.network.registerMessage(MessageGridFilterUpdate.class, MessageGridFilterUpdate.class, id++, Side.SERVER); - NetworkRegistry.INSTANCE.registerGuiHandler(RefinedStorage.INSTANCE, new GuiHandler()); + net.minecraftforge.fml.common.network.NetworkRegistry.INSTANCE.registerGuiHandler(RefinedStorage.INSTANCE, new GuiHandler()); MinecraftForge.EVENT_BUS.register(new ContainerListener()); diff --git a/src/main/java/refinedstorage/tile/TileBase.java b/src/main/java/refinedstorage/tile/TileBase.java index dce0d386b..fd7d853c8 100755 --- a/src/main/java/refinedstorage/tile/TileBase.java +++ b/src/main/java/refinedstorage/tile/TileBase.java @@ -236,4 +236,16 @@ public abstract class TileBase extends TileEntity implements ITickable { return handler; } + + @Override + public boolean equals(Object o) { + return o instanceof TileBase && ((TileBase) o).getPos().equals(pos) && ((TileBase) o).getWorld().provider.getDimension() == worldObj.provider.getDimension(); + } + + @Override + public int hashCode() { + int result = pos.hashCode(); + result = 31 * result + worldObj.provider.getDimension(); + return result; + } } diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index d66a2ff0a..62e6021e2 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -76,7 +76,7 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I BlockPos front = pos.offset(getDirection()); if (worldObj.isAirBlock(front) && block.getBlock().canPlaceBlockAt(worldObj, front)) { - ItemStack took = network.extractItem(itemFilters.getStackInSlot(0), 1, compare); + ItemStack took = getNetwork().extractItem(itemFilters.getStackInSlot(0), 1, compare); if (took != null) { scheduler.resetSchedule(); @@ -88,7 +88,7 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I ItemStack craft = itemFilters.getStackInSlot(0); if (scheduler.canSchedule(compare, craft)) { - scheduler.schedule(network, compare, craft); + scheduler.schedule(getNetwork(), compare, craft); } } } @@ -101,7 +101,7 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I Block block = stack.getFluid().getBlock(); if (worldObj.isAirBlock(front) && block.canPlaceBlockAt(worldObj, front)) { - FluidStack took = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare); + FluidStack took = getNetwork().extractFluid(stack, Fluid.BUCKET_VOLUME, compare); if (took != null) { IBlockState state = block.getDefaultState(); diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index f056e7b19..cbb6a137c 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -18,12 +18,14 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; +import refinedstorage.api.RefinedStorageAPI; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingPatternContainer; import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.*; import refinedstorage.api.network.grid.IFluidGridHandler; import refinedstorage.api.network.grid.IItemGridHandler; +import refinedstorage.api.network.registry.INetworkRegistry; import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.fluid.IFluidStorage; import refinedstorage.api.storage.fluid.IGroupedFluidStorage; @@ -184,6 +186,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR private IControllerEnergyIC2 energyEU; private ControllerEnergyTesla energyTesla; + private boolean destroyed; + private int lastEnergyDisplay; private int lastEnergyComparator; @@ -234,6 +238,12 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void update() { if (!worldObj.isRemote) { + INetworkRegistry registry = RefinedStorageAPI.getNetworkRegistry(worldObj); + + if (!destroyed && registry.getNetwork(pos) == null) { + registry.addNetwork(this); + } + energyEU.update(); if (canRun()) { @@ -335,9 +345,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void invalidate() { - energyEU.invalidate(); - super.invalidate(); + + energyEU.invalidate(); } @Override @@ -362,6 +372,14 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR energyEU.onChunkUnload(); } + public void onDestroyed() { + nodeGraph.disconnectAll(); + + destroyed = true; + + RefinedStorageAPI.getNetworkRegistry(worldObj).removeNetwork(pos); + } + public IGroupedItemStorage getItemStorage() { return itemStorage; } diff --git a/src/main/java/refinedstorage/tile/TileCrafter.java b/src/main/java/refinedstorage/tile/TileCrafter.java index d216b472f..7f251fae8 100755 --- a/src/main/java/refinedstorage/tile/TileCrafter.java +++ b/src/main/java/refinedstorage/tile/TileCrafter.java @@ -21,8 +21,8 @@ public class TileCrafter extends TileNode implements ICraftingPatternContainer { protected void onContentsChanged(int slot) { super.onContentsChanged(slot); - if (network != null) { - network.rebuildPatterns(); + if (getNetwork() != null) { + getNetwork().rebuildPatterns(); } } }; diff --git a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java index d3e27de7c..87bf2420a 100755 --- a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java +++ b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java @@ -14,8 +14,8 @@ public class TileCraftingMonitor extends TileNode { public static final TileDataParameter> TASKS = new TileDataParameter<>(RefinedStorageSerializers.CLIENT_CRAFTING_TASK_SERIALIZER, new ArrayList<>(), new ITileDataProducer, TileCraftingMonitor>() { @Override public List getValue(TileCraftingMonitor tile) { - if (tile.connected) { - List tasks = tile.network.getCraftingTasks().stream().map(t -> new ClientCraftingTask( + if (tile.isConnected()) { + List tasks = tile.getNetwork().getCraftingTasks().stream().map(t -> new ClientCraftingTask( t.getInfo(), t.getPattern().getOutputs() )).collect(Collectors.toList()); diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index 5c99e96d0..c279d5a64 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -85,10 +85,10 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF for (ItemStack drop : drops) { // We check if the controller isn't null here because when a destructor faces a node and removes it // it will essentially remove this block itself from the network without knowing - if (network == null) { + if (getNetwork() == null) { InventoryHelper.spawnItemStack(worldObj, front.getX(), front.getY(), front.getZ(), drop); } else { - ItemStack remainder = network.insertItem(drop, drop.stackSize, false); + ItemStack remainder = getNetwork().insertItem(drop, drop.stackSize, false); if (remainder != null) { InventoryHelper.spawnItemStack(worldObj, front.getX(), front.getY(), front.getZ(), remainder); @@ -113,10 +113,10 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF if (handler != null) { FluidStack stack = handler.drain(Fluid.BUCKET_VOLUME, false); - if (stack != null && IFilterable.canTakeFluids(fluidFilters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) { + if (stack != null && IFilterable.canTakeFluids(fluidFilters, mode, compare, stack) && getNetwork().insertFluid(stack, stack.amount, true) == null) { FluidStack drained = handler.drain(Fluid.BUCKET_VOLUME, true); - network.insertFluid(drained, drained.amount, false); + getNetwork().insertFluid(drained, drained.amount, false); } } } diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index b7b903b5c..063d0647b 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -106,7 +106,7 @@ public class TileDetector extends TileNode implements IComparable, IType { ItemStack slot = itemFilters.getStackInSlot(0); if (slot != null) { - ItemStack stack = network.getItemStorage().get(slot, compare); + ItemStack stack = getNetwork().getItemStorage().get(slot, compare); powered = isPowered(stack == null ? null : stack.stackSize); } else { @@ -116,7 +116,7 @@ public class TileDetector extends TileNode implements IComparable, IType { FluidStack slot = fluidFilters.getFluids()[0]; if (slot != null) { - FluidStack stack = network.getFluidStorage().get(slot, compare); + FluidStack stack = getNetwork().getFluidStorage().get(slot, compare); powered = isPowered(stack == null ? null : stack.amount); } else { diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index 45d9c084a..c132a126b 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -114,9 +114,9 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl } } - if (network != null) { - network.getItemStorage().rebuild(); - network.getFluidStorage().rebuild(); + if (getNetwork() != null) { + getNetwork().getItemStorage().rebuild(); + getNetwork().getFluidStorage().rebuild(); } } } diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index 3e4079b6d..4743283a7 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -66,7 +66,7 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp ItemStack slot = itemFilters.getStackInSlot(i); if (slot != null) { - ItemStack took = network.extractItem(slot, size, compare); + ItemStack took = getNetwork().extractItem(slot, size, compare); if (took != null) { scheduler.resetSchedule(); @@ -74,11 +74,11 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp ItemStack remainder = ItemHandlerHelper.insertItem(handler, took, false); if (remainder != null) { - network.insertItem(remainder, remainder.stackSize, false); + getNetwork().insertItem(remainder, remainder.stackSize, false); } } else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { if (scheduler.canSchedule(compare, slot)) { - scheduler.schedule(network, compare, slot); + scheduler.schedule(getNetwork(), compare, slot); } } } @@ -90,13 +90,13 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp if (handler != null) { for (FluidStack stack : fluidFilters.getFluids()) { if (stack != null) { - FluidStack took = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare); + FluidStack took = getNetwork().extractFluid(stack, Fluid.BUCKET_VOLUME, compare); if (took != null) { int remainder = Fluid.BUCKET_VOLUME - handler.fill(took, true); if (remainder > 0) { - network.insertFluid(took, remainder, false); + getNetwork().insertFluid(took, remainder, false); } } } diff --git a/src/main/java/refinedstorage/tile/TileFluidInterface.java b/src/main/java/refinedstorage/tile/TileFluidInterface.java index dd3e13930..8607921af 100755 --- a/src/main/java/refinedstorage/tile/TileFluidInterface.java +++ b/src/main/java/refinedstorage/tile/TileFluidInterface.java @@ -103,7 +103,7 @@ public class TileFluidInterface extends TileNode implements IComparable { FluidStack drained = tankIn.drainInternal(Fluid.BUCKET_VOLUME, true); if (drained != null) { - FluidStack remainder = network.insertFluid(drained, drained.amount, false); + FluidStack remainder = getNetwork().insertFluid(drained, drained.amount, false); if (remainder != null) { tankIn.fillInternal(remainder, true); @@ -116,16 +116,16 @@ public class TileFluidInterface extends TileNode implements IComparable { FluidStack remainder = tankOut.drainInternal(Fluid.BUCKET_VOLUME, true); if (remainder != null) { - network.insertFluid(remainder, remainder.amount, false); + getNetwork().insertFluid(remainder, remainder.amount, false); } } else if (stack != null) { - FluidStack result = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare); + FluidStack result = getNetwork().extractFluid(stack, Fluid.BUCKET_VOLUME, compare); if (result != null) { int remainder = Fluid.BUCKET_VOLUME - tankOut.fillInternal(result, true); if (remainder > 0) { - network.insertFluid(stack, remainder, false); + getNetwork().insertFluid(stack, remainder, false); } } } diff --git a/src/main/java/refinedstorage/tile/TileFluidStorage.java b/src/main/java/refinedstorage/tile/TileFluidStorage.java index cedf6479b..55958c4da 100755 --- a/src/main/java/refinedstorage/tile/TileFluidStorage.java +++ b/src/main/java/refinedstorage/tile/TileFluidStorage.java @@ -93,8 +93,8 @@ public class TileFluidStorage extends TileNode implements IFluidStorageProvider, if (storage == null && storageTag != null) { storage = new FluidStorage(); - if (network != null) { - network.getFluidStorage().rebuild(); + if (getNetwork() != null) { + getNetwork().getFluidStorage().rebuild(); } } } diff --git a/src/main/java/refinedstorage/tile/TileImporter.java b/src/main/java/refinedstorage/tile/TileImporter.java index ccfb54f0d..81e4118a3 100755 --- a/src/main/java/refinedstorage/tile/TileImporter.java +++ b/src/main/java/refinedstorage/tile/TileImporter.java @@ -79,8 +79,8 @@ public class TileImporter extends TileMultipartNode implements IComparable, IFil ItemStack result = handler.extractItem(currentSlot, quantity, true); - if (result != null && network.insertItem(result, result.stackSize, true) == null) { - network.insertItem(result, result.stackSize, false); + if (result != null && getNetwork().insertItem(result, result.stackSize, true) == null) { + getNetwork().insertItem(result, result.stackSize, false); handler.extractItem(currentSlot, quantity, false); } else { @@ -94,10 +94,10 @@ public class TileImporter extends TileMultipartNode implements IComparable, IFil if (handler != null) { FluidStack stack = handler.drain(Fluid.BUCKET_VOLUME, false); - if (stack != null && IFilterable.canTakeFluids(fluidFilters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) { + if (stack != null && IFilterable.canTakeFluids(fluidFilters, mode, compare, stack) && getNetwork().insertFluid(stack, stack.amount, true) == null) { FluidStack drain = handler.drain(Fluid.BUCKET_VOLUME, true); - network.insertFluid(drain, drain.amount, false); + getNetwork().insertFluid(drain, drain.amount, false); } } } diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index 438ab6d75..62b0acbf3 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -50,7 +50,7 @@ public class TileInterface extends TileNode implements IComparable { } else if (ticks % upgrades.getSpeed() == 0) { int size = Math.min(slot.stackSize, upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1); - ItemStack remainder = network.insertItem(slot, size, false); + ItemStack remainder = getNetwork().insertItem(slot, size, false); if (remainder == null) { importItems.extractItem(currentSlot, size, false); @@ -65,13 +65,13 @@ public class TileInterface extends TileNode implements IComparable { if (wanted == null) { if (got != null) { - exportItems.setStackInSlot(i, network.insertItem(got, got.stackSize, false)); + exportItems.setStackInSlot(i, getNetwork().insertItem(got, got.stackSize, false)); } } else { int delta = got == null ? wanted.stackSize : (wanted.stackSize - got.stackSize); if (delta > 0) { - ItemStack result = network.extractItem(wanted, delta, compare); + ItemStack result = getNetwork().extractItem(wanted, delta, compare); if (result != null) { if (got == null) { @@ -81,7 +81,7 @@ public class TileInterface extends TileNode implements IComparable { } } } else if (delta < 0) { - ItemStack remainder = network.insertItem(got, Math.abs(delta), false); + ItemStack remainder = getNetwork().insertItem(got, Math.abs(delta), false); if (remainder == null) { exportItems.extractItem(i, Math.abs(delta), false); diff --git a/src/main/java/refinedstorage/tile/TileMultipartNode.java b/src/main/java/refinedstorage/tile/TileMultipartNode.java index 5232494db..9a26c8183 100755 --- a/src/main/java/refinedstorage/tile/TileMultipartNode.java +++ b/src/main/java/refinedstorage/tile/TileMultipartNode.java @@ -70,8 +70,8 @@ public abstract class TileMultipartNode extends TileNode implements IMicroblockC public void onMicroblocksChanged() { markDirty(); - if (network != null) { - NetworkUtils.rebuildGraph(network); + if (getNetwork() != null) { + NetworkUtils.rebuildGraph(getNetwork()); } else if (worldObj != null) { RefinedStorageBlocks.CABLE.attemptConnect(worldObj, pos); } diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 607d45196..a074c403d 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -44,8 +44,8 @@ public class TileNetworkTransmitter extends TileNode { protected void onContentsChanged(int slot) { super.onContentsChanged(slot); - if (network != null) { - NetworkUtils.rebuildGraph(network); + if (getNetwork() != null) { + NetworkUtils.rebuildGraph(getNetwork()); } } }; @@ -64,8 +64,8 @@ public class TileNetworkTransmitter extends TileNode { receiverDimension = ItemNetworkCard.getDimension(card); } - if (network != null) { - NetworkUtils.rebuildGraph(network); + if (getNetwork() != null) { + NetworkUtils.rebuildGraph(getNetwork()); } } }; diff --git a/src/main/java/refinedstorage/tile/TileNode.java b/src/main/java/refinedstorage/tile/TileNode.java index 3777a7945..29e6620ff 100755 --- a/src/main/java/refinedstorage/tile/TileNode.java +++ b/src/main/java/refinedstorage/tile/TileNode.java @@ -4,6 +4,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import refinedstorage.api.RefinedStorageAPI; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkNode; import refinedstorage.api.network.NetworkUtils; @@ -19,10 +20,9 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto private RedstoneMode redstoneMode = RedstoneMode.IGNORE; private boolean active; private boolean update; + private boolean connected; protected boolean rebuildOnUpdateChange; - protected boolean connected; - protected INetworkMaster network; public TileNode() { dataManager.addWatchedParameter(REDSTONE_MODE); @@ -40,13 +40,13 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto @Override public void update() { if (!worldObj.isRemote) { - if (update != canUpdate() && network != null) { + if (update != canUpdate() && getNetwork() != null) { update = canUpdate(); - onConnectionChange(network, update); + onConnectionChange(getNetwork(), update); if (rebuildOnUpdateChange) { - NetworkUtils.rebuildGraph(network); + NetworkUtils.rebuildGraph(getNetwork()); } } @@ -66,18 +66,12 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto @Override public void onConnected(INetworkMaster network) { - this.connected = true; - this.network = network; - onConnectionChange(network, true); } @Override public void onDisconnected(INetworkMaster network) { onConnectionChange(network, false); - - this.connected = false; - this.network = null; } @Override @@ -92,7 +86,7 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto @Override public INetworkMaster getNetwork() { - return network; + return !worldObj.isRemote ? RefinedStorageAPI.getNetwork(this) : null; } @Override @@ -107,11 +101,7 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto @Override public boolean isConnected() { - return connected; - } - - public void setConnected(boolean connected) { - this.connected = connected; + return worldObj.isRemote ? connected : (getNetwork() != null); } @Override @@ -165,16 +155,4 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto public boolean hasConnectivityState() { return false; } - - @Override - public boolean equals(Object o) { - return o instanceof TileNode && ((TileNode) o).getPosition().equals(pos); - } - - @Override - public int hashCode() { - int result = pos.hashCode(); - result = 31 * result + worldObj.provider.getDimension(); - return result; - } } diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index 5e07fa8bd..6cccf3031 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -93,8 +93,8 @@ public class TileStorage extends TileNode implements IItemStorageProvider, IStor if (storage == null && storageTag != null) { storage = new ItemStorage(); - if (network != null) { - network.getItemStorage().rebuild(); + if (getNetwork() != null) { + getNetwork().getItemStorage().rebuild(); } } } diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index 84a13a4bd..2ce06d91a 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -123,7 +123,7 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora @Override public void update() { - if (!worldObj.isRemote && network != null) { + if (!worldObj.isRemote && getNetwork() != null) { boolean itemChangeDetected = false, fluidChangeDetected = false; for (ItemStorageExternal storage : itemStorages) { @@ -139,17 +139,17 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora } if (itemChangeDetected) { - network.getItemStorage().rebuild(); + getNetwork().getItemStorage().rebuild(); } if (fluidChangeDetected) { - network.getFluidStorage().rebuild(); + getNetwork().getFluidStorage().rebuild(); } if (getFacingTile() instanceof IDrawerGroup && lastDrawerCount != ((IDrawerGroup) getFacingTile()).getDrawerCount()) { lastDrawerCount = ((IDrawerGroup) getFacingTile()).getDrawerCount(); - updateStorage(network); + updateStorage(getNetwork()); } } diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 5f9affce8..cc9e42955 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -188,27 +188,27 @@ public class TileGrid extends TileNode implements IGrid { @Override public BlockPos getNetworkPosition() { - return network != null ? network.getPosition() : null; + return getNetwork() != null ? getNetwork().getPosition() : null; } public void onGridOpened(EntityPlayer player) { if (isConnected()) { if (getType() == EnumGridType.FLUID) { - network.sendFluidStorageToClient((EntityPlayerMP) player); + getNetwork().sendFluidStorageToClient((EntityPlayerMP) player); } else { - network.sendItemStorageToClient((EntityPlayerMP) player); + getNetwork().sendItemStorageToClient((EntityPlayerMP) player); } } } @Override public IItemGridHandler getItemHandler() { - return isConnected() ? network.getItemGridHandler() : null; + return getNetwork() != null ? getNetwork().getItemGridHandler() : null; } @Override public IFluidGridHandler getFluidHandler() { - return isConnected() ? network.getFluidGridHandler() : null; + return getNetwork() != null ? getNetwork().getFluidGridHandler() : null; } @Override @@ -263,7 +263,7 @@ public class TileGrid extends TileNode implements IGrid { } else { if (slot != null) { if (slot.stackSize == 1 && isConnected()) { - matrix.setInventorySlotContents(i, NetworkUtils.extractItem(network, slot, 1)); + matrix.setInventorySlotContents(i, NetworkUtils.extractItem(getNetwork(), slot, 1)); } else { matrix.decrStackSize(i, 1); } @@ -340,10 +340,10 @@ public class TileGrid extends TileNode implements IGrid { if (slot != null) { if (getType() == EnumGridType.CRAFTING) { - if (network.insertItem(slot, slot.stackSize, true) != null) { + if (getNetwork().insertItem(slot, slot.stackSize, true) != null) { return; } else { - network.insertItem(slot, slot.stackSize, false); + getNetwork().insertItem(slot, slot.stackSize, false); } } @@ -357,7 +357,7 @@ public class TileGrid extends TileNode implements IGrid { if (getType() == EnumGridType.CRAFTING) { for (ItemStack possibility : possibilities) { - ItemStack took = NetworkUtils.extractItem(network, possibility, 1); + ItemStack took = NetworkUtils.extractItem(getNetwork(), possibility, 1); if (took != null) { matrix.setInventorySlotContents(i, took);