Very unstable improved machine searching part6

This commit is contained in:
Raoul Van den Berge
2016-05-14 13:49:17 +02:00
parent be8a7fdfd9
commit 7f55b28f1d
2 changed files with 87 additions and 73 deletions

View File

@@ -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<IStorage> newStorages = new ArrayList<IStorage>();
List<CraftingPattern> newPatterns = new ArrayList<CraftingPattern>();
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<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) {
taskToCancel.onCancelled(this);
}
craftingTasks.removeAll(craftingTasksToCancel);
craftingTasksToCancel.clear();
craftingTasks.addAll(craftingTasksToAdd);
craftingTasksToAdd.clear();
Iterator<ICraftingTask> 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<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) {
taskToCancel.onCancelled(this);
}
craftingTasks.removeAll(craftingTasksToCancel);
craftingTasksToCancel.clear();
craftingTasks.addAll(craftingTasksToAdd);
craftingTasksToAdd.clear();
Iterator<ICraftingTask> 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);

View File

@@ -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