From fc5e89b5068da3ca1b29dafa1e9a628922e689c4 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 30 Jun 2016 23:12:23 +0200 Subject: [PATCH] Only update ext storage on neighbour update --- .../block/BlockExternalStorage.java | 10 +++ .../externalstorage/TileExternalStorage.java | 77 +++++++++---------- 2 files changed, 47 insertions(+), 40 deletions(-) diff --git a/src/main/java/refinedstorage/block/BlockExternalStorage.java b/src/main/java/refinedstorage/block/BlockExternalStorage.java index 94b2692dd..de31f54ce 100755 --- a/src/main/java/refinedstorage/block/BlockExternalStorage.java +++ b/src/main/java/refinedstorage/block/BlockExternalStorage.java @@ -1,5 +1,6 @@ package refinedstorage.block; +import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -31,6 +32,15 @@ public class BlockExternalStorage extends BlockSlave { return true; } + @Override + public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block) { + super.neighborChanged(state, world, pos, block); + + if (!world.isRemote) { + ((TileExternalStorage) world.getTileEntity(pos)).refreshStorage(); + } + } + @Override public boolean hasOppositeFacingOnSneakPlace() { return true; diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index f3e67be26..179588241 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -22,6 +22,7 @@ import refinedstorage.tile.config.IModeConfig; import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.ModeConstants; +import java.util.ArrayList; import java.util.List; public class TileExternalStorage extends TileSlave implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig { @@ -37,11 +38,12 @@ public class TileExternalStorage extends TileSlave implements IStorageProvider, private int stored; private int capacity; - private int energyUsage; + + private List storages = new ArrayList(); @Override public int getEnergyUsage() { - return energyUsage; + return storages.size(); } @Override @@ -142,63 +144,38 @@ public class TileExternalStorage extends TileSlave implements IStorageProvider, markDirty(); } - @Override - public void addStorages(List storages) { + // Called when the neighbor block changes + public void refreshStorage() { + storages.clear(); + TileEntity facing = getFacingTile(); if (facing instanceof IDrawerGroup) { IDrawerGroup group = (IDrawerGroup) facing; - - energyUsage = group.getDrawerCount(); - stored = 0; - capacity = 0; - for (int i = 0; i < group.getDrawerCount(); ++i) { if (group.isDrawerEnabled(i)) { - DrawerStorage storage = new DrawerStorage(this, group.getDrawer(i)); - - storages.add(storage); - - stored += storage.getStored(); - capacity += storage.getCapacity(); + storages.add(new DrawerStorage(this, group.getDrawer(i))); } } } else if (facing instanceof IDrawer) { - DrawerStorage storage = new DrawerStorage(this, (IDrawer) facing); - - energyUsage = 1; - stored = storage.getStored(); - capacity = storage.getCapacity(); - - storages.add(storage); + storages.add(new DrawerStorage(this, (IDrawer) facing)); } else if (facing instanceof IDeepStorageUnit) { - DeepStorageUnitStorage storage = new DeepStorageUnitStorage(this, (IDeepStorageUnit) facing); - - energyUsage = 1; - stored = storage.getStored(); - capacity = storage.getCapacity(); - - storages.add(storage); + storages.add(new DeepStorageUnitStorage(this, (IDeepStorageUnit) facing)); } else { IItemHandler handler = RefinedStorageUtils.getItemHandler(facing, getDirection().getOpposite()); if (handler != null) { - ItemHandlerStorage storage = new ItemHandlerStorage(this, handler); - - energyUsage = 1; - stored = storage.getStored(); - capacity = storage.getCapacity(); - - storages.add(storage); - } else { - energyUsage = 0; - stored = 0; - capacity = 0; + storages.add(new ItemHandlerStorage(this, handler)); } } } + @Override + public void addStorages(List storages) { + storages.addAll(this.storages); + } + @Override public String getGuiTitle() { return "gui.refinedstorage:external_storage"; @@ -221,11 +198,31 @@ public class TileExternalStorage extends TileSlave implements IStorageProvider, @Override public int getStored() { + if (!worldObj.isRemote) { + int stored = 0; + + for (ExternalStorage storage : storages) { + stored += storage.getStored(); + } + + return stored; + } + return stored; } @Override public int getCapacity() { + if (!worldObj.isRemote) { + int capacity = 0; + + for (ExternalStorage storage : storages) { + capacity += storage.getCapacity(); + } + + return capacity; + } + return capacity; }