Only update ext storage on neighbour update

This commit is contained in:
Raoul Van den Berge
2016-06-30 23:12:23 +02:00
parent 78d09ee881
commit fc5e89b506
2 changed files with 47 additions and 40 deletions

View File

@@ -1,5 +1,6 @@
package refinedstorage.block; package refinedstorage.block;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@@ -31,6 +32,15 @@ public class BlockExternalStorage extends BlockSlave {
return true; 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 @Override
public boolean hasOppositeFacingOnSneakPlace() { public boolean hasOppositeFacingOnSneakPlace() {
return true; return true;

View File

@@ -22,6 +22,7 @@ import refinedstorage.tile.config.IModeConfig;
import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.IRedstoneModeConfig;
import refinedstorage.tile.config.ModeConstants; import refinedstorage.tile.config.ModeConstants;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class TileExternalStorage extends TileSlave implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig { 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 stored;
private int capacity; private int capacity;
private int energyUsage;
private List<ExternalStorage> storages = new ArrayList<ExternalStorage>();
@Override @Override
public int getEnergyUsage() { public int getEnergyUsage() {
return energyUsage; return storages.size();
} }
@Override @Override
@@ -142,63 +144,38 @@ public class TileExternalStorage extends TileSlave implements IStorageProvider,
markDirty(); markDirty();
} }
@Override // Called when the neighbor block changes
public void addStorages(List<IStorage> storages) { public void refreshStorage() {
storages.clear();
TileEntity facing = getFacingTile(); TileEntity facing = getFacingTile();
if (facing instanceof IDrawerGroup) { if (facing instanceof IDrawerGroup) {
IDrawerGroup group = (IDrawerGroup) facing; IDrawerGroup group = (IDrawerGroup) facing;
energyUsage = group.getDrawerCount();
stored = 0;
capacity = 0;
for (int i = 0; i < group.getDrawerCount(); ++i) { for (int i = 0; i < group.getDrawerCount(); ++i) {
if (group.isDrawerEnabled(i)) { if (group.isDrawerEnabled(i)) {
DrawerStorage storage = new DrawerStorage(this, group.getDrawer(i)); storages.add(new DrawerStorage(this, group.getDrawer(i)));
storages.add(storage);
stored += storage.getStored();
capacity += storage.getCapacity();
} }
} }
} else if (facing instanceof IDrawer) { } else if (facing instanceof IDrawer) {
DrawerStorage storage = new DrawerStorage(this, (IDrawer) facing); storages.add(new DrawerStorage(this, (IDrawer) facing));
energyUsage = 1;
stored = storage.getStored();
capacity = storage.getCapacity();
storages.add(storage);
} else if (facing instanceof IDeepStorageUnit) { } else if (facing instanceof IDeepStorageUnit) {
DeepStorageUnitStorage storage = new DeepStorageUnitStorage(this, (IDeepStorageUnit) facing); storages.add(new DeepStorageUnitStorage(this, (IDeepStorageUnit) facing));
energyUsage = 1;
stored = storage.getStored();
capacity = storage.getCapacity();
storages.add(storage);
} else { } else {
IItemHandler handler = RefinedStorageUtils.getItemHandler(facing, getDirection().getOpposite()); IItemHandler handler = RefinedStorageUtils.getItemHandler(facing, getDirection().getOpposite());
if (handler != null) { if (handler != null) {
ItemHandlerStorage storage = new ItemHandlerStorage(this, handler); storages.add(new ItemHandlerStorage(this, handler));
energyUsage = 1;
stored = storage.getStored();
capacity = storage.getCapacity();
storages.add(storage);
} else {
energyUsage = 0;
stored = 0;
capacity = 0;
} }
} }
} }
@Override
public void addStorages(List<IStorage> storages) {
storages.addAll(this.storages);
}
@Override @Override
public String getGuiTitle() { public String getGuiTitle() {
return "gui.refinedstorage:external_storage"; return "gui.refinedstorage:external_storage";
@@ -221,11 +198,31 @@ public class TileExternalStorage extends TileSlave implements IStorageProvider,
@Override @Override
public int getStored() { public int getStored() {
if (!worldObj.isRemote) {
int stored = 0;
for (ExternalStorage storage : storages) {
stored += storage.getStored();
}
return stored;
}
return stored; return stored;
} }
@Override @Override
public int getCapacity() { public int getCapacity() {
if (!worldObj.isRemote) {
int capacity = 0;
for (ExternalStorage storage : storages) {
capacity += storage.getCapacity();
}
return capacity;
}
return capacity; return capacity;
} }