Fixes
This commit is contained in:
@@ -16,11 +16,6 @@ public interface IGroupedStorage {
|
|||||||
*/
|
*/
|
||||||
void rebuild();
|
void rebuild();
|
||||||
|
|
||||||
/**
|
|
||||||
* @return If this storage is currently rebuilding
|
|
||||||
*/
|
|
||||||
boolean isRebuilding();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds an item to the network. Will merge it with another item if it already exists.
|
* Adds an item to the network. Will merge it with another item if it already exists.
|
||||||
*
|
*
|
||||||
|
@@ -20,7 +20,6 @@ public class GroupedStorage implements IGroupedStorage {
|
|||||||
private INetworkMaster network;
|
private INetworkMaster network;
|
||||||
private List<IStorage> storages = new ArrayList<IStorage>();
|
private List<IStorage> storages = new ArrayList<IStorage>();
|
||||||
private Multimap<Item, ItemStack> stacks = ArrayListMultimap.create();
|
private Multimap<Item, ItemStack> stacks = ArrayListMultimap.create();
|
||||||
private boolean rebuilding;
|
|
||||||
|
|
||||||
public GroupedStorage(INetworkMaster network) {
|
public GroupedStorage(INetworkMaster network) {
|
||||||
this.network = network;
|
this.network = network;
|
||||||
@@ -28,8 +27,6 @@ public class GroupedStorage implements IGroupedStorage {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void rebuild() {
|
public void rebuild() {
|
||||||
this.rebuilding = true;
|
|
||||||
|
|
||||||
storages.clear();
|
storages.clear();
|
||||||
|
|
||||||
for (INetworkSlave slave : network.getSlaves()) {
|
for (INetworkSlave slave : network.getSlaves()) {
|
||||||
@@ -54,16 +51,9 @@ public class GroupedStorage implements IGroupedStorage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.rebuilding = false;
|
|
||||||
|
|
||||||
network.sendStorageToClient();
|
network.sendStorageToClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isRebuilding() {
|
|
||||||
return rebuilding;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void add(ItemStack stack) {
|
public void add(ItemStack stack) {
|
||||||
for (ItemStack otherStack : stacks.get(stack.getItem())) {
|
for (ItemStack otherStack : stacks.get(stack.getItem())) {
|
||||||
|
@@ -56,9 +56,33 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
private GridHandler gridHandler = new GridHandler(this);
|
private GridHandler gridHandler = new GridHandler(this);
|
||||||
private WirelessGridHandler wirelessGridHandler = new WirelessGridHandler(this);
|
private WirelessGridHandler wirelessGridHandler = new WirelessGridHandler(this);
|
||||||
|
|
||||||
private List<IStorage> storages = new ArrayList<IStorage>();
|
|
||||||
private IGroupedStorage storage = new GroupedStorage(this);
|
private IGroupedStorage storage = new GroupedStorage(this);
|
||||||
|
|
||||||
|
private Comparator<IStorage> sizeComparator = new Comparator<IStorage>() {
|
||||||
|
@Override
|
||||||
|
public int compare(IStorage left, IStorage right) {
|
||||||
|
int leftStored = left.getStored();
|
||||||
|
int rightStored = right.getStored();
|
||||||
|
|
||||||
|
if (leftStored == rightStored) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (leftStored > rightStored) ? -1 : 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private Comparator<IStorage> priorityComparator = new Comparator<IStorage>() {
|
||||||
|
@Override
|
||||||
|
public int compare(IStorage left, IStorage right) {
|
||||||
|
if (left.getPriority() == right.getPriority()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (left.getPriority() > right.getPriority()) ? -1 : 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
private List<INetworkSlave> slaves = new ArrayList<INetworkSlave>();
|
private List<INetworkSlave> slaves = new ArrayList<INetworkSlave>();
|
||||||
private List<INetworkSlave> slavesToAdd = new ArrayList<INetworkSlave>();
|
private List<INetworkSlave> slavesToAdd = new ArrayList<INetworkSlave>();
|
||||||
private List<INetworkSlave> slavesToRemove = new ArrayList<INetworkSlave>();
|
private List<INetworkSlave> slavesToRemove = new ArrayList<INetworkSlave>();
|
||||||
@@ -123,32 +147,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
slavesToRemove.clear();
|
slavesToRemove.clear();
|
||||||
|
|
||||||
if (canRun()) {
|
if (canRun()) {
|
||||||
if (ticks % 20 == 0) {
|
Collections.sort(storage.getStorages(), sizeComparator);
|
||||||
Collections.sort(storages, new Comparator<IStorage>() {
|
Collections.sort(storage.getStorages(), priorityComparator);
|
||||||
@Override
|
|
||||||
public int compare(IStorage left, IStorage right) {
|
|
||||||
int leftStored = left.getStored();
|
|
||||||
int rightStored = right.getStored();
|
|
||||||
|
|
||||||
if (leftStored == rightStored) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (leftStored > rightStored) ? -1 : 1;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Collections.sort(storages, new Comparator<IStorage>() {
|
|
||||||
@Override
|
|
||||||
public int compare(IStorage left, IStorage right) {
|
|
||||||
if (left.getPriority() == right.getPriority()) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (left.getPriority() > right.getPriority()) ? -1 : 1;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
for (ICraftingTask taskToCancel : craftingTasksToCancel) {
|
for (ICraftingTask taskToCancel : craftingTasksToCancel) {
|
||||||
taskToCancel.onCancelled(this);
|
taskToCancel.onCancelled(this);
|
||||||
@@ -380,21 +380,17 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendStorageToClient() {
|
public void sendStorageToClient() {
|
||||||
if (!storage.isRebuilding()) {
|
|
||||||
for (EntityPlayer player : worldObj.playerEntities) {
|
for (EntityPlayer player : worldObj.playerEntities) {
|
||||||
if (isWatchingGrid(player)) {
|
if (isWatchingGrid(player)) {
|
||||||
sendStorageToClient((EntityPlayerMP) player);
|
sendStorageToClient((EntityPlayerMP) player);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendStorageToClient(EntityPlayerMP player) {
|
public void sendStorageToClient(EntityPlayerMP player) {
|
||||||
if (!storage.isRebuilding()) {
|
|
||||||
RefinedStorage.NETWORK.sendTo(new MessageGridItems(this), player);
|
RefinedStorage.NETWORK.sendTo(new MessageGridItems(this), player);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isWatchingGrid(EntityPlayer player) {
|
private boolean isWatchingGrid(EntityPlayer player) {
|
||||||
return player.openContainer.getClass() == ContainerGrid.class && pos.equals(((ContainerGrid) player.openContainer).getGrid().getNetworkPosition());
|
return player.openContainer.getClass() == ContainerGrid.class && pos.equals(((ContainerGrid) player.openContainer).getGrid().getNetworkPosition());
|
||||||
@@ -402,7 +398,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack push(ItemStack stack, int size, boolean simulate) {
|
public ItemStack push(ItemStack stack, int size, boolean simulate) {
|
||||||
if (stack == null || stack.getItem() == null || storages.isEmpty()) {
|
if (stack == null || stack.getItem() == null || storage.getStorages().isEmpty()) {
|
||||||
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -410,7 +406,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
|
|
||||||
ItemStack remainder = stack;
|
ItemStack remainder = stack;
|
||||||
|
|
||||||
for (IStorage storage : storages) {
|
for (IStorage storage : this.storage.getStorages()) {
|
||||||
remainder = storage.push(remainder, size, simulate);
|
remainder = storage.push(remainder, size, simulate);
|
||||||
|
|
||||||
if (remainder == null) {
|
if (remainder == null) {
|
||||||
@@ -446,7 +442,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
|
|
||||||
ItemStack newStack = null;
|
ItemStack newStack = null;
|
||||||
|
|
||||||
for (IStorage storage : storages) {
|
for (IStorage storage : this.storage.getStorages()) {
|
||||||
ItemStack took = storage.take(stack, requested - received, flags);
|
ItemStack took = storage.take(stack, requested - received, flags);
|
||||||
|
|
||||||
if (took != null) {
|
if (took != null) {
|
||||||
|
Reference in New Issue
Block a user