From 0dddbbf32824fda9f4ddb2ffe28c1f3c1cc2bccb Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 25 Jun 2016 02:53:32 +0200 Subject: [PATCH] Bugfixes --- CHANGELOG.md | 6 +++ .../apiimpl/network/GridHandler.java | 6 +++ .../refinedstorage/block/BlockController.java | 4 +- .../java/refinedstorage/tile/TileSlave.java | 3 +- .../tile/controller/TileController.java | 48 +++++++++++-------- .../tile/externalstorage/DrawerStorage.java | 2 +- 6 files changed, 44 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 212d8e935..e92ea6dfc 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Refined Storage Changelog +### 0.7.19 +**Bugfixes** +- Fixed controller being buggy with reconnecting +- Fixed controller texture updating too slow when energy changes +- Fixed not being able to take item from grid at times + ### 0.7.18 **Bugfixes** - Fixed cables sending updates when not needed diff --git a/src/main/java/refinedstorage/apiimpl/network/GridHandler.java b/src/main/java/refinedstorage/apiimpl/network/GridHandler.java index 290abe58f..f2e222732 100755 --- a/src/main/java/refinedstorage/apiimpl/network/GridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/GridHandler.java @@ -9,6 +9,7 @@ import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.GridPullFlags; import refinedstorage.api.network.IGridHandler; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.storage.CompareFlags; import refinedstorage.item.ItemWirelessGrid; public class GridHandler implements IGridHandler { @@ -44,6 +45,11 @@ public class GridHandler implements IGridHandler { ItemStack took = network.take(stack, size); + // Fallback for corner cases where NBT changes + if (took == null) { + took = network.take(stack, size, CompareFlags.COMPARE_DAMAGE); + } + if (took != null) { if (GridPullFlags.isPullingWithShift(flags)) { if (!player.inventory.addItemStackToInventory(took.copy())) { diff --git a/src/main/java/refinedstorage/block/BlockController.java b/src/main/java/refinedstorage/block/BlockController.java index 8ae09f876..04e1ffa8b 100755 --- a/src/main/java/refinedstorage/block/BlockController.java +++ b/src/main/java/refinedstorage/block/BlockController.java @@ -65,7 +65,7 @@ public class BlockController extends BlockBase { TileController controller = (TileController) world.getTileEntity(pos); return super.getActualState(state, world, pos) - .withProperty(ENERGY, controller.getEnergyScaled(8)); + .withProperty(ENERGY, controller.getEnergyScaledForDisplay()); } @Override @@ -132,7 +132,7 @@ public class BlockController extends BlockBase { @Override public int getComparatorInputOverride(IBlockState state, World world, BlockPos pos) { - return ((TileController) world.getTileEntity(pos)).getEnergyScaled(15); + return ((TileController) world.getTileEntity(pos)).getEnergyScaledForComparator(); } @Override diff --git a/src/main/java/refinedstorage/tile/TileSlave.java b/src/main/java/refinedstorage/tile/TileSlave.java index 37ae190c6..66d248f57 100755 --- a/src/main/java/refinedstorage/tile/TileSlave.java +++ b/src/main/java/refinedstorage/tile/TileSlave.java @@ -66,9 +66,8 @@ public abstract class TileSlave extends TileBase implements INetworkSlave, ISync public void connect(World world, INetworkMaster network) { if (network.canRun()) { this.network = network; - this.connected = true; - this.network.addSlave(this); + this.connected = true; world.notifyNeighborsOfStateChange(pos, getBlockType()); diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index bc30ddbcb..c0d2d4339 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -76,8 +76,10 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR private EnergyStorage energy = new EnergyStorage(ENERGY_CAPACITY); private int energyUsage; + private int lastEnergyDisplay; + private int lastEnergyComparator; + private boolean couldRun; - private long lastEnergyUpdate; private EnumControllerType type; @@ -130,8 +132,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR slaves.removeAll(slavesToRemove); slavesToRemove.clear(); - int lastEnergy = energy.getEnergyStored(); - if (canRun()) { if (ticks % 20 == 0 || forceUpdate) { updateSlaves(); @@ -165,21 +165,13 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR craftingTasks.pop(); } } - } else if (!slaves.isEmpty()) { + } else { disconnectSlaves(); - - updateSlaves(); - } - - if (couldRun != canRun()) { - couldRun = canRun(); - - worldObj.notifyNeighborsOfStateChange(pos, RefinedStorageBlocks.CONTROLLER); } wirelessGridHandler.update(); - if (getType() == EnumControllerType.NORMAL && energyUsage > 0) { + if (canRun() && getType() == EnumControllerType.NORMAL) { if (energy.getEnergyStored() - energyUsage >= 0) { energy.extractEnergy(energyUsage, false); } else { @@ -189,14 +181,22 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR energy.setEnergyStored(energy.getMaxEnergyStored()); } - if (energy.getEnergyStored() != lastEnergy) { + if (couldRun != canRun()) { + couldRun = canRun(); + + worldObj.notifyNeighborsOfStateChange(pos, RefinedStorageBlocks.CONTROLLER); + } + + if (getEnergyScaledForDisplay() != lastEnergyDisplay) { + lastEnergyDisplay = getEnergyScaledForDisplay(); + + RefinedStorageUtils.updateBlock(worldObj, pos); + } + + if (getEnergyScaledForComparator() != lastEnergyComparator) { + lastEnergyComparator = getEnergyScaledForComparator(); + worldObj.updateComparatorOutputLevel(pos, RefinedStorageBlocks.CONTROLLER); - - if (System.currentTimeMillis() - lastEnergyUpdate > 1500) { - lastEnergyUpdate = System.currentTimeMillis(); - - RefinedStorageUtils.updateBlock(worldObj, pos); - } } } @@ -645,6 +645,14 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR return (int) ((float) energy.getEnergyStored() / (float) ENERGY_CAPACITY * (float) i); } + public int getEnergyScaledForDisplay() { + return getEnergyScaled(8); + } + + public int getEnergyScaledForComparator() { + return getEnergyScaled(15); + } + @Override public int getMaxEnergyStored(EnumFacing from) { return energy.getMaxEnergyStored(); diff --git a/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java b/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java index 317057321..0d0a36783 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java @@ -25,7 +25,7 @@ public class DrawerStorage extends ExternalStorage { @Override public void addItems(List items) { - if (!drawer.isEmpty()) { + if (!drawer.isEmpty() && drawer.getStoredItemCount() > 0) { items.add(drawer.getStoredItemCopy()); } }