Performance improvements

This commit is contained in:
Raoul Van den Berge
2016-05-18 00:33:20 +02:00
parent d8785e5afc
commit 4da67798f0
4 changed files with 65 additions and 68 deletions

View File

@@ -1,5 +1,9 @@
# Refined Storage Changelog # Refined Storage Changelog
### 0.6.3
**Bugfixes**
- Performance improvements
### 0.6.2 ### 0.6.2
**Bugfixes** **Bugfixes**
- Fixed race condition with crafting tasks - Fixed race condition with crafting tasks

View File

@@ -304,7 +304,7 @@ public class RefinedStorageUtils {
} }
public static void sendToAllAround(World world, BlockPos pos, IMessage message) { public static void sendToAllAround(World world, BlockPos pos, IMessage message) {
NetworkRegistry.TargetPoint target = new NetworkRegistry.TargetPoint(world.provider.getDimensionType().getId(), pos.getX(), pos.getY(), pos.getZ(), 128); NetworkRegistry.TargetPoint target = new NetworkRegistry.TargetPoint(world.provider.getDimensionType().getId(), pos.getX(), pos.getY(), pos.getZ(), 64);
RefinedStorage.NETWORK.sendToAllAround(message, target); RefinedStorage.NETWORK.sendToAllAround(message, target);
} }

View File

@@ -119,65 +119,66 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
int lastEnergy = energy.getEnergyStored(); int lastEnergy = energy.getEnergyStored();
int newWirelessGridRange = 0;
int newEnergyUsage = 0;
List<IStorage> newStorages = new ArrayList<IStorage>();
List<CraftingPattern> newPatterns = new ArrayList<CraftingPattern>();
if (canRun()) { if (canRun()) {
if (ticks % 20 == 0) {
this.wirelessGridRange = 0;
this.energyUsage = 0;
this.storages.clear();
this.patterns.clear();
for (TileMachine machine : machines) {
if (!machine.mayUpdate()) {
continue;
}
if (machine instanceof TileWirelessTransmitter) {
this.wirelessGridRange += ((TileWirelessTransmitter) machine).getRange();
}
if (machine instanceof IStorageProvider) {
((IStorageProvider) machine).provide(storages);
}
if (machine instanceof TileCrafter) {
TileCrafter crafter = (TileCrafter) machine;
for (int i = 0; i < TileCrafter.PATTERN_SLOTS; ++i) {
if (crafter.getStackInSlot(i) != null) {
ItemStack pattern = crafter.getStackInSlot(i);
patterns.add(new CraftingPattern(crafter.getPos().getX(), crafter.getPos().getY(), crafter.getPos().getZ(), ItemPattern.isProcessing(pattern), ItemPattern.getInputs(pattern), ItemPattern.getOutputs(pattern)));
}
}
}
this.energyUsage += machine.getEnergyUsage();
}
Collections.sort(storages, new Comparator<IStorage>() {
@Override
public int compare(IStorage s1, IStorage s2) {
if (s1.getPriority() == s2.getPriority()) {
return 0;
}
return (s1.getPriority() > s2.getPriority()) ? -1 : 1;
}
});
syncItems();
}
for (TileMachine machine : machines) { for (TileMachine machine : machines) {
if (!machine.mayUpdate()) { if (!machine.mayUpdate()) {
continue; continue;
} }
machine.updateMachine(); machine.updateMachine();
if (machine instanceof TileWirelessTransmitter) {
newWirelessGridRange += ((TileWirelessTransmitter) machine).getRange();
}
if (machine instanceof IStorageProvider) {
((IStorageProvider) machine).provide(newStorages);
}
if (machine instanceof TileCrafter) {
TileCrafter crafter = (TileCrafter) machine;
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();
} }
Collections.sort(newStorages, new Comparator<IStorage>() {
@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) { for (ICraftingTask taskToCancel : craftingTasksToCancel) {
taskToCancel.onCancelled(this); taskToCancel.onCancelled(this);
} }
craftingTasks.removeAll(craftingTasksToCancel); craftingTasks.removeAll(craftingTasksToCancel);
craftingTasksToCancel.clear(); craftingTasksToCancel.clear();
@@ -205,11 +206,6 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
worldObj.notifyNeighborsOfStateChange(pos, RefinedStorageBlocks.CONTROLLER); worldObj.notifyNeighborsOfStateChange(pos, RefinedStorageBlocks.CONTROLLER);
} }
wirelessGridRange = newWirelessGridRange;
energyUsage = newEnergyUsage;
storages = newStorages;
patterns = newPatterns;
wirelessGridConsumers.removeAll(wirelessGridConsumersToRemove); wirelessGridConsumers.removeAll(wirelessGridConsumersToRemove);
wirelessGridConsumersToRemove.clear(); wirelessGridConsumersToRemove.clear();
@@ -227,22 +223,19 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
} }
} }
switch (getType()) { if (getType() == EnumControllerType.NORMAL && energyUsage > 0) {
case NORMAL: if (energy.getEnergyStored() - energyUsage >= 0) {
if (energyUsage > 0) { energy.extractEnergy(energyUsage, false);
if (energy.getEnergyStored() - energyUsage >= 0) { } else {
energy.extractEnergy(energyUsage, false); energy.setEnergyStored(0);
} else { }
energy.setEnergyStored(0); } else if (getType() == EnumControllerType.CREATIVE) {
} energy.setEnergyStored(energy.getMaxEnergyStored());
}
break;
case CREATIVE:
energy.setEnergyStored(energy.getMaxEnergyStored());
break;
} }
RefinedStorageUtils.sendToAllAround(worldObj, pos, new MessageControllerEnergyUpdate(this)); if (ticks % 20 == 0) {
RefinedStorageUtils.sendToAllAround(worldObj, pos, new MessageControllerEnergyUpdate(this));
}
if (lastEnergy != energy.getEnergyStored()) { if (lastEnergy != energy.getEnergyStored()) {
worldObj.updateComparatorOutputLevel(pos, RefinedStorageBlocks.CONTROLLER); worldObj.updateComparatorOutputLevel(pos, RefinedStorageBlocks.CONTROLLER);

View File

@@ -75,7 +75,7 @@ public abstract class TileMachine extends TileBase implements ISynchronizedConta
} }
} }
if (!(this instanceof TileCable)) { if (!(this instanceof TileCable) && ticks % 5 == 0) {
RefinedStorageUtils.sendToAllAround(worldObj, pos, new MessageMachineConnectedUpdate(this)); RefinedStorageUtils.sendToAllAround(worldObj, pos, new MessageMachineConnectedUpdate(this));
} }
} }