Remove fluid disk drive, put that logic into disk drives

This commit is contained in:
Raoul Van den Berge
2016-08-15 16:07:51 +02:00
parent 5a51303a48
commit 475d19d9d4
18 changed files with 201 additions and 568 deletions

View File

@@ -24,6 +24,5 @@ public final class RefinedStorageBlocks {
public static final BlockProcessingPatternEncoder PROCESSING_PATTERN_ENCODER = new BlockProcessingPatternEncoder();
public static final BlockNetworkTransmitter NETWORK_TRANSMITTER = new BlockNetworkTransmitter();
public static final BlockNetworkReceiver NETWORK_RECEIVER = new BlockNetworkReceiver();
public static final BlockFluidDiskDrive FLUID_DISK_DRIVE = new BlockFluidDiskDrive();
public static final BlockFluidInterface FLUID_INTERFACE = new BlockFluidInterface();
}

View File

@@ -20,6 +20,6 @@ public final class RefinedStorageGui {
public static final int PROCESSING_PATTERN_ENCODER = 16;
public static final int GRID_FILTER = 17;
public static final int NETWORK_TRANSMITTER = 18;
public static final int FLUID_DISK_DRIVE = 19;
public static final int FLUID_INTERFACE = 20;
public static final int FLUID_INTERFACE = 19;
public static final int EXTERNAL_STORAGE = 20;
}

View File

@@ -75,7 +75,7 @@ public class BlockExternalStorage extends BlockCable {
}
if (!world.isRemote) {
player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.STORAGE, world, pos.getX(), pos.getY(), pos.getZ());
player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.EXTERNAL_STORAGE, world, pos.getX(), pos.getY(), pos.getZ());
}
return true;

View File

@@ -1,58 +0,0 @@
package refinedstorage.block;
import net.minecraft.block.properties.PropertyInteger;
import net.minecraft.block.state.BlockStateContainer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageGui;
import refinedstorage.tile.TileFluidDiskDrive;
public class BlockFluidDiskDrive extends BlockNode {
private static final PropertyInteger STORED = PropertyInteger.create("stored", 0, 7);
public BlockFluidDiskDrive() {
super("fluid_disk_drive");
}
@Override
public TileEntity createTileEntity(World world, IBlockState state) {
return new TileFluidDiskDrive();
}
@Override
public BlockStateContainer createBlockState() {
return createBlockStateBuilder()
.add(STORED)
.build();
}
@Override
public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) {
return super.getActualState(state, world, pos)
.withProperty(STORED, Math.max(0, ((TileFluidDiskDrive) world.getTileEntity(pos)).getStoredForDisplay()));
}
@Override
public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) {
if (!world.isRemote) {
player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.FLUID_DISK_DRIVE, world, pos.getX(), pos.getY(), pos.getZ());
}
return true;
}
@Override
public void breakBlock(World world, BlockPos pos, IBlockState state) {
((TileFluidDiskDrive) world.getTileEntity(pos)).onBreak();
super.breakBlock(world, pos, state);
}
}

View File

@@ -6,7 +6,7 @@ import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
import refinedstorage.tile.TileCrafter;
public class ContainerCrafter extends ContainerStorage {
public class ContainerCrafter extends ContainerBase {
public ContainerCrafter(TileCrafter crafter, EntityPlayer player) {
super(crafter, player);

View File

@@ -4,9 +4,10 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
import refinedstorage.container.slot.SlotSpecimenType;
import refinedstorage.tile.TileDiskDrive;
public class ContainerDiskDrive extends ContainerStorage {
public class ContainerDiskDrive extends ContainerBase {
public ContainerDiskDrive(TileDiskDrive drive, EntityPlayer player) {
super(drive, player);
@@ -18,7 +19,11 @@ public class ContainerDiskDrive extends ContainerStorage {
addSlotToContainer(new SlotItemHandler(drive.getDisks(), 4 + i, 98 + (i * 18), 96));
}
addFilterAndPlayerInventorySlots(drive.getFilters());
for (int i = 0; i < 9; ++i) {
addSlotToContainer(new SlotSpecimenType(drive, i, 8 + (18 * i), 20));
}
addPlayerInventory(8, 129);
}
@Override

View File

@@ -0,0 +1,30 @@
package refinedstorage.container;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import refinedstorage.container.slot.SlotSpecimen;
import refinedstorage.tile.externalstorage.TileExternalStorage;
public class ContainerExternalStorage extends ContainerBase {
public ContainerExternalStorage(TileExternalStorage tile, EntityPlayer player) {
super(tile, player);
for (int i = 0; i < 9; ++i) {
addSlotToContainer(new SlotSpecimen(tile.getFilters(), i, 8 + (18 * i), 20));
}
addPlayerInventory(8, 129);
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
Slot slot = getSlot(index);
if (slot != null && slot.getHasStack() && index >= 8) {
return mergeItemStackToSpecimen(slot.getStack(), 0, 9);
}
return null;
}
}

View File

@@ -1,50 +0,0 @@
package refinedstorage.container;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.SlotItemHandler;
import refinedstorage.tile.TileFluidDiskDrive;
public class ContainerFluidDiskDrive extends ContainerStorage {
public ContainerFluidDiskDrive(TileFluidDiskDrive drive, EntityPlayer player) {
super(drive, player);
for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotItemHandler(drive.getDisks(), i, 98 + (i * 18), 78));
}
for (int i = 0; i < 4; ++i) {
addSlotToContainer(new SlotItemHandler(drive.getDisks(), 4 + i, 98 + (i * 18), 96));
}
addFilterAndPlayerInventorySlots(drive.getFilters());
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
ItemStack stack = null;
Slot slot = getSlot(index);
if (slot != null && slot.getHasStack()) {
stack = slot.getStack();
if (index < 8) {
if (!mergeItemStack(stack, 8 + 9, inventorySlots.size(), false)) {
return null;
}
} else if (!mergeItemStack(stack, 0, 8, false)) {
return mergeItemStackToSpecimen(stack, 8, 8 + 9);
}
if (stack.stackSize == 0) {
slot.putStack(null);
} else {
slot.onSlotChanged();
}
}
return stack;
}
}

View File

@@ -3,26 +3,15 @@ package refinedstorage.container;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.items.IItemHandler;
import refinedstorage.container.slot.SlotSpecimen;
import refinedstorage.container.slot.SlotSpecimenFluid;
import refinedstorage.inventory.ItemHandlerFluid;
import refinedstorage.tile.TileBase;
import refinedstorage.tile.TileStorage;
public class ContainerStorage extends ContainerBase {
public ContainerStorage(TileBase tile, EntityPlayer player) {
public ContainerStorage(TileStorage tile, EntityPlayer player) {
super(tile, player);
}
public ContainerStorage(TileBase tile, EntityPlayer player, IItemHandler filters) {
this(tile, player);
addFilterAndPlayerInventorySlots(filters);
}
protected void addFilterAndPlayerInventorySlots(IItemHandler filters) {
for (int i = 0; i < 9; ++i) {
addSlotToContainer(filters instanceof ItemHandlerFluid ? new SlotSpecimenFluid(!getTile().getWorld().isRemote, filters, i, 8 + (18 * i), 20) : new SlotSpecimen(filters, i, 8 + (18 * i), 20));
addSlotToContainer(new SlotSpecimen(tile.getFilters(), i, 8 + (18 * i), 20));
}
addPlayerInventory(8, 129);

View File

@@ -11,6 +11,7 @@ import refinedstorage.RefinedStorageGui;
import refinedstorage.container.*;
import refinedstorage.gui.grid.GuiGrid;
import refinedstorage.tile.*;
import refinedstorage.tile.externalstorage.TileExternalStorage;
import refinedstorage.tile.grid.TileGrid;
import refinedstorage.tile.grid.WirelessGrid;
@@ -36,7 +37,9 @@ public class GuiHandler implements IGuiHandler {
case RefinedStorageGui.CONSTRUCTOR:
return new ContainerConstructor((TileConstructor) tile, player);
case RefinedStorageGui.STORAGE:
return new ContainerStorage((TileBase) tile, player, ((IStorageGui) tile).getFilters());
return new ContainerStorage((TileStorage) tile, player);
case RefinedStorageGui.EXTERNAL_STORAGE:
return new ContainerExternalStorage((TileExternalStorage) tile, player);
case RefinedStorageGui.RELAY:
return new ContainerRelay((TileRelay) tile, player);
case RefinedStorageGui.INTERFACE:
@@ -51,8 +54,6 @@ public class GuiHandler implements IGuiHandler {
return new ContainerProcessingPatternEncoder((TileProcessingPatternEncoder) tile, player);
case RefinedStorageGui.NETWORK_TRANSMITTER:
return new ContainerNetworkTransmitter((TileNetworkTransmitter) tile, player);
case RefinedStorageGui.FLUID_DISK_DRIVE:
return new ContainerFluidDiskDrive((TileFluidDiskDrive) tile, player);
case RefinedStorageGui.FLUID_INTERFACE:
return new ContainerFluidInterface((TileFluidInterface) tile, player);
default:
@@ -109,7 +110,9 @@ public class GuiHandler implements IGuiHandler {
case RefinedStorageGui.CONSTRUCTOR:
return new GuiConstructor((ContainerConstructor) getContainer(ID, player, tile));
case RefinedStorageGui.STORAGE:
return new GuiStorage((ContainerStorage) getContainer(ID, player, tile), (IStorageGui) tile);
return new GuiStorage((ContainerStorage) getContainer(ID, player, tile), (TileStorage) tile);
case RefinedStorageGui.EXTERNAL_STORAGE:
return new GuiStorage((ContainerExternalStorage) getContainer(ID, player, tile), (TileExternalStorage) tile);
case RefinedStorageGui.RELAY:
return new GuiRelay((ContainerRelay) getContainer(ID, player, tile));
case RefinedStorageGui.INTERFACE:
@@ -126,8 +129,6 @@ public class GuiHandler implements IGuiHandler {
return new GuiGridFilter(getGridFilterContainer(player, x));
case RefinedStorageGui.NETWORK_TRANSMITTER:
return new GuiNetworkTransmitter((ContainerNetworkTransmitter) getContainer(ID, player, tile), (TileNetworkTransmitter) tile);
case RefinedStorageGui.FLUID_DISK_DRIVE:
return new GuiStorage((ContainerFluidDiskDrive) getContainer(ID, player, tile), (IStorageGui) tile, "gui/disk_drive.png");
case RefinedStorageGui.FLUID_INTERFACE:
return new GuiFluidInterface((ContainerFluidInterface) getContainer(ID, player, tile));
default:

View File

@@ -3,10 +3,11 @@ package refinedstorage.gui;
import com.google.common.primitives.Ints;
import net.minecraft.client.gui.GuiTextField;
import refinedstorage.api.storage.CompareUtils;
import refinedstorage.container.ContainerStorage;
import refinedstorage.container.ContainerBase;
import refinedstorage.gui.sidebutton.SideButtonCompare;
import refinedstorage.gui.sidebutton.SideButtonMode;
import refinedstorage.gui.sidebutton.SideButtonRedstoneMode;
import refinedstorage.gui.sidebutton.SideButtonType;
import refinedstorage.tile.IStorageGui;
import refinedstorage.tile.data.TileDataManager;
@@ -23,14 +24,14 @@ public class GuiStorage extends GuiBase {
private int barWidth = 16;
private int barHeight = 58;
public GuiStorage(ContainerStorage container, IStorageGui gui, String texture) {
public GuiStorage(ContainerBase container, IStorageGui gui, String texture) {
super(container, 176, 211);
this.gui = gui;
this.texture = texture;
}
public GuiStorage(ContainerStorage container, IStorageGui gui) {
public GuiStorage(ContainerBase container, IStorageGui gui) {
this(container, gui, "gui/storage.png");
}
@@ -40,18 +41,17 @@ public class GuiStorage extends GuiBase {
addSideButton(new SideButtonRedstoneMode(gui.getRedstoneModeParameter()));
}
if (gui.getTypeParameter() != null) {
addSideButton(new SideButtonType(gui.getTypeParameter()));
}
if (gui.getFilterParameter() != null) {
addSideButton(new SideButtonMode(gui.getFilterParameter()));
}
if (gui.getCompareParameter() != null) {
if (gui.hasComparisonFor(CompareUtils.COMPARE_DAMAGE)) {
addSideButton(new SideButtonCompare(gui.getCompareParameter(), CompareUtils.COMPARE_DAMAGE));
}
if (gui.hasComparisonFor(CompareUtils.COMPARE_NBT)) {
addSideButton(new SideButtonCompare(gui.getCompareParameter(), CompareUtils.COMPARE_NBT));
}
addSideButton(new SideButtonCompare(gui.getCompareParameter(), CompareUtils.COMPARE_DAMAGE));
addSideButton(new SideButtonCompare(gui.getCompareParameter(), CompareUtils.COMPARE_NBT));
}
priorityField = new GuiTextField(0, fontRendererObj, x + 98 + 1, y + 54 + 1, 25, fontRendererObj.FONT_HEIGHT);

View File

@@ -257,6 +257,5 @@ public class ClientProxy extends CommonProxy {
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_16K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=16k"));
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_64K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=64k"));
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_CREATIVE.getId(), new ModelResourceLocation("refinedstorage:storage", "type=creative"));
ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE), 0, new ModelResourceLocation("refinedstorage:disk_drive", "inventory"));
}
}

View File

@@ -85,7 +85,6 @@ public class CommonProxy {
registerTile(TileCable.class, "cable");
registerTile(TileNetworkReceiver.class, "network_receiver");
registerTile(TileNetworkTransmitter.class, "network_transmitter");
registerTile(TileFluidDiskDrive.class, "fluid_disk_drive");
registerTile(TileFluidInterface.class, "fluid_interface");
registerBlock(RefinedStorageBlocks.CONTROLLER);
@@ -109,7 +108,6 @@ public class CommonProxy {
registerBlock(RefinedStorageBlocks.MACHINE_CASING);
registerBlock(RefinedStorageBlocks.NETWORK_TRANSMITTER);
registerBlock(RefinedStorageBlocks.NETWORK_RECEIVER);
registerBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE);
registerBlock(RefinedStorageBlocks.FLUID_INTERFACE);
registerItem(RefinedStorageItems.QUARTZ_ENRICHED_IRON);
@@ -206,15 +204,6 @@ public class CommonProxy {
new ItemStack(Blocks.CHEST)
));
// Fluid Disk Drive
RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeBasic(
new ItemStack(RefinedStorageBlocks.FLUID_DISK_DRIVE),
500,
new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED),
new ItemStack(RefinedStorageBlocks.MACHINE_CASING),
new ItemStack(Items.BUCKET)
));
// Cable
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(RefinedStorageBlocks.CABLE, 12),
"EEE",

View File

@@ -8,14 +8,12 @@ public interface IStorageGui {
IItemHandler getFilters();
TileDataParameter<Integer> getTypeParameter();
TileDataParameter<Integer> getRedstoneModeParameter();
TileDataParameter<Integer> getCompareParameter();
default boolean hasComparisonFor(int compare) {
return true;
}
TileDataParameter<Integer> getFilterParameter();
TileDataParameter<Integer> getPriorityParameter();

View File

@@ -4,6 +4,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.items.CapabilityItemHandler;
@@ -12,23 +13,31 @@ import net.minecraftforge.items.ItemHandlerHelper;
import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageItems;
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.IItemStorageProvider;
import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT;
import refinedstorage.apiimpl.storage.fluid.FluidUtils;
import refinedstorage.apiimpl.storage.item.ItemStorageNBT;
import refinedstorage.block.EnumFluidStorageType;
import refinedstorage.block.EnumItemStorageType;
import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.inventory.ItemHandlerFluid;
import refinedstorage.inventory.ItemValidatorBasic;
import refinedstorage.tile.config.IComparable;
import refinedstorage.tile.config.IFilterable;
import refinedstorage.tile.config.IPrioritizable;
import refinedstorage.tile.config.IType;
import refinedstorage.tile.data.TileDataParameter;
import java.util.List;
public class TileDiskDrive extends TileNode implements IItemStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable {
public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFluidStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable, IType {
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 class ItemStorage extends ItemStorageNBT {
public ItemStorage(ItemStack disk) {
@@ -42,7 +51,7 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt
@Override
public ItemStack insertItem(ItemStack stack, int size, boolean simulate) {
if (!IFilterable.canTake(getFilters(), mode, getCompare(), stack)) {
if (!IFilterable.canTake(itemFilters, mode, getCompare(), stack)) {
return ItemHandlerHelper.copyStackWithSize(stack, size);
}
@@ -50,16 +59,42 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt
}
}
public class FluidStorage extends FluidStorageNBT {
public FluidStorage(ItemStack disk) {
super(disk.getTagCompound(), EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity(), TileDiskDrive.this);
}
@Override
public int getPriority() {
return priority;
}
@Override
public FluidStack insertFluid(FluidStack stack, int size, boolean simulate) {
if (!IFilterable.canTakeFluids(fluidFilters, mode, getCompare(), stack)) {
return FluidUtils.copyStackWithSize(stack, size);
}
return super.insertFluid(stack, size, simulate);
}
}
private static final String NBT_PRIORITY = "Priority";
private static final String NBT_COMPARE = "Compare";
private static final String NBT_MODE = "Mode";
private static final String NBT_STORED = "Stored";
private static final String NBT_TYPE = "Type";
private ItemHandlerBasic disks = new ItemHandlerBasic(8, this, new ItemValidatorBasic(RefinedStorageItems.STORAGE_DISK) {
@Override
public boolean isValid(ItemStack disk) {
return super.isValid(disk) && ItemStorageNBT.isValid(disk);
}
}, new ItemValidatorBasic(RefinedStorageItems.FLUID_STORAGE_DISK) {
@Override
public boolean isValid(ItemStack disk) {
return super.isValid(disk) && FluidStorageNBT.isValid(disk);
}
}) {
@Override
protected void onContentsChanged(int slot) {
@@ -69,40 +104,56 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt
ItemStack disk = getStackInSlot(slot);
if (disk == null) {
storages[slot] = null;
itemStorages[slot] = null;
fluidStorages[slot] = null;
} else {
storages[slot] = new ItemStorage(disk);
if (disk.getItem() == RefinedStorageItems.STORAGE_DISK) {
itemStorages[slot] = new ItemStorage(disk);
} else if (disk.getItem() == RefinedStorageItems.FLUID_STORAGE_DISK) {
fluidStorages[slot] = new FluidStorage(disk);
}
}
if (network != null) {
network.getItemStorage().rebuild();
network.getFluidStorage().rebuild();
}
}
}
@Override
public ItemStack extractItem(int slot, int amount, boolean simulate) {
if (storages[slot] != null) {
storages[slot].writeToNBT();
if (itemStorages[slot] != null) {
itemStorages[slot].writeToNBT();
}
if (fluidStorages[slot] != null) {
fluidStorages[slot].writeToNBT();
}
return super.extractItem(slot, amount, simulate);
}
};
private ItemHandlerBasic filters = new ItemHandlerBasic(9, this);
private ItemHandlerBasic itemFilters = new ItemHandlerBasic(9, this);
private ItemHandlerFluid fluidFilters = new ItemHandlerFluid(9, this);
private ItemStorage storages[] = new ItemStorage[8];
private ItemStorage itemStorages[] = new ItemStorage[8];
private FluidStorage fluidStorages[] = new FluidStorage[8];
private int priority = 0;
private int compare = 0;
private int mode = IFilterable.WHITELIST;
private int type = IType.ITEMS;
private int stored = 0;
public TileDiskDrive() {
dataManager.addWatchedParameter(PRIORITY);
dataManager.addWatchedParameter(COMPARE);
dataManager.addWatchedParameter(MODE);
dataManager.addWatchedParameter(TYPE);
}
@Override
@@ -136,7 +187,13 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt
}
public void onBreak() {
for (ItemStorage storage : this.storages) {
for (ItemStorage storage : this.itemStorages) {
if (storage != null) {
storage.writeToNBT();
}
}
for (FluidStorage storage : this.fluidStorages) {
if (storage != null) {
storage.writeToNBT();
}
@@ -148,11 +205,21 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt
super.onConnectionChange(network, state);
network.getItemStorage().rebuild();
network.getFluidStorage().rebuild();
}
@Override
public void addItemStorages(List<IItemStorage> storages) {
for (IItemStorage storage : this.storages) {
for (IItemStorage storage : this.itemStorages) {
if (storage != null) {
storages.add(storage);
}
}
}
@Override
public void addFluidStorages(List<IFluidStorage> storages) {
for (IFluidStorage storage : this.fluidStorages) {
if (storage != null) {
storages.add(storage);
}
@@ -164,7 +231,8 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt
super.read(tag);
readItems(disks, 0, tag);
readItems(filters, 1, tag);
readItems(itemFilters, 1, tag);
readItems(fluidFilters, 2, tag);
if (tag.hasKey(NBT_PRIORITY)) {
priority = tag.getInteger(NBT_PRIORITY);
@@ -177,6 +245,10 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt
if (tag.hasKey(NBT_MODE)) {
mode = tag.getInteger(NBT_MODE);
}
if (tag.hasKey(NBT_TYPE)) {
type = tag.getInteger(NBT_TYPE);
}
}
@Override
@@ -184,17 +256,23 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt
super.write(tag);
for (int i = 0; i < disks.getSlots(); ++i) {
if (storages[i] != null) {
storages[i].writeToNBT();
if (itemStorages[i] != null) {
itemStorages[i].writeToNBT();
}
if (fluidStorages[i] != null) {
fluidStorages[i].writeToNBT();
}
}
writeItems(disks, 0, tag);
writeItems(filters, 1, tag);
writeItems(itemFilters, 1, tag);
writeItems(fluidFilters, 2, tag);
tag.setInteger(NBT_PRIORITY, priority);
tag.setInteger(NBT_COMPARE, compare);
tag.setInteger(NBT_MODE, mode);
tag.setInteger(NBT_TYPE, type);
return tag;
}
@@ -241,28 +319,28 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt
public int getStoredForDisplayServer() {
float stored = 0;
float storedMax = 0;
float capacity = 0;
for (int i = 0; i < disks.getSlots(); ++i) {
ItemStack disk = disks.getStackInSlot(i);
if (disk != null) {
int capacity = EnumItemStorageType.getById(disk.getItemDamage()).getCapacity();
int diskCapacity = disk.getItem() == RefinedStorageItems.STORAGE_DISK ? EnumItemStorageType.getById(disk.getItemDamage()).getCapacity() : EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity();
if (capacity == -1) {
return 0;
}
stored += ItemStorageNBT.getStoredFromNBT(disk.getTagCompound());
storedMax += EnumItemStorageType.getById(disk.getItemDamage()).getCapacity();
stored += disk.getItem() == RefinedStorageItems.STORAGE_DISK ? ItemStorageNBT.getStoredFromNBT(disk.getTagCompound()) : FluidStorageNBT.getStoredFromNBT(disk.getTagCompound());
capacity += diskCapacity;
}
}
if (storedMax == 0) {
if (capacity == 0) {
return 0;
}
return (int) Math.floor((stored / storedMax) * 7f);
return (int) Math.floor((stored / capacity) * 7F);
}
public int getStoredForDisplay() {
@@ -276,7 +354,12 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt
@Override
public IItemHandler getFilters() {
return filters;
return itemFilters;
}
@Override
public TileDataParameter<Integer> getTypeParameter() {
return TYPE;
}
@Override
@@ -316,10 +399,10 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt
int stored = 0;
for (int i = 0; i < disks.getSlots(); ++i) {
ItemStack stack = disks.getStackInSlot(i);
ItemStack disk = disks.getStackInSlot(i);
if (stack != null) {
stored += ItemStorageNBT.getStoredFromNBT(stack.getTagCompound());
if (disk != null) {
stored += disk.getItem() == RefinedStorageItems.STORAGE_DISK ? ItemStorageNBT.getStoredFromNBT(disk.getTagCompound()) : FluidStorageNBT.getStoredFromNBT(disk.getTagCompound());
}
}
@@ -331,10 +414,10 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt
int capacity = 0;
for (int i = 0; i < disks.getSlots(); ++i) {
ItemStack stack = disks.getStackInSlot(i);
ItemStack disk = disks.getStackInSlot(i);
if (stack != null) {
int diskCapacity = EnumItemStorageType.getById(stack.getItemDamage()).getCapacity();
if (disk != null) {
int diskCapacity = disk.getItem() == RefinedStorageItems.STORAGE_DISK ? EnumItemStorageType.getById(disk.getItemDamage()).getCapacity() : EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity();
if (diskCapacity == -1) {
return -1;
@@ -351,6 +434,23 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt
return disks;
}
@Override
public int getType() {
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;
}
@Override
public IItemHandler getDrops() {
return disks;

View File

@@ -1,380 +0,0 @@
package refinedstorage.tile;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.Capability;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.items.CapabilityItemHandler;
import net.minecraftforge.items.IItemHandler;
import refinedstorage.RefinedStorage;
import refinedstorage.RefinedStorageItems;
import refinedstorage.api.network.INetworkMaster;
import refinedstorage.api.storage.CompareUtils;
import refinedstorage.api.storage.fluid.IFluidStorage;
import refinedstorage.api.storage.fluid.IFluidStorageProvider;
import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT;
import refinedstorage.apiimpl.storage.fluid.FluidUtils;
import refinedstorage.block.EnumFluidStorageType;
import refinedstorage.inventory.ItemHandlerBasic;
import refinedstorage.inventory.ItemHandlerFluid;
import refinedstorage.inventory.ItemValidatorBasic;
import refinedstorage.tile.config.IComparable;
import refinedstorage.tile.config.IFilterable;
import refinedstorage.tile.config.IPrioritizable;
import refinedstorage.tile.data.TileDataParameter;
import java.util.List;
public class TileFluidDiskDrive extends TileNode implements IFluidStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable {
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 class FluidStorage extends FluidStorageNBT {
public FluidStorage(ItemStack disk) {
super(disk.getTagCompound(), EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity(), TileFluidDiskDrive.this);
}
@Override
public int getPriority() {
return priority;
}
@Override
public FluidStack insertFluid(FluidStack stack, int size, boolean simulate) {
if (!IFilterable.canTakeFluids(filters, mode, getCompare(), stack)) {
return FluidUtils.copyStackWithSize(stack, size);
}
return super.insertFluid(stack, size, simulate);
}
}
private static final String NBT_PRIORITY = "Priority";
private static final String NBT_COMPARE = "Compare";
private static final String NBT_MODE = "Mode";
private static final String NBT_STORED = "Stored";
private ItemHandlerBasic disks = new ItemHandlerBasic(8, this, new ItemValidatorBasic(RefinedStorageItems.FLUID_STORAGE_DISK) {
@Override
public boolean isValid(ItemStack disk) {
return super.isValid(disk) && FluidStorageNBT.isValid(disk);
}
}) {
@Override
protected void onContentsChanged(int slot) {
super.onContentsChanged(slot);
if (FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER) {
ItemStack disk = getStackInSlot(slot);
if (disk == null) {
storages[slot] = null;
} else {
storages[slot] = new FluidStorage(disk);
}
if (network != null) {
network.getFluidStorage().rebuild();
}
}
}
@Override
public ItemStack extractItem(int slot, int amount, boolean simulate) {
if (storages[slot] != null) {
storages[slot].writeToNBT();
}
return super.extractItem(slot, amount, simulate);
}
};
private ItemHandlerFluid filters = new ItemHandlerFluid(9, this);
private FluidStorage storages[] = new FluidStorage[8];
private int priority = 0;
private int compare = 0;
private int mode = IFilterable.WHITELIST;
private int stored = 0;
public TileFluidDiskDrive() {
dataManager.addWatchedParameter(PRIORITY);
dataManager.addWatchedParameter(COMPARE);
dataManager.addWatchedParameter(MODE);
}
@Override
public void update() {
if (!worldObj.isRemote) {
if (stored != getStoredForDisplayServer()) {
stored = getStoredForDisplayServer();
updateBlock();
}
}
super.update();
}
@Override
public int getEnergyUsage() {
int usage = RefinedStorage.INSTANCE.fluidDiskDriveUsage;
for (int i = 0; i < disks.getSlots(); ++i) {
if (disks.getStackInSlot(i) != null) {
usage += RefinedStorage.INSTANCE.fluidDiskDrivePerDiskUsage;
}
}
return usage;
}
@Override
public void updateNode() {
}
public void onBreak() {
for (FluidStorage storage : this.storages) {
if (storage != null) {
storage.writeToNBT();
}
}
}
@Override
public void onConnectionChange(INetworkMaster network, boolean state) {
super.onConnectionChange(network, state);
network.getFluidStorage().rebuild();
}
@Override
public void addFluidStorages(List<IFluidStorage> storages) {
for (IFluidStorage storage : this.storages) {
if (storage != null) {
storages.add(storage);
}
}
}
@Override
public void read(NBTTagCompound tag) {
super.read(tag);
readItems(disks, 0, tag);
readItems(filters, 1, tag);
if (tag.hasKey(NBT_PRIORITY)) {
priority = tag.getInteger(NBT_PRIORITY);
}
if (tag.hasKey(NBT_COMPARE)) {
compare = tag.getInteger(NBT_COMPARE);
}
if (tag.hasKey(NBT_MODE)) {
mode = tag.getInteger(NBT_MODE);
}
}
@Override
public NBTTagCompound write(NBTTagCompound tag) {
super.write(tag);
for (int i = 0; i < disks.getSlots(); ++i) {
if (storages[i] != null) {
storages[i].writeToNBT();
}
}
writeItems(disks, 0, tag);
writeItems(filters, 1, tag);
tag.setInteger(NBT_PRIORITY, priority);
tag.setInteger(NBT_COMPARE, compare);
tag.setInteger(NBT_MODE, mode);
return tag;
}
@Override
public NBTTagCompound writeUpdate(NBTTagCompound tag) {
super.writeUpdate(tag);
tag.setInteger(NBT_STORED, stored);
return tag;
}
@Override
public void readUpdate(NBTTagCompound tag) {
stored = tag.getInteger(NBT_STORED);
super.readUpdate(tag);
}
@Override
public int getCompare() {
return compare;
}
@Override
public void setCompare(int compare) {
this.compare = compare;
markDirty();
}
@Override
public int getMode() {
return mode;
}
@Override
public void setMode(int mode) {
this.mode = mode;
markDirty();
}
public int getStoredForDisplayServer() {
float stored = 0;
float storedMax = 0;
for (int i = 0; i < disks.getSlots(); ++i) {
ItemStack disk = disks.getStackInSlot(i);
if (disk != null) {
int capacity = EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity();
if (capacity == -1) {
return 0;
}
stored += FluidStorageNBT.getStoredFromNBT(disk.getTagCompound());
storedMax += EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity();
}
}
if (storedMax == 0) {
return 0;
}
return (int) Math.floor((stored / storedMax) * 7f);
}
public int getStoredForDisplay() {
return stored;
}
@Override
public String getGuiTitle() {
return "block.refinedstorage:fluid_disk_drive.name";
}
@Override
public IItemHandler getFilters() {
return filters;
}
@Override
public TileDataParameter<Integer> getRedstoneModeParameter() {
return REDSTONE_MODE;
}
@Override
public TileDataParameter<Integer> getCompareParameter() {
return COMPARE;
}
@Override
public boolean hasComparisonFor(int compare) {
return compare == CompareUtils.COMPARE_NBT;
}
@Override
public TileDataParameter<Integer> getFilterParameter() {
return MODE;
}
@Override
public TileDataParameter<Integer> getPriorityParameter() {
return PRIORITY;
}
@Override
public int getPriority() {
return priority;
}
@Override
public void setPriority(int priority) {
this.priority = priority;
markDirty();
}
@Override
public int getStored() {
int stored = 0;
for (int i = 0; i < disks.getSlots(); ++i) {
ItemStack stack = disks.getStackInSlot(i);
if (stack != null) {
stored += FluidStorageNBT.getStoredFromNBT(stack.getTagCompound());
}
}
return stored;
}
@Override
public int getCapacity() {
int capacity = 0;
for (int i = 0; i < disks.getSlots(); ++i) {
ItemStack stack = disks.getStackInSlot(i);
if (stack != null) {
int diskCapacity = EnumFluidStorageType.getById(stack.getItemDamage()).getCapacity();
if (diskCapacity == -1) {
return -1;
}
capacity += diskCapacity;
}
}
return capacity;
}
public IItemHandler getDisks() {
return disks;
}
@Override
public IItemHandler getDrops() {
return disks;
}
@Override
public <T> T getCapability(Capability<T> capability, EnumFacing facing) {
if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) {
return (T) disks;
}
return super.getCapability(capability, facing);
}
@Override
public boolean hasCapability(Capability<?> capability, EnumFacing facing) {
return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing);
}
}

View File

@@ -204,6 +204,11 @@ public class TileStorage extends TileNode implements IItemStorageProvider, IStor
return filters;
}
@Override
public TileDataParameter<Integer> getTypeParameter() {
return null;
}
@Override
public TileDataParameter<Integer> getRedstoneModeParameter() {
return REDSTONE_MODE;

View File

@@ -264,4 +264,10 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora
public IItemHandler getFilters() {
return filters;
}
// @TODO: Implement
@Override
public TileDataParameter<Integer> getTypeParameter() {
return null;
}
}