Fluid External Storage
This commit is contained in:
@@ -51,8 +51,6 @@ public final class RefinedStorage {
|
|||||||
public int detectorUsage;
|
public int detectorUsage;
|
||||||
public int diskDriveUsage;
|
public int diskDriveUsage;
|
||||||
public int diskDrivePerDiskUsage;
|
public int diskDrivePerDiskUsage;
|
||||||
public int fluidDiskDriveUsage;
|
|
||||||
public int fluidDiskDrivePerDiskUsage;
|
|
||||||
public int externalStorageUsage;
|
public int externalStorageUsage;
|
||||||
public int externalStoragePerStorageUsage;
|
public int externalStoragePerStorageUsage;
|
||||||
public int exporterUsage;
|
public int exporterUsage;
|
||||||
@@ -99,8 +97,6 @@ public final class RefinedStorage {
|
|||||||
detectorUsage = config.getInt("detector", "energy", 2, 0, Integer.MAX_VALUE, "The energy used by Detectors");
|
detectorUsage = config.getInt("detector", "energy", 2, 0, Integer.MAX_VALUE, "The energy used by Detectors");
|
||||||
diskDriveUsage = config.getInt("diskDrive", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by Disk Drives");
|
diskDriveUsage = config.getInt("diskDrive", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by Disk Drives");
|
||||||
diskDrivePerDiskUsage = config.getInt("diskDrivePerDisk", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used by Storage Disks in Disk Drives");
|
diskDrivePerDiskUsage = config.getInt("diskDrivePerDisk", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used by Storage Disks in Disk Drives");
|
||||||
fluidDiskDriveUsage = config.getInt("fluidDiskDrive", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by Fluid Disk Drives");
|
|
||||||
fluidDiskDrivePerDiskUsage = config.getInt("fluidDiskDrivePerDisk", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used by Fluid Storage Disks in Fluid Disk Drives");
|
|
||||||
externalStorageUsage = config.getInt("externalStorage", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by External Storages");
|
externalStorageUsage = config.getInt("externalStorage", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by External Storages");
|
||||||
externalStoragePerStorageUsage = config.getInt("externalStoragePerStorage", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used per connected storage to an External Storage");
|
externalStoragePerStorageUsage = config.getInt("externalStoragePerStorage", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used per connected storage to an External Storage");
|
||||||
exporterUsage = config.getInt("exporter", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Exporters");
|
exporterUsage = config.getInt("exporter", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Exporters");
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ public final class FluidUtils {
|
|||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static FluidStack copy(FluidStack stack) {
|
||||||
|
return stack == null ? null : stack.copy();
|
||||||
|
}
|
||||||
|
|
||||||
public static FluidStack getFluidFromStack(ItemStack stack, boolean simulate) {
|
public static FluidStack getFluidFromStack(ItemStack stack, boolean simulate) {
|
||||||
if (stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null)) {
|
if (stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null)) {
|
||||||
return stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, !simulate);
|
return stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, !simulate);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package refinedstorage.container;
|
|||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.inventory.Slot;
|
import net.minecraft.inventory.Slot;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import refinedstorage.container.slot.SlotSpecimen;
|
import refinedstorage.container.slot.SlotSpecimenType;
|
||||||
import refinedstorage.tile.externalstorage.TileExternalStorage;
|
import refinedstorage.tile.externalstorage.TileExternalStorage;
|
||||||
|
|
||||||
public class ContainerExternalStorage extends ContainerBase {
|
public class ContainerExternalStorage extends ContainerBase {
|
||||||
@@ -11,7 +11,7 @@ public class ContainerExternalStorage extends ContainerBase {
|
|||||||
super(tile, player);
|
super(tile, player);
|
||||||
|
|
||||||
for (int i = 0; i < 9; ++i) {
|
for (int i = 0; i < 9; ++i) {
|
||||||
addSlotToContainer(new SlotSpecimen(tile.getFilters(), i, 8 + (18 * i), 20));
|
addSlotToContainer(new SlotSpecimenType(tile, i, 8 + (18 * i), 20));
|
||||||
}
|
}
|
||||||
|
|
||||||
addPlayerInventory(8, 129);
|
addPlayerInventory(8, 129);
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
package refinedstorage.tile;
|
package refinedstorage.tile;
|
||||||
|
|
||||||
import net.minecraftforge.items.IItemHandler;
|
|
||||||
import refinedstorage.tile.data.TileDataParameter;
|
import refinedstorage.tile.data.TileDataParameter;
|
||||||
|
|
||||||
public interface IStorageGui {
|
public interface IStorageGui {
|
||||||
String getGuiTitle();
|
String getGuiTitle();
|
||||||
|
|
||||||
IItemHandler getFilters();
|
|
||||||
|
|
||||||
TileDataParameter<Integer> getTypeParameter();
|
TileDataParameter<Integer> getTypeParameter();
|
||||||
|
|
||||||
TileDataParameter<Integer> getRedstoneModeParameter();
|
TileDataParameter<Integer> getRedstoneModeParameter();
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ import refinedstorage.tile.config.RedstoneMode;
|
|||||||
import refinedstorage.tile.data.ITileDataProducer;
|
import refinedstorage.tile.data.ITileDataProducer;
|
||||||
import refinedstorage.tile.data.RefinedStorageSerializers;
|
import refinedstorage.tile.data.RefinedStorageSerializers;
|
||||||
import refinedstorage.tile.data.TileDataParameter;
|
import refinedstorage.tile.data.TileDataParameter;
|
||||||
|
import refinedstorage.tile.externalstorage.FluidStorageExternal;
|
||||||
import refinedstorage.tile.externalstorage.ItemStorageExternal;
|
import refinedstorage.tile.externalstorage.ItemStorageExternal;
|
||||||
import refinedstorage.tile.grid.IGrid;
|
import refinedstorage.tile.grid.IGrid;
|
||||||
|
|
||||||
@@ -624,6 +625,10 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
for (IFluidStorage storage : this.fluidStorage.getStorages()) {
|
for (IFluidStorage storage : this.fluidStorage.getStorages()) {
|
||||||
remainder = storage.insertFluid(remainder, size, simulate);
|
remainder = storage.insertFluid(remainder, size, simulate);
|
||||||
|
|
||||||
|
if (storage instanceof FluidStorageExternal && !simulate) {
|
||||||
|
((FluidStorageExternal) storage).updateCacheForcefully();
|
||||||
|
}
|
||||||
|
|
||||||
if (remainder == null) {
|
if (remainder == null) {
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
@@ -652,6 +657,10 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
FluidStack took = storage.extractFluid(stack, requested - received, flags);
|
FluidStack took = storage.extractFluid(stack, requested - received, flags);
|
||||||
|
|
||||||
if (took != null) {
|
if (took != null) {
|
||||||
|
if (storage instanceof FluidStorageExternal) {
|
||||||
|
((FluidStorageExternal) storage).updateCacheForcefully();
|
||||||
|
}
|
||||||
|
|
||||||
if (newStack == null) {
|
if (newStack == null) {
|
||||||
newStack = took;
|
newStack = took;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -352,11 +352,6 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl
|
|||||||
return "block.refinedstorage:disk_drive.name";
|
return "block.refinedstorage:disk_drive.name";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public IItemHandler getFilters() {
|
|
||||||
return itemFilters;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TileDataParameter<Integer> getTypeParameter() {
|
public TileDataParameter<Integer> getTypeParameter() {
|
||||||
return TYPE;
|
return TYPE;
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package refinedstorage.tile;
|
|||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.network.datasync.DataSerializers;
|
import net.minecraft.network.datasync.DataSerializers;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
|
||||||
import net.minecraftforge.items.ItemHandlerHelper;
|
import net.minecraftforge.items.ItemHandlerHelper;
|
||||||
import refinedstorage.RefinedStorage;
|
import refinedstorage.RefinedStorage;
|
||||||
import refinedstorage.RefinedStorageBlocks;
|
import refinedstorage.RefinedStorageBlocks;
|
||||||
@@ -199,11 +198,6 @@ public class TileStorage extends TileNode implements IItemStorageProvider, IStor
|
|||||||
return "block.refinedstorage:storage." + getType().getId() + ".name";
|
return "block.refinedstorage:storage." + getType().getId() + ".name";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public IItemHandler getFilters() {
|
|
||||||
return filters;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TileDataParameter<Integer> getTypeParameter() {
|
public TileDataParameter<Integer> getTypeParameter() {
|
||||||
return null;
|
return null;
|
||||||
@@ -241,6 +235,10 @@ public class TileStorage extends TileNode implements IItemStorageProvider, IStor
|
|||||||
return storage;
|
return storage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ItemHandlerBasic getFilters() {
|
||||||
|
return filters;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getPriority() {
|
public int getPriority() {
|
||||||
return priority;
|
return priority;
|
||||||
|
|||||||
93
src/main/java/refinedstorage/tile/externalstorage/FluidStorageExternal.java
Executable file
93
src/main/java/refinedstorage/tile/externalstorage/FluidStorageExternal.java
Executable file
@@ -0,0 +1,93 @@
|
|||||||
|
package refinedstorage.tile.externalstorage;
|
||||||
|
|
||||||
|
import net.minecraftforge.fluids.FluidStack;
|
||||||
|
import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||||
|
import net.minecraftforge.fluids.capability.IFluidTankProperties;
|
||||||
|
import refinedstorage.api.storage.CompareUtils;
|
||||||
|
import refinedstorage.api.storage.fluid.IFluidStorage;
|
||||||
|
import refinedstorage.apiimpl.storage.fluid.FluidUtils;
|
||||||
|
import refinedstorage.tile.config.IFilterable;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FluidStorageExternal implements IFluidStorage {
|
||||||
|
private FluidStack cache;
|
||||||
|
|
||||||
|
private TileExternalStorage externalStorage;
|
||||||
|
private IFluidHandler handler;
|
||||||
|
private IFluidTankProperties properties;
|
||||||
|
|
||||||
|
public FluidStorageExternal(TileExternalStorage externalStorage, IFluidHandler handler, IFluidTankProperties properties) {
|
||||||
|
this.externalStorage = externalStorage;
|
||||||
|
this.handler = handler;
|
||||||
|
this.properties = properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<FluidStack> getStacks() {
|
||||||
|
return properties.getContents() == null ? Collections.emptyList() : Collections.singletonList(properties.getContents().copy());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public FluidStack insertFluid(@Nonnull FluidStack stack, int size, boolean simulate) {
|
||||||
|
if (IFilterable.canTakeFluids(externalStorage.getFluidFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack) && properties.canFillFluidType(stack)) {
|
||||||
|
int filled = handler.fill(FluidUtils.copyStackWithSize(stack, size), !simulate);
|
||||||
|
|
||||||
|
if (filled == size) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FluidUtils.copyStackWithSize(stack, size - filled);
|
||||||
|
}
|
||||||
|
|
||||||
|
return FluidUtils.copyStackWithSize(stack, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public FluidStack extractFluid(@Nonnull FluidStack stack, int size, int flags) {
|
||||||
|
FluidStack toDrain = FluidUtils.copyStackWithSize(stack, size);
|
||||||
|
|
||||||
|
if (CompareUtils.compareStack(properties.getContents(), toDrain, flags)) {
|
||||||
|
return handler.drain(toDrain, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getStored() {
|
||||||
|
return properties.getContents() != null ? properties.getContents().amount : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCapacity() {
|
||||||
|
return properties.getCapacity();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPriority() {
|
||||||
|
return externalStorage.getPriority();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean updateCache() {
|
||||||
|
FluidStack stack = properties.getContents();
|
||||||
|
|
||||||
|
if (cache == null) {
|
||||||
|
cache = FluidUtils.copy(stack);
|
||||||
|
} else if (!CompareUtils.compareStack(stack, cache, CompareUtils.COMPARE_NBT)) {
|
||||||
|
cache = FluidUtils.copy(stack);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateCacheForcefully() {
|
||||||
|
cache = FluidUtils.copy(properties.getContents());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -35,7 +35,7 @@ public class ItemStorageDSU extends ItemStorageExternal {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack insertItem(@Nonnull ItemStack stack, int size, boolean simulate) {
|
public ItemStack insertItem(@Nonnull ItemStack stack, int size, boolean simulate) {
|
||||||
if (IFilterable.canTake(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) {
|
if (IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) {
|
||||||
if (unit.getStoredItemType() != null) {
|
if (unit.getStoredItemType() != null) {
|
||||||
if (CompareUtils.compareStackNoQuantity(unit.getStoredItemType(), stack)) {
|
if (CompareUtils.compareStackNoQuantity(unit.getStoredItemType(), stack)) {
|
||||||
if (getStored() + size > unit.getMaxStoredCount()) {
|
if (getStored() + size > unit.getMaxStoredCount()) {
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public class ItemStorageDrawer extends ItemStorageExternal {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack insertItem(ItemStack stack, int size, boolean simulate) {
|
public ItemStack insertItem(ItemStack stack, int size, boolean simulate) {
|
||||||
if (IFilterable.canTake(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack) && drawer.canItemBeStored(stack)) {
|
if (IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack) && drawer.canItemBeStored(stack)) {
|
||||||
if (!drawer.isEmpty()) {
|
if (!drawer.isEmpty()) {
|
||||||
if (getStored() + size > drawer.getMaxCapacity(stack)) {
|
if (getStored() + size > drawer.getMaxCapacity(stack)) {
|
||||||
int remainingSpace = getCapacity() - getStored();
|
int remainingSpace = getCapacity() - getStored();
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public class ItemStorageItemHandler extends ItemStorageExternal {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemStack insertItem(ItemStack stack, int size, boolean simulate) {
|
public ItemStack insertItem(ItemStack stack, int size, boolean simulate) {
|
||||||
if (IFilterable.canTake(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) {
|
if (IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) {
|
||||||
return ItemHandlerHelper.insertItem(handler, ItemHandlerHelper.copyStackWithSize(stack, size), simulate);
|
return ItemHandlerHelper.insertItem(handler, ItemHandlerHelper.copyStackWithSize(stack, size), simulate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,35 +6,46 @@ import mcmultipart.microblock.IMicroblock;
|
|||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.network.datasync.DataSerializers;
|
import net.minecraft.network.datasync.DataSerializers;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
|
import net.minecraftforge.fluids.capability.IFluidHandler;
|
||||||
|
import net.minecraftforge.fluids.capability.IFluidTankProperties;
|
||||||
import net.minecraftforge.items.IItemHandler;
|
import net.minecraftforge.items.IItemHandler;
|
||||||
import powercrystals.minefactoryreloaded.api.IDeepStorageUnit;
|
import powercrystals.minefactoryreloaded.api.IDeepStorageUnit;
|
||||||
import refinedstorage.RefinedStorage;
|
import refinedstorage.RefinedStorage;
|
||||||
import refinedstorage.api.network.INetworkMaster;
|
import refinedstorage.api.network.INetworkMaster;
|
||||||
|
import refinedstorage.api.storage.fluid.IFluidStorage;
|
||||||
|
import refinedstorage.api.storage.fluid.IFluidStorageProvider;
|
||||||
import refinedstorage.api.storage.item.IItemStorage;
|
import refinedstorage.api.storage.item.IItemStorage;
|
||||||
import refinedstorage.api.storage.item.IItemStorageProvider;
|
import refinedstorage.api.storage.item.IItemStorageProvider;
|
||||||
import refinedstorage.inventory.ItemHandlerBasic;
|
import refinedstorage.inventory.ItemHandlerBasic;
|
||||||
|
import refinedstorage.inventory.ItemHandlerFluid;
|
||||||
import refinedstorage.tile.IStorageGui;
|
import refinedstorage.tile.IStorageGui;
|
||||||
import refinedstorage.tile.TileMultipartNode;
|
import refinedstorage.tile.TileMultipartNode;
|
||||||
import refinedstorage.tile.config.IComparable;
|
import refinedstorage.tile.config.IComparable;
|
||||||
import refinedstorage.tile.config.IFilterable;
|
import refinedstorage.tile.config.IFilterable;
|
||||||
import refinedstorage.tile.config.IPrioritizable;
|
import refinedstorage.tile.config.IPrioritizable;
|
||||||
|
import refinedstorage.tile.config.IType;
|
||||||
import refinedstorage.tile.data.ITileDataProducer;
|
import refinedstorage.tile.data.ITileDataProducer;
|
||||||
import refinedstorage.tile.data.TileDataParameter;
|
import refinedstorage.tile.data.TileDataParameter;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class TileExternalStorage extends TileMultipartNode implements IItemStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable {
|
public class TileExternalStorage extends TileMultipartNode implements IItemStorageProvider, IFluidStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable, IType {
|
||||||
public static final TileDataParameter<Integer> PRIORITY = IPrioritizable.createParameter();
|
public static final TileDataParameter<Integer> PRIORITY = IPrioritizable.createParameter();
|
||||||
public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter();
|
public static final TileDataParameter<Integer> COMPARE = IComparable.createParameter();
|
||||||
public static final TileDataParameter<Integer> MODE = IFilterable.createParameter();
|
public static final TileDataParameter<Integer> MODE = IFilterable.createParameter();
|
||||||
|
public static final TileDataParameter<Integer> TYPE = IType.createParameter();
|
||||||
|
|
||||||
public static final TileDataParameter<Integer> STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileExternalStorage>() {
|
public static final TileDataParameter<Integer> STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer<Integer, TileExternalStorage>() {
|
||||||
@Override
|
@Override
|
||||||
public Integer getValue(TileExternalStorage tile) {
|
public Integer getValue(TileExternalStorage tile) {
|
||||||
int stored = 0;
|
int stored = 0;
|
||||||
|
|
||||||
for (ItemStorageExternal storage : tile.storages) {
|
for (ItemStorageExternal storage : tile.itemStorages) {
|
||||||
|
stored += storage.getStored();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (FluidStorageExternal storage : tile.fluidStorages) {
|
||||||
stored += storage.getStored();
|
stored += storage.getStored();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,7 +58,11 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora
|
|||||||
public Integer getValue(TileExternalStorage tile) {
|
public Integer getValue(TileExternalStorage tile) {
|
||||||
int capacity = 0;
|
int capacity = 0;
|
||||||
|
|
||||||
for (ItemStorageExternal storage : tile.storages) {
|
for (ItemStorageExternal storage : tile.itemStorages) {
|
||||||
|
capacity += storage.getCapacity();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (FluidStorageExternal storage : tile.fluidStorages) {
|
||||||
capacity += storage.getCapacity();
|
capacity += storage.getCapacity();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,14 +73,19 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora
|
|||||||
private static final String NBT_PRIORITY = "Priority";
|
private static final String NBT_PRIORITY = "Priority";
|
||||||
private static final String NBT_COMPARE = "Compare";
|
private static final String NBT_COMPARE = "Compare";
|
||||||
private static final String NBT_MODE = "Mode";
|
private static final String NBT_MODE = "Mode";
|
||||||
|
private static final String NBT_TYPE = "Type";
|
||||||
|
|
||||||
private ItemHandlerBasic filters = new ItemHandlerBasic(9, this);
|
private ItemHandlerBasic itemFilters = new ItemHandlerBasic(9, this);
|
||||||
|
private ItemHandlerFluid fluidFilters = new ItemHandlerFluid(9, this);
|
||||||
|
|
||||||
private int priority = 0;
|
private int priority = 0;
|
||||||
private int compare = 0;
|
private int compare = 0;
|
||||||
private int mode = IFilterable.WHITELIST;
|
private int mode = IFilterable.WHITELIST;
|
||||||
|
private int type = IType.ITEMS;
|
||||||
|
|
||||||
|
private List<ItemStorageExternal> itemStorages = new ArrayList<>();
|
||||||
|
private List<FluidStorageExternal> fluidStorages = new ArrayList<>();
|
||||||
|
|
||||||
private List<ItemStorageExternal> storages = new ArrayList<>();
|
|
||||||
private int lastDrawerCount;
|
private int lastDrawerCount;
|
||||||
|
|
||||||
public TileExternalStorage() {
|
public TileExternalStorage() {
|
||||||
@@ -74,6 +94,7 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora
|
|||||||
dataManager.addWatchedParameter(MODE);
|
dataManager.addWatchedParameter(MODE);
|
||||||
dataManager.addWatchedParameter(STORED);
|
dataManager.addWatchedParameter(STORED);
|
||||||
dataManager.addWatchedParameter(CAPACITY);
|
dataManager.addWatchedParameter(CAPACITY);
|
||||||
|
dataManager.addWatchedParameter(TYPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -83,7 +104,7 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getEnergyUsage() {
|
public int getEnergyUsage() {
|
||||||
return RefinedStorage.INSTANCE.externalStorageUsage + (storages.size() * RefinedStorage.INSTANCE.externalStoragePerStorageUsage);
|
return RefinedStorage.INSTANCE.externalStorageUsage + ((itemStorages.size() + fluidStorages.size()) * RefinedStorage.INSTANCE.externalStoragePerStorageUsage);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -97,23 +118,35 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora
|
|||||||
updateStorage(network);
|
updateStorage(network);
|
||||||
|
|
||||||
network.getItemStorage().rebuild();
|
network.getItemStorage().rebuild();
|
||||||
|
network.getFluidStorage().rebuild();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
if (!worldObj.isRemote && network != null) {
|
if (!worldObj.isRemote && network != null) {
|
||||||
boolean changeDetected = false;
|
boolean itemChangeDetected = false, fluidChangeDetected = false;
|
||||||
|
|
||||||
for (ItemStorageExternal storage : storages) {
|
for (ItemStorageExternal storage : itemStorages) {
|
||||||
if (storage.updateCache()) {
|
if (storage.updateCache()) {
|
||||||
changeDetected = true;
|
itemChangeDetected = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changeDetected) {
|
for (FluidStorageExternal storage : fluidStorages) {
|
||||||
|
if (storage.updateCache()) {
|
||||||
|
fluidChangeDetected = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itemChangeDetected) {
|
||||||
network.getItemStorage().rebuild();
|
network.getItemStorage().rebuild();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @TODO: This is broken?
|
||||||
|
if (fluidChangeDetected) {
|
||||||
|
network.getFluidStorage().rebuild();
|
||||||
|
}
|
||||||
|
|
||||||
if (getFacingTile() instanceof IDrawerGroup && lastDrawerCount != ((IDrawerGroup) getFacingTile()).getDrawerCount()) {
|
if (getFacingTile() instanceof IDrawerGroup && lastDrawerCount != ((IDrawerGroup) getFacingTile()).getDrawerCount()) {
|
||||||
lastDrawerCount = ((IDrawerGroup) getFacingTile()).getDrawerCount();
|
lastDrawerCount = ((IDrawerGroup) getFacingTile()).getDrawerCount();
|
||||||
|
|
||||||
@@ -128,7 +161,8 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora
|
|||||||
public void read(NBTTagCompound tag) {
|
public void read(NBTTagCompound tag) {
|
||||||
super.read(tag);
|
super.read(tag);
|
||||||
|
|
||||||
readItems(filters, 0, tag);
|
readItems(itemFilters, 0, tag);
|
||||||
|
readItems(fluidFilters, 1, tag);
|
||||||
|
|
||||||
if (tag.hasKey(NBT_PRIORITY)) {
|
if (tag.hasKey(NBT_PRIORITY)) {
|
||||||
priority = tag.getInteger(NBT_PRIORITY);
|
priority = tag.getInteger(NBT_PRIORITY);
|
||||||
@@ -141,17 +175,23 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora
|
|||||||
if (tag.hasKey(NBT_MODE)) {
|
if (tag.hasKey(NBT_MODE)) {
|
||||||
mode = tag.getInteger(NBT_MODE);
|
mode = tag.getInteger(NBT_MODE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (tag.hasKey(NBT_TYPE)) {
|
||||||
|
type = tag.getInteger(NBT_TYPE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NBTTagCompound write(NBTTagCompound tag) {
|
public NBTTagCompound write(NBTTagCompound tag) {
|
||||||
super.write(tag);
|
super.write(tag);
|
||||||
|
|
||||||
writeItems(filters, 0, tag);
|
writeItems(itemFilters, 0, tag);
|
||||||
|
writeItems(fluidFilters, 1, tag);
|
||||||
|
|
||||||
tag.setInteger(NBT_PRIORITY, priority);
|
tag.setInteger(NBT_PRIORITY, priority);
|
||||||
tag.setInteger(NBT_COMPARE, compare);
|
tag.setInteger(NBT_COMPARE, compare);
|
||||||
tag.setInteger(NBT_MODE, mode);
|
tag.setInteger(NBT_MODE, mode);
|
||||||
|
tag.setInteger(NBT_TYPE, type);
|
||||||
|
|
||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
@@ -193,7 +233,8 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void updateStorage(INetworkMaster network) {
|
public void updateStorage(INetworkMaster network) {
|
||||||
storages.clear();
|
itemStorages.clear();
|
||||||
|
fluidStorages.clear();
|
||||||
|
|
||||||
TileEntity facing = getFacingTile();
|
TileEntity facing = getFacingTile();
|
||||||
|
|
||||||
@@ -202,27 +243,41 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora
|
|||||||
|
|
||||||
for (int i = 0; i < group.getDrawerCount(); ++i) {
|
for (int i = 0; i < group.getDrawerCount(); ++i) {
|
||||||
if (group.isDrawerEnabled(i)) {
|
if (group.isDrawerEnabled(i)) {
|
||||||
storages.add(new ItemStorageDrawer(this, group.getDrawer(i)));
|
itemStorages.add(new ItemStorageDrawer(this, group.getDrawer(i)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (facing instanceof IDrawer) {
|
} else if (facing instanceof IDrawer) {
|
||||||
storages.add(new ItemStorageDrawer(this, (IDrawer) facing));
|
itemStorages.add(new ItemStorageDrawer(this, (IDrawer) facing));
|
||||||
} else if (facing instanceof IDeepStorageUnit) {
|
} else if (facing instanceof IDeepStorageUnit) {
|
||||||
storages.add(new ItemStorageDSU(this, (IDeepStorageUnit) facing));
|
itemStorages.add(new ItemStorageDSU(this, (IDeepStorageUnit) facing));
|
||||||
} else {
|
} else {
|
||||||
IItemHandler handler = getItemHandler(facing, getDirection().getOpposite());
|
IItemHandler itemHandler = getItemHandler(facing, getDirection().getOpposite());
|
||||||
|
|
||||||
if (handler != null) {
|
if (itemHandler != null) {
|
||||||
storages.add(new ItemStorageItemHandler(this, handler));
|
itemStorages.add(new ItemStorageItemHandler(this, itemHandler));
|
||||||
|
}
|
||||||
|
|
||||||
|
IFluidHandler fluidHandler = getFluidHandler(facing, getDirection().getOpposite());
|
||||||
|
|
||||||
|
if (fluidHandler != null) {
|
||||||
|
for (IFluidTankProperties property : fluidHandler.getTankProperties()) {
|
||||||
|
fluidStorages.add(new FluidStorageExternal(this, fluidHandler, property));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
network.getItemStorage().rebuild();
|
network.getItemStorage().rebuild();
|
||||||
|
network.getFluidStorage().rebuild();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addItemStorages(List<IItemStorage> storages) {
|
public void addItemStorages(List<IItemStorage> storages) {
|
||||||
storages.addAll(this.storages);
|
storages.addAll(this.itemStorages);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addFluidStorages(List<IFluidStorage> storages) {
|
||||||
|
storages.addAll(this.fluidStorages);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -261,13 +316,33 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IItemHandler getFilters() {
|
public TileDataParameter<Integer> getTypeParameter() {
|
||||||
return filters;
|
return TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @TODO: Implement
|
|
||||||
@Override
|
@Override
|
||||||
public TileDataParameter<Integer> getTypeParameter() {
|
public int getType() {
|
||||||
return null;
|
return worldObj.isRemote ? TYPE.getValue() : type;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setType(int type) {
|
||||||
|
this.type = type;
|
||||||
|
|
||||||
|
markDirty();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IItemHandler getFilterInventory() {
|
||||||
|
return getType() == IType.ITEMS ? itemFilters : fluidFilters;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemHandlerBasic getItemFilters() {
|
||||||
|
return itemFilters;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemHandlerFluid getFluidFilters() {
|
||||||
|
return fluidFilters;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,6 @@ gui.refinedstorage:network_transmitter.distance=%d blocks
|
|||||||
gui.refinedstorage:network_transmitter.dimension=Dimension %d
|
gui.refinedstorage:network_transmitter.dimension=Dimension %d
|
||||||
gui.refinedstorage:network_transmitter.missing_card=Missing Network Card
|
gui.refinedstorage:network_transmitter.missing_card=Missing Network Card
|
||||||
gui.refinedstorage:network_transmitter.missing_upgrade=Insert upgrade
|
gui.refinedstorage:network_transmitter.missing_upgrade=Insert upgrade
|
||||||
gui.refinedstorage:fluid_disk_drive=Fluid Disk Drive
|
|
||||||
gui.refinedstorage:fluid_interface=Fluid Interface
|
gui.refinedstorage:fluid_interface=Fluid Interface
|
||||||
gui.refinedstorage:fluid_interface.in=In
|
gui.refinedstorage:fluid_interface.in=In
|
||||||
gui.refinedstorage:fluid_interface.out=Out
|
gui.refinedstorage:fluid_interface.out=Out
|
||||||
@@ -134,7 +133,6 @@ block.refinedstorage:crafter.name=Crafter
|
|||||||
block.refinedstorage:processing_pattern_encoder.name=Processing Pattern Encoder
|
block.refinedstorage:processing_pattern_encoder.name=Processing Pattern Encoder
|
||||||
block.refinedstorage:network_receiver.name=Network Receiver
|
block.refinedstorage:network_receiver.name=Network Receiver
|
||||||
block.refinedstorage:network_transmitter.name=Network Transmitter
|
block.refinedstorage:network_transmitter.name=Network Transmitter
|
||||||
block.refinedstorage:fluid_disk_drive.name=Fluid Disk Drive
|
|
||||||
block.refinedstorage:fluid_interface.name=Fluid Interface
|
block.refinedstorage:fluid_interface.name=Fluid Interface
|
||||||
|
|
||||||
item.refinedstorage:storage_disk.0.name=1k Storage Disk
|
item.refinedstorage:storage_disk.0.name=1k Storage Disk
|
||||||
|
|||||||
Reference in New Issue
Block a user