Better data structure for crafting tasks (?)

This commit is contained in:
Raoul Van den Berge
2016-05-01 12:09:06 +02:00
parent 6928a1088d
commit acdb9082fc
2 changed files with 25 additions and 31 deletions

View File

@@ -61,8 +61,7 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
private List<ClientSideMachine> clientSideMachines = new ArrayList<ClientSideMachine>(); private List<ClientSideMachine> clientSideMachines = new ArrayList<ClientSideMachine>();
private List<CraftingPattern> patterns = new ArrayList<CraftingPattern>(); private List<CraftingPattern> patterns = new ArrayList<CraftingPattern>();
private List<ICraftingTask> craftingTasks = new ArrayList<ICraftingTask>(); private Stack<ICraftingTask> craftingTasks = new Stack<ICraftingTask>();
private List<ICraftingTask> craftingTasksToAdd = new ArrayList<ICraftingTask>();
private Set<String> visited = new HashSet<String>(); private Set<String> visited = new HashSet<String>();
@@ -73,11 +72,11 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
private boolean destroyed = false; private boolean destroyed = false;
private long lastEnergyRerender; private long lastEnergyRender;
private boolean machinesHavePosition(List<TileMachine> tiles, BlockPos pos) { private boolean machinesHavePosition(List<TileMachine> machines, BlockPos pos) {
for (TileEntity tile : tiles) { for (TileEntity machine : machines) {
if (tile.getPos().getX() == pos.getX() && tile.getPos().getY() == pos.getY() && tile.getPos().getZ() == pos.getZ()) { if (machine.getPos().getX() == pos.getX() && machine.getPos().getY() == pos.getY() && machine.getPos().getZ() == pos.getZ()) {
return true; return true;
} }
} }
@@ -110,14 +109,14 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
} }
} }
int range = 0; int newWirelessGridRange = 0;
int usage = 0; int newEnergyUsage = 0;
List<IStorage> newStorages = new ArrayList<IStorage>(); List<IStorage> newStorages = new ArrayList<IStorage>();
List<CraftingPattern> newPatterns = new ArrayList<CraftingPattern>(); List<CraftingPattern> newPatterns = new ArrayList<CraftingPattern>();
for (TileMachine machine : newMachines) { for (TileMachine machine : newMachines) {
if (machine instanceof TileWirelessTransmitter) { if (machine instanceof TileWirelessTransmitter) {
range += ((TileWirelessTransmitter) machine).getRange(); newWirelessGridRange += ((TileWirelessTransmitter) machine).getRange();
} }
if (machine instanceof IStorageProvider) { if (machine instanceof IStorageProvider) {
@@ -136,7 +135,7 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
} }
} }
usage += machine.getEnergyUsage(); newEnergyUsage += machine.getEnergyUsage();
if (!machinesHavePosition(machines, machine.getPos())) { if (!machinesHavePosition(machines, machine.getPos())) {
machine.onConnected(this); machine.onConnected(this);
@@ -151,8 +150,8 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
} }
} }
wirelessGridRange = range; wirelessGridRange = newWirelessGridRange;
energyUsage = usage; energyUsage = newEnergyUsage;
machines = newMachines; machines = newMachines;
storages = newStorages; storages = newStorages;
patterns = newPatterns; patterns = newPatterns;
@@ -172,18 +171,13 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
} }
} }
craftingTasks.addAll(craftingTasksToAdd); if (craftingTasks.size() > 0) {
craftingTasksToAdd.clear(); ICraftingTask task = craftingTasks.peek();
Iterator<ICraftingTask> crIt = craftingTasks.iterator();
while (crIt.hasNext()) {
ICraftingTask task = crIt.next();
if (ticks % task.getPattern().getSpeed() == 0 && task.update(this)) { if (ticks % task.getPattern().getSpeed() == 0 && task.update(this)) {
crIt.remove();
push(task.getPattern().getResult()); push(task.getPattern().getResult());
craftingTasks.pop();
} }
} }
@@ -201,10 +195,10 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
wirelessGridConsumers.removeAll(wirelessGridConsumersMarkedForRemoval); wirelessGridConsumers.removeAll(wirelessGridConsumersMarkedForRemoval);
wirelessGridConsumersMarkedForRemoval.clear(); wirelessGridConsumersMarkedForRemoval.clear();
Iterator<WirelessGridConsumer> wgIt = wirelessGridConsumers.iterator(); Iterator<WirelessGridConsumer> it = wirelessGridConsumers.iterator();
while (wgIt.hasNext()) { while (it.hasNext()) {
WirelessGridConsumer consumer = wgIt.next(); WirelessGridConsumer consumer = it.next();
if (!InventoryUtils.compareStack(consumer.getWirelessGrid(), consumer.getPlayer().getHeldItem(consumer.getHand()))) { if (!InventoryUtils.compareStack(consumer.getWirelessGrid(), consumer.getPlayer().getHeldItem(consumer.getHand()))) {
consumer.getPlayer().closeScreen(); // This will call onContainerClosed on the Container and remove it from the list consumer.getPlayer().closeScreen(); // This will call onContainerClosed on the Container and remove it from the list
@@ -256,7 +250,7 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
} }
public void addCraftingTask(ICraftingTask task) { public void addCraftingTask(ICraftingTask task) {
craftingTasksToAdd.add(task); craftingTasks.push(task);
} }
public List<CraftingPattern> getPatterns() { public List<CraftingPattern> getPatterns() {
@@ -280,7 +274,7 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
storage.addItems(itemGroups); storage.addItems(itemGroups);
} }
for (CraftingPattern pattern : getPatterns()) { for (CraftingPattern pattern : patterns) {
ItemGroup patternGroup = new ItemGroup(pattern.getResult()); ItemGroup patternGroup = new ItemGroup(pattern.getResult());
patternGroup.setQuantity(0); patternGroup.setQuantity(0);
itemGroups.add(patternGroup); itemGroups.add(patternGroup);
@@ -520,8 +514,8 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor
energy.setEnergyStored(buf.readInt()); energy.setEnergyStored(buf.readInt());
if (lastEnergy != energy.getEnergyStored() && System.currentTimeMillis() - lastEnergyRerender > 3000) { if (lastEnergy != energy.getEnergyStored() && System.currentTimeMillis() - lastEnergyRender > 3000) {
lastEnergyRerender = System.currentTimeMillis(); lastEnergyRender = System.currentTimeMillis();
worldObj.notifyBlockUpdate(pos, worldObj.getBlockState(pos), worldObj.getBlockState(pos), 2 | 4); worldObj.notifyBlockUpdate(pos, worldObj.getBlockState(pos), worldObj.getBlockState(pos), 2 | 4);
} }

View File

@@ -41,15 +41,15 @@ public class TileCraftingMonitor extends TileMachine {
public void receiveContainerData(ByteBuf buf) { public void receiveContainerData(ByteBuf buf) {
super.receiveContainerData(buf); super.receiveContainerData(buf);
List<ItemStack> crafting = new ArrayList<ItemStack>(); List<ItemStack> newTasks = new ArrayList<ItemStack>();
int size = buf.readInt(); int size = buf.readInt();
for (int i = 0; i < size; ++i) { for (int i = 0; i < size; ++i) {
crafting.add(ByteBufUtils.readItemStack(buf)); newTasks.add(ByteBufUtils.readItemStack(buf));
} }
tasks = crafting; tasks = newTasks;
} }
public List<ItemStack> getTasks() { public List<ItemStack> getTasks() {