From 959072422c0a44f8965e820d0b8a2a26dee3d03a Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 18 May 2016 12:21:41 +0200 Subject: [PATCH] WIP stuff --- .../refinedstorage/storage/NBTStorage.java | 111 ++++++++++-------- .../refinedstorage/tile/TileController.java | 8 +- .../refinedstorage/tile/TileDiskDrive.java | 17 ++- .../java/refinedstorage/tile/TileStorage.java | 26 ++-- 4 files changed, 96 insertions(+), 66 deletions(-) diff --git a/src/main/java/refinedstorage/storage/NBTStorage.java b/src/main/java/refinedstorage/storage/NBTStorage.java index 8af951b59..f26e54783 100755 --- a/src/main/java/refinedstorage/storage/NBTStorage.java +++ b/src/main/java/refinedstorage/storage/NBTStorage.java @@ -5,6 +5,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import java.util.ArrayList; import java.util.List; public class NBTStorage implements IStorage { @@ -16,81 +17,93 @@ public class NBTStorage implements IStorage { public static final String NBT_ITEM_DAMAGE = "Damage"; public static final String NBT_ITEM_NBT = "NBT"; - private NBTTagCompound nbtTag; + private NBTTagCompound nbt; private int capacity; private int priority; + private List items = new ArrayList(); - public NBTStorage(NBTTagCompound tag, int capacity, int priority) { - this.nbtTag = tag; + public NBTStorage(NBTTagCompound nbt, int capacity, int priority) { + this.nbt = nbt; this.capacity = capacity; this.priority = priority; + + readFromNBT(); } - @Override - public void addItems(List items) { - NBTTagList list = (NBTTagList) nbtTag.getTag(NBT_ITEMS); - - for (int i = 0; i < list.tagCount(); ++i) { - items.add(createItemGroupFromNBT(list.getCompoundTagAt(i))); - } - } - - @Override - public void push(ItemStack stack) { - NBTTagList list = (NBTTagList) nbtTag.getTag(NBT_ITEMS); - - nbtTag.setInteger(NBT_STORED, getStored(nbtTag) + stack.stackSize); + public void readFromNBT() { + NBTTagList list = (NBTTagList) nbt.getTag(NBT_ITEMS); for (int i = 0; i < list.tagCount(); ++i) { NBTTagCompound tag = list.getCompoundTagAt(i); - ItemGroup group = createItemGroupFromNBT(tag); + items.add(new ItemGroup( + Item.getItemById(tag.getInteger(NBT_ITEM_TYPE)), + tag.getInteger(NBT_ITEM_QUANTITY), + tag.getInteger(NBT_ITEM_DAMAGE), + tag.hasKey(NBT_ITEM_NBT) ? ((NBTTagCompound) tag.getTag(NBT_ITEM_NBT)) : null) + ); + } + } - if (group.compareNoQuantity(stack)) { - tag.setInteger(NBT_ITEM_QUANTITY, group.getQuantity() + stack.stackSize); + public void writeToNBT(NBTTagCompound nbt) { + NBTTagList list = new NBTTagList(); + + for (ItemGroup item : items) { + NBTTagCompound tag = new NBTTagCompound(); + + tag.setInteger(NBT_ITEM_TYPE, Item.getIdFromItem(item.getType())); + tag.setInteger(NBT_ITEM_QUANTITY, item.getQuantity()); + tag.setInteger(NBT_ITEM_DAMAGE, item.getDamage()); + + if (item.getTag() != null) { + tag.setTag(NBT_ITEM_NBT, item.getTag()); + } + + list.appendTag(tag); + } + + nbt.setTag(NBT_ITEMS, list); + } + + @Override + public void addItems(List items) { + items.addAll(this.items); + } + + @Override + public void push(ItemStack stack) { + nbt.setInteger(NBT_STORED, getStored(nbt) + stack.stackSize); + + for (ItemGroup item : items) { + if (item.compareNoQuantity(stack)) { + item.setQuantity(item.getQuantity() + stack.stackSize); return; } } - NBTTagCompound tag = new NBTTagCompound(); - - tag.setInteger(NBT_ITEM_TYPE, Item.getIdFromItem(stack.getItem())); - tag.setInteger(NBT_ITEM_QUANTITY, stack.stackSize); - tag.setInteger(NBT_ITEM_DAMAGE, stack.getItemDamage()); - - if (stack.hasTagCompound()) { - tag.setTag(NBT_ITEM_NBT, stack.getTagCompound()); - } - - list.appendTag(tag); + items.add(new ItemGroup(stack)); } @Override public ItemStack take(ItemStack stack, int flags) { int quantity = stack.stackSize; - NBTTagList list = (NBTTagList) nbtTag.getTag(NBT_ITEMS); - - for (int i = 0; i < list.tagCount(); ++i) { - NBTTagCompound tag = list.getCompoundTagAt(i); - - ItemGroup group = createItemGroupFromNBT(tag); - - if (group.compare(stack, flags)) { - if (quantity > group.getQuantity()) { - quantity = group.getQuantity(); + for (ItemGroup item : items) { + if (item.compare(stack, flags)) { + if (quantity > item.getQuantity()) { + quantity = item.getQuantity(); } - tag.setInteger(NBT_ITEM_QUANTITY, group.getQuantity() - quantity); + item.setQuantity(item.getQuantity() - quantity); - if (group.getQuantity() - quantity == 0) { - list.removeTag(i); + if (item.getQuantity() == 0) { + items.remove(item); } - nbtTag.setInteger(NBT_STORED, getStored(nbtTag) - quantity); + nbt.setInteger(NBT_STORED, getStored(nbt) - quantity); - ItemStack newItem = group.toItemStack(); + ItemStack newItem = item.toItemStack(); newItem.stackSize = quantity; @@ -107,7 +120,7 @@ public class NBTStorage implements IStorage { return true; } - return (getStored(nbtTag) + stack.stackSize) <= capacity; + return (getStored(nbt) + stack.stackSize) <= capacity; } @Override @@ -115,8 +128,8 @@ public class NBTStorage implements IStorage { return priority; } - private ItemGroup createItemGroupFromNBT(NBTTagCompound tag) { - return new ItemGroup(Item.getItemById(tag.getInteger(NBT_ITEM_TYPE)), tag.getInteger(NBT_ITEM_QUANTITY), tag.getInteger(NBT_ITEM_DAMAGE), tag.hasKey(NBT_ITEM_NBT) ? ((NBTTagCompound) tag.getTag(NBT_ITEM_NBT)) : null); + public void setPriority(int priority) { + this.priority = priority; } public static int getStored(NBTTagCompound tag) { diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 99952f45c..182480ab9 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -192,7 +192,7 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr } RefinedStorageUtils.sendToAllAround(worldObj, pos, new MessageControllerEnergyUpdate(this)); - + if (lastEnergy != energy.getEnergyStored()) { worldObj.updateComparatorOutputLevel(pos, RefinedStorageBlocks.CONTROLLER); } @@ -377,8 +377,6 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr } } - markDirty(); - return true; } } @@ -387,14 +385,10 @@ public class TileController extends TileBase implements IEnergyReceiver, ISynchr } public ItemStack take(ItemStack stack) { - markDirty(); - return take(stack, RefinedStorageUtils.COMPARE_DAMAGE | RefinedStorageUtils.COMPARE_NBT); } public ItemStack take(ItemStack stack, int flags) { - markDirty(); - int requested = stack.stackSize; int receiving = 0; diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index 5a9ca3a99..edefe61bb 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -27,6 +27,7 @@ public class TileDiskDrive extends TileMachine implements IStorageProvider, ISto private InventorySimple inventory = new InventorySimple("disk_drive", 8, this); private InventorySimple filterInventory = new InventorySimple("filters", 9, this); + private DiskStorage[] storages = new DiskStorage[getSizeInventory()]; private int priority = 0; private int compare = 0; @@ -52,8 +53,8 @@ public class TileDiskDrive extends TileMachine implements IStorageProvider, ISto @Override public void provide(List storages) { for (int i = 0; i < getSizeInventory(); ++i) { - if (getStackInSlot(i) != null) { - storages.add(new DiskStorage(getStackInSlot(i), this)); + if (this.storages[i] != null) { + storages.add(this.storages[i]); } } } @@ -82,6 +83,12 @@ public class TileDiskDrive extends TileMachine implements IStorageProvider, ISto public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); + for (int i = 0; i < getSizeInventory(); ++i) { + if (storages[i] != null) { + storages[i].writeToNBT(getStackInSlot(i).getTagCompound()); + } + } + RefinedStorageUtils.saveInventory(inventory, 0, nbt); RefinedStorageUtils.saveInventory(filterInventory, 1, nbt); @@ -248,6 +255,12 @@ public class TileDiskDrive extends TileMachine implements IStorageProvider, ISto @Override public void setInventorySlotContents(int slot, ItemStack stack) { + if (stack == null) { + storages[slot] = null; + } else { + storages[slot] = new DiskStorage(stack, this); + } + inventory.setInventorySlotContents(slot, stack); } diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index d2329a171..4039fc542 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -30,6 +30,7 @@ public class TileStorage extends TileMachine implements IStorageProvider, IStora private InventorySimple inventory = new InventorySimple("storage", 9, this); private NBTTagCompound tag = NBTStorage.getBaseNBT(); + private NBTStorage storage; private int priority = 0; private int compare = 0; @@ -56,14 +57,14 @@ public class TileStorage extends TileMachine implements IStorageProvider, IStora RefinedStorageUtils.restoreInventory(inventory, 0, nbt); - if (nbt.hasKey(NBT_STORAGE)) { - tag = nbt.getCompoundTag(NBT_STORAGE); - } - if (nbt.hasKey(NBT_PRIORITY)) { priority = nbt.getInteger(NBT_PRIORITY); } + if (nbt.hasKey(NBT_STORAGE)) { + tag = nbt.getCompoundTag(NBT_STORAGE); + } + if (nbt.hasKey(NBT_COMPARE)) { compare = nbt.getInteger(NBT_COMPARE); } @@ -79,8 +80,8 @@ public class TileStorage extends TileMachine implements IStorageProvider, IStora RefinedStorageUtils.saveInventory(inventory, 0, nbt); - nbt.setTag(NBT_STORAGE, tag); nbt.setInteger(NBT_PRIORITY, priority); + nbt.setTag(NBT_STORAGE, tag); nbt.setInteger(NBT_COMPARE, compare); nbt.setInteger(NBT_MODE, mode); } @@ -97,7 +98,7 @@ public class TileStorage extends TileMachine implements IStorageProvider, IStora public void sendContainerData(ByteBuf buf) { super.sendContainerData(buf); - buf.writeInt(NBTStorage.getStored(tag)); + buf.writeInt(stored); buf.writeInt(priority); buf.writeInt(compare); buf.writeInt(mode); @@ -213,7 +214,11 @@ public class TileStorage extends TileMachine implements IStorageProvider, IStora } public NBTStorage getStorage() { - return new NBTStorage(tag, getCapacity(), priority); + if (storage == null) { + storage = new NBTStorage(tag, getCapacity(), priority); + } + + return storage; } public NBTTagCompound getStorageTag() { @@ -234,12 +239,17 @@ public class TileStorage extends TileMachine implements IStorageProvider, IStora public void setPriority(int priority) { markDirty(); + this.storage.setPriority(priority); this.priority = priority; } @Override public int getStored() { - return stored; + if (worldObj.isRemote) { + return stored; + } else { + return NBTStorage.getStored(tag); + } } @Override