Merge remote-tracking branch 'origin/mc1.10' into mc1.10

This commit is contained in:
Raoul Van den Berge
2016-10-10 23:26:50 +02:00
22 changed files with 315 additions and 27 deletions

View File

@@ -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();
}

View File

@@ -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();
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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<Integer> parameter;
public SideButtonAccessType(GuiBase gui, TileDataParameter<Integer> 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));
}
}

View File

@@ -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()) {

View File

@@ -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<Item> it = Item.REGISTRY.iterator();

View File

@@ -17,6 +17,8 @@ public interface IStorageGui {
TileDataParameter<Boolean> getVoidExcessParameter();
TileDataParameter<Integer> getAccessTypeParameter();
String getVoidExcessType();
int getStored();

View File

@@ -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) {

View File

@@ -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<Integer> PRIORITY = IPrioritizable.createParameter();
public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter();
public static final TileDataParameter<Integer> MODE = IFilterable.createParameter();
public static final TileDataParameter<Integer> TYPE = IType.createParameter();
public static final TileDataParameter<Boolean> VOID_EXCESS = IExcessVoidable.createParameter();
public static final TileDataParameter<Integer> 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<Integer> 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;

View File

@@ -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);

View File

@@ -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<Integer> PRIORITY = IPrioritizable.createParameter();
public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter();
public static final TileDataParameter<Boolean> VOID_EXCESS = IExcessVoidable.createParameter();
public static final TileDataParameter<Integer> MODE = IFilterable.createParameter();
public static final TileDataParameter<Integer> ACCESS_TYPE = IAccessType.createParameter();
public static final TileDataParameter<Integer> STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileFluidStorage>() {
@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<Integer> 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;

View File

@@ -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<Integer> PRIORITY = IPrioritizable.createParameter();
public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter();
public static final TileDataParameter<Integer> MODE = IFilterable.createParameter();
public static final TileDataParameter<Integer> ACCESS_TYPE = IAccessType.createParameter();
public static final TileDataParameter<Integer> STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileStorage>() {
@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<Integer> 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;

View File

@@ -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 <T extends TileEntity>TileDataParameter<Integer> createParameter() {
return new TileDataParameter<Integer>(DataSerializers.VARINT, READ_WRITE, new ITileDataProducer<Integer, T>() {
@Override
public Integer getValue(T tile) {
return ((IAccessType) tile).getAccessType();
}
}, new ITileDataConsumer<Integer, T>() {
@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);
}

View File

@@ -80,6 +80,10 @@ public class FluidStorageExternal implements IFluidStorage {
return externalStorage.getPriority();
}
public int getAccessType() {
return externalStorage.getAccessType();
}
public boolean updateCache() {
FluidStack stack = getContents();

View File

@@ -110,4 +110,9 @@ public class ItemStorageDSU extends ItemStorageExternal {
public int getPriority() {
return externalStorage.getPriority();
}
@Override
public int getAccessType() {
return externalStorage.getAccessType();
}
}

View File

@@ -112,4 +112,9 @@ public class ItemStorageDrawer extends ItemStorageExternal {
public int getPriority() {
return externalStorage.getPriority();
}
@Override
public int getAccessType() {
return externalStorage.getAccessType();
}
}

View File

@@ -93,4 +93,9 @@ public class ItemStorageItemHandler extends ItemStorageExternal {
public int getPriority() {
return externalStorage.getPriority();
}
@Override
public int getAccessType() {
return externalStorage.getAccessType();
}
}

View File

@@ -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<Integer> PRIORITY = IPrioritizable.createParameter();
public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter();
public static final TileDataParameter<Integer> MODE = IFilterable.createParameter();
public static final TileDataParameter<Integer> TYPE = IType.createParameter();
public static final TileDataParameter<Integer> ACCESS_TYPE = IAccessType.createParameter();
public static final TileDataParameter<Integer> STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileExternalStorage>() {
@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<ItemStorageExternal> itemStorages = new ArrayList<>();
private List<FluidStorageExternal> 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<Integer> 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<Integer> getTypeParameter() {
return TYPE;

View File

@@ -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