From 184c588a7ab864f9d4ff824bf477f205a0237da5 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 14 Aug 2016 00:58:05 +0200 Subject: [PATCH] Remove all specialized fluid tiles to the "real" tile with a toggle for fluids/items --- .../java/refinedstorage/RefinedStorage.java | 6 - .../refinedstorage/RefinedStorageBlocks.java | 3 - .../refinedstorage/RefinedStorageGui.java | 3 - .../block/BlockFluidConstructor.java | 37 ---- .../block/BlockFluidDestructor.java | 37 ---- .../block/BlockFluidImporter.java | 37 ---- .../container/ContainerBase.java | 2 +- .../container/ContainerConstructor.java | 3 +- .../container/ContainerDestructor.java | 3 +- .../container/ContainerFluidConstructor.java | 49 ------ .../container/ContainerFluidDestructor.java | 51 ------ .../container/ContainerFluidImporter.java | 51 ------ .../container/ContainerImporter.java | 4 +- .../container/slot/SlotSpecimenFluid.java | 23 +-- .../container/slot/SlotSpecimenType.java | 40 +++++ .../refinedstorage/gui/GuiConstructor.java | 3 + .../refinedstorage/gui/GuiDestructor.java | 3 + .../gui/GuiFluidConstructor.java | 37 ---- .../gui/GuiFluidDestructor.java | 40 ----- .../refinedstorage/gui/GuiFluidImporter.java | 40 ----- .../java/refinedstorage/gui/GuiHandler.java | 12 -- .../java/refinedstorage/gui/GuiImporter.java | 3 + .../gui/sidebutton/SideButtonType.java | 29 ++++ .../refinedstorage/proxy/ClientProxy.java | 3 - .../refinedstorage/proxy/CommonProxy.java | 38 ---- .../refinedstorage/tile/TileConstructor.java | 97 ++++++++--- .../refinedstorage/tile/TileDestructor.java | 107 +++++++++--- .../tile/TileFluidConstructor.java | 132 -------------- .../tile/TileFluidDestructor.java | 162 ------------------ .../tile/TileFluidImporter.java | 142 --------------- .../refinedstorage/tile/TileImporter.java | 103 +++++++---- .../refinedstorage/tile/config/IType.java | 40 +++++ .../blockstates/fluid_constructor.json | 83 --------- .../blockstates/fluid_destructor.json | 83 --------- .../blockstates/fluid_importer.json | 82 --------- .../assets/refinedstorage/lang/en_US.lang | 10 +- .../textures/blocks/fluid_constructor.png | Bin 711 -> 0 bytes .../textures/blocks/fluid_destructor.png | Bin 638 -> 0 bytes 38 files changed, 372 insertions(+), 1226 deletions(-) delete mode 100755 src/main/java/refinedstorage/block/BlockFluidConstructor.java delete mode 100755 src/main/java/refinedstorage/block/BlockFluidDestructor.java delete mode 100755 src/main/java/refinedstorage/block/BlockFluidImporter.java delete mode 100755 src/main/java/refinedstorage/container/ContainerFluidConstructor.java delete mode 100755 src/main/java/refinedstorage/container/ContainerFluidDestructor.java delete mode 100755 src/main/java/refinedstorage/container/ContainerFluidImporter.java create mode 100755 src/main/java/refinedstorage/container/slot/SlotSpecimenType.java delete mode 100755 src/main/java/refinedstorage/gui/GuiFluidConstructor.java delete mode 100755 src/main/java/refinedstorage/gui/GuiFluidDestructor.java delete mode 100755 src/main/java/refinedstorage/gui/GuiFluidImporter.java create mode 100755 src/main/java/refinedstorage/gui/sidebutton/SideButtonType.java delete mode 100755 src/main/java/refinedstorage/tile/TileFluidConstructor.java delete mode 100755 src/main/java/refinedstorage/tile/TileFluidDestructor.java delete mode 100755 src/main/java/refinedstorage/tile/TileFluidImporter.java create mode 100755 src/main/java/refinedstorage/tile/config/IType.java delete mode 100755 src/main/resources/assets/refinedstorage/blockstates/fluid_constructor.json delete mode 100755 src/main/resources/assets/refinedstorage/blockstates/fluid_destructor.json delete mode 100755 src/main/resources/assets/refinedstorage/blockstates/fluid_importer.json delete mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/fluid_constructor.png delete mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/fluid_destructor.png diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index b3d749c36..34a5f9d5b 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -44,12 +44,10 @@ public final class RefinedStorage { public int controllerBaseUsage; public int cableUsage; public int constructorUsage; - public int fluidConstructorUsage; public int crafterUsage; public int crafterPerPatternUsage; public int craftingMonitorUsage; public int destructorUsage; - public int fluidDestructorUsage; public int detectorUsage; public int diskDriveUsage; public int diskDrivePerDiskUsage; @@ -59,7 +57,6 @@ public final class RefinedStorage { public int externalStoragePerStorageUsage; public int exporterUsage; public int importerUsage; - public int fluidImporterUsage; public int interfaceUsage; public int relayUsage; public int soldererUsage; @@ -94,12 +91,10 @@ public final class RefinedStorage { controllerBaseUsage = config.getInt("controllerBase", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by the Controller"); cableUsage = config.getInt("cable", "energy", 0, 0, Integer.MAX_VALUE, "The energy used by Cables"); constructorUsage = config.getInt("constructor", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Constructors"); - fluidConstructorUsage = config.getInt("fluidConstructor", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Fluid Constructors"); crafterUsage = config.getInt("crafter", "energy", 2, 0, Integer.MAX_VALUE, "The base energy used by Crafters"); crafterPerPatternUsage = config.getInt("crafterPerPattern", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used per Pattern in a Crafter"); craftingMonitorUsage = config.getInt("craftingMonitor", "energy", 2, 0, Integer.MAX_VALUE, "The energy used by Crafting Monitors"); destructorUsage = config.getInt("destructor", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Destructors"); - fluidDestructorUsage = config.getInt("fluidDestructor", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Fluid Destructors"); 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"); diskDrivePerDiskUsage = config.getInt("diskDrivePerDisk", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used by Storage Disks in Disk Drives"); @@ -109,7 +104,6 @@ public final class RefinedStorage { 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"); importerUsage = config.getInt("importer", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Importers"); - fluidImporterUsage = config.getInt("fluidImporter", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Fluid Importers"); interfaceUsage = config.getInt("interface", "energy", 3, 0, Integer.MAX_VALUE, "The energy used by Interfaces"); relayUsage = config.getInt("relay", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Relays"); soldererUsage = config.getInt("solderer", "energy", 3, 0, Integer.MAX_VALUE, "The energy used by Solderers"); diff --git a/src/main/java/refinedstorage/RefinedStorageBlocks.java b/src/main/java/refinedstorage/RefinedStorageBlocks.java index 422e2df0d..44bfb25e2 100755 --- a/src/main/java/refinedstorage/RefinedStorageBlocks.java +++ b/src/main/java/refinedstorage/RefinedStorageBlocks.java @@ -25,7 +25,4 @@ public final class RefinedStorageBlocks { 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 BlockFluidConstructor FLUID_CONSTRUCTOR = new BlockFluidConstructor(); - public static final BlockFluidDestructor FLUID_DESTRUCTOR = new BlockFluidDestructor(); - public static final BlockFluidImporter FLUID_IMPORTER = new BlockFluidImporter(); } \ No newline at end of file diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index 900d19510..4ff36a937 100755 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -21,7 +21,4 @@ public final class RefinedStorageGui { 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_CONSTRUCTOR = 20; - public static final int FLUID_DESTRUCTOR = 21; - public static final int FLUID_IMPORTER = 22; } diff --git a/src/main/java/refinedstorage/block/BlockFluidConstructor.java b/src/main/java/refinedstorage/block/BlockFluidConstructor.java deleted file mode 100755 index 40d6c39cf..000000000 --- a/src/main/java/refinedstorage/block/BlockFluidConstructor.java +++ /dev/null @@ -1,37 +0,0 @@ -package refinedstorage.block; - -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.World; -import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageGui; -import refinedstorage.tile.TileFluidConstructor; - -public class BlockFluidConstructor extends BlockConstructor { - public BlockFluidConstructor() { - super("fluid_constructor"); - } - - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileFluidConstructor(); - } - - @Override - public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { - if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) { - return false; - } - - if (!world.isRemote) { - player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.FLUID_CONSTRUCTOR, world, pos.getX(), pos.getY(), pos.getZ()); - } - - return true; - } -} diff --git a/src/main/java/refinedstorage/block/BlockFluidDestructor.java b/src/main/java/refinedstorage/block/BlockFluidDestructor.java deleted file mode 100755 index 2a0c8999d..000000000 --- a/src/main/java/refinedstorage/block/BlockFluidDestructor.java +++ /dev/null @@ -1,37 +0,0 @@ -package refinedstorage.block; - -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.World; -import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageGui; -import refinedstorage.tile.TileFluidDestructor; - -public class BlockFluidDestructor extends BlockDestructor { - public BlockFluidDestructor() { - super("fluid_destructor"); - } - - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileFluidDestructor(); - } - - @Override - public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { - if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) { - return false; - } - - if (!world.isRemote) { - player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.FLUID_DESTRUCTOR, world, pos.getX(), pos.getY(), pos.getZ()); - } - - return true; - } -} diff --git a/src/main/java/refinedstorage/block/BlockFluidImporter.java b/src/main/java/refinedstorage/block/BlockFluidImporter.java deleted file mode 100755 index b9857e581..000000000 --- a/src/main/java/refinedstorage/block/BlockFluidImporter.java +++ /dev/null @@ -1,37 +0,0 @@ -package refinedstorage.block; - -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.World; -import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageGui; -import refinedstorage.tile.TileFluidImporter; - -public class BlockFluidImporter extends BlockImporter { - public BlockFluidImporter() { - super("fluid_importer"); - } - - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileFluidImporter(); - } - - @Override - public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { - if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) { - return false; - } - - if (!world.isRemote) { - player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.FLUID_IMPORTER, world, pos.getX(), pos.getY(), pos.getZ()); - } - - return true; - } -} diff --git a/src/main/java/refinedstorage/container/ContainerBase.java b/src/main/java/refinedstorage/container/ContainerBase.java index 896b211e5..3a9cf64ad 100755 --- a/src/main/java/refinedstorage/container/ContainerBase.java +++ b/src/main/java/refinedstorage/container/ContainerBase.java @@ -115,7 +115,7 @@ public abstract class ContainerBase extends Container { } for (int i = begin; i < end; ++i) { - if (!getSlot(i).getHasStack()) { + if (!getSlot(i).getHasStack() && getSlot(i).isItemValid(stack)) { getSlot(i).putStack(ItemHandlerHelper.copyStackWithSize(stack, 1)); getSlot(i).onSlotChanged(); diff --git a/src/main/java/refinedstorage/container/ContainerConstructor.java b/src/main/java/refinedstorage/container/ContainerConstructor.java index 562fa6c0b..de12f58ed 100755 --- a/src/main/java/refinedstorage/container/ContainerConstructor.java +++ b/src/main/java/refinedstorage/container/ContainerConstructor.java @@ -5,6 +5,7 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.SlotItemHandler; import refinedstorage.container.slot.SlotSpecimen; +import refinedstorage.container.slot.SlotSpecimenType; import refinedstorage.tile.TileConstructor; public class ContainerConstructor extends ContainerBase { @@ -15,7 +16,7 @@ public class ContainerConstructor extends ContainerBase { addSlotToContainer(new SlotItemHandler(constructor.getUpgrades(), i, 187, 6 + (i * 18))); } - addSlotToContainer(new SlotSpecimen(constructor.getFilter(), 0, 80, 20, SlotSpecimen.SPECIMEN_BLOCK)); + addSlotToContainer(new SlotSpecimenType(constructor, 0, 80, 20, SlotSpecimen.SPECIMEN_BLOCK)); addPlayerInventory(8, 55); } diff --git a/src/main/java/refinedstorage/container/ContainerDestructor.java b/src/main/java/refinedstorage/container/ContainerDestructor.java index 5fc656d9a..b56f1ff86 100755 --- a/src/main/java/refinedstorage/container/ContainerDestructor.java +++ b/src/main/java/refinedstorage/container/ContainerDestructor.java @@ -5,6 +5,7 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.SlotItemHandler; import refinedstorage.container.slot.SlotSpecimen; +import refinedstorage.container.slot.SlotSpecimenType; import refinedstorage.tile.TileDestructor; public class ContainerDestructor extends ContainerBase { @@ -16,7 +17,7 @@ public class ContainerDestructor extends ContainerBase { } for (int i = 0; i < 9; ++i) { - addSlotToContainer(new SlotSpecimen(destructor.getInventory(), i, 8 + (18 * i), 20, SlotSpecimen.SPECIMEN_BLOCK)); + addSlotToContainer(new SlotSpecimenType(destructor, i, 8 + (18 * i), 20, SlotSpecimen.SPECIMEN_BLOCK)); } addPlayerInventory(8, 55); diff --git a/src/main/java/refinedstorage/container/ContainerFluidConstructor.java b/src/main/java/refinedstorage/container/ContainerFluidConstructor.java deleted file mode 100755 index 8d1c1745c..000000000 --- a/src/main/java/refinedstorage/container/ContainerFluidConstructor.java +++ /dev/null @@ -1,49 +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.container.slot.SlotSpecimenFluid; -import refinedstorage.tile.TileFluidConstructor; - -public class ContainerFluidConstructor extends ContainerBase { - public ContainerFluidConstructor(TileFluidConstructor fluidConstructor, EntityPlayer player) { - super(fluidConstructor, player); - - for (int i = 0; i < 4; ++i) { - addSlotToContainer(new SlotItemHandler(fluidConstructor.getUpgrades(), i, 187, 6 + (i * 18))); - } - - addSlotToContainer(new SlotSpecimenFluid(!fluidConstructor.getWorld().isRemote, fluidConstructor.getFilter(), 0, 80, 20)); - - addPlayerInventory(8, 55); - } - - @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 < 4) { - if (!mergeItemStack(stack, 4, inventorySlots.size(), false)) { - return null; - } - } else if (!mergeItemStack(stack, 0, 4, false)) { - return mergeItemStackToSpecimen(stack, 4, 4 + 1); - } - - if (stack.stackSize == 0) { - slot.putStack(null); - } else { - slot.onSlotChanged(); - } - } - - return stack; - } -} diff --git a/src/main/java/refinedstorage/container/ContainerFluidDestructor.java b/src/main/java/refinedstorage/container/ContainerFluidDestructor.java deleted file mode 100755 index 3cd84f2e7..000000000 --- a/src/main/java/refinedstorage/container/ContainerFluidDestructor.java +++ /dev/null @@ -1,51 +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.container.slot.SlotSpecimenFluid; -import refinedstorage.tile.TileFluidDestructor; - -public class ContainerFluidDestructor extends ContainerBase { - public ContainerFluidDestructor(TileFluidDestructor fluidDestructor, EntityPlayer player) { - super(fluidDestructor, player); - - for (int i = 0; i < 4; ++i) { - addSlotToContainer(new SlotItemHandler(fluidDestructor.getUpgrades(), i, 187, 6 + (i * 18))); - } - - for (int i = 0; i < 9; ++i) { - addSlotToContainer(new SlotSpecimenFluid(!fluidDestructor.getWorld().isRemote, fluidDestructor.getInventory(), i, 8 + (18 * i), 20)); - } - - addPlayerInventory(8, 55); - } - - @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 < 4) { - if (!mergeItemStack(stack, 4 + 9, inventorySlots.size(), false)) { - return null; - } - } else if (!mergeItemStack(stack, 0, 4, false)) { - return mergeItemStackToSpecimen(stack, 4, 4 + 9); - } - - if (stack.stackSize == 0) { - slot.putStack(null); - } else { - slot.onSlotChanged(); - } - } - - return stack; - } -} diff --git a/src/main/java/refinedstorage/container/ContainerFluidImporter.java b/src/main/java/refinedstorage/container/ContainerFluidImporter.java deleted file mode 100755 index b3d04d2c4..000000000 --- a/src/main/java/refinedstorage/container/ContainerFluidImporter.java +++ /dev/null @@ -1,51 +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.container.slot.SlotSpecimenFluid; -import refinedstorage.tile.TileFluidImporter; - -public class ContainerFluidImporter extends ContainerBase { - public ContainerFluidImporter(TileFluidImporter fluidImporter, EntityPlayer player) { - super(fluidImporter, player); - - for (int i = 0; i < 4; ++i) { - addSlotToContainer(new SlotItemHandler(fluidImporter.getUpgrades(), i, 187, 6 + (i * 18))); - } - - for (int i = 0; i < 9; ++i) { - addSlotToContainer(new SlotSpecimenFluid(!fluidImporter.getWorld().isRemote, fluidImporter.getFilters(), i, 8 + (18 * i), 20)); - } - - addPlayerInventory(8, 55); - } - - @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 < 4) { - if (!mergeItemStack(stack, 4 + 9, inventorySlots.size(), false)) { - return null; - } - } else if (!mergeItemStack(stack, 0, 4, false)) { - return mergeItemStackToSpecimen(stack, 4, 4 + 9); - } - - if (stack.stackSize == 0) { - slot.putStack(null); - } else { - slot.onSlotChanged(); - } - } - - return stack; - } -} diff --git a/src/main/java/refinedstorage/container/ContainerImporter.java b/src/main/java/refinedstorage/container/ContainerImporter.java index 8805c5c15..01e5f805b 100755 --- a/src/main/java/refinedstorage/container/ContainerImporter.java +++ b/src/main/java/refinedstorage/container/ContainerImporter.java @@ -4,7 +4,7 @@ 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.SlotSpecimen; +import refinedstorage.container.slot.SlotSpecimenType; import refinedstorage.tile.TileImporter; public class ContainerImporter extends ContainerBase { @@ -16,7 +16,7 @@ public class ContainerImporter extends ContainerBase { } for (int i = 0; i < 9; ++i) { - addSlotToContainer(new SlotSpecimen(importer.getFilters(), i, 8 + (18 * i), 20)); + addSlotToContainer(new SlotSpecimenType(importer, i, 8 + (18 * i), 20)); } addPlayerInventory(8, 55); diff --git a/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java b/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java index 66d0eded1..c319c700c 100755 --- a/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java +++ b/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java @@ -1,19 +1,14 @@ package refinedstorage.container.slot; -import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.SlotItemHandler; -public class SlotSpecimenFluid extends SlotSpecimen { - private boolean server; - - public SlotSpecimenFluid(boolean server, IItemHandler handler, int id, int x, int y) { - super(handler, id, x, y); - - this.server = server; +/** + * Created by Raoul on 13/08/2016. + */ +// @TODO: REMOVAL +public class SlotSpecimenFluid extends SlotItemHandler { + public SlotSpecimenFluid(boolean b, IItemHandler filters, int i, int i1, int i2) { + super(filters, i, i1, i2); } - - @Override - public ItemStack getStack() { - return server ? super.getStack() : null; - } -} +} \ No newline at end of file diff --git a/src/main/java/refinedstorage/container/slot/SlotSpecimenType.java b/src/main/java/refinedstorage/container/slot/SlotSpecimenType.java new file mode 100755 index 000000000..1111fd026 --- /dev/null +++ b/src/main/java/refinedstorage/container/slot/SlotSpecimenType.java @@ -0,0 +1,40 @@ +package refinedstorage.container.slot; + +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.items.IItemHandler; +import refinedstorage.tile.config.IType; + +public class SlotSpecimenType extends SlotSpecimen { + private IType type; + + public SlotSpecimenType(IType type, int id, int x, int y, int flags) { + super(null, id, x, y, flags); + + this.type = type; + } + + public SlotSpecimenType(IType type, int id, int x, int y) { + this(type, id, x, y, 0); + } + + @Override + public IItemHandler getItemHandler() { + return type.getFilterInventory(); + } + + @Override + public boolean isWithSize() { + return super.isWithSize() && type.getType() != IType.FLUIDS; + } + + @Override + public boolean isBlockOnly() { + return super.isBlockOnly() && type.getType() == IType.ITEMS; + } + + @Override + public ItemStack getStack() { + return (type.getType() == IType.ITEMS || !((TileEntity) type).getWorld().isRemote) ? super.getStack() : null; + } +} diff --git a/src/main/java/refinedstorage/gui/GuiConstructor.java b/src/main/java/refinedstorage/gui/GuiConstructor.java index 50bca551c..b99b7b3cf 100755 --- a/src/main/java/refinedstorage/gui/GuiConstructor.java +++ b/src/main/java/refinedstorage/gui/GuiConstructor.java @@ -4,6 +4,7 @@ import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerConstructor; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.gui.sidebutton.SideButtonType; import refinedstorage.tile.TileConstructor; public class GuiConstructor extends GuiBase { @@ -15,6 +16,8 @@ public class GuiConstructor extends GuiBase { public void init(int x, int y) { addSideButton(new SideButtonRedstoneMode(TileConstructor.REDSTONE_MODE)); + addSideButton(new SideButtonType(TileConstructor.TYPE)); + addSideButton(new SideButtonCompare(TileConstructor.COMPARE, CompareUtils.COMPARE_DAMAGE)); addSideButton(new SideButtonCompare(TileConstructor.COMPARE, CompareUtils.COMPARE_NBT)); } diff --git a/src/main/java/refinedstorage/gui/GuiDestructor.java b/src/main/java/refinedstorage/gui/GuiDestructor.java index 24b62adaa..ce2e861e9 100755 --- a/src/main/java/refinedstorage/gui/GuiDestructor.java +++ b/src/main/java/refinedstorage/gui/GuiDestructor.java @@ -5,6 +5,7 @@ import refinedstorage.container.ContainerDestructor; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonMode; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.gui.sidebutton.SideButtonType; import refinedstorage.tile.TileDestructor; public class GuiDestructor extends GuiBase { @@ -16,6 +17,8 @@ public class GuiDestructor extends GuiBase { public void init(int x, int y) { addSideButton(new SideButtonRedstoneMode(TileDestructor.REDSTONE_MODE)); + addSideButton(new SideButtonType(TileDestructor.TYPE)); + addSideButton(new SideButtonMode(TileDestructor.MODE)); addSideButton(new SideButtonCompare(TileDestructor.COMPARE, CompareUtils.COMPARE_DAMAGE)); diff --git a/src/main/java/refinedstorage/gui/GuiFluidConstructor.java b/src/main/java/refinedstorage/gui/GuiFluidConstructor.java deleted file mode 100755 index 1e5307f4d..000000000 --- a/src/main/java/refinedstorage/gui/GuiFluidConstructor.java +++ /dev/null @@ -1,37 +0,0 @@ -package refinedstorage.gui; - -import refinedstorage.api.storage.CompareUtils; -import refinedstorage.container.ContainerFluidConstructor; -import refinedstorage.gui.sidebutton.SideButtonCompare; -import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; -import refinedstorage.tile.TileFluidConstructor; - -public class GuiFluidConstructor extends GuiBase { - public GuiFluidConstructor(ContainerFluidConstructor container) { - super(container, 211, 137); - } - - @Override - public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(TileFluidConstructor.REDSTONE_MODE)); - - addSideButton(new SideButtonCompare(TileFluidConstructor.COMPARE, CompareUtils.COMPARE_NBT)); - } - - @Override - public void update(int x, int y) { - } - - @Override - public void drawBackground(int x, int y, int mouseX, int mouseY) { - bindTexture("gui/constructor.png"); - - drawTexture(x, y, 0, 0, width, height); - } - - @Override - public void drawForeground(int mouseX, int mouseY) { - drawString(7, 7, t("gui.refinedstorage:fluid_constructor")); - drawString(7, 43, t("container.inventory")); - } -} diff --git a/src/main/java/refinedstorage/gui/GuiFluidDestructor.java b/src/main/java/refinedstorage/gui/GuiFluidDestructor.java deleted file mode 100755 index 676997d89..000000000 --- a/src/main/java/refinedstorage/gui/GuiFluidDestructor.java +++ /dev/null @@ -1,40 +0,0 @@ -package refinedstorage.gui; - -import refinedstorage.api.storage.CompareUtils; -import refinedstorage.container.ContainerFluidDestructor; -import refinedstorage.gui.sidebutton.SideButtonCompare; -import refinedstorage.gui.sidebutton.SideButtonMode; -import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; -import refinedstorage.tile.TileFluidDestructor; - -public class GuiFluidDestructor extends GuiBase { - public GuiFluidDestructor(ContainerFluidDestructor container) { - super(container, 211, 137); - } - - @Override - public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(TileFluidDestructor.REDSTONE_MODE)); - - addSideButton(new SideButtonMode(TileFluidDestructor.MODE)); - - addSideButton(new SideButtonCompare(TileFluidDestructor.COMPARE, CompareUtils.COMPARE_NBT)); - } - - @Override - public void update(int x, int y) { - } - - @Override - public void drawBackground(int x, int y, int mouseX, int mouseY) { - bindTexture("gui/destructor.png"); - - drawTexture(x, y, 0, 0, width, height); - } - - @Override - public void drawForeground(int mouseX, int mouseY) { - drawString(7, 7, t("gui.refinedstorage:fluid_destructor")); - drawString(7, 43, t("container.inventory")); - } -} diff --git a/src/main/java/refinedstorage/gui/GuiFluidImporter.java b/src/main/java/refinedstorage/gui/GuiFluidImporter.java deleted file mode 100755 index 1eb2859da..000000000 --- a/src/main/java/refinedstorage/gui/GuiFluidImporter.java +++ /dev/null @@ -1,40 +0,0 @@ -package refinedstorage.gui; - -import refinedstorage.api.storage.CompareUtils; -import refinedstorage.container.ContainerFluidImporter; -import refinedstorage.gui.sidebutton.SideButtonCompare; -import refinedstorage.gui.sidebutton.SideButtonMode; -import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; -import refinedstorage.tile.TileFluidImporter; - -public class GuiFluidImporter extends GuiBase { - public GuiFluidImporter(ContainerFluidImporter container) { - super(container, 211, 137); - } - - @Override - public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(TileFluidImporter.REDSTONE_MODE)); - - addSideButton(new SideButtonMode(TileFluidImporter.MODE)); - - addSideButton(new SideButtonCompare(TileFluidImporter.COMPARE, CompareUtils.COMPARE_NBT)); - } - - @Override - public void update(int x, int y) { - } - - @Override - public void drawBackground(int x, int y, int mouseX, int mouseY) { - bindTexture("gui/importer.png"); - - drawTexture(x, y, 0, 0, width, height); - } - - @Override - public void drawForeground(int mouseX, int mouseY) { - drawString(7, 7, t("gui.refinedstorage:fluid_importer")); - drawString(7, 43, t("container.inventory")); - } -} diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 6a62e62ca..9ffe9f67e 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -53,12 +53,6 @@ public class GuiHandler implements IGuiHandler { return new ContainerNetworkTransmitter((TileNetworkTransmitter) tile, player); case RefinedStorageGui.FLUID_DISK_DRIVE: return new ContainerFluidDiskDrive((TileFluidDiskDrive) tile, player); - case RefinedStorageGui.FLUID_CONSTRUCTOR: - return new ContainerFluidConstructor((TileFluidConstructor) tile, player); - case RefinedStorageGui.FLUID_DESTRUCTOR: - return new ContainerFluidDestructor((TileFluidDestructor) tile, player); - case RefinedStorageGui.FLUID_IMPORTER: - return new ContainerFluidImporter((TileFluidImporter) tile, player); default: return null; } @@ -132,12 +126,6 @@ public class GuiHandler implements IGuiHandler { 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_CONSTRUCTOR: - return new GuiFluidConstructor((ContainerFluidConstructor) getContainer(ID, player, tile)); - case RefinedStorageGui.FLUID_DESTRUCTOR: - return new GuiFluidDestructor((ContainerFluidDestructor) getContainer(ID, player, tile)); - case RefinedStorageGui.FLUID_IMPORTER: - return new GuiFluidImporter((ContainerFluidImporter) getContainer(ID, player, tile)); default: return null; } diff --git a/src/main/java/refinedstorage/gui/GuiImporter.java b/src/main/java/refinedstorage/gui/GuiImporter.java index 384cbec40..77b1c7c6f 100755 --- a/src/main/java/refinedstorage/gui/GuiImporter.java +++ b/src/main/java/refinedstorage/gui/GuiImporter.java @@ -5,6 +5,7 @@ import refinedstorage.container.ContainerImporter; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonMode; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.gui.sidebutton.SideButtonType; import refinedstorage.tile.TileImporter; public class GuiImporter extends GuiBase { @@ -16,6 +17,8 @@ public class GuiImporter extends GuiBase { public void init(int x, int y) { addSideButton(new SideButtonRedstoneMode(TileImporter.REDSTONE_MODE)); + addSideButton(new SideButtonType(TileImporter.TYPE)); + addSideButton(new SideButtonMode(TileImporter.MODE)); addSideButton(new SideButtonCompare(TileImporter.COMPARE, CompareUtils.COMPARE_DAMAGE)); diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonType.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonType.java new file mode 100755 index 000000000..d0a2e158e --- /dev/null +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonType.java @@ -0,0 +1,29 @@ +package refinedstorage.gui.sidebutton; + +import net.minecraft.util.text.TextFormatting; +import refinedstorage.gui.GuiBase; +import refinedstorage.tile.config.IType; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; + +public class SideButtonType extends SideButton { + private TileDataParameter type; + + public SideButtonType(TileDataParameter type) { + this.type = type; + } + + @Override + public String getTooltip(GuiBase gui) { + return TextFormatting.GREEN + gui.t("sidebutton.refinedstorage:type") + TextFormatting.RESET + "\n" + gui.t("sidebutton.refinedstorage:type." + type.getValue()); + } + + @Override + public void draw(GuiBase gui, int x, int y) { + } + + @Override + public void actionPerformed() { + TileDataManager.setParameter(type, type.getValue() == IType.ITEMS ? IType.FLUIDS : IType.ITEMS); + } +} diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index 061248e64..d656f5f58 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -258,8 +258,5 @@ public class ClientProxy extends CommonProxy { 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")); - ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_CONSTRUCTOR), 0, new ModelResourceLocation("refinedstorage:fluid_constructor", "inventory")); - ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_DESTRUCTOR), 0, new ModelResourceLocation("refinedstorage:fluid_destructor", "inventory")); - ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_IMPORTER), 0, new ModelResourceLocation("refinedstorage:fluid_importer", "inventory")); } } diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index f849504dd..3a706bcea 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -86,9 +86,6 @@ public class CommonProxy { registerTile(TileNetworkReceiver.class, "network_receiver"); registerTile(TileNetworkTransmitter.class, "network_transmitter"); registerTile(TileFluidDiskDrive.class, "fluid_disk_drive"); - registerTile(TileFluidConstructor.class, "fluid_constructor"); - registerTile(TileFluidDestructor.class, "fluid_destructor"); - registerTile(TileFluidImporter.class, "fluid_importer"); registerBlock(RefinedStorageBlocks.CONTROLLER); registerBlock(RefinedStorageBlocks.GRID); @@ -112,9 +109,6 @@ public class CommonProxy { registerBlock(RefinedStorageBlocks.NETWORK_TRANSMITTER); registerBlock(RefinedStorageBlocks.NETWORK_RECEIVER); registerBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE); - registerBlock(RefinedStorageBlocks.FLUID_CONSTRUCTOR); - registerBlock(RefinedStorageBlocks.FLUID_DESTRUCTOR); - registerBlock(RefinedStorageBlocks.FLUID_IMPORTER); registerItem(RefinedStorageItems.QUARTZ_ENRICHED_IRON); registerItem(RefinedStorageItems.STORAGE_DISK); @@ -333,14 +327,6 @@ public class CommonProxy { new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) ); - // Fluid Importer - GameRegistry.addShapelessRecipe(new ItemStack(RefinedStorageBlocks.FLUID_IMPORTER), - new ItemStack(RefinedStorageBlocks.CABLE), - new ItemStack(RefinedStorageItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION), - new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED), - new ItemStack(Items.BUCKET) - ); - // Exporter GameRegistry.addShapelessRecipe(new ItemStack(RefinedStorageBlocks.EXPORTER), new ItemStack(RefinedStorageBlocks.CABLE), @@ -360,18 +346,6 @@ public class CommonProxy { 'I', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) ); - // Fluid Destructor - GameRegistry.addShapedRecipe(new ItemStack(RefinedStorageBlocks.DESTRUCTOR), - "EDE", - "RMR", - "EIE", - 'E', new ItemStack(RefinedStorageItems.QUARTZ_ENRICHED_IRON), - 'D', new ItemStack(RefinedStorageItems.CORE, 1, ItemCore.TYPE_DESTRUCTION), - 'R', new ItemStack(Items.BUCKET), - 'M', new ItemStack(RefinedStorageBlocks.CABLE), - 'I', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) - ); - // Constructor GameRegistry.addShapedRecipe(new ItemStack(RefinedStorageBlocks.CONSTRUCTOR), "ECE", @@ -384,18 +358,6 @@ public class CommonProxy { 'I', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) ); - // Fluid Constructor - GameRegistry.addShapedRecipe(new ItemStack(RefinedStorageBlocks.FLUID_CONSTRUCTOR), - "ECE", - "RMR", - "EIE", - 'E', new ItemStack(RefinedStorageItems.QUARTZ_ENRICHED_IRON), - 'C', new ItemStack(RefinedStorageItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION), - 'R', new ItemStack(Items.BUCKET), - 'M', new ItemStack(RefinedStorageBlocks.CABLE), - 'I', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) - ); - // Detector GameRegistry.addRecipe(new ItemStack(RefinedStorageBlocks.DETECTOR), "ECE", diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index 7f816800c..9939502d8 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -1,6 +1,7 @@ package refinedstorage.tile; import mcmultipart.microblock.IMicroblock; +import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; @@ -9,25 +10,31 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.SoundCategory; import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.IComparable; +import refinedstorage.tile.config.IType; import refinedstorage.tile.data.TileDataParameter; -public class TileConstructor extends TileMultipartNode implements IComparable { +public class TileConstructor extends TileMultipartNode implements IComparable, IType { public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter TYPE = IType.createParameter(); private static final String NBT_COMPARE = "Compare"; + private static final String NBT_TYPE = "Type"; private static final int BASE_SPEED = 20; - private ItemHandlerBasic filter = new ItemHandlerBasic(1, this) { + private ItemHandlerBasic itemFilters = new ItemHandlerBasic(1, this) { @Override protected void onContentsChanged(int slot) { super.onContentsChanged(slot); @@ -35,16 +42,20 @@ public class TileConstructor extends TileMultipartNode implements IComparable { block = SlotSpecimen.getBlockState(worldObj, pos.offset(getDirection()), getStackInSlot(0)); } }; + private ItemHandlerFluid fluidFilters = new ItemHandlerFluid(1, this); private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_CRAFTING); private int compare = 0; + private int type = IType.ITEMS; + private IBlockState block; private CraftingTaskScheduler scheduler = new CraftingTaskScheduler(this); public TileConstructor() { dataManager.addWatchedParameter(COMPARE); + dataManager.addWatchedParameter(TYPE); } @Override @@ -59,23 +70,45 @@ public class TileConstructor extends TileMultipartNode implements IComparable { @Override public void updateNode() { - if (block != null && ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) { - BlockPos front = pos.offset(getDirection()); + if (ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) { + if (type == IType.ITEMS && block != null) { + BlockPos front = pos.offset(getDirection()); - if (worldObj.isAirBlock(front) && block.getBlock().canPlaceBlockAt(worldObj, front)) { - ItemStack took = network.extractItem(filter.getStackInSlot(0), 1, compare); + if (worldObj.isAirBlock(front) && block.getBlock().canPlaceBlockAt(worldObj, front)) { + ItemStack took = network.extractItem(itemFilters.getStackInSlot(0), 1, compare); - if (took != null) { - scheduler.resetSchedule(); - worldObj.setBlockState(front, block.getBlock().getStateFromMeta(took.getMetadata()), 1 | 2); - // From ItemBlock.onItemUse - SoundType blockSound = block.getBlock().getSoundType(); - worldObj.playSound(null, front, blockSound.getPlaceSound(), SoundCategory.BLOCKS, (blockSound.getVolume() + 1.0F) / 2.0F, blockSound.getPitch() * 0.8F); - } else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { - ItemStack craft = filter.getStackInSlot(0); + if (took != null) { + scheduler.resetSchedule(); + worldObj.setBlockState(front, block.getBlock().getStateFromMeta(took.getMetadata()), 1 | 2); + // From ItemBlock.onItemUse + SoundType blockSound = block.getBlock().getSoundType(); + worldObj.playSound(null, front, blockSound.getPlaceSound(), SoundCategory.BLOCKS, (blockSound.getVolume() + 1.0F) / 2.0F, blockSound.getPitch() * 0.8F); + } else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { + ItemStack craft = itemFilters.getStackInSlot(0); - if (scheduler.canSchedule(compare, craft)) { - scheduler.schedule(network, compare, craft); + if (scheduler.canSchedule(compare, craft)) { + scheduler.schedule(network, compare, craft); + } + } + } + } else if (type == IType.FLUIDS) { + FluidStack stack = fluidFilters.getFluids()[0]; + + if (stack != null) { + BlockPos front = pos.offset(getDirection()); + + Block block = stack.getFluid().getBlock(); + + + if (worldObj.isAirBlock(front) && block.canPlaceBlockAt(worldObj, front)) { + FluidStack took = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare); + + if (took != null) { + IBlockState state = block.getDefaultState(); + + // @TODO: This doesn't cause the block to flow? + worldObj.setBlockState(front, state, 1 | 2); + } } } } @@ -102,8 +135,13 @@ public class TileConstructor extends TileMultipartNode implements IComparable { compare = tag.getInteger(NBT_COMPARE); } - readItems(filter, 0, tag); + if (tag.hasKey(NBT_TYPE)) { + type = tag.getInteger(NBT_TYPE); + } + + readItems(itemFilters, 0, tag); readItems(upgrades, 1, tag); + readItems(fluidFilters, 2, tag); scheduler.read(tag); } @@ -113,9 +151,11 @@ public class TileConstructor extends TileMultipartNode implements IComparable { super.write(tag); tag.setInteger(NBT_COMPARE, compare); + tag.setInteger(NBT_TYPE, type); - writeItems(filter, 0, tag); + writeItems(itemFilters, 0, tag); writeItems(upgrades, 1, tag); + writeItems(fluidFilters, 2, tag); scheduler.writeToNBT(tag); @@ -126,15 +166,28 @@ public class TileConstructor extends TileMultipartNode implements IComparable { return upgrades; } - public IItemHandler getFilter() { - return filter; - } - @Override public IItemHandler getDrops() { return upgrades; } + @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 T getCapability(Capability capability, EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index 6b9b05ebc..5c99e96d0 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -2,6 +2,7 @@ package refinedstorage.tile; import mcmultipart.microblock.IMicroblock; import net.minecraft.block.Block; +import net.minecraft.block.BlockLiquid; import net.minecraft.block.state.IBlockState; import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; @@ -9,36 +10,50 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidBlock; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.wrappers.BlockLiquidWrapper; +import net.minecraftforge.fluids.capability.wrappers.FluidBlockWrapper; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.IFilterable; +import refinedstorage.tile.config.IType; import refinedstorage.tile.data.TileDataParameter; import java.util.List; -public class TileDestructor extends TileMultipartNode implements IComparable, IFilterable { +public class TileDestructor extends TileMultipartNode implements IComparable, IFilterable, IType { public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); + public static final TileDataParameter TYPE = IType.createParameter(); private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; + private static final String NBT_TYPE = "Type"; private static final int BASE_SPEED = 20; - private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); + private ItemHandlerBasic itemFilters = new ItemHandlerBasic(9, this); + private ItemHandlerFluid fluidFilters = new ItemHandlerFluid(9, this); + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); private int compare = 0; private int mode = IFilterable.WHITELIST; + private int type = IType.ITEMS; public TileDestructor() { dataManager.addWatchedParameter(COMPARE); dataManager.addWatchedParameter(MODE); + dataManager.addWatchedParameter(TYPE); } @Override @@ -54,32 +69,56 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF @Override public void updateNode() { if (ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) { - BlockPos front = pos.offset(getDirection()); + if (type == IType.ITEMS) { + BlockPos front = pos.offset(getDirection()); - IBlockState frontBlockState = worldObj.getBlockState(front); - ItemStack frontStack = frontBlockState.getBlock().getItem(worldObj, front, frontBlockState); + IBlockState frontBlockState = worldObj.getBlockState(front); + ItemStack frontStack = frontBlockState.getBlock().getItem(worldObj, front, frontBlockState); - if (frontStack != null) { - if (IFilterable.canTake(filters, mode, compare, frontStack)) { - List drops = frontBlockState.getBlock().getDrops(worldObj, front, frontBlockState, 0); + if (frontStack != null) { + if (IFilterable.canTake(itemFilters, mode, compare, frontStack)) { + List drops = frontBlockState.getBlock().getDrops(worldObj, front, frontBlockState, 0); - worldObj.playEvent(null, 2001, front, Block.getStateId(frontBlockState)); - worldObj.setBlockToAir(front); + worldObj.playEvent(null, 2001, front, Block.getStateId(frontBlockState)); + worldObj.setBlockToAir(front); - for (ItemStack drop : drops) { - // We check if the controller isn't null here because when a destructor faces a node and removes it - // it will essentially remove this block itself from the network without knowing - if (network == null) { - InventoryHelper.spawnItemStack(worldObj, front.getX(), front.getY(), front.getZ(), drop); - } else { - ItemStack remainder = network.insertItem(drop, drop.stackSize, false); + for (ItemStack drop : drops) { + // We check if the controller isn't null here because when a destructor faces a node and removes it + // it will essentially remove this block itself from the network without knowing + if (network == null) { + InventoryHelper.spawnItemStack(worldObj, front.getX(), front.getY(), front.getZ(), drop); + } else { + ItemStack remainder = network.insertItem(drop, drop.stackSize, false); - if (remainder != null) { - InventoryHelper.spawnItemStack(worldObj, front.getX(), front.getY(), front.getZ(), remainder); + if (remainder != null) { + InventoryHelper.spawnItemStack(worldObj, front.getX(), front.getY(), front.getZ(), remainder); + } } } } } + } else if (type == IType.FLUIDS) { + BlockPos front = pos.offset(getDirection()); + + Block frontBlock = worldObj.getBlockState(front).getBlock(); + + IFluidHandler handler = null; + + if (frontBlock instanceof BlockLiquid) { + handler = new BlockLiquidWrapper((BlockLiquid) frontBlock, worldObj, front); + } else if (frontBlock instanceof IFluidBlock) { + handler = new FluidBlockWrapper((IFluidBlock) frontBlock, worldObj, front); + } + + if (handler != null) { + FluidStack stack = handler.drain(Fluid.BUCKET_VOLUME, false); + + if (stack != null && IFilterable.canTakeFluids(fluidFilters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) { + FluidStack drained = handler.drain(Fluid.BUCKET_VOLUME, true); + + network.insertFluid(drained, drained.amount, false); + } + } } } } @@ -120,8 +159,13 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF mode = tag.getInteger(NBT_MODE); } - readItems(filters, 0, tag); + if (tag.hasKey(NBT_TYPE)) { + type = tag.getInteger(NBT_TYPE); + } + + readItems(itemFilters, 0, tag); readItems(upgrades, 1, tag); + readItems(fluidFilters, 2, tag); } @Override @@ -130,9 +174,11 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF tag.setInteger(NBT_COMPARE, compare); tag.setInteger(NBT_MODE, mode); + tag.setInteger(NBT_TYPE, type); - writeItems(filters, 0, tag); + writeItems(itemFilters, 0, tag); writeItems(upgrades, 1, tag); + writeItems(fluidFilters, 2, tag); return tag; } @@ -142,7 +188,7 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF } public IItemHandler getInventory() { - return filters; + return itemFilters; } @Override @@ -150,6 +196,23 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF return upgrades; } + @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 T getCapability(Capability capability, EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { diff --git a/src/main/java/refinedstorage/tile/TileFluidConstructor.java b/src/main/java/refinedstorage/tile/TileFluidConstructor.java deleted file mode 100755 index d57d7c0eb..000000000 --- a/src/main/java/refinedstorage/tile/TileFluidConstructor.java +++ /dev/null @@ -1,132 +0,0 @@ -package refinedstorage.tile; - -import mcmultipart.microblock.IMicroblock; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; -import refinedstorage.RefinedStorage; -import refinedstorage.inventory.ItemHandlerFluid; -import refinedstorage.inventory.ItemHandlerUpgrade; -import refinedstorage.item.ItemUpgrade; -import refinedstorage.tile.config.IComparable; -import refinedstorage.tile.data.TileDataParameter; - -public class TileFluidConstructor extends TileMultipartNode implements IComparable { - public static final TileDataParameter COMPARE = IComparable.createParameter(); - - private static final String NBT_COMPARE = "Compare"; - - private static final int BASE_SPEED = 20; - - private ItemHandlerFluid filter = new ItemHandlerFluid(1, this); - - private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); - - private int compare = 0; - - public TileFluidConstructor() { - dataManager.addWatchedParameter(COMPARE); - } - - @Override - public boolean canAddMicroblock(IMicroblock microblock) { - return !isBlockingMicroblock(microblock, getDirection()); - } - - @Override - public int getEnergyUsage() { - return RefinedStorage.INSTANCE.fluidConstructorUsage + upgrades.getEnergyUsage(); - } - - @Override - public void updateNode() { - FluidStack stack = filter.getFluids()[0]; - - if (stack != null && ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) { - BlockPos front = pos.offset(getDirection()); - - Block block = stack.getFluid().getBlock(); - - if (worldObj.isAirBlock(front) && block.canPlaceBlockAt(worldObj, front)) { - FluidStack took = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare); - - if (took != null) { - IBlockState state = block.getDefaultState(); - - // @TODO: This doesn't cause the block to flow? - worldObj.setBlockState(front, state, 1 | 2); - } - } - } - } - - @Override - public int getCompare() { - return compare; - } - - @Override - public void setCompare(int compare) { - this.compare = compare; - - markDirty(); - } - - @Override - public void read(NBTTagCompound tag) { - super.read(tag); - - if (tag.hasKey(NBT_COMPARE)) { - compare = tag.getInteger(NBT_COMPARE); - } - - readItems(filter, 0, tag); - readItems(upgrades, 1, tag); - } - - @Override - public NBTTagCompound write(NBTTagCompound tag) { - super.write(tag); - - tag.setInteger(NBT_COMPARE, compare); - - writeItems(filter, 0, tag); - writeItems(upgrades, 1, tag); - - return tag; - } - - public IItemHandler getUpgrades() { - return upgrades; - } - - public IItemHandler getFilter() { - return filter; - } - - @Override - public IItemHandler getDrops() { - return upgrades; - } - - @Override - public T getCapability(Capability capability, EnumFacing facing) { - if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - return (T) upgrades; - } - - 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/TileFluidDestructor.java b/src/main/java/refinedstorage/tile/TileFluidDestructor.java deleted file mode 100755 index 521f41d65..000000000 --- a/src/main/java/refinedstorage/tile/TileFluidDestructor.java +++ /dev/null @@ -1,162 +0,0 @@ -package refinedstorage.tile; - -import mcmultipart.microblock.IMicroblock; -import net.minecraft.block.Block; -import net.minecraft.block.BlockLiquid; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidBlock; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fluids.capability.wrappers.BlockLiquidWrapper; -import net.minecraftforge.fluids.capability.wrappers.FluidBlockWrapper; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; -import refinedstorage.RefinedStorage; -import refinedstorage.inventory.ItemHandlerFluid; -import refinedstorage.inventory.ItemHandlerUpgrade; -import refinedstorage.item.ItemUpgrade; -import refinedstorage.tile.config.IComparable; -import refinedstorage.tile.config.IFilterable; -import refinedstorage.tile.data.TileDataParameter; - -public class TileFluidDestructor extends TileMultipartNode implements IComparable, IFilterable { - public static final TileDataParameter COMPARE = IComparable.createParameter(); - public static final TileDataParameter MODE = IFilterable.createParameter(); - - private static final String NBT_COMPARE = "Compare"; - private static final String NBT_MODE = "Mode"; - - private static final int BASE_SPEED = 20; - - private ItemHandlerFluid filters = new ItemHandlerFluid(9, this); - private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); - - private int compare = 0; - private int mode = IFilterable.WHITELIST; - - public TileFluidDestructor() { - dataManager.addWatchedParameter(COMPARE); - dataManager.addWatchedParameter(MODE); - } - - @Override - public boolean canAddMicroblock(IMicroblock microblock) { - return !isBlockingMicroblock(microblock, getDirection()); - } - - @Override - public int getEnergyUsage() { - return RefinedStorage.INSTANCE.fluidDestructorUsage + upgrades.getEnergyUsage(); - } - - @Override - public void updateNode() { - if (ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) { - BlockPos front = pos.offset(getDirection()); - - Block frontBlock = worldObj.getBlockState(front).getBlock(); - - IFluidHandler handler = null; - - if (frontBlock instanceof BlockLiquid) { - handler = new BlockLiquidWrapper((BlockLiquid) frontBlock, worldObj, front); - } else if (frontBlock instanceof IFluidBlock) { - handler = new FluidBlockWrapper((IFluidBlock) frontBlock, worldObj, front); - } - - if (handler != null) { - FluidStack stack = handler.drain(Fluid.BUCKET_VOLUME, false); - - if (stack != null && IFilterable.canTakeFluids(filters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) { - FluidStack drained = handler.drain(Fluid.BUCKET_VOLUME, true); - - network.insertFluid(drained, drained.amount, false); - } - } - } - } - - @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(); - } - - @Override - public void read(NBTTagCompound tag) { - super.read(tag); - - if (tag.hasKey(NBT_COMPARE)) { - compare = tag.getInteger(NBT_COMPARE); - } - - if (tag.hasKey(NBT_MODE)) { - mode = tag.getInteger(NBT_MODE); - } - - readItems(filters, 0, tag); - readItems(upgrades, 1, tag); - } - - @Override - public NBTTagCompound write(NBTTagCompound tag) { - super.write(tag); - - tag.setInteger(NBT_COMPARE, compare); - tag.setInteger(NBT_MODE, mode); - - writeItems(filters, 0, tag); - writeItems(upgrades, 1, tag); - - return tag; - } - - public IItemHandler getUpgrades() { - return upgrades; - } - - public IItemHandler getInventory() { - return filters; - } - - @Override - public IItemHandler getDrops() { - return upgrades; - } - - @Override - public T getCapability(Capability capability, EnumFacing facing) { - if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - return (T) upgrades; - } - - 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/TileFluidImporter.java b/src/main/java/refinedstorage/tile/TileFluidImporter.java deleted file mode 100755 index f737beb31..000000000 --- a/src/main/java/refinedstorage/tile/TileFluidImporter.java +++ /dev/null @@ -1,142 +0,0 @@ -package refinedstorage.tile; - -import mcmultipart.microblock.IMicroblock; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; -import refinedstorage.RefinedStorage; -import refinedstorage.inventory.ItemHandlerFluid; -import refinedstorage.inventory.ItemHandlerUpgrade; -import refinedstorage.item.ItemUpgrade; -import refinedstorage.tile.config.IComparable; -import refinedstorage.tile.config.IFilterable; -import refinedstorage.tile.data.TileDataParameter; - -public class TileFluidImporter extends TileMultipartNode implements IComparable, IFilterable { - public static final TileDataParameter COMPARE = IComparable.createParameter(); - public static final TileDataParameter MODE = IFilterable.createParameter(); - - private static final String NBT_COMPARE = "Compare"; - private static final String NBT_MODE = "Mode"; - - private ItemHandlerFluid filters = new ItemHandlerFluid(9, this); - private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); - - private int compare = 0; - private int mode = IFilterable.WHITELIST; - - public TileFluidImporter() { - dataManager.addWatchedParameter(COMPARE); - dataManager.addWatchedParameter(MODE); - } - - @Override - public boolean canAddMicroblock(IMicroblock microblock) { - return !isBlockingMicroblock(microblock, getDirection()); - } - - @Override - public int getEnergyUsage() { - return RefinedStorage.INSTANCE.fluidImporterUsage + upgrades.getEnergyUsage(); - } - - @Override - public void updateNode() { - IFluidHandler handler = getFluidHandler(getFacingTile(), getDirection().getOpposite()); - - if (handler != null) { - FluidStack stack = handler.drain(Fluid.BUCKET_VOLUME, false); - - if (stack != null && IFilterable.canTakeFluids(filters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) { - FluidStack drain = handler.drain(Fluid.BUCKET_VOLUME, true); - - network.insertFluid(drain, drain.amount, false); - } - } - } - - @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(); - } - - @Override - public void read(NBTTagCompound tag) { - super.read(tag); - - if (tag.hasKey(NBT_COMPARE)) { - compare = tag.getInteger(NBT_COMPARE); - } - - if (tag.hasKey(NBT_MODE)) { - mode = tag.getInteger(NBT_MODE); - } - - readItems(filters, 0, tag); - readItems(upgrades, 1, tag); - } - - @Override - public NBTTagCompound write(NBTTagCompound tag) { - super.write(tag); - - tag.setInteger(NBT_COMPARE, compare); - tag.setInteger(NBT_MODE, mode); - - writeItems(filters, 0, tag); - writeItems(upgrades, 1, tag); - - return tag; - } - - public IItemHandler getUpgrades() { - return upgrades; - } - - public IItemHandler getFilters() { - return filters; - } - - @Override - public IItemHandler getDrops() { - return upgrades; - } - - @Override - public T getCapability(Capability capability, EnumFacing facing) { - if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - return (T) upgrades; - } - - 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/TileImporter.java b/src/main/java/refinedstorage/tile/TileImporter.java index 8c4a1592f..ccfb54f0d 100755 --- a/src/main/java/refinedstorage/tile/TileImporter.java +++ b/src/main/java/refinedstorage/tile/TileImporter.java @@ -5,34 +5,45 @@ 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.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.IFilterable; +import refinedstorage.tile.config.IType; import refinedstorage.tile.data.TileDataParameter; -public class TileImporter extends TileMultipartNode implements IComparable, IFilterable { +public class TileImporter extends TileMultipartNode implements IComparable, IFilterable, IType { public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); + public static final TileDataParameter TYPE = IType.createParameter(); private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; + private static final String NBT_TYPE = "Type"; + + private ItemHandlerBasic itemFilters = new ItemHandlerBasic(9, this); + private ItemHandlerFluid fluidFilters = new ItemHandlerFluid(9, this); - private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK); private int compare = 0; private int mode = IFilterable.WHITELIST; + private int type = IType.ITEMS; private int currentSlot; public TileImporter() { dataManager.addWatchedParameter(COMPARE); dataManager.addWatchedParameter(MODE); + dataManager.addWatchedParameter(TYPE); } @Override @@ -47,32 +58,46 @@ public class TileImporter extends TileMultipartNode implements IComparable, IFil @Override public void updateNode() { - IItemHandler handler = getItemHandler(getFacingTile(), getDirection().getOpposite()); + if (type == IType.ITEMS) { + IItemHandler handler = getItemHandler(getFacingTile(), getDirection().getOpposite()); - if (getFacingTile() instanceof TileDiskDrive || handler == null) { - return; - } + if (getFacingTile() instanceof TileDiskDrive || handler == null) { + return; + } - if (currentSlot >= handler.getSlots()) { - currentSlot = 0; - } + if (currentSlot >= handler.getSlots()) { + currentSlot = 0; + } - if (handler.getSlots() > 0) { - ItemStack stack = handler.getStackInSlot(currentSlot); + if (handler.getSlots() > 0) { + ItemStack stack = handler.getStackInSlot(currentSlot); - if (stack == null || !IFilterable.canTake(filters, mode, compare, stack)) { - currentSlot++; - } else if (ticks % upgrades.getSpeed() == 0) { - int quantity = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1; - - ItemStack result = handler.extractItem(currentSlot, quantity, true); - - if (result != null && network.insertItem(result, result.stackSize, true) == null) { - network.insertItem(result, result.stackSize, false); - - handler.extractItem(currentSlot, quantity, false); - } else { + if (stack == null || !IFilterable.canTake(itemFilters, mode, compare, stack)) { currentSlot++; + } else if (ticks % upgrades.getSpeed() == 0) { + int quantity = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1; + + ItemStack result = handler.extractItem(currentSlot, quantity, true); + + if (result != null && network.insertItem(result, result.stackSize, true) == null) { + network.insertItem(result, result.stackSize, false); + + handler.extractItem(currentSlot, quantity, false); + } else { + currentSlot++; + } + } + } + } else if (type == IType.FLUIDS && ticks % upgrades.getSpeed() == 0) { + IFluidHandler handler = getFluidHandler(getFacingTile(), getDirection().getOpposite()); + + if (handler != null) { + FluidStack stack = handler.drain(Fluid.BUCKET_VOLUME, false); + + if (stack != null && IFilterable.canTakeFluids(fluidFilters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) { + FluidStack drain = handler.drain(Fluid.BUCKET_VOLUME, true); + + network.insertFluid(drain, drain.amount, false); } } } @@ -114,8 +139,13 @@ public class TileImporter extends TileMultipartNode implements IComparable, IFil mode = tag.getInteger(NBT_MODE); } - readItems(filters, 0, tag); + if (tag.hasKey(NBT_TYPE)) { + type = tag.getInteger(NBT_TYPE); + } + + readItems(itemFilters, 0, tag); readItems(upgrades, 1, tag); + readItems(fluidFilters, 2, tag); } @Override @@ -124,9 +154,11 @@ public class TileImporter extends TileMultipartNode implements IComparable, IFil tag.setInteger(NBT_COMPARE, compare); tag.setInteger(NBT_MODE, mode); + tag.setInteger(NBT_TYPE, type); - writeItems(filters, 0, tag); + writeItems(itemFilters, 0, tag); writeItems(upgrades, 1, tag); + writeItems(fluidFilters, 2, tag); return tag; } @@ -135,15 +167,28 @@ public class TileImporter extends TileMultipartNode implements IComparable, IFil return upgrades; } - public IItemHandler getFilters() { - return filters; - } - @Override public IItemHandler getDrops() { return upgrades; } + @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 T getCapability(Capability capability, EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { diff --git a/src/main/java/refinedstorage/tile/config/IType.java b/src/main/java/refinedstorage/tile/config/IType.java new file mode 100755 index 000000000..63db8ccdc --- /dev/null +++ b/src/main/java/refinedstorage/tile/config/IType.java @@ -0,0 +1,40 @@ +package refinedstorage.tile.config; + +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.items.IItemHandler; +import refinedstorage.container.ContainerBase; +import refinedstorage.tile.data.ITileDataConsumer; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataParameter; + +public interface IType { + int ITEMS = 0; + int FLUIDS = 1; + + static TileDataParameter createParameter() { + return new TileDataParameter<>(DataSerializers.VARINT, ITEMS, new ITileDataProducer() { + @Override + public Integer getValue(T tile) { + return ((IType) tile).getType(); + } + }, new ITileDataConsumer() { + @Override + public void setValue(T tile, Integer value) { + if (value == 0 || value == 1) { + ((IType) tile).setType(value); + + tile.getWorld().playerEntities.stream() + .filter(p -> p.openContainer instanceof ContainerBase && ((ContainerBase) p.openContainer).getTile().getPos().equals(tile.getPos())) + .forEach(p -> p.openContainer.detectAndSendChanges()); + } + } + }); + } + + int getType(); + + void setType(int type); + + IItemHandler getFilterInventory(); +} diff --git a/src/main/resources/assets/refinedstorage/blockstates/fluid_constructor.json b/src/main/resources/assets/refinedstorage/blockstates/fluid_constructor.json deleted file mode 100755 index b64780cba..000000000 --- a/src/main/resources/assets/refinedstorage/blockstates/fluid_constructor.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { - "all": "refinedstorage:blocks/cable", - "particle": "refinedstorage:blocks/cable", - "front": "refinedstorage:blocks/fluid_constructor", - "line": "refinedstorage:blocks/cable_part" - }, - "model": "refinedstorage:cable_core", - "uvlock": true - }, - "variants": { - "inventory": [ - { - "model": "refinedstorage:constructor_destructor", - "transform": "forge:default-block" - } - ], - "direction": { - "north": { - "submodel": "refinedstorage:constructor_destructor_north" - }, - "east": { - "submodel": "refinedstorage:constructor_destructor_east" - }, - "south": { - "submodel": "refinedstorage:constructor_destructor_south" - }, - "west": { - "submodel": "refinedstorage:constructor_destructor_west" - }, - "up": { - "submodel": "refinedstorage:constructor_destructor_up" - }, - "down": { - "submodel": "refinedstorage:constructor_destructor_down" - } - }, - "north": { - "true": { - "submodel": "refinedstorage:cable_north" - }, - "false": { - } - }, - "east": { - "true": { - "submodel": "refinedstorage:cable_east" - }, - "false": { - } - }, - "south": { - "true": { - "submodel": "refinedstorage:cable_south" - }, - "false": { - } - }, - "west": { - "true": { - "submodel": "refinedstorage:cable_west" - }, - "false": { - } - }, - "up": { - "true": { - "submodel": "refinedstorage:cable_up" - }, - "false": { - } - }, - "down": { - "true": { - "submodel": "refinedstorage:cable_down" - }, - "false": { - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/blockstates/fluid_destructor.json b/src/main/resources/assets/refinedstorage/blockstates/fluid_destructor.json deleted file mode 100755 index 77d6c66b5..000000000 --- a/src/main/resources/assets/refinedstorage/blockstates/fluid_destructor.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { - "all": "refinedstorage:blocks/cable", - "particle": "refinedstorage:blocks/cable", - "front": "refinedstorage:blocks/fluid_destructor", - "line": "refinedstorage:blocks/cable_part" - }, - "model": "refinedstorage:cable_core", - "uvlock": true - }, - "variants": { - "inventory": [ - { - "model": "refinedstorage:constructor_destructor", - "transform": "forge:default-block" - } - ], - "direction": { - "north": { - "submodel": "refinedstorage:constructor_destructor_north" - }, - "east": { - "submodel": "refinedstorage:constructor_destructor_east" - }, - "south": { - "submodel": "refinedstorage:constructor_destructor_south" - }, - "west": { - "submodel": "refinedstorage:constructor_destructor_west" - }, - "up": { - "submodel": "refinedstorage:constructor_destructor_up" - }, - "down": { - "submodel": "refinedstorage:constructor_destructor_down" - } - }, - "north": { - "true": { - "submodel": "refinedstorage:cable_north" - }, - "false": { - } - }, - "east": { - "true": { - "submodel": "refinedstorage:cable_east" - }, - "false": { - } - }, - "south": { - "true": { - "submodel": "refinedstorage:cable_south" - }, - "false": { - } - }, - "west": { - "true": { - "submodel": "refinedstorage:cable_west" - }, - "false": { - } - }, - "up": { - "true": { - "submodel": "refinedstorage:cable_up" - }, - "false": { - } - }, - "down": { - "true": { - "submodel": "refinedstorage:cable_down" - }, - "false": { - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/blockstates/fluid_importer.json b/src/main/resources/assets/refinedstorage/blockstates/fluid_importer.json deleted file mode 100755 index ccbadf616..000000000 --- a/src/main/resources/assets/refinedstorage/blockstates/fluid_importer.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { - "all": "refinedstorage:blocks/cable", - "particle": "refinedstorage:blocks/cable", - "line": "refinedstorage:blocks/cable_part" - }, - "model": "refinedstorage:cable_core", - "uvlock": true - }, - "variants": { - "inventory": [ - { - "model": "refinedstorage:importer", - "transform": "forge:default-block" - } - ], - "direction": { - "north": { - "submodel": "refinedstorage:importer_north" - }, - "east": { - "submodel": "refinedstorage:importer_east" - }, - "south": { - "submodel": "refinedstorage:importer_south" - }, - "west": { - "submodel": "refinedstorage:importer_west" - }, - "up": { - "submodel": "refinedstorage:importer_up" - }, - "down": { - "submodel": "refinedstorage:importer_down" - } - }, - "north": { - "true": { - "submodel": "refinedstorage:cable_north" - }, - "false": { - } - }, - "east": { - "true": { - "submodel": "refinedstorage:cable_east" - }, - "false": { - } - }, - "south": { - "true": { - "submodel": "refinedstorage:cable_south" - }, - "false": { - } - }, - "west": { - "true": { - "submodel": "refinedstorage:cable_west" - }, - "false": { - } - }, - "up": { - "true": { - "submodel": "refinedstorage:cable_up" - }, - "false": { - } - }, - "down": { - "true": { - "submodel": "refinedstorage:cable_down" - }, - "false": { - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index fdc440480..a8c5292fc 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -40,9 +40,6 @@ gui.refinedstorage:network_transmitter.dimension=Dimension %d gui.refinedstorage:network_transmitter.missing_card=Missing Network Card gui.refinedstorage:network_transmitter.missing_upgrade=Insert upgrade gui.refinedstorage:fluid_disk_drive=Fluid Disk Drive -gui.refinedstorage:fluid_constructor=Fluid Constructor -gui.refinedstorage:fluid_destructor=Fluid Destructor -gui.refinedstorage:fluid_importer=Fluid Importer misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Usage: %d RS/t @@ -96,6 +93,10 @@ sidebutton.refinedstorage:mode=Mode sidebutton.refinedstorage:mode.whitelist=Whitelist sidebutton.refinedstorage:mode.blacklist=Blacklist +sidebutton.refinedstorage:type=Type +sidebutton.refinedstorage:type.0=Items +sidebutton.refinedstorage:type.1=Fluids + sidebutton.refinedstorage:detector.mode=Mode sidebutton.refinedstorage:detector.mode.0=Emit signal when under the amount sidebutton.refinedstorage:detector.mode.1=Emit signal when on the amount @@ -131,9 +132,6 @@ block.refinedstorage:processing_pattern_encoder.name=Processing Pattern Encoder block.refinedstorage:network_receiver.name=Network Receiver block.refinedstorage:network_transmitter.name=Network Transmitter block.refinedstorage:fluid_disk_drive.name=Fluid Disk Drive -block.refinedstorage:fluid_constructor.name=Fluid Constructor -block.refinedstorage:fluid_destructor.name=Fluid Destructor -block.refinedstorage:fluid_importer.name=Fluid Importer item.refinedstorage:storage_disk.0.name=1k Storage Disk item.refinedstorage:storage_disk.1.name=4k Storage Disk diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/fluid_constructor.png b/src/main/resources/assets/refinedstorage/textures/blocks/fluid_constructor.png deleted file mode 100755 index 02c91d41dc1bca35c96961a08304e41a30a709ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 711 zcmV;&0yzDNP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^5z3JSmg00K8jL_t(IPmPh=PU27$hWGQ-auOItqJ%J< zrYI5zGcz|{&Iy6GP!NS^sPss{DCNS_3y}!4&=cUyo6JJUT$_A*<=@@^zt&2M2;wLn zO(znWWHPhApUq^x9Uq@$vnL1XFHjE;zY?F02qF_tX5#U5EOvlWsn5tYcqfr4fuQl~ z^7QBF`R_B-|KjoW@nP`*;(mU=4nznP4ktkM=lwN{zA{&oh0>e%ZfCd3s{-^Ey}S7x z*!K3KC>l+H>X@Ay`=)DkyLPu@ciL84G9}rT1yc|$QL-hdVB6h|pin3VN;YLMiMlB0 zf?x=|!MF4lJ7t@ClQr3E>$+()mlHxC(ek(k(64Q`WlI)KQL-dx%o!YS@c?IWtj+>p z^Z5d3Ipr;|%Cu)~SU{f1(o7OQt>yITmq;eMME9a8hQ(jQ0`T)?8E`l@(Q>V~ z-(H*4&a|_NTCGlNC9OhgOm0N|9+BT)3O|O$mB;PgTCem@9QY=}FgJ#|aNOf?cyZhf t0|6NAbb0|;7*IMDzA diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/fluid_destructor.png b/src/main/resources/assets/refinedstorage/textures/blocks/fluid_destructor.png deleted file mode 100755 index 545ff282d084ef7983e014bb544714b627ba374a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 638 zcmV-^0)hRBP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^5z3JSmg00HhvL_t(IPmPgVZ=ygP#pm--M69~4HLWqO zx5d_yuFdYg^vhKWqR?OgalG{U)-SVVX3)1iK(o(HeoW5HoHPGpB${^BZ4Y}rz2Dc* z&quoc=lc3)G`hJM{=#~B`CI#OrD=M%uXnq{PUnIQ20uyh{fo5P8o|T)X7~1%yuR}1 zX9)K61Py^Lgm`)R474=TZ1$k|dcB8fyNxN`Jw5`l*@*QT@YO2WYZsRx2JwAfc3nAzv(55F}Bwrxd_;dfFn5Mkk#Rh9bM>LBM=J2}2-!pUvmY^Ag_| z4-e^t#&?o_2xPCOESDmR5Kf;!Y_Zs58w3EhN~K29DF{$1&?hT~dSbam7?tu?$fFo+ zwR(e`oHU_!l*Xu=J&(817%S@KLvmoNBT%l^(g~g?=JWq+e19LiuJAkt;W!C?hUdXn zDjkt(wGI_eCVVy%j>D%@X4`*FGd-D3W6R>U%_b87Te*BpRP`HF;yCc-4%~47pJm0S z$#G(u05(ObkYW+vJ4awP12KF^+IE_>tPjIrh7pg)AGf!#6$*zWt(E=l%yj{G-87SR zi0|&;W8*P5jNGHDN1v6xNI^a%lB7yfQI<=ELRpqo3