Add docs for IGroupedStorage

This commit is contained in:
Raoul Van den Berge
2016-06-29 16:02:24 +02:00
parent 9789796781
commit e4b4abd45d
12 changed files with 105 additions and 70 deletions

View File

@@ -7,7 +7,7 @@ import net.minecraft.util.math.BlockPos;
import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingPattern;
import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.autocrafting.ICraftingTask;
import refinedstorage.api.storage.CompareFlags; import refinedstorage.api.storage.CompareFlags;
import refinedstorage.api.storage.IItemList; import refinedstorage.api.storage.IGroupedStorage;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@@ -60,9 +60,9 @@ public interface INetworkMaster {
IWirelessGridHandler getWirelessGridHandler(); IWirelessGridHandler getWirelessGridHandler();
/** /**
* @return A {@link IItemList} containing all network items. * @return The {@link IGroupedStorage} of this network
*/ */
IItemList getItems(); IGroupedStorage getStorage();
/** /**
* @return The crafting tasks in this network, do NOT modify this list * @return The crafting tasks in this network, do NOT modify this list
@@ -123,12 +123,12 @@ public interface INetworkMaster {
/** /**
* Sends to all clients in a grid a packet with all the items in this network. * Sends to all clients in a grid a packet with all the items in this network.
*/ */
void updateItemsWithClient(); void updateStorageWithClient();
/** /**
* Sends a player a packet with all the items in this network. * Sends a player a packet with all the items in this network.
*/ */
void updateItemsWithClient(EntityPlayerMP player); void updateStorageWithClient(EntityPlayerMP player);
/** /**
* Pushes an item to this network. * Pushes an item to this network.

View File

@@ -0,0 +1,53 @@
package refinedstorage.api.storage;
import net.minecraft.item.ItemStack;
import refinedstorage.api.network.INetworkMaster;
import java.util.Collection;
import java.util.List;
/**
* This holds all items from all the connected storages from a {@link INetworkMaster}.
*/
public interface IGroupedStorage {
/**
* Rebuilds the storages and items for a network. Typically called when a {@link IStorageProvider} is
* added or removed from the network.
*
* @param master The network
*/
void rebuild(INetworkMaster master);
/**
* @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.
*
* @param stack The stack to add, do NOT modify
*/
void add(ItemStack stack);
/**
* Removes a item from the network.
*
* @param stack The item to remove, do NOT modify
*/
void remove(ItemStack stack);
/**
* Gets an item from the network, does not decrement its count.
*
* @param stack The stack to find
* @param flags The flags to compare on, see {@link CompareFlags}
* @return The stack, do NOT modify
*/
ItemStack get(ItemStack stack, int flags);
/**
* @return All stacks in this storage network
*/
Collection<ItemStack> getStacks();
}

View File

@@ -1,20 +0,0 @@
package refinedstorage.api.storage;
import net.minecraft.item.ItemStack;
import refinedstorage.api.network.INetworkMaster;
import java.util.List;
public interface IItemList {
void rebuild(INetworkMaster master);
List<IStorage> getStorages();
void add(ItemStack stack);
void remove(ItemStack stack);
ItemStack get(ItemStack stack, int flags);
List<ItemStack> getStacks();
}

View File

@@ -7,7 +7,7 @@ import java.util.List;
*/ */
public interface IStorageProvider { public interface IStorageProvider {
/** /**
* Adds the storages. * Adds the storages that this storage provides.
* *
* @param storages The previously added storages * @param storages The previously added storages
*/ */

View File

@@ -57,7 +57,7 @@ public class WirelessGridHandler implements IWirelessGridHandler {
player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.WIRELESS_GRID, player.worldObj, RefinedStorageUtils.getIdFromHand(hand), 0, 0); player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.WIRELESS_GRID, player.worldObj, RefinedStorageUtils.getIdFromHand(hand), 0, 0);
network.updateItemsWithClient((EntityPlayerMP) player); network.updateStorageWithClient((EntityPlayerMP) player);
drainEnergy(player, ItemWirelessGrid.USAGE_OPEN); drainEnergy(player, ItemWirelessGrid.USAGE_OPEN);

View File

@@ -1,19 +1,23 @@
package refinedstorage.apiimpl.storage; package refinedstorage.apiimpl.storage;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
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.network.INetworkSlave;
import refinedstorage.api.storage.IItemList; import refinedstorage.api.storage.IGroupedStorage;
import refinedstorage.api.storage.IStorage; import refinedstorage.api.storage.IStorage;
import refinedstorage.api.storage.IStorageProvider; import refinedstorage.api.storage.IStorageProvider;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.List; import java.util.List;
public class ItemList implements IItemList { public class GroupedStorage implements IGroupedStorage {
private List<IStorage> storages = new ArrayList<IStorage>(); private List<IStorage> storages = new ArrayList<IStorage>();
private List<ItemStack> stacks = new ArrayList<ItemStack>(); private Multimap<Item, ItemStack> stacks = ArrayListMultimap.create();
@Override @Override
public void rebuild(INetworkMaster master) { public void rebuild(INetworkMaster master) {
@@ -41,7 +45,7 @@ public class ItemList implements IItemList {
@Override @Override
public void add(ItemStack stack) { public void add(ItemStack stack) {
for (ItemStack otherStack : stacks) { 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;
@@ -49,17 +53,17 @@ public class ItemList implements IItemList {
} }
} }
stacks.add(stack.copy()); stacks.put(stack.getItem(), stack.copy());
} }
@Override @Override
public void remove(ItemStack stack) { public void remove(ItemStack stack) {
for (ItemStack otherStack : stacks) { 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;
if (otherStack.stackSize == 0) { if (otherStack.stackSize == 0) {
stacks.remove(otherStack); stacks.remove(otherStack.getItem(), otherStack);
} }
return; return;
@@ -69,7 +73,7 @@ public class ItemList implements IItemList {
@Override @Override
public ItemStack get(ItemStack stack, int flags) { public ItemStack get(ItemStack stack, int flags) {
for (ItemStack otherStack : stacks) { for (ItemStack otherStack : stacks.get(stack.getItem())) {
if (RefinedStorageUtils.compareStack(otherStack, stack, flags)) { if (RefinedStorageUtils.compareStack(otherStack, stack, flags)) {
return otherStack; return otherStack;
} }
@@ -79,7 +83,7 @@ public class ItemList implements IItemList {
} }
@Override @Override
public List<ItemStack> getStacks() { public Collection<ItemStack> getStacks() {
return stacks; return stacks.values();
} }
} }

View File

@@ -41,9 +41,9 @@ public class MessageGridItems implements IMessage, IMessageHandler<MessageGridIt
@Override @Override
public void toBytes(ByteBuf buf) { public void toBytes(ByteBuf buf) {
buf.writeInt(network.getItems().getStacks().size()); buf.writeInt(network.getStorage().getStacks().size());
for (ItemStack item : network.getItems().getStacks()) { for (ItemStack item : network.getStorage().getStacks()) {
buf.writeInt(item.stackSize); buf.writeInt(item.stackSize);
ByteBufUtils.writeItemStack(buf, item); ByteBufUtils.writeItemStack(buf, item);
} }

View File

@@ -53,7 +53,7 @@ public class TileDetector extends TileSlave implements ICompareConfig {
boolean wasPowered = powered; boolean wasPowered = powered;
if (slot != null) { if (slot != null) {
ItemStack stack = network.getItems().get(slot, compare); ItemStack stack = network.getStorage().get(slot, compare);
if (stack != null) { if (stack != null) {
switch (mode) { switch (mode) {

View File

@@ -65,7 +65,7 @@ public class TileDiskDrive extends TileSlave implements IStorageProvider, IStora
} }
if (isConnected()) { if (isConnected()) {
network.getItems().rebuild(network); network.getStorage().rebuild(network);
} }
} }
} }

View File

@@ -171,7 +171,7 @@ public abstract class TileSlave extends TileBase implements INetworkSlave, ISync
this.redstoneMode = mode; this.redstoneMode = mode;
if (this instanceof IStorageProvider && isConnected()) { if (this instanceof IStorageProvider && isConnected()) {
network.getItems().rebuild(network); network.getStorage().rebuild(network);
} }
} }

View File

@@ -25,7 +25,7 @@ import refinedstorage.api.network.INetworkMaster;
import refinedstorage.api.network.INetworkSlave; import refinedstorage.api.network.INetworkSlave;
import refinedstorage.api.network.IWirelessGridHandler; import refinedstorage.api.network.IWirelessGridHandler;
import refinedstorage.api.storage.CompareFlags; import refinedstorage.api.storage.CompareFlags;
import refinedstorage.api.storage.IItemList; import refinedstorage.api.storage.IGroupedStorage;
import refinedstorage.api.storage.IStorage; import refinedstorage.api.storage.IStorage;
import refinedstorage.api.storage.IStorageProvider; import refinedstorage.api.storage.IStorageProvider;
import refinedstorage.apiimpl.autocrafting.BasicCraftingTask; import refinedstorage.apiimpl.autocrafting.BasicCraftingTask;
@@ -33,7 +33,7 @@ import refinedstorage.apiimpl.autocrafting.CraftingPattern;
import refinedstorage.apiimpl.autocrafting.ProcessingCraftingTask; import refinedstorage.apiimpl.autocrafting.ProcessingCraftingTask;
import refinedstorage.apiimpl.network.GridHandler; import refinedstorage.apiimpl.network.GridHandler;
import refinedstorage.apiimpl.network.WirelessGridHandler; import refinedstorage.apiimpl.network.WirelessGridHandler;
import refinedstorage.apiimpl.storage.ItemList; import refinedstorage.apiimpl.storage.GroupedStorage;
import refinedstorage.block.BlockController; import refinedstorage.block.BlockController;
import refinedstorage.block.EnumControllerType; import refinedstorage.block.EnumControllerType;
import refinedstorage.container.ContainerController; import refinedstorage.container.ContainerController;
@@ -58,8 +58,8 @@ 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 IItemList items = new ItemList(); private IGroupedStorage storage = new GroupedStorage();
private boolean rebuildItemList; private boolean rebuildStorage;
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>();
@@ -131,13 +131,12 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
slaves.removeAll(slavesToRemove); slaves.removeAll(slavesToRemove);
slavesToRemove.clear(); slavesToRemove.clear();
if (rebuildItemList) { if (rebuildStorage) {
System.out.println("Rebuilding item list"); storage.rebuild(this);
items.rebuild(this);
rebuildItemList = false; rebuildStorage = false;
updateItemsWithClient(); updateStorageWithClient();
} }
if (canRun()) { if (canRun()) {
@@ -229,7 +228,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
slavesToAdd.add(slave); slavesToAdd.add(slave);
if (slave instanceof IStorageProvider) { if (slave instanceof IStorageProvider) {
rebuildItemList = true; rebuildStorage = true;
} }
} }
@@ -238,7 +237,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
slavesToRemove.add(slave); slavesToRemove.add(slave);
if (slave instanceof IStorageProvider) { if (slave instanceof IStorageProvider) {
rebuildItemList = true; rebuildStorage = true;
} }
} }
@@ -265,9 +264,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
disconnectSlaves(); disconnectSlaves();
} }
@Override public IGroupedStorage getStorage() {
public IItemList getItems() { return storage;
return items;
} }
@Override @Override
@@ -342,7 +340,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
int score = 0; int score = 0;
for (ItemStack input : patterns.get(i).getInputs()) { for (ItemStack input : patterns.get(i).getInputs()) {
ItemStack stored = items.get(input, CompareFlags.COMPARE_DAMAGE | CompareFlags.COMPARE_NBT); ItemStack stored = storage.get(input, CompareFlags.COMPARE_DAMAGE | CompareFlags.COMPARE_NBT);
score += stored != null ? stored.stackSize : 0; score += stored != null ? stored.stackSize : 0;
} }
@@ -388,7 +386,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
wirelessGridHandler.setRange(range); wirelessGridHandler.setRange(range);
Collections.sort(items.getStorages(), new Comparator<IStorage>() { Collections.sort(storage.getStorages(), 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();
@@ -402,7 +400,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
} }
}); });
Collections.sort(items.getStorages(), new Comparator<IStorage>() { Collections.sort(storage.getStorages(), 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()) {
@@ -415,22 +413,22 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
} }
@Override @Override
public void updateItemsWithClient() { public void updateStorageWithClient() {
for (EntityPlayer player : worldObj.playerEntities) { for (EntityPlayer player : worldObj.playerEntities) {
if (player.openContainer.getClass() == ContainerGrid.class && pos.equals(((ContainerGrid) player.openContainer).getGrid().getNetworkPosition())) { if (player.openContainer.getClass() == ContainerGrid.class && pos.equals(((ContainerGrid) player.openContainer).getGrid().getNetworkPosition())) {
updateItemsWithClient((EntityPlayerMP) player); updateStorageWithClient((EntityPlayerMP) player);
} }
} }
} }
@Override @Override
public void updateItemsWithClient(EntityPlayerMP player) { public void updateStorageWithClient(EntityPlayerMP player) {
RefinedStorage.NETWORK.sendTo(new MessageGridItems(this), player); RefinedStorage.NETWORK.sendTo(new MessageGridItems(this), player);
} }
@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 || items.getStorages().isEmpty()) { if (stack == null || stack.getItem() == null || storage.getStorages().isEmpty()) {
return ItemHandlerHelper.copyStackWithSize(stack, size); return ItemHandlerHelper.copyStackWithSize(stack, size);
} }
@@ -438,7 +436,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
ItemStack remainder = stack; ItemStack remainder = stack;
for (IStorage storage : items.getStorages()) { for (IStorage storage : this.storage.getStorages()) {
remainder = storage.push(remainder, size, simulate); remainder = storage.push(remainder, size, simulate);
if (remainder == null) { if (remainder == null) {
@@ -461,9 +459,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
} }
} }
items.add(ItemHandlerHelper.copyStackWithSize(stack, sizePushed)); storage.add(ItemHandlerHelper.copyStackWithSize(stack, sizePushed));
updateItemsWithClient(); updateStorageWithClient();
} }
return remainder; return remainder;
@@ -476,7 +474,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
ItemStack newStack = null; ItemStack newStack = null;
for (IStorage storage : items.getStorages()) { 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) {
@@ -495,9 +493,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
} }
if (newStack != null) { if (newStack != null) {
items.remove(newStack); storage.remove(newStack);
updateItemsWithClient(); updateStorageWithClient();
} }
return newStack; return newStack;

View File

@@ -112,7 +112,7 @@ public class TileGrid extends TileSlave implements IGrid {
public void onGridOpened(EntityPlayer player) { public void onGridOpened(EntityPlayer player) {
if (isConnected()) { if (isConnected()) {
network.updateItemsWithClient((EntityPlayerMP) player); network.updateStorageWithClient((EntityPlayerMP) player);
} }
} }