From 1525ac03ca3a91114efa5995654b02b5792252c2 Mon Sep 17 00:00:00 2001 From: Raoul Date: Mon, 10 Oct 2016 01:53:28 +0200 Subject: [PATCH 1/2] Whoops, wrong person --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4f4d83cf..7df15e2f7 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ - Added ore dictionary autocrafting (raoulvdberge) - Added recipe transfer handler for Processing Pattern Encoder (way2muchnoise) - Added void excess items functionality to storage blocks (geldorn, raoulvdberge, InusualZ) -- Added config option to configure RS to EU conversion rates (raoulvdberge) +- Added config option to configure RS to EU conversion rates (InusualZ) - The Constructor can now drop items in the world (raoulvdberge) - Stack upgrade in Importer / Exporter in fluid mode and Fluid Interface now transfers 64 buckets at once (raoulvdberge) - Detector without any filter will detect based on total items or fluids stored (raoulvdberge) From 31b1b1ce4e619cfb4dd67753d1f68b01ac5b1388 Mon Sep 17 00:00:00 2001 From: InusualZ Date: Mon, 10 Oct 2016 17:16:30 -0400 Subject: [PATCH 2/2] Implement Accessibility for External Storage (#451) * Implement Accessibility for External Storage's * A more centralized approach * Removed unused import & syntax fix * More Syntax fix * Implement Accessibility for External Storage's * Another approach * Fix Syntax & Translation Support --- .../api/storage/fluid/IFluidStorage.java | 9 ++++ .../api/storage/item/IItemStorage.java | 9 ++++ .../storage/fluid/GroupedFluidStorage.java | 6 +++ .../storage/item/GroupedItemStorage.java | 6 +++ .../java/refinedstorage/gui/GuiStorage.java | 4 ++ .../gui/sidebutton/SideButtonAccessType.java | 36 ++++++++++++++++ .../item/ItemFluidStorageDisk.java | 6 +++ .../refinedstorage/item/ItemStorageDisk.java | 6 +++ .../java/refinedstorage/tile/IStorageGui.java | 2 + .../refinedstorage/tile/TileController.java | 36 +++++++++++----- .../refinedstorage/tile/TileDiskDrive.java | 41 ++++++++++++++++++- .../tile/TileDiskManipulator.java | 11 +++++ .../refinedstorage/tile/TileFluidStorage.java | 40 +++++++++++++++--- .../java/refinedstorage/tile/TileStorage.java | 34 ++++++++++++--- .../tile/config/IAccessType.java | 34 +++++++++++++++ .../externalstorage/FluidStorageExternal.java | 4 ++ .../tile/externalstorage/ItemStorageDSU.java | 5 +++ .../externalstorage/ItemStorageDrawer.java | 5 +++ .../ItemStorageItemHandler.java | 5 +++ .../externalstorage/TileExternalStorage.java | 37 ++++++++++++++--- .../assets/refinedstorage/lang/en_US.lang | 4 ++ 21 files changed, 314 insertions(+), 26 deletions(-) create mode 100644 src/main/java/refinedstorage/gui/sidebutton/SideButtonAccessType.java create mode 100644 src/main/java/refinedstorage/tile/config/IAccessType.java diff --git a/src/main/java/refinedstorage/api/storage/fluid/IFluidStorage.java b/src/main/java/refinedstorage/api/storage/fluid/IFluidStorage.java index a44998642..b8d609065 100755 --- a/src/main/java/refinedstorage/api/storage/fluid/IFluidStorage.java +++ b/src/main/java/refinedstorage/api/storage/fluid/IFluidStorage.java @@ -49,4 +49,13 @@ public interface IFluidStorage { * @return the priority of this storage */ int getPriority(); + + /** + * READ(0) : Can see the fluid stored in this storage + * WRITE(1) : Can insert and/or extract fluid from this storage + * READ_WRITE(2) : Can see, insert and extract fluid from this storage + * + * @return the access type of this storage + */ + int getAccessType(); } diff --git a/src/main/java/refinedstorage/api/storage/item/IItemStorage.java b/src/main/java/refinedstorage/api/storage/item/IItemStorage.java index 51a5a82b8..a6a0a4b46 100755 --- a/src/main/java/refinedstorage/api/storage/item/IItemStorage.java +++ b/src/main/java/refinedstorage/api/storage/item/IItemStorage.java @@ -49,4 +49,13 @@ public interface IItemStorage { * @return The priority of this storage */ int getPriority(); + + /** + * READ(0) : Can see the items stored in this storage + * WRITE(1) : Can insert and/or extract items from this storage + * READ_WRITE(2) : Can see, insert and extract items from this storage + * + * @return the access type of this storage + */ + int getAccessType(); } diff --git a/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java b/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java index af7248f67..4c65dc7d1 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java @@ -7,6 +7,8 @@ import refinedstorage.api.storage.fluid.IFluidStorageProvider; import refinedstorage.api.storage.fluid.IGroupedFluidStorage; import refinedstorage.api.util.IFluidStackList; import refinedstorage.apiimpl.API; +import refinedstorage.tile.config.IAccessType; +import refinedstorage.tile.externalstorage.FluidStorageExternal; import javax.annotation.Nonnull; import java.util.ArrayList; @@ -32,6 +34,10 @@ public class GroupedFluidStorage implements IGroupedFluidStorage { list.clear(); for (IFluidStorage storage : storages) { + if (storage.getAccessType() == IAccessType.WRITE) { + continue; + } + for (FluidStack stack : storage.getStacks()) { add(stack, true); } diff --git a/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java b/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java index 5c9bdf487..c7a879035 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java @@ -8,6 +8,8 @@ import refinedstorage.api.storage.item.IItemStorage; import refinedstorage.api.storage.item.IItemStorageProvider; import refinedstorage.api.util.IItemStackList; import refinedstorage.apiimpl.API; +import refinedstorage.tile.config.IAccessType; +import refinedstorage.tile.externalstorage.ItemStorageItemHandler; import javax.annotation.Nonnull; import java.util.ArrayList; @@ -33,6 +35,10 @@ public class GroupedItemStorage implements IGroupedItemStorage { list.clear(); for (IItemStorage storage : storages) { + if (storage.getAccessType() == IAccessType.WRITE) { + continue; + } + for (ItemStack stack : storage.getItems()) { add(stack, true); } diff --git a/src/main/java/refinedstorage/gui/GuiStorage.java b/src/main/java/refinedstorage/gui/GuiStorage.java index 2aa35017d..919c75193 100755 --- a/src/main/java/refinedstorage/gui/GuiStorage.java +++ b/src/main/java/refinedstorage/gui/GuiStorage.java @@ -55,6 +55,10 @@ public class GuiStorage extends GuiBase { addSideButton(new SideButtonVoidExcess(this, gui.getVoidExcessParameter(), gui.getVoidExcessType())); } + if (gui.getAccessTypeParameter() != null) { + addSideButton(new SideButtonAccessType(this, gui.getAccessTypeParameter())); + } + priorityField = new GuiTextField(0, fontRendererObj, x + 98 + 1, y + 54 + 1, 29, fontRendererObj.FONT_HEIGHT); priorityField.setEnableBackgroundDrawing(false); priorityField.setVisible(true); diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonAccessType.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonAccessType.java new file mode 100644 index 000000000..e5ab635a7 --- /dev/null +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonAccessType.java @@ -0,0 +1,36 @@ +package refinedstorage.gui.sidebutton; + +import refinedstorage.gui.GuiBase; +import refinedstorage.tile.config.IAccessType; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; + +public class SideButtonAccessType extends SideButton { + private TileDataParameter parameter; + + public SideButtonAccessType(GuiBase gui, TileDataParameter parameter) { + super(gui); + + this.parameter = parameter; + } + + protected void drawButtonIcon(int x, int y) { + //TODO + } + + public String getTooltip() { + switch (parameter.getValue()) { + case IAccessType.READ: + return gui.t("sidebutton.refinedstorage:access_type.read"); + case IAccessType.WRITE: + return gui.t("sidebutton.refinedstorage:access_type.write"); + default: + case IAccessType.READ_WRITE: + return gui.t("sidebutton.refinedstorage:access_type.read_write"); + } + } + + public void actionPerformed() { + TileDataManager.setParameter(parameter, ((parameter.getValue() + 1 > IAccessType.READ_WRITE) ? IAccessType.READ : parameter.getValue() + 1)); + } +} diff --git a/src/main/java/refinedstorage/item/ItemFluidStorageDisk.java b/src/main/java/refinedstorage/item/ItemFluidStorageDisk.java index b0b1630b2..d808e1c62 100755 --- a/src/main/java/refinedstorage/item/ItemFluidStorageDisk.java +++ b/src/main/java/refinedstorage/item/ItemFluidStorageDisk.java @@ -18,6 +18,7 @@ import net.minecraftforge.fluids.FluidStack; import refinedstorage.RSItems; import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; import refinedstorage.block.EnumFluidStorageType; +import refinedstorage.tile.config.IAccessType; import java.util.List; @@ -55,6 +56,11 @@ public class ItemFluidStorageDisk extends ItemBase { public int getPriority() { return 0; } + + @Override + public int getAccessType() { + return IAccessType.READ_WRITE; + } }; for (Fluid fluid : FluidRegistry.getRegisteredFluids().values()) { diff --git a/src/main/java/refinedstorage/item/ItemStorageDisk.java b/src/main/java/refinedstorage/item/ItemStorageDisk.java index e793eade6..f8236ff09 100755 --- a/src/main/java/refinedstorage/item/ItemStorageDisk.java +++ b/src/main/java/refinedstorage/item/ItemStorageDisk.java @@ -15,6 +15,7 @@ import net.minecraft.world.World; import refinedstorage.RSItems; import refinedstorage.apiimpl.storage.item.ItemStorageNBT; import refinedstorage.block.EnumItemStorageType; +import refinedstorage.tile.config.IAccessType; import java.util.ArrayList; import java.util.Iterator; @@ -67,6 +68,11 @@ public class ItemStorageDisk extends ItemBase { public int getPriority() { return 0; } + + @Override + public int getAccessType() { + return IAccessType.READ_WRITE; + } }; Iterator it = Item.REGISTRY.iterator(); diff --git a/src/main/java/refinedstorage/tile/IStorageGui.java b/src/main/java/refinedstorage/tile/IStorageGui.java index a4041a91d..9e8329064 100755 --- a/src/main/java/refinedstorage/tile/IStorageGui.java +++ b/src/main/java/refinedstorage/tile/IStorageGui.java @@ -17,6 +17,8 @@ public interface IStorageGui { TileDataParameter getVoidExcessParameter(); + TileDataParameter getAccessTypeParameter(); + String getVoidExcessType(); int getStored(); diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 1b789cf27..b12822275 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -61,6 +61,7 @@ import refinedstorage.network.MessageGridFluidDelta; import refinedstorage.network.MessageGridFluidUpdate; import refinedstorage.network.MessageGridItemDelta; import refinedstorage.network.MessageGridItemUpdate; +import refinedstorage.tile.config.IAccessType; import refinedstorage.tile.config.IRedstoneConfigurable; import refinedstorage.tile.config.RedstoneMode; import refinedstorage.tile.data.ITileDataProducer; @@ -68,6 +69,7 @@ import refinedstorage.tile.data.RSSerializers; import refinedstorage.tile.data.TileDataParameter; import refinedstorage.tile.externalstorage.FluidStorageExternal; import refinedstorage.tile.externalstorage.ItemStorageExternal; +import refinedstorage.tile.externalstorage.ItemStorageItemHandler; import refinedstorage.tile.grid.IGrid; import javax.annotation.Nonnull; @@ -518,11 +520,16 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } int orginalSize = size; - + int accessType = IAccessType.READ_WRITE; ItemStack remainder = stack; for (IItemStorage storage : this.itemStorage.getStorages()) { - remainder = storage.insertItem(remainder, size, simulate); + accessType = storage.getAccessType(); + + if (accessType != IAccessType.READ) { + remainder = storage.insertItem(remainder, size, simulate); + } + if (storage instanceof ItemStorageExternal && !simulate) { ((ItemStorageExternal) storage).updateCacheForcefully(); @@ -547,7 +554,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR inserted = orginalSize - remainder.stackSize; } - if (!simulate && inserted > 0) { + if (!simulate && inserted > 0 && accessType != IAccessType.WRITE) { itemStorage.add(ItemHandlerHelper.copyStackWithSize(stack, inserted), false); for (int i = 0; i < inserted; ++i) { @@ -576,11 +583,14 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR public ItemStack extractItem(ItemStack stack, int size, int flags) { int requested = size; int received = 0; - ItemStack newStack = null; for (IItemStorage storage : this.itemStorage.getStorages()) { - ItemStack took = storage.extractItem(stack, requested - received, flags); + ItemStack took = null; + + if (storage.getAccessType() != IAccessType.READ) { + took = storage.extractItem(stack, requested - received, flags); + } if (took != null) { if (storage instanceof ItemStorageExternal) { @@ -616,11 +626,15 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } int orginalSize = size; - + int accessType = IAccessType.READ_WRITE; FluidStack remainder = stack; for (IFluidStorage storage : this.fluidStorage.getStorages()) { - remainder = storage.insertFluid(remainder, size, simulate); + accessType = storage.getAccessType(); + + if (accessType != IAccessType.READ) { + remainder = storage.insertFluid(remainder, size, simulate); + } if (storage instanceof FluidStorageExternal && !simulate) { ((FluidStorageExternal) storage).updateCacheForcefully(); @@ -645,7 +659,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR inserted = orginalSize - remainder.amount; } - if (!simulate && inserted > 0) { + if (!simulate && inserted > 0 && accessType != IAccessType.WRITE) { fluidStorage.add(RSUtils.copyStackWithSize(stack, inserted), false); } @@ -657,11 +671,13 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR public FluidStack extractFluid(@Nonnull FluidStack stack, int size, int flags) { int requested = size; int received = 0; - FluidStack newStack = null; for (IFluidStorage storage : this.fluidStorage.getStorages()) { - FluidStack took = storage.extractFluid(stack, requested - received, flags); + FluidStack took = null; + if (storage.getAccessType() != IAccessType.READ) { + took = storage.extractFluid(stack, requested - received, flags); + } if (took != null) { if (storage instanceof FluidStorageExternal) { diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index fe1646f61..977322ad7 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -31,12 +31,13 @@ import refinedstorage.tile.data.TileDataParameter; import java.util.List; -public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFluidStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable, IType, IExcessVoidable { +public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFluidStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable, IType, IExcessVoidable, IAccessType { public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); public static final TileDataParameter TYPE = IType.createParameter(); public static final TileDataParameter VOID_EXCESS = IExcessVoidable.createParameter(); + public static final TileDataParameter ACCESS_TYPE = IAccessType.createParameter(); public class ItemStorage extends ItemStorageNBT { public ItemStorage(ItemStack disk) { @@ -63,6 +64,11 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl return result; } + + @Override + public int getAccessType() { + return accessType; + } } public class FluidStorage extends FluidStorageNBT { @@ -90,6 +96,11 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl return result; } + + @Override + public int getAccessType() { + return accessType; + } } private static final String NBT_PRIORITY = "Priority"; @@ -97,6 +108,7 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl private static final String NBT_MODE = "Mode"; private static final String NBT_TYPE = "Type"; private static final String NBT_VOID_EXCESS = "VoidExcess"; + private static final String NBT_ACCESS_TYPE = "AccessType"; private ItemHandlerBasic disks = new ItemHandlerBasic(8, this, IItemValidator.STORAGE_DISK) { @Override @@ -137,6 +149,7 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl private ItemStorage itemStorages[] = new ItemStorage[8]; private FluidStorage fluidStorages[] = new FluidStorage[8]; + private int accessType = IAccessType.READ_WRITE; private int priority = 0; private int compare = IComparer.COMPARE_NBT | IComparer.COMPARE_DAMAGE; private int mode = IFilterable.WHITELIST; @@ -149,6 +162,7 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl dataManager.addWatchedParameter(MODE); dataManager.addWatchedParameter(TYPE); dataManager.addWatchedParameter(VOID_EXCESS); + dataManager.addWatchedParameter(ACCESS_TYPE); } @Override @@ -235,6 +249,10 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl if (tag.hasKey(NBT_VOID_EXCESS)) { voidExcess = tag.getBoolean(NBT_VOID_EXCESS); } + + if (tag.hasKey(NBT_ACCESS_TYPE)) { + accessType = tag.getInteger(NBT_ACCESS_TYPE); + } } @Override @@ -260,6 +278,7 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl tag.setInteger(NBT_MODE, mode); tag.setInteger(NBT_TYPE, type); tag.setBoolean(NBT_VOID_EXCESS, voidExcess); + tag.setInteger(NBT_ACCESS_TYPE, accessType); return tag; } @@ -323,11 +342,31 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl return VOID_EXCESS; } + @Override + public TileDataParameter getAccessTypeParameter() { + return ACCESS_TYPE; + } + @Override public String getVoidExcessType() { return "items_fluids"; } + @Override + public int getAccessType() { + return accessType; + } + + @Override + public void setAccessType(int value) { + accessType = value; + + network.getFluidStorage().rebuild(); + network.getItemStorage().rebuild(); + + markDirty(); + } + @Override public int getPriority() { return priority; diff --git a/src/main/java/refinedstorage/tile/TileDiskManipulator.java b/src/main/java/refinedstorage/tile/TileDiskManipulator.java index 28a2708bd..de68dbcf2 100755 --- a/src/main/java/refinedstorage/tile/TileDiskManipulator.java +++ b/src/main/java/refinedstorage/tile/TileDiskManipulator.java @@ -23,6 +23,7 @@ import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; +import refinedstorage.tile.config.IAccessType; import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.IFilterable; import refinedstorage.tile.config.IType; @@ -127,6 +128,11 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte return super.extractItem(stack, size, flags); } + + @Override + public int getAccessType() { + return IAccessType.READ_WRITE; + } } public class FluidStorage extends FluidStorageNBT { @@ -156,6 +162,11 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte return super.extractFluid(stack, size, flags); } + + @Override + public int getAccessType() { + return IAccessType.READ_WRITE; + } } private ItemHandlerBasic itemFilters = new ItemHandlerBasic(9, this); diff --git a/src/main/java/refinedstorage/tile/TileFluidStorage.java b/src/main/java/refinedstorage/tile/TileFluidStorage.java index bcd5f260c..8801d4244 100755 --- a/src/main/java/refinedstorage/tile/TileFluidStorage.java +++ b/src/main/java/refinedstorage/tile/TileFluidStorage.java @@ -14,20 +14,18 @@ import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; import refinedstorage.block.BlockFluidStorage; import refinedstorage.block.EnumFluidStorageType; import refinedstorage.inventory.ItemHandlerFluid; -import refinedstorage.tile.config.IComparable; -import refinedstorage.tile.config.IExcessVoidable; -import refinedstorage.tile.config.IFilterable; -import refinedstorage.tile.config.IPrioritizable; +import refinedstorage.tile.config.*; import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.TileDataParameter; import java.util.List; -public class TileFluidStorage extends TileNode implements IFluidStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable, IExcessVoidable { +public class TileFluidStorage extends TileNode implements IFluidStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable, IExcessVoidable, IAccessType{ public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter VOID_EXCESS = IExcessVoidable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); + public static final TileDataParameter ACCESS_TYPE = IAccessType.createParameter(); public static final TileDataParameter STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileFluidStorage tile) { @@ -59,6 +57,11 @@ public class TileFluidStorage extends TileNode implements IFluidStorageProvider, return result; } + + @Override + public int getAccessType() { + return accessType; + } } public static final String NBT_STORAGE = "Storage"; @@ -67,6 +70,7 @@ public class TileFluidStorage extends TileNode implements IFluidStorageProvider, private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; private static final String NBT_VOID_EXCESS = "VoidExcess"; + private static final String NBT_ACCESS_TYPE = "AccessType"; private ItemHandlerFluid filters = new ItemHandlerFluid(9, this); @@ -76,6 +80,7 @@ public class TileFluidStorage extends TileNode implements IFluidStorageProvider, private EnumFluidStorageType type; + private int accessType = IAccessType.READ_WRITE; private int priority = 0; private int compare = IComparer.COMPARE_NBT; private int mode = IFilterable.WHITELIST; @@ -87,6 +92,7 @@ public class TileFluidStorage extends TileNode implements IFluidStorageProvider, dataManager.addWatchedParameter(MODE); dataManager.addWatchedParameter(STORED); dataManager.addWatchedParameter(VOID_EXCESS); + dataManager.addWatchedParameter(ACCESS_TYPE); } @Override @@ -156,6 +162,10 @@ public class TileFluidStorage extends TileNode implements IFluidStorageProvider, if (tag.hasKey(NBT_VOID_EXCESS)) { voidExcess = tag.getBoolean(NBT_VOID_EXCESS); } + + if (tag.hasKey(NBT_ACCESS_TYPE)) { + accessType = tag.getInteger(NBT_ACCESS_TYPE); + } } @Override @@ -174,6 +184,7 @@ public class TileFluidStorage extends TileNode implements IFluidStorageProvider, tag.setInteger(NBT_COMPARE, compare); tag.setInteger(NBT_MODE, mode); tag.setBoolean(NBT_VOID_EXCESS, voidExcess); + tag.setInteger(NBT_ACCESS_TYPE, accessType); return tag; } @@ -245,6 +256,11 @@ public class TileFluidStorage extends TileNode implements IFluidStorageProvider, return VOID_EXCESS; } + @Override + public TileDataParameter getAccessTypeParameter() { + return ACCESS_TYPE; + } + @Override public String getVoidExcessType() { return "fluids"; @@ -266,6 +282,20 @@ public class TileFluidStorage extends TileNode implements IFluidStorageProvider, return filters; } + @Override + public int getAccessType() { + return accessType; + } + + @Override + public void setAccessType(int value) { + accessType = value; + + network.getFluidStorage().rebuild(); + + markDirty(); + } + @Override public int getPriority() { return priority; diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index 721d2b430..fe0866013 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -15,19 +15,17 @@ import refinedstorage.apiimpl.storage.item.ItemStorageNBT; import refinedstorage.block.BlockStorage; import refinedstorage.block.EnumItemStorageType; import refinedstorage.inventory.ItemHandlerBasic; -import refinedstorage.tile.config.IComparable; -import refinedstorage.tile.config.IExcessVoidable; -import refinedstorage.tile.config.IFilterable; -import refinedstorage.tile.config.IPrioritizable; +import refinedstorage.tile.config.*; import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.TileDataParameter; import java.util.List; -public class TileStorage extends TileNode implements IItemStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable, IExcessVoidable { +public class TileStorage extends TileNode implements IItemStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable, IExcessVoidable, IAccessType { public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); + public static final TileDataParameter ACCESS_TYPE = IAccessType.createParameter(); public static final TileDataParameter STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileStorage tile) { @@ -61,6 +59,11 @@ public class TileStorage extends TileNode implements IItemStorageProvider, IStor return result; } + + @Override + public int getAccessType() { + return accessType; + } } public static final String NBT_STORAGE = "Storage"; @@ -78,6 +81,7 @@ public class TileStorage extends TileNode implements IItemStorageProvider, IStor private EnumItemStorageType type; + private int accessType = IAccessType.READ_WRITE; private int priority = 0; private int compare = IComparer.COMPARE_NBT | IComparer.COMPARE_DAMAGE; private int mode = IFilterable.WHITELIST; @@ -89,6 +93,7 @@ public class TileStorage extends TileNode implements IItemStorageProvider, IStor dataManager.addWatchedParameter(MODE); dataManager.addWatchedParameter(STORED); dataManager.addWatchedParameter(VOID_EXCESS); + dataManager.addWatchedParameter(ACCESS_TYPE); } @Override @@ -259,6 +264,11 @@ public class TileStorage extends TileNode implements IItemStorageProvider, IStor return VOID_EXCESS; } + @Override + public TileDataParameter getAccessTypeParameter() { + return ACCESS_TYPE; + } + @Override public String getVoidExcessType() { return "items"; @@ -280,6 +290,20 @@ public class TileStorage extends TileNode implements IItemStorageProvider, IStor return filters; } + @Override + public int getAccessType() { + return accessType; + } + + @Override + public void setAccessType(int value) { + accessType = value; + + network.getItemStorage().rebuild(); + + markDirty(); + } + @Override public int getPriority() { return priority; diff --git a/src/main/java/refinedstorage/tile/config/IAccessType.java b/src/main/java/refinedstorage/tile/config/IAccessType.java new file mode 100644 index 000000000..1066614cb --- /dev/null +++ b/src/main/java/refinedstorage/tile/config/IAccessType.java @@ -0,0 +1,34 @@ +package refinedstorage.tile.config; + + +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.tileentity.TileEntity; +import refinedstorage.tile.data.ITileDataConsumer; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataParameter; + +public interface IAccessType { + int READ = 0; + int WRITE = 1; + int READ_WRITE = 2; + + static TileDataParameter createParameter() { + return new TileDataParameter(DataSerializers.VARINT, READ_WRITE, new ITileDataProducer() { + @Override + public Integer getValue(T tile) { + return ((IAccessType) tile).getAccessType(); + } + }, new ITileDataConsumer() { + @Override + public void setValue(T tile, Integer value) { + if (value == READ || value == WRITE || value == READ_WRITE) { + ((IAccessType) tile).setAccessType(value); + } + } + }); + } + + int getAccessType(); + + void setAccessType(int accessType); +} \ No newline at end of file diff --git a/src/main/java/refinedstorage/tile/externalstorage/FluidStorageExternal.java b/src/main/java/refinedstorage/tile/externalstorage/FluidStorageExternal.java index 86bd7844f..c9dc46476 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/FluidStorageExternal.java +++ b/src/main/java/refinedstorage/tile/externalstorage/FluidStorageExternal.java @@ -80,6 +80,10 @@ public class FluidStorageExternal implements IFluidStorage { return externalStorage.getPriority(); } + public int getAccessType() { + return externalStorage.getAccessType(); + } + public boolean updateCache() { FluidStack stack = getContents(); diff --git a/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDSU.java b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDSU.java index a00d42e66..33aa86475 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDSU.java +++ b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDSU.java @@ -110,4 +110,9 @@ public class ItemStorageDSU extends ItemStorageExternal { public int getPriority() { return externalStorage.getPriority(); } + + @Override + public int getAccessType() { + return externalStorage.getAccessType(); + } } diff --git a/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDrawer.java b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDrawer.java index abb2ab016..5a0f95fb0 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDrawer.java +++ b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDrawer.java @@ -112,4 +112,9 @@ public class ItemStorageDrawer extends ItemStorageExternal { public int getPriority() { return externalStorage.getPriority(); } + + @Override + public int getAccessType() { + return externalStorage.getAccessType(); + } } diff --git a/src/main/java/refinedstorage/tile/externalstorage/ItemStorageItemHandler.java b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageItemHandler.java index ccce46686..d130bf4ff 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/ItemStorageItemHandler.java +++ b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageItemHandler.java @@ -93,4 +93,9 @@ public class ItemStorageItemHandler extends ItemStorageExternal { public int getPriority() { return externalStorage.getPriority(); } + + @Override + public int getAccessType() { + return externalStorage.getAccessType(); + } } diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index 5604d978f..d46664c81 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -22,21 +22,19 @@ import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.tile.IStorageGui; import refinedstorage.tile.TileMultipartNode; -import refinedstorage.tile.config.IComparable; -import refinedstorage.tile.config.IFilterable; -import refinedstorage.tile.config.IPrioritizable; -import refinedstorage.tile.config.IType; +import refinedstorage.tile.config.*; import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.TileDataParameter; import java.util.ArrayList; import java.util.List; -public class TileExternalStorage extends TileMultipartNode implements IItemStorageProvider, IFluidStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable, IType { +public class TileExternalStorage extends TileMultipartNode implements IItemStorageProvider, IFluidStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable, IType, IAccessType { public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); public static final TileDataParameter TYPE = IType.createParameter(); + public static final TileDataParameter ACCESS_TYPE = IAccessType.createParameter(); public static final TileDataParameter STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override @@ -76,6 +74,7 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; private static final String NBT_TYPE = "Type"; + private static final String NBT_ACCESS_TYPE = "AccessType"; private ItemHandlerBasic itemFilters = new ItemHandlerBasic(9, this); private ItemHandlerFluid fluidFilters = new ItemHandlerFluid(9, this); @@ -84,6 +83,7 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora private int compare = IComparer.COMPARE_NBT | IComparer.COMPARE_DAMAGE; private int mode = IFilterable.WHITELIST; private int type = IType.ITEMS; + private int accessType = IAccessType.READ_WRITE; private List itemStorages = new ArrayList<>(); private List fluidStorages = new ArrayList<>(); @@ -97,6 +97,7 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora dataManager.addWatchedParameter(STORED); dataManager.addWatchedParameter(CAPACITY); dataManager.addWatchedParameter(TYPE); + dataManager.addWatchedParameter(ACCESS_TYPE); } @Override @@ -180,6 +181,10 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora if (tag.hasKey(NBT_TYPE)) { type = tag.getInteger(NBT_TYPE); } + + if (tag.hasKey(NBT_ACCESS_TYPE)){ + accessType = tag.getInteger(NBT_ACCESS_TYPE); + } } @Override @@ -193,6 +198,7 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora tag.setInteger(NBT_COMPARE, compare); tag.setInteger(NBT_MODE, mode); tag.setInteger(NBT_TYPE, type); + tag.setInteger(NBT_ACCESS_TYPE, accessType); return tag; } @@ -311,6 +317,11 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora return null; } + @Override + public TileDataParameter getAccessTypeParameter() { + return ACCESS_TYPE; + } + @Override public String getVoidExcessType() { return null; @@ -326,6 +337,22 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora return CAPACITY.getValue(); } + @Override + public int getAccessType() { + return accessType; + } + + @Override + public void setAccessType(int type) { + accessType = type; + + // Refresh item/fluid cache + network.getItemStorage().rebuild(); + network.getFluidStorage().rebuild(); + + markDirty(); + } + @Override public TileDataParameter getTypeParameter() { return TYPE; diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 4d9c2c949..b79a85d4a 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -123,6 +123,10 @@ sidebutton.refinedstorage:void_excess.items_fluids=Void excess items and fluids sidebutton.refinedstorage:constructor.drop=Drop blocks instead of placing +sidebutton.refinedstorage:access_type.read=Read +sidebutton.refinedstorage:access_type.write=Write +sidebutton.refinedstorage:access_type.read_write=Read & Write + block.refinedstorage:controller.0.name=Controller block.refinedstorage:controller.1.name=Creative Controller block.refinedstorage:cable.name=Cable