diff --git a/src/main/java/refinedstorage/RefinedStorageBlocks.java b/src/main/java/refinedstorage/RefinedStorageBlocks.java index 57e502b9c..113e8f3d8 100755 --- a/src/main/java/refinedstorage/RefinedStorageBlocks.java +++ b/src/main/java/refinedstorage/RefinedStorageBlocks.java @@ -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(); } \ No newline at end of file diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index 66cb97da5..4cb2a2354 100755 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -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; } diff --git a/src/main/java/refinedstorage/block/BlockExternalStorage.java b/src/main/java/refinedstorage/block/BlockExternalStorage.java index 37e0c6660..a41a50c27 100755 --- a/src/main/java/refinedstorage/block/BlockExternalStorage.java +++ b/src/main/java/refinedstorage/block/BlockExternalStorage.java @@ -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; diff --git a/src/main/java/refinedstorage/block/BlockFluidDiskDrive.java b/src/main/java/refinedstorage/block/BlockFluidDiskDrive.java deleted file mode 100755 index 71e3ea8b7..000000000 --- a/src/main/java/refinedstorage/block/BlockFluidDiskDrive.java +++ /dev/null @@ -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); - } -} diff --git a/src/main/java/refinedstorage/container/ContainerCrafter.java b/src/main/java/refinedstorage/container/ContainerCrafter.java index 0528c74f6..c7d44e702 100755 --- a/src/main/java/refinedstorage/container/ContainerCrafter.java +++ b/src/main/java/refinedstorage/container/ContainerCrafter.java @@ -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); diff --git a/src/main/java/refinedstorage/container/ContainerDiskDrive.java b/src/main/java/refinedstorage/container/ContainerDiskDrive.java index 30e04e79f..a39801384 100755 --- a/src/main/java/refinedstorage/container/ContainerDiskDrive.java +++ b/src/main/java/refinedstorage/container/ContainerDiskDrive.java @@ -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 diff --git a/src/main/java/refinedstorage/container/ContainerExternalStorage.java b/src/main/java/refinedstorage/container/ContainerExternalStorage.java new file mode 100755 index 000000000..d147b750d --- /dev/null +++ b/src/main/java/refinedstorage/container/ContainerExternalStorage.java @@ -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; + } +} diff --git a/src/main/java/refinedstorage/container/ContainerFluidDiskDrive.java b/src/main/java/refinedstorage/container/ContainerFluidDiskDrive.java deleted file mode 100755 index 81e6ffa92..000000000 --- a/src/main/java/refinedstorage/container/ContainerFluidDiskDrive.java +++ /dev/null @@ -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; - } -} diff --git a/src/main/java/refinedstorage/container/ContainerStorage.java b/src/main/java/refinedstorage/container/ContainerStorage.java index 3b76687fa..01f93d584 100755 --- a/src/main/java/refinedstorage/container/ContainerStorage.java +++ b/src/main/java/refinedstorage/container/ContainerStorage.java @@ -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); diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 812811bba..5f7adcb08 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -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: diff --git a/src/main/java/refinedstorage/gui/GuiStorage.java b/src/main/java/refinedstorage/gui/GuiStorage.java index 562977721..631f0d5e2 100755 --- a/src/main/java/refinedstorage/gui/GuiStorage.java +++ b/src/main/java/refinedstorage/gui/GuiStorage.java @@ -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); diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index d656f5f58..d5695a78e 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -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")); } } diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 2b2353c15..3c5ebbd82 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -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", diff --git a/src/main/java/refinedstorage/tile/IStorageGui.java b/src/main/java/refinedstorage/tile/IStorageGui.java index ded2b030e..3f5071497 100755 --- a/src/main/java/refinedstorage/tile/IStorageGui.java +++ b/src/main/java/refinedstorage/tile/IStorageGui.java @@ -8,14 +8,12 @@ public interface IStorageGui { IItemHandler getFilters(); + TileDataParameter getTypeParameter(); + TileDataParameter getRedstoneModeParameter(); TileDataParameter getCompareParameter(); - default boolean hasComparisonFor(int compare) { - return true; - } - TileDataParameter getFilterParameter(); TileDataParameter getPriorityParameter(); diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index d23fec347..95e63f5af 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -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 PRIORITY = IPrioritizable.createParameter(); public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); + public static final TileDataParameter TYPE = IType.createParameter(); public 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 storages) { - for (IItemStorage storage : this.storages) { + for (IItemStorage storage : this.itemStorages) { + if (storage != null) { + storages.add(storage); + } + } + } + + @Override + public void addFluidStorages(List 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 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; diff --git a/src/main/java/refinedstorage/tile/TileFluidDiskDrive.java b/src/main/java/refinedstorage/tile/TileFluidDiskDrive.java deleted file mode 100755 index 106e2157e..000000000 --- a/src/main/java/refinedstorage/tile/TileFluidDiskDrive.java +++ /dev/null @@ -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 PRIORITY = IPrioritizable.createParameter(); - public static final TileDataParameter COMPARE = IComparable.createParameter(); - public static final TileDataParameter 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 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 getRedstoneModeParameter() { - return REDSTONE_MODE; - } - - @Override - public TileDataParameter getCompareParameter() { - return COMPARE; - } - - @Override - public boolean hasComparisonFor(int compare) { - return compare == CompareUtils.COMPARE_NBT; - } - - @Override - public TileDataParameter getFilterParameter() { - return MODE; - } - - @Override - public TileDataParameter 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 getCapability(Capability 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); - } -} diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index 3eecb87fe..c041207e3 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -204,6 +204,11 @@ public class TileStorage extends TileNode implements IItemStorageProvider, IStor return filters; } + @Override + public TileDataParameter getTypeParameter() { + return null; + } + @Override public TileDataParameter getRedstoneModeParameter() { return REDSTONE_MODE; diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index b5e079e20..0691ceabc 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -264,4 +264,10 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora public IItemHandler getFilters() { return filters; } + + // @TODO: Implement + @Override + public TileDataParameter getTypeParameter() { + return null; + } }