Improvements

This commit is contained in:
Raoul Van den Berge
2016-06-24 15:37:17 +02:00
parent 7cea5062ab
commit 86b66c02c3
6 changed files with 36 additions and 45 deletions

View File

@@ -11,7 +11,6 @@ import refinedstorage.api.autocrafting.ICraftingTask;
import refinedstorage.api.storage.CompareFlags;
import javax.annotation.Nullable;
import java.util.Iterator;
import java.util.List;
public interface INetworkMaster {
@@ -54,9 +53,9 @@ public interface INetworkMaster {
void update();
/**
* @return A iterator with all network slaves
* @return A list with all network slaves, do NOT modify
*/
Iterator<INetworkSlave> getSlaves();
List<INetworkSlave> getSlaves();
/**
* @param slave The slave to add

View File

@@ -32,7 +32,7 @@ public interface INetworkSlave {
*
* @param world The world
*/
void onNeighborChanged(World world);
void refreshConnection(World world);
/**
* Called when a connection is found to the network

View File

@@ -6,6 +6,7 @@ import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.common.util.Constants;
@@ -58,6 +59,7 @@ public class NetworkMaster implements INetworkMaster {
private List<IStorage> storages = new ArrayList<IStorage>();
private List<BlockPos> slaves = new ArrayList<BlockPos>();
private List<INetworkSlave> actualSlaves = new ArrayList<INetworkSlave>();
private Map<BlockPos, Boolean> slaveConnectivity = new HashMap<BlockPos, Boolean>();
private List<BlockPos> slavesToAdd = new ArrayList<BlockPos>();
private List<BlockPos> slavesToLoad = new ArrayList<BlockPos>();
@@ -150,11 +152,14 @@ public class NetworkMaster implements INetworkMaster {
@Override
public void update() {
boolean forceUpdate = !slavesToAdd.isEmpty() || !slavesToRemove.isEmpty();
for (BlockPos slave : slavesToAdd) {
if (!slaves.contains(slave)) {
slaves.add(slave);
}
}
slavesToAdd.clear();
slaves.removeAll(slavesToRemove);
@@ -163,14 +168,11 @@ public class NetworkMaster implements INetworkMaster {
int lastEnergy = energy.getEnergyStored();
if (canRun()) {
if (ticks % 20 == 0) {
if (ticks % 20 == 0 || forceUpdate) {
updateSlaves();
}
Iterator<INetworkSlave> slaves = getSlaves();
while (slaves.hasNext()) {
INetworkSlave slave = slaves.next();
for (INetworkSlave slave : getSlaves()) {
if (slave.canUpdate()) {
slave.updateSlave();
}
@@ -196,11 +198,13 @@ public class NetworkMaster implements INetworkMaster {
for (ICraftingTask task : craftingTasksToAdd) {
craftingTasks.push(task);
}
craftingTasksToAdd.clear();
for (ICraftingTask task : craftingTasksToAddAsLast) {
craftingTasks.add(0, task);
}
craftingTasksToAddAsLast.clear();
if (!craftingTasks.empty()) {
@@ -249,25 +253,8 @@ public class NetworkMaster implements INetworkMaster {
}
@Override
public Iterator<INetworkSlave> getSlaves() {
return new Iterator<INetworkSlave>() {
private int index;
@Override
public boolean hasNext() {
return index < slaves.size();
}
@Override
public INetworkSlave next() {
return world.getTileEntity(slaves.get(index++)).getCapability(RefinedStorageCapabilities.NETWORK_SLAVE_CAPABILITY, null);
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
};
public List<INetworkSlave> getSlaves() {
return actualSlaves;
}
@Override
@@ -295,13 +282,11 @@ public class NetworkMaster implements INetworkMaster {
}
public void disconnectAll() {
Iterator<INetworkSlave> slaves = getSlaves();
while (slaves.hasNext()) {
slaves.next().disconnect(world);
for (INetworkSlave slave : getSlaves()) {
slave.disconnect(world);
}
this.slaves.clear();
slaves.clear();
}
@Override
@@ -402,14 +387,24 @@ public class NetworkMaster implements INetworkMaster {
private void updateSlaves() {
this.energyUsage = 0;
this.actualSlaves.clear();
this.storages.clear();
this.patterns.clear();
int range = 0;
Iterator<INetworkSlave> slaves = getSlaves();
while (slaves.hasNext()) {
INetworkSlave slave = slaves.next();
for (BlockPos slavePos : slaves) {
TileEntity tile = world.getTileEntity(slavePos);
if (tile == null || !tile.hasCapability(RefinedStorageCapabilities.NETWORK_SLAVE_CAPABILITY, null)) {
removeSlave(slavePos);
continue;
}
INetworkSlave slave = tile.getCapability(RefinedStorageCapabilities.NETWORK_SLAVE_CAPABILITY, null);
actualSlaves.add(slave);
if (!slave.canUpdate()) {
continue;

View File

@@ -43,7 +43,7 @@ public abstract class BlockSlave extends BlockBase {
super.onBlockPlacedBy(world, pos, state, player, stack);
if (!world.isRemote) {
((TileSlave) world.getTileEntity(pos)).onNeighborChanged(world);
((TileSlave) world.getTileEntity(pos)).refreshConnection(world);
}
}
@@ -65,7 +65,7 @@ public abstract class BlockSlave extends BlockBase {
super.neighborChanged(state, world, pos, block);
if (!world.isRemote) {
((TileSlave) world.getTileEntity(pos)).onNeighborChanged(world);
((TileSlave) world.getTileEntity(pos)).refreshConnection(world);
}
}
}

View File

@@ -82,7 +82,7 @@ public abstract class TileSlave extends TileBase implements INetworkSlave, ISync
}
@Override
public void onNeighborChanged(World world) {
public void refreshConnection(World world) {
TileController controller = searchController(world, pos, new HashSet<Long>());
if (network == null) {

View File

@@ -22,7 +22,6 @@ import refinedstorage.tile.config.IRedstoneModeConfig;
import refinedstorage.tile.config.RedstoneMode;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class TileController extends TileBase implements IEnergyReceiver, ISynchronizedContainer, IRedstoneModeConfig {
@@ -151,10 +150,7 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
if (getNetwork() != null) {
List<ClientSlave> clientSlaves = new ArrayList<ClientSlave>();
Iterator<INetworkSlave> slaves = getNetwork().getSlaves();
while (slaves.hasNext()) {
INetworkSlave slave = slaves.next();
for (INetworkSlave slave : getNetwork().getSlaves()) {
if (slave.canUpdate()) {
IBlockState state = worldObj.getBlockState(slave.getPosition());
@@ -164,10 +160,11 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr
clientSlave.amount = 1;
clientSlave.stack = new ItemStack(state.getBlock(), 1, state.getBlock().getMetaFromState(state));
if (clientSlaves.contains(clientSlave)) {
if (clientSlave.stack.getItem() != null && clientSlaves.contains(clientSlave)) {
for (ClientSlave other : clientSlaves) {
if (other.equals(clientSlave)) {
other.amount++;
break;
}
}