This commit is contained in:
Raoul Van den Berge
2016-05-14 17:20:03 +02:00
parent 440b4cc0bc
commit 38f1209f11
8 changed files with 83 additions and 75 deletions

View File

@@ -12,6 +12,8 @@ import refinedstorage.RefinedStorageUtils;
import refinedstorage.tile.TileController; import refinedstorage.tile.TileController;
public class MessageControllerEnergyUpdate implements IMessage, IMessageHandler<MessageControllerEnergyUpdate, IMessage> { public class MessageControllerEnergyUpdate implements IMessage, IMessageHandler<MessageControllerEnergyUpdate, IMessage> {
public static long LAST_RE_RENDER;
private int x; private int x;
private int y; private int y;
private int z; private int z;
@@ -52,9 +54,15 @@ public class MessageControllerEnergyUpdate implements IMessage, IMessageHandler<
TileEntity tile = world.getTileEntity(pos); TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileController) { if (tile instanceof TileController) {
int lastEnergy = ((TileController) tile).getEnergyStored(null);
((TileController) tile).setEnergyStored(message.energy); ((TileController) tile).setEnergyStored(message.energy);
RefinedStorageUtils.reRenderBlock(world, pos); if (lastEnergy != message.energy && System.currentTimeMillis() - LAST_RE_RENDER > 3000) {
RefinedStorageUtils.reRenderBlock(world, pos);
LAST_RE_RENDER = System.currentTimeMillis();
}
} }
return null; return null;

View File

@@ -52,9 +52,13 @@ public class MessageDetectorPoweredUpdate implements IMessage, IMessageHandler<M
TileEntity tile = world.getTileEntity(pos); TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileDetector) { if (tile instanceof TileDetector) {
boolean wasPowered = ((TileDetector) tile).isPowered();
((TileDetector) tile).setPowered(message.powered); ((TileDetector) tile).setPowered(message.powered);
RefinedStorageUtils.reRenderBlock(world, pos); if (wasPowered != message.powered) {
RefinedStorageUtils.reRenderBlock(world, pos);
}
} }
return null; return null;

View File

@@ -52,9 +52,13 @@ public class MessageMachineConnectedUpdate implements IMessage, IMessageHandler<
TileEntity tile = world.getTileEntity(pos); TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileMachine) { if (tile instanceof TileMachine) {
boolean wasConnected = ((TileMachine) tile).isConnected();
((TileMachine) tile).setConnected(message.connected); ((TileMachine) tile).setConnected(message.connected);
RefinedStorageUtils.reRenderBlock(world, pos); if (wasConnected != message.connected) {
RefinedStorageUtils.reRenderBlock(world, pos);
}
} }
return null; return null;

View File

@@ -52,9 +52,13 @@ public class MessageSoldererWorkingUpdate implements IMessage, IMessageHandler<M
TileEntity tile = world.getTileEntity(pos); TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileSolderer) { if (tile instanceof TileSolderer) {
boolean wasWorking = ((TileSolderer) tile).isWorking();
((TileSolderer) tile).setWorking(message.working); ((TileSolderer) tile).setWorking(message.working);
RefinedStorageUtils.reRenderBlock(world, pos); if (wasWorking != message.working) {
RefinedStorageUtils.reRenderBlock(world, pos);
}
} }
return null; return null;

View File

@@ -74,8 +74,6 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
private int wirelessGridRange; private int wirelessGridRange;
private long lastEnergyUpdate;
public void addMachine(TileMachine machine) { public void addMachine(TileMachine machine) {
machinesToAdd.add(machine); machinesToAdd.add(machine);
} }
@@ -102,78 +100,78 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
List<IStorage> newStorages = new ArrayList<IStorage>(); List<IStorage> newStorages = new ArrayList<IStorage>();
List<CraftingPattern> newPatterns = new ArrayList<CraftingPattern>(); List<CraftingPattern> newPatterns = new ArrayList<CraftingPattern>();
//if (canRun()) { if (canRun()) {
newEnergyUsage = 10; newEnergyUsage = 10;
for (TileMachine machine : machines) { for (TileMachine machine : machines) {
machine.updateMachine(); machine.updateMachine();
if (machine instanceof TileWirelessTransmitter) { if (machine instanceof TileWirelessTransmitter) {
newWirelessGridRange += ((TileWirelessTransmitter) machine).getRange(); newWirelessGridRange += ((TileWirelessTransmitter) machine).getRange();
} }
if (machine instanceof IStorageProvider) { if (machine instanceof IStorageProvider) {
((IStorageProvider) machine).provide(newStorages); ((IStorageProvider) machine).provide(newStorages);
} }
if (machine instanceof TileCrafter) { if (machine instanceof TileCrafter) {
TileCrafter crafter = (TileCrafter) machine; TileCrafter crafter = (TileCrafter) machine;
for (int i = 0; i < TileCrafter.PATTERN_SLOTS; ++i) { for (int i = 0; i < TileCrafter.PATTERN_SLOTS; ++i) {
if (crafter.getStackInSlot(i) != null) { if (crafter.getStackInSlot(i) != null) {
ItemStack pattern = crafter.getStackInSlot(i); ItemStack pattern = crafter.getStackInSlot(i);
newPatterns.add(new CraftingPattern( newPatterns.add(new CraftingPattern(
crafter.getPos().getX(), crafter.getPos().getX(),
crafter.getPos().getY(), crafter.getPos().getY(),
crafter.getPos().getZ(), crafter.getPos().getZ(),
ItemPattern.isProcessing(pattern), ItemPattern.isProcessing(pattern),
ItemPattern.getInputs(pattern), ItemPattern.getInputs(pattern),
ItemPattern.getOutputs(pattern))); ItemPattern.getOutputs(pattern)));
}
} }
} }
newEnergyUsage += machine.getEnergyUsage();
} }
newEnergyUsage += machine.getEnergyUsage(); Collections.sort(storages, new Comparator<IStorage>() {
} @Override
public int compare(IStorage s1, IStorage s2) {
if (s1.getPriority() == s2.getPriority()) {
return 0;
}
Collections.sort(storages, new Comparator<IStorage>() { return (s1.getPriority() > s2.getPriority()) ? -1 : 1;
@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);
} }
});
syncItems(); craftingTasks.removeAll(craftingTasksToCancel);
craftingTasksToCancel.clear();
for (ICraftingTask taskToCancel : craftingTasksToCancel) { craftingTasks.addAll(craftingTasksToAdd);
taskToCancel.onCancelled(this); craftingTasksToAdd.clear();
}
craftingTasks.removeAll(craftingTasksToCancel); Iterator<ICraftingTask> craftingTaskIterator = craftingTasks.iterator();
craftingTasksToCancel.clear();
craftingTasks.addAll(craftingTasksToAdd); while (craftingTaskIterator.hasNext()) {
craftingTasksToAdd.clear(); ICraftingTask task = craftingTaskIterator.next();
Iterator<ICraftingTask> craftingTaskIterator = craftingTasks.iterator(); if (ticks % task.getPattern().getCrafter(worldObj).getSpeed() == 0 && task.update(this)) {
task.onDone(this);
while (craftingTaskIterator.hasNext()) { craftingTaskIterator.remove();
ICraftingTask task = craftingTaskIterator.next(); }
if (ticks % task.getPattern().getCrafter(worldObj).getSpeed() == 0 && task.update(this)) {
task.onDone(this);
craftingTaskIterator.remove();
} }
} } else {
/*} else {
disconnectAll(); disconnectAll();
}*/ }
wirelessGridRange = newWirelessGridRange; wirelessGridRange = newWirelessGridRange;
energyUsage = newEnergyUsage; energyUsage = newEnergyUsage;
@@ -208,14 +206,10 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
break; break;
} }
if (lastEnergy != energy.getEnergyStored() || ticks == 1) { RefinedStorageUtils.sendToAllAround(worldObj, pos, new MessageControllerEnergyUpdate(this));
if (lastEnergy != energy.getEnergyStored()) {
worldObj.updateComparatorOutputLevel(pos, RefinedStorageBlocks.CONTROLLER); worldObj.updateComparatorOutputLevel(pos, RefinedStorageBlocks.CONTROLLER);
if (System.currentTimeMillis() - lastEnergyUpdate > 3000L) {
RefinedStorageUtils.sendToAllAround(worldObj, pos, new MessageControllerEnergyUpdate(this));
lastEnergyUpdate = System.currentTimeMillis();
}
} }
} }
} }

View File

@@ -88,9 +88,9 @@ public class TileDetector extends TileMachine implements ICompareConfig {
if (powered != lastPowered) { if (powered != lastPowered) {
worldObj.notifyNeighborsOfStateChange(pos, RefinedStorageBlocks.DETECTOR); worldObj.notifyNeighborsOfStateChange(pos, RefinedStorageBlocks.DETECTOR);
RefinedStorageUtils.sendToAllAround(worldObj, pos, new MessageDetectorPoweredUpdate(this));
} }
RefinedStorageUtils.sendToAllAround(worldObj, pos, new MessageDetectorPoweredUpdate(this));
} }
} }

View File

@@ -60,6 +60,8 @@ public abstract class TileMachine extends TileBase implements ISynchronizedConta
searchController(worldObj); searchController(worldObj);
} }
RefinedStorageUtils.sendToAllAround(worldObj, pos, new MessageMachineConnectedUpdate(this));
if (connected && !redstoneMode.isEnabled(worldObj, pos)) { if (connected && !redstoneMode.isEnabled(worldObj, pos)) {
onDisconnected(); onDisconnected();
} }
@@ -72,8 +74,6 @@ public abstract class TileMachine extends TileBase implements ISynchronizedConta
if (worldObj.getBlockState(pos).getBlock() == block) { if (worldObj.getBlockState(pos).getBlock() == block) {
worldObj.setBlockState(pos, worldObj.getBlockState(pos).withProperty(BlockMachine.CONNECTED, true)); worldObj.setBlockState(pos, worldObj.getBlockState(pos).withProperty(BlockMachine.CONNECTED, true));
RefinedStorageUtils.sendToAllAround(worldObj, pos, new MessageMachineConnectedUpdate(this));
} }
worldObj.notifyNeighborsOfStateChange(pos, block); worldObj.notifyNeighborsOfStateChange(pos, block);
@@ -86,12 +86,10 @@ public abstract class TileMachine extends TileBase implements ISynchronizedConta
if (worldObj.getBlockState(pos).getBlock() == block) { if (worldObj.getBlockState(pos).getBlock() == block) {
worldObj.setBlockState(pos, worldObj.getBlockState(pos).withProperty(BlockMachine.CONNECTED, false)); 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 // I have no idea why this is needed
if (controller != null) { if (this.controller != null) {
this.controller.removeMachine(this); this.controller.removeMachine(this);
this.controller = null; this.controller = null;
} }

View File

@@ -44,8 +44,6 @@ public class TileSolderer extends TileMachine implements IInventory, ISidedInven
public void updateMachine() { public void updateMachine() {
ISoldererRecipe newRecipe = SoldererRegistry.getRecipe(inventory); ISoldererRecipe newRecipe = SoldererRegistry.getRecipe(inventory);
boolean lastWorking = working;
if (newRecipe == null) { if (newRecipe == null) {
reset(); reset();
} else if (newRecipe != recipe) { } else if (newRecipe != recipe) {
@@ -78,9 +76,7 @@ public class TileSolderer extends TileMachine implements IInventory, ISidedInven
} }
} }
if (working != lastWorking) { RefinedStorageUtils.sendToAllAround(worldObj, pos, new MessageSoldererWorkingUpdate(this));
RefinedStorageUtils.sendToAllAround(worldObj, pos, new MessageSoldererWorkingUpdate(this));
}
} }
@Override @Override