Fixed group storage stuff, TODO patterns
This commit is contained in:
@@ -14,12 +14,7 @@ public interface IGroupedStorage {
|
|||||||
* Rebuilds the storages and items for a network. Typically called when a {@link IStorageProvider} is
|
* Rebuilds the storages and items for a network. Typically called when a {@link IStorageProvider} is
|
||||||
* added or removed from the network.
|
* added or removed from the network.
|
||||||
*/
|
*/
|
||||||
void rebuild();
|
void rebuild(List<IStorage> storages);
|
||||||
|
|
||||||
/**
|
|
||||||
* @return A list of {@link IStorage} connected to this network
|
|
||||||
*/
|
|
||||||
List<IStorage> getStorages();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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.
|
||||||
|
|||||||
@@ -6,34 +6,22 @@ import net.minecraft.item.Item;
|
|||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import refinedstorage.RefinedStorageUtils;
|
import refinedstorage.RefinedStorageUtils;
|
||||||
import refinedstorage.api.network.INetworkMaster;
|
import refinedstorage.api.network.INetworkMaster;
|
||||||
import refinedstorage.api.network.INetworkSlave;
|
|
||||||
import refinedstorage.api.storage.IGroupedStorage;
|
import refinedstorage.api.storage.IGroupedStorage;
|
||||||
import refinedstorage.api.storage.IStorage;
|
import refinedstorage.api.storage.IStorage;
|
||||||
import refinedstorage.api.storage.IStorageProvider;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class GroupedStorage implements IGroupedStorage {
|
public class GroupedStorage implements IGroupedStorage {
|
||||||
private List<IStorage> storages = new ArrayList<IStorage>();
|
|
||||||
private Multimap<Item, ItemStack> stacks = ArrayListMultimap.create();
|
|
||||||
private INetworkMaster network;
|
private INetworkMaster network;
|
||||||
|
private Multimap<Item, ItemStack> stacks = ArrayListMultimap.create();
|
||||||
|
|
||||||
public GroupedStorage(INetworkMaster network) {
|
public GroupedStorage(INetworkMaster network) {
|
||||||
this.network = network;
|
this.network = network;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void rebuild() {
|
public void rebuild(List<IStorage> storages) {
|
||||||
storages.clear();
|
|
||||||
|
|
||||||
for (INetworkSlave slave : network.getSlaves()) {
|
|
||||||
if (slave.canUpdate() && slave instanceof IStorageProvider) {
|
|
||||||
((IStorageProvider) slave).addStorages(storages);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stacks.clear();
|
stacks.clear();
|
||||||
|
|
||||||
for (IStorage storage : storages) {
|
for (IStorage storage : storages) {
|
||||||
@@ -45,17 +33,14 @@ public class GroupedStorage implements IGroupedStorage {
|
|||||||
network.sendStorageToClient();
|
network.sendStorageToClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<IStorage> getStorages() {
|
|
||||||
return storages;
|
|
||||||
}
|
|
||||||
|
|
||||||
@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())) {
|
||||||
if (RefinedStorageUtils.compareStackNoQuantity(otherStack, stack)) {
|
if (RefinedStorageUtils.compareStackNoQuantity(otherStack, stack)) {
|
||||||
otherStack.stackSize += stack.stackSize;
|
otherStack.stackSize += stack.stackSize;
|
||||||
|
|
||||||
|
network.sendStorageToClient();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import refinedstorage.api.network.IWirelessGridHandler;
|
|||||||
import refinedstorage.api.storage.CompareFlags;
|
import refinedstorage.api.storage.CompareFlags;
|
||||||
import refinedstorage.api.storage.IGroupedStorage;
|
import refinedstorage.api.storage.IGroupedStorage;
|
||||||
import refinedstorage.api.storage.IStorage;
|
import refinedstorage.api.storage.IStorage;
|
||||||
|
import refinedstorage.api.storage.IStorageProvider;
|
||||||
import refinedstorage.apiimpl.autocrafting.BasicCraftingTask;
|
import refinedstorage.apiimpl.autocrafting.BasicCraftingTask;
|
||||||
import refinedstorage.apiimpl.autocrafting.CraftingPattern;
|
import refinedstorage.apiimpl.autocrafting.CraftingPattern;
|
||||||
import refinedstorage.apiimpl.autocrafting.ProcessingCraftingTask;
|
import refinedstorage.apiimpl.autocrafting.ProcessingCraftingTask;
|
||||||
@@ -57,6 +58,7 @@ 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 List<INetworkSlave> slaves = new ArrayList<INetworkSlave>();
|
private List<INetworkSlave> slaves = new ArrayList<INetworkSlave>();
|
||||||
@@ -338,6 +340,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
|
|
||||||
private void updateSlaves() {
|
private void updateSlaves() {
|
||||||
this.energyUsage = 0;
|
this.energyUsage = 0;
|
||||||
|
this.storages.clear();
|
||||||
this.patterns.clear();
|
this.patterns.clear();
|
||||||
|
|
||||||
int range = 0;
|
int range = 0;
|
||||||
@@ -347,6 +350,10 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (slave instanceof IStorageProvider) {
|
||||||
|
((IStorageProvider) slave).addStorages(storages);
|
||||||
|
}
|
||||||
|
|
||||||
if (slave instanceof TileWirelessTransmitter) {
|
if (slave instanceof TileWirelessTransmitter) {
|
||||||
range += ((TileWirelessTransmitter) slave).getRange();
|
range += ((TileWirelessTransmitter) slave).getRange();
|
||||||
}
|
}
|
||||||
@@ -368,7 +375,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
|
|
||||||
wirelessGridHandler.setRange(range);
|
wirelessGridHandler.setRange(range);
|
||||||
|
|
||||||
Collections.sort(storage.getStorages(), new Comparator<IStorage>() {
|
Collections.sort(storages, new Comparator<IStorage>() {
|
||||||
@Override
|
@Override
|
||||||
public int compare(IStorage left, IStorage right) {
|
public int compare(IStorage left, IStorage right) {
|
||||||
int leftStored = left.getStored();
|
int leftStored = left.getStored();
|
||||||
@@ -382,7 +389,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Collections.sort(storage.getStorages(), new Comparator<IStorage>() {
|
Collections.sort(storages, new Comparator<IStorage>() {
|
||||||
@Override
|
@Override
|
||||||
public int compare(IStorage left, IStorage right) {
|
public int compare(IStorage left, IStorage right) {
|
||||||
if (left.getPriority() == right.getPriority()) {
|
if (left.getPriority() == right.getPriority()) {
|
||||||
@@ -393,7 +400,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
this.storage.rebuild();
|
this.storage.rebuild(storages);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -416,7 +423,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 || storage.getStorages().isEmpty()) {
|
if (stack == null || stack.getItem() == null || storages.isEmpty()) {
|
||||||
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
return ItemHandlerHelper.copyStackWithSize(stack, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -424,7 +431,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
|
|
||||||
ItemStack remainder = stack;
|
ItemStack remainder = stack;
|
||||||
|
|
||||||
for (IStorage storage : this.storage.getStorages()) {
|
for (IStorage storage : storages) {
|
||||||
remainder = storage.push(remainder, size, simulate);
|
remainder = storage.push(remainder, size, simulate);
|
||||||
|
|
||||||
if (remainder == null) {
|
if (remainder == null) {
|
||||||
@@ -460,7 +467,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
|
|
||||||
ItemStack newStack = null;
|
ItemStack newStack = null;
|
||||||
|
|
||||||
for (IStorage storage : this.storage.getStorages()) {
|
for (IStorage storage : storages) {
|
||||||
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