From 7f55b28f1d9ccf543fa2ec3f9d24e8569802d853 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 14 May 2016 13:49:17 +0200 Subject: [PATCH] Very unstable improved machine searching part6 --- .../refinedstorage/tile/TileController.java | 144 +++++++++--------- .../java/refinedstorage/tile/TileMachine.java | 16 +- 2 files changed, 87 insertions(+), 73 deletions(-) diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 34249832a..79b31b6d5 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -98,40 +98,81 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr int lastEnergy = energy.getEnergyStored(); int newWirelessGridRange = 0; - int newEnergyUsage = 10; + int newEnergyUsage = 0; List newStorages = new ArrayList(); List newPatterns = new ArrayList(); - for (TileMachine machine : machines) { - machine.updateMachine(); + if (canRun()) { + newEnergyUsage = 10; - if (machine instanceof TileWirelessTransmitter) { - newWirelessGridRange += ((TileWirelessTransmitter) machine).getRange(); - } + for (TileMachine machine : machines) { + machine.updateMachine(); - if (machine instanceof IStorageProvider) { - ((IStorageProvider) machine).provide(newStorages); - } + if (machine instanceof TileWirelessTransmitter) { + newWirelessGridRange += ((TileWirelessTransmitter) machine).getRange(); + } - if (machine instanceof TileCrafter) { - TileCrafter crafter = (TileCrafter) machine; + if (machine instanceof IStorageProvider) { + ((IStorageProvider) machine).provide(newStorages); + } - for (int i = 0; i < TileCrafter.PATTERN_SLOTS; ++i) { - if (crafter.getStackInSlot(i) != null) { - ItemStack pattern = crafter.getStackInSlot(i); + if (machine instanceof TileCrafter) { + TileCrafter crafter = (TileCrafter) machine; - newPatterns.add(new CraftingPattern( - crafter.getPos().getX(), - crafter.getPos().getY(), - crafter.getPos().getZ(), - ItemPattern.isProcessing(pattern), - ItemPattern.getInputs(pattern), - ItemPattern.getOutputs(pattern))); + for (int i = 0; i < TileCrafter.PATTERN_SLOTS; ++i) { + if (crafter.getStackInSlot(i) != null) { + ItemStack pattern = crafter.getStackInSlot(i); + + newPatterns.add(new CraftingPattern( + crafter.getPos().getX(), + crafter.getPos().getY(), + crafter.getPos().getZ(), + ItemPattern.isProcessing(pattern), + ItemPattern.getInputs(pattern), + ItemPattern.getOutputs(pattern))); + } } } + + newEnergyUsage += machine.getEnergyUsage(); } - newEnergyUsage += machine.getEnergyUsage(); + Collections.sort(storages, new Comparator() { + @Override + public int compare(IStorage s1, IStorage s2) { + if (s1.getPriority() == s2.getPriority()) { + return 0; + } + + return (s1.getPriority() > s2.getPriority()) ? -1 : 1; + } + }); + + syncItems(); + + for (ICraftingTask taskToCancel : craftingTasksToCancel) { + taskToCancel.onCancelled(this); + } + + craftingTasks.removeAll(craftingTasksToCancel); + craftingTasksToCancel.clear(); + + craftingTasks.addAll(craftingTasksToAdd); + craftingTasksToAdd.clear(); + + Iterator craftingTaskIterator = craftingTasks.iterator(); + + while (craftingTaskIterator.hasNext()) { + ICraftingTask task = craftingTaskIterator.next(); + + if (ticks % task.getPattern().getCrafter(worldObj).getSpeed() == 0 && task.update(this)) { + task.onDone(this); + + craftingTaskIterator.remove(); + } + } + } else { + disconnectAll(); } wirelessGridRange = newWirelessGridRange; @@ -139,52 +180,6 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr storages = newStorages; patterns = newPatterns; - Collections.sort(storages, new Comparator() { - @Override - public int compare(IStorage s1, IStorage s2) { - if (s1.getPriority() == s2.getPriority()) { - return 0; - } - - return (s1.getPriority() > s2.getPriority()) ? -1 : 1; - } - }); - - syncItems(); - - for (ICraftingTask taskToCancel : craftingTasksToCancel) { - taskToCancel.onCancelled(this); - } - - craftingTasks.removeAll(craftingTasksToCancel); - craftingTasksToCancel.clear(); - - craftingTasks.addAll(craftingTasksToAdd); - craftingTasksToAdd.clear(); - - Iterator craftingTaskIterator = craftingTasks.iterator(); - - while (craftingTaskIterator.hasNext()) { - ICraftingTask task = craftingTaskIterator.next(); - - if (ticks % task.getPattern().getCrafter(worldObj).getSpeed() == 0 && task.update(this)) { - task.onDone(this); - - craftingTaskIterator.remove(); - } - } - - switch (getType()) { - case NORMAL: - if (canRun()) { - energy.extractEnergy(energyUsage, false); - } - break; - case CREATIVE: - energy.setEnergyStored(energy.getMaxEnergyStored()); - break; - } - wirelessGridConsumers.removeAll(wirelessGridConsumersToRemove); wirelessGridConsumersToRemove.clear(); @@ -202,6 +197,17 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr } } + switch (getType()) { + case NORMAL: + if (canRun()) { + energy.extractEnergy(energyUsage, false); + } + break; + case CREATIVE: + energy.setEnergyStored(energy.getMaxEnergyStored()); + break; + } + if (lastEnergy != energy.getEnergyStored()) { worldObj.updateComparatorOutputLevel(pos, RefinedStorageBlocks.CONTROLLER); @@ -594,7 +600,7 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr @Override public void sendContainerData(ByteBuf buf) { - buf.writeInt(canRun() ? energyUsage : 0); + buf.writeInt(energyUsage); buf.writeInt(redstoneMode.id); diff --git a/src/main/java/refinedstorage/tile/TileMachine.java b/src/main/java/refinedstorage/tile/TileMachine.java index 17982c425..6739261f4 100755 --- a/src/main/java/refinedstorage/tile/TileMachine.java +++ b/src/main/java/refinedstorage/tile/TileMachine.java @@ -31,7 +31,7 @@ public abstract class TileMachine extends TileBase implements ISynchronizedConta TileController newController = ControllerSearcher.search(worldObj, pos, visited); if (controller == null) { - if (newController != null) { + if (newController != null && redstoneMode.isEnabled(worldObj, pos)) { onConnected(newController); } } else { @@ -43,10 +43,16 @@ public abstract class TileMachine extends TileBase implements ISynchronizedConta @Override public void update() { - if (!worldObj.isRemote && ticks == 0) { - block = worldObj.getBlockState(pos).getBlock(); + if (!worldObj.isRemote) { + if (ticks == 0) { + block = worldObj.getBlockState(pos).getBlock(); - searchController(); + searchController(); + } + + if (connected && !redstoneMode.isEnabled(worldObj, pos)) { + onDisconnected(); + } } super.update(); @@ -72,6 +78,8 @@ public abstract class TileMachine extends TileBase implements ISynchronizedConta if (worldObj.getBlockState(pos).getBlock() == block) { worldObj.setBlockState(pos, worldObj.getBlockState(pos).withProperty(BlockMachine.CONNECTED, false)); + + RefinedStorageUtils.sendToAllAround(worldObj, pos, new MessageMachineConnectedUpdate(this)); } // I have no idea why this is needed