Just wanted to push my initial crap to fix #145, doesn't even compile yet and is unfinished

This commit is contained in:
Raoul Van den Berge
2016-06-28 22:18:11 +02:00
parent c37f3dd314
commit c90245148c
7 changed files with 101 additions and 105 deletions

View File

@@ -7,6 +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 javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@@ -59,9 +60,9 @@ public interface INetworkMaster {
IWirelessGridHandler getWirelessGridHandler(); IWirelessGridHandler getWirelessGridHandler();
/** /**
* @return The items stored in this network, do NOT modify this list * @return A {@link IItemList} containing all network items.
*/ */
List<ItemStack> getItems(); IItemList getItems();
/** /**
* @return The crafting tasks in this network, do NOT modify this list * @return The crafting tasks in this network, do NOT modify this list
@@ -143,21 +144,11 @@ public interface INetworkMaster {
/** /**
* Takes an item from this network. * Takes an item from this network.
* *
* @param stack A prototype of the stack to takeFromNetwork, do NOT modify * @param stack A prototype of the stack to take, do NOT modify
* @param size The amount of that prototype that has to be taken * @param size The amount of that prototype that has to be taken
* @param flags The flags to compare on, see {@link CompareFlags} * @param flags The flags to compare on, see {@link CompareFlags}
* @return null if we didn't takeFromNetwork anything, or a {@link ItemStack} with the result * @return null if we didn't takeFromNetwork anything, or a {@link ItemStack} with the result
*/ */
@Nullable @Nullable
ItemStack take(@Nonnull ItemStack stack, int size, int flags); ItemStack take(@Nonnull ItemStack stack, int size, int flags);
/**
* Returns an item from storage, based on the given prototype.
*
* @param stack The stack prototype to search
* @param flags The flags to compare on, see {@link CompareFlags}
* @return The {@link ItemStack} we found, do NOT modify
*/
@Nullable
ItemStack getItem(@Nonnull ItemStack stack, int flags);
} }

View File

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

View File

@@ -12,12 +12,9 @@ import java.util.List;
*/ */
public interface IStorage { public interface IStorage {
/** /**
* Adds the items in this storage to the storage network. * @return Items stored in this storage
* This is called every 20 ticks or when the storage changes, so don't make this method too resource intensive.
*
* @param items A list of previously added items
*/ */
void addItems(List<ItemStack> items); List<ItemStack> getItems();
/** /**
* Pushes an item to this storage. * Pushes an item to this storage.

View File

@@ -1,13 +1,11 @@
package refinedstorage.api.storage; package refinedstorage.api.storage;
import java.util.List;
/** /**
* Implement this interface on the tile that has a {@link refinedstorage.api.RefinedStorageCapabilities#NETWORK_SLAVE_CAPABILITY} capability. * Implement this interface on the tile that has a {@link refinedstorage.api.RefinedStorageCapabilities#NETWORK_SLAVE_CAPABILITY} capability.
*/ */
public interface IStorageProvider { public interface IStorageProvider {
/** /**
* @param storages A list containing previously added storages * @return The storages that this tile provides.
*/ */
void provide(List<IStorage> storages); IStorage[] getStorages();
} }

View File

@@ -0,0 +1,61 @@
package refinedstorage.apiimpl.storage;
import net.minecraft.item.ItemStack;
import refinedstorage.RefinedStorageUtils;
import refinedstorage.api.storage.IItemList;
import refinedstorage.api.storage.IStorageProvider;
import java.util.List;
public class ItemList implements IItemList {
private List<ItemStack> stacks;
@Override
public void rebuild(List<IStorageProvider> providers) {
stacks.clear();
}
@Override
public void add(ItemStack stack) {
for (ItemStack otherStack : stacks) {
if (RefinedStorageUtils.compareStackNoQuantity(otherStack, stack)) {
otherStack.stackSize += stack.stackSize;
return;
}
}
stacks.add(stack.copy());
}
@Override
public void remove(ItemStack stack) {
for (ItemStack otherStack : stacks) {
if (RefinedStorageUtils.compareStackNoQuantity(otherStack, stack)) {
otherStack.stackSize -= stack.stackSize;
if (otherStack.stackSize == 0) {
stacks.remove(otherStack);
}
return;
}
}
}
@Override
public ItemStack get(ItemStack stack, int flags) {
for (ItemStack otherStack : stacks) {
if (RefinedStorageUtils.compareStack(otherStack, stack, flags)) {
return otherStack;
}
}
return null;
}
@Override
public List<ItemStack> getStacks() {
return stacks;
}
}

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.getItem(slot, compare); ItemStack stack = network.getItems().get(slot, compare);
if (stack != null) { if (stack != null) {
switch (mode) { switch (mode) {

View File

@@ -25,6 +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.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;
@@ -32,6 +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.block.BlockController; import refinedstorage.block.BlockController;
import refinedstorage.block.EnumControllerType; import refinedstorage.block.EnumControllerType;
import refinedstorage.container.ContainerController; import refinedstorage.container.ContainerController;
@@ -56,11 +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 List<ItemStack> items = new ArrayList<ItemStack>();
private List<ItemStack> combinedItems = new ArrayList<ItemStack>();
private Set<Integer> combinedItemsIndices = new HashSet<Integer>();
private List<IStorage> storages = new ArrayList<IStorage>(); private List<IStorage> storages = new ArrayList<IStorage>();
private IItemList items = new ItemList();
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>();
@@ -108,6 +107,14 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
boolean forceUpdate = !slavesToAdd.isEmpty() || !slavesToRemove.isEmpty(); boolean forceUpdate = !slavesToAdd.isEmpty() || !slavesToRemove.isEmpty();
for (INetworkSlave newSlave : slavesToAdd) { for (INetworkSlave newSlave : slavesToAdd) {
if (newSlave instanceof IStorageProvider) {
for (IStorage storage : ((IStorageProvider) newSlave).getStorages()) {
for (ItemStack item : storage.getItems()) {
items.add(item);
}
}
}
boolean found = false; boolean found = false;
for (int i = 0; i < slaves.size(); ++i) { for (int i = 0; i < slaves.size(); ++i) {
@@ -250,7 +257,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
} }
@Override @Override
public List<ItemStack> getItems() { public IItemList getItems() {
return items; return items;
} }
@@ -326,7 +333,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 = getItem(input, CompareFlags.COMPARE_DAMAGE | CompareFlags.COMPARE_NBT); ItemStack stored = items.get(input, CompareFlags.COMPARE_DAMAGE | CompareFlags.COMPARE_NBT);
score += stored != null ? stored.stackSize : 0; score += stored != null ? stored.stackSize : 0;
} }
@@ -342,7 +349,6 @@ 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;
@@ -356,10 +362,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
range += ((TileWirelessTransmitter) slave).getRange(); range += ((TileWirelessTransmitter) slave).getRange();
} }
if (slave instanceof IStorageProvider) {
((IStorageProvider) slave).provide(storages);
}
if (slave instanceof TileCrafter) { if (slave instanceof TileCrafter) {
TileCrafter crafter = (TileCrafter) slave; TileCrafter crafter = (TileCrafter) slave;
@@ -401,57 +403,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
return (left.getPriority() > right.getPriority()) ? -1 : 1; return (left.getPriority() > right.getPriority()) ? -1 : 1;
} }
}); });
updateItems();
updateItemsWithClient();
}
private void updateItems() {
items.clear();
for (IStorage storage : storages) {
storage.addItems(items);
}
for (ICraftingPattern pattern : patterns) {
for (ItemStack output : pattern.getOutputs()) {
ItemStack patternStack = output.copy();
patternStack.stackSize = 0;
items.add(patternStack);
}
}
/*combinedItems.clear();
combinedItemsIndices.clear();
for (int i = 0; i < items.size(); ++i) {
if (combinedItemsIndices.contains(i)) {
continue;
}
ItemStack stack = items.get(i);
for (int j = i + 1; j < items.size(); ++j) {
if (combinedItemsIndices.contains(j)) {
continue;
}
ItemStack otherStack = items.get(j);
if (RefinedStorageUtils.compareStackNoQuantity(stack, otherStack)) {
// We copy here so we don't modify the quantity of the ItemStack IStorage uses.
// We re-get the ItemStack because the stack may change from a previous iteration in this loop
ItemStack newStack = items.get(i).copy();
newStack.stackSize += otherStack.stackSize;
items.set(i, newStack);
combinedItems.add(otherStack);
combinedItemsIndices.add(j);
}
}
}
items.removeAll(combinedItems);*/
} }
@Override @Override
@@ -470,11 +421,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) { if (stack == null || stack.getItem() == null || storages.isEmpty()) {
return null;
}
if (storages.isEmpty()) {
return ItemHandlerHelper.copyStackWithSize(stack, size); return ItemHandlerHelper.copyStackWithSize(stack, size);
} }
@@ -505,8 +452,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
} }
} }
updateItems(); items.add(ItemHandlerHelper.copyStackWithSize(stack, sizePushed));
updateItemsWithClient();
} }
return remainder; return remainder;
@@ -538,24 +484,12 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
} }
if (newStack != null) { if (newStack != null) {
updateItems(); items.remove(newStack);
updateItemsWithClient();
} }
return newStack; return newStack;
} }
@Override
public ItemStack getItem(ItemStack stack, int flags) {
for (ItemStack otherStack : items) {
if (RefinedStorageUtils.compareStack(otherStack, stack, flags)) {
return otherStack;
}
}
return null;
}
@Override @Override
public void readFromNBT(NBTTagCompound tag) { public void readFromNBT(NBTTagCompound tag) {
super.readFromNBT(tag); super.readFromNBT(tag);