From 214cd6e179979d0a1351e6d255e0a9d104d12f33 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 13 Aug 2016 19:27:52 +0200 Subject: [PATCH] Fluid Constructor --- .../java/refinedstorage/RefinedStorage.java | 2 + .../refinedstorage/RefinedStorageBlocks.java | 1 + .../refinedstorage/RefinedStorageGui.java | 1 + .../java/refinedstorage/block/BlockCable.java | 8 +- .../block/BlockConstructor.java | 6 +- .../block/BlockFluidConstructor.java | 37 +++++ .../container/ContainerFluidConstructor.java | 49 +++++++ .../container/ContainerStorage.java | 4 +- ...{SlotFluid.java => SlotSpecimenFluid.java} | 4 +- .../gui/GuiFluidConstructor.java | 37 +++++ .../java/refinedstorage/gui/GuiHandler.java | 12 +- .../java/refinedstorage/gui/grid/GuiGrid.java | 4 +- .../refinedstorage/proxy/ClientProxy.java | 3 +- .../refinedstorage/proxy/CommonProxy.java | 14 ++ .../tile/TileFluidConstructor.java | 132 ++++++++++++++++++ .../blockstates/constructor.json | 2 +- .../blockstates/destructor.json | 2 +- .../refinedstorage/blockstates/exporter.json | 2 +- .../blockstates/external_storage.json | 2 +- .../blockstates/fluid_constructor.json | 83 +++++++++++ .../refinedstorage/blockstates/importer.json | 2 +- .../assets/refinedstorage/lang/en_US.lang | 2 + ...er_external_storage.png => cable_part.png} | Bin .../textures/blocks/fluid_constructor.png | Bin 0 -> 711 bytes .../textures/gui/fluid_grid.png | Bin 1974 -> 0 bytes 25 files changed, 387 insertions(+), 22 deletions(-) create mode 100755 src/main/java/refinedstorage/block/BlockFluidConstructor.java create mode 100755 src/main/java/refinedstorage/container/ContainerFluidConstructor.java rename src/main/java/refinedstorage/container/slot/{SlotFluid.java => SlotSpecimenFluid.java} (69%) create mode 100755 src/main/java/refinedstorage/gui/GuiFluidConstructor.java create mode 100755 src/main/java/refinedstorage/tile/TileFluidConstructor.java create mode 100755 src/main/resources/assets/refinedstorage/blockstates/fluid_constructor.json rename src/main/resources/assets/refinedstorage/textures/blocks/{importer_exporter_external_storage.png => cable_part.png} (100%) create mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/fluid_constructor.png delete mode 100755 src/main/resources/assets/refinedstorage/textures/gui/fluid_grid.png diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 34a5f9d5b..3c3d26f9a 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -44,6 +44,7 @@ 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; @@ -91,6 +92,7 @@ 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"); diff --git a/src/main/java/refinedstorage/RefinedStorageBlocks.java b/src/main/java/refinedstorage/RefinedStorageBlocks.java index 44bfb25e2..33394ade9 100755 --- a/src/main/java/refinedstorage/RefinedStorageBlocks.java +++ b/src/main/java/refinedstorage/RefinedStorageBlocks.java @@ -25,4 +25,5 @@ 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(); } \ No newline at end of file diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index 4ff36a937..4d70c70e9 100755 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -21,4 +21,5 @@ 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; } diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index 2d5eac8a1..66849d5d7 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -68,6 +68,10 @@ public class BlockCable extends BlockCoverable { setCreativeTab(RefinedStorage.INSTANCE.tab); } + public BlockCable() { + this("cable"); + } + @Override public String getUnlocalizedName() { return "block." + RefinedStorage.ID + ":" + name; @@ -77,10 +81,6 @@ public class BlockCable extends BlockCoverable { return name; } - public BlockCable() { - this("cable"); - } - @Override public boolean canProvidePower(IBlockState state) { return false; diff --git a/src/main/java/refinedstorage/block/BlockConstructor.java b/src/main/java/refinedstorage/block/BlockConstructor.java index 0ae765eda..35e6476d7 100755 --- a/src/main/java/refinedstorage/block/BlockConstructor.java +++ b/src/main/java/refinedstorage/block/BlockConstructor.java @@ -31,8 +31,12 @@ public class BlockConstructor extends BlockCable { public static final AxisAlignedBB HEAD_DOWN_AABB = createAABB(0, 0, 0, 16, 2, 16); public static final AxisAlignedBB HEAD_UP_AABB = createAABB(0, 14, 0, 16, 16, 16); + public BlockConstructor(String name) { + super(name); + } + public BlockConstructor() { - super("constructor"); + this("constructor"); } @Override diff --git a/src/main/java/refinedstorage/block/BlockFluidConstructor.java b/src/main/java/refinedstorage/block/BlockFluidConstructor.java new file mode 100755 index 000000000..40d6c39cf --- /dev/null +++ b/src/main/java/refinedstorage/block/BlockFluidConstructor.java @@ -0,0 +1,37 @@ +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/container/ContainerFluidConstructor.java b/src/main/java/refinedstorage/container/ContainerFluidConstructor.java new file mode 100755 index 000000000..8d1c1745c --- /dev/null +++ b/src/main/java/refinedstorage/container/ContainerFluidConstructor.java @@ -0,0 +1,49 @@ +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/ContainerStorage.java b/src/main/java/refinedstorage/container/ContainerStorage.java index da577ee27..3b76687fa 100755 --- a/src/main/java/refinedstorage/container/ContainerStorage.java +++ b/src/main/java/refinedstorage/container/ContainerStorage.java @@ -4,8 +4,8 @@ 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.SlotFluid; import refinedstorage.container.slot.SlotSpecimen; +import refinedstorage.container.slot.SlotSpecimenFluid; import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.tile.TileBase; @@ -22,7 +22,7 @@ public class ContainerStorage extends ContainerBase { protected void addFilterAndPlayerInventorySlots(IItemHandler filters) { for (int i = 0; i < 9; ++i) { - addSlotToContainer(filters instanceof ItemHandlerFluid ? new SlotFluid(!getTile().getWorld().isRemote, filters, i, 8 + (18 * i), 20) : new SlotSpecimen(filters, i, 8 + (18 * i), 20)); + addSlotToContainer(filters instanceof ItemHandlerFluid ? new SlotSpecimenFluid(!getTile().getWorld().isRemote, filters, i, 8 + (18 * i), 20) : new SlotSpecimen(filters, i, 8 + (18 * i), 20)); } addPlayerInventory(8, 129); diff --git a/src/main/java/refinedstorage/container/slot/SlotFluid.java b/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java similarity index 69% rename from src/main/java/refinedstorage/container/slot/SlotFluid.java rename to src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java index 4dec4bfa0..66d0eded1 100755 --- a/src/main/java/refinedstorage/container/slot/SlotFluid.java +++ b/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java @@ -3,10 +3,10 @@ package refinedstorage.container.slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; -public class SlotFluid extends SlotSpecimen { +public class SlotSpecimenFluid extends SlotSpecimen { private boolean server; - public SlotFluid(boolean server, IItemHandler handler, int id, int x, int y) { + public SlotSpecimenFluid(boolean server, IItemHandler handler, int id, int x, int y) { super(handler, id, x, y); this.server = server; diff --git a/src/main/java/refinedstorage/gui/GuiFluidConstructor.java b/src/main/java/refinedstorage/gui/GuiFluidConstructor.java new file mode 100755 index 000000000..1e5307f4d --- /dev/null +++ b/src/main/java/refinedstorage/gui/GuiFluidConstructor.java @@ -0,0 +1,37 @@ +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/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index f876d2d74..425c3f11f 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -23,8 +23,6 @@ public class GuiHandler implements IGuiHandler { return new ContainerGrid((TileGrid) tile, player); case RefinedStorageGui.DISK_DRIVE: return new ContainerDiskDrive((TileDiskDrive) tile, player); - case RefinedStorageGui.FLUID_DISK_DRIVE: - return new ContainerFluidDiskDrive((TileFluidDiskDrive) tile, player); case RefinedStorageGui.IMPORTER: return new ContainerImporter((TileImporter) tile, player); case RefinedStorageGui.EXPORTER: @@ -53,6 +51,10 @@ 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_CONSTRUCTOR: + return new ContainerFluidConstructor((TileFluidConstructor) tile, player); default: return null; } @@ -94,8 +96,6 @@ public class GuiHandler implements IGuiHandler { return getWirelessGridGui(player, x); case RefinedStorageGui.DISK_DRIVE: return new GuiStorage((ContainerDiskDrive) getContainer(ID, player, tile), (IStorageGui) tile, "gui/disk_drive.png"); - case RefinedStorageGui.FLUID_DISK_DRIVE: - return new GuiStorage((ContainerFluidDiskDrive) getContainer(ID, player, tile), (IStorageGui) tile, "gui/fluid_disk_drive.png"); case RefinedStorageGui.IMPORTER: return new GuiImporter((ContainerImporter) getContainer(ID, player, tile)); case RefinedStorageGui.EXPORTER: @@ -126,6 +126,10 @@ 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_CONSTRUCTOR: + return new GuiFluidConstructor((ContainerFluidConstructor) getContainer(ID, player, tile)); default: return null; } diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index f7b4f2e28..f0e8c1b5d 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -60,7 +60,7 @@ public class GuiGrid extends GuiBase { } public GuiGrid(ContainerGrid container, IGrid grid) { - super(container, 227, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 247 : 208); + super(container, grid.getType() == EnumGridType.FLUID ? 193 : 227, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 247 : 208); setScrollbar(new Scrollbar(174, 20, 12, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN || grid.getType() == EnumGridType.FLUID) ? 70 : 88)); @@ -241,8 +241,6 @@ public class GuiGrid extends GuiBase { bindTexture("gui/crafting_grid.png"); } else if (grid.getType() == EnumGridType.PATTERN) { bindTexture("gui/pattern_grid.png"); - } else if (grid.getType() == EnumGridType.FLUID) { - bindTexture("gui/fluid_grid.png"); } else { bindTexture("gui/grid.png"); } diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index 30c2acad5..3fcb573fa 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -238,7 +238,6 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.IMPORTER), 0, new ModelResourceLocation("refinedstorage:importer", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.EXTERNAL_STORAGE), 0, new ModelResourceLocation("refinedstorage:external_storage", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.DISK_DRIVE), 0, new ModelResourceLocation("refinedstorage:disk_drive", "inventory")); - ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE), 0, new ModelResourceLocation("refinedstorage:disk_drive", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.CONTROLLER), EnumControllerType.NORMAL.getId(), new ModelResourceLocation("refinedstorage:controller", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.CONTROLLER), EnumControllerType.CREATIVE.getId(), new ModelResourceLocation("refinedstorage:creative_controller", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.CONSTRUCTOR), 0, new ModelResourceLocation("refinedstorage:constructor", "inventory")); @@ -258,5 +257,7 @@ 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")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_CONSTRUCTOR), 0, new ModelResourceLocation("refinedstorage:fluid_constructor", "inventory")); } } diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 3a706bcea..8e81028df 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -86,6 +86,7 @@ public class CommonProxy { registerTile(TileNetworkReceiver.class, "network_receiver"); registerTile(TileNetworkTransmitter.class, "network_transmitter"); registerTile(TileFluidDiskDrive.class, "fluid_disk_drive"); + registerTile(TileFluidConstructor.class, "fluid_constructor"); registerBlock(RefinedStorageBlocks.CONTROLLER); registerBlock(RefinedStorageBlocks.GRID); @@ -109,6 +110,7 @@ public class CommonProxy { registerBlock(RefinedStorageBlocks.NETWORK_TRANSMITTER); registerBlock(RefinedStorageBlocks.NETWORK_RECEIVER); registerBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE); + registerBlock(RefinedStorageBlocks.FLUID_CONSTRUCTOR); registerItem(RefinedStorageItems.QUARTZ_ENRICHED_IRON); registerItem(RefinedStorageItems.STORAGE_DISK); @@ -358,6 +360,18 @@ 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/TileFluidConstructor.java b/src/main/java/refinedstorage/tile/TileFluidConstructor.java new file mode 100755 index 000000000..d57d7c0eb --- /dev/null +++ b/src/main/java/refinedstorage/tile/TileFluidConstructor.java @@ -0,0 +1,132 @@ +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/resources/assets/refinedstorage/blockstates/constructor.json b/src/main/resources/assets/refinedstorage/blockstates/constructor.json index 147bb6734..5af28062c 100755 --- a/src/main/resources/assets/refinedstorage/blockstates/constructor.json +++ b/src/main/resources/assets/refinedstorage/blockstates/constructor.json @@ -5,7 +5,7 @@ "all": "refinedstorage:blocks/cable", "particle": "refinedstorage:blocks/cable", "front": "refinedstorage:blocks/constructor", - "line": "refinedstorage:blocks/importer_exporter_external_storage" + "line": "refinedstorage:blocks/cable_part" }, "model": "refinedstorage:cable_core", "uvlock": true diff --git a/src/main/resources/assets/refinedstorage/blockstates/destructor.json b/src/main/resources/assets/refinedstorage/blockstates/destructor.json index b8f2b82f7..e625d0e07 100755 --- a/src/main/resources/assets/refinedstorage/blockstates/destructor.json +++ b/src/main/resources/assets/refinedstorage/blockstates/destructor.json @@ -5,7 +5,7 @@ "all": "refinedstorage:blocks/cable", "particle": "refinedstorage:blocks/cable", "front": "refinedstorage:blocks/destructor", - "line": "refinedstorage:blocks/importer_exporter_external_storage" + "line": "refinedstorage:blocks/cable_part" }, "model": "refinedstorage:cable_core", "uvlock": true diff --git a/src/main/resources/assets/refinedstorage/blockstates/exporter.json b/src/main/resources/assets/refinedstorage/blockstates/exporter.json index 8cb54ce29..a0f233ebd 100755 --- a/src/main/resources/assets/refinedstorage/blockstates/exporter.json +++ b/src/main/resources/assets/refinedstorage/blockstates/exporter.json @@ -4,7 +4,7 @@ "textures": { "all": "refinedstorage:blocks/cable", "particle": "refinedstorage:blocks/cable", - "line": "refinedstorage:blocks/importer_exporter_external_storage" + "line": "refinedstorage:blocks/cable_part" }, "model": "refinedstorage:cable_core", "uvlock": true diff --git a/src/main/resources/assets/refinedstorage/blockstates/external_storage.json b/src/main/resources/assets/refinedstorage/blockstates/external_storage.json index d5499367e..adf5b62a1 100755 --- a/src/main/resources/assets/refinedstorage/blockstates/external_storage.json +++ b/src/main/resources/assets/refinedstorage/blockstates/external_storage.json @@ -4,7 +4,7 @@ "textures": { "all": "refinedstorage:blocks/cable", "particle": "refinedstorage:blocks/cable", - "line": "refinedstorage:blocks/importer_exporter_external_storage" + "line": "refinedstorage:blocks/cable_part" }, "model": "refinedstorage:cable_core", "uvlock": true diff --git a/src/main/resources/assets/refinedstorage/blockstates/fluid_constructor.json b/src/main/resources/assets/refinedstorage/blockstates/fluid_constructor.json new file mode 100755 index 000000000..b64780cba --- /dev/null +++ b/src/main/resources/assets/refinedstorage/blockstates/fluid_constructor.json @@ -0,0 +1,83 @@ +{ + "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/importer.json b/src/main/resources/assets/refinedstorage/blockstates/importer.json index a131e1e27..ccbadf616 100755 --- a/src/main/resources/assets/refinedstorage/blockstates/importer.json +++ b/src/main/resources/assets/refinedstorage/blockstates/importer.json @@ -4,7 +4,7 @@ "textures": { "all": "refinedstorage:blocks/cable", "particle": "refinedstorage:blocks/cable", - "line": "refinedstorage:blocks/importer_exporter_external_storage" + "line": "refinedstorage:blocks/cable_part" }, "model": "refinedstorage:cable_core", "uvlock": true diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index bdd963dd0..f60cf3519 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -40,6 +40,7 @@ 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 misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Usage: %d RS/t @@ -128,6 +129,7 @@ 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 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/importer_exporter_external_storage.png b/src/main/resources/assets/refinedstorage/textures/blocks/cable_part.png similarity index 100% rename from src/main/resources/assets/refinedstorage/textures/blocks/importer_exporter_external_storage.png rename to src/main/resources/assets/refinedstorage/textures/blocks/cable_part.png diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/fluid_constructor.png b/src/main/resources/assets/refinedstorage/textures/blocks/fluid_constructor.png new file mode 100755 index 0000000000000000000000000000000000000000..02c91d41dc1bca35c96961a08304e41a30a709ef GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/refinedstorage/textures/gui/fluid_grid.png b/src/main/resources/assets/refinedstorage/textures/gui/fluid_grid.png deleted file mode 100755 index 5ba8ff87f4ed9db1dbf9de6163d126162c4a30d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1974 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5D>38$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&di49pAxJ|V6^adUI?(9qEC?(Sp9j{X1tA1E>kMnhnPgh10{aTQRmDGBlm z1}6TI3>bpHv#SE5owL9rvY3H^?=T269?xHq0u+=iag8Vm&QB{TPb^AhC`ioAE78kK zEm1JhGte_MSj)wA09c~%dAc};RK&f#dofSgP@wIiYUcg_6Pdm1uK6B5dg`Nt&U}9l z<+H6fZM#-%SXH+B?zYa|d+(Ipwo`vs+L-(5`~N=`kq^ud9N!YFx1Q?_gJsUKd;AZA zuA0^#OwQ*h(0%pZpOb;1VUI^XC}~bO+{U7C-g-|Y!@BSPmx@l=|6t>H<{!ryCD=YZ zuD*WeTKzp6+o$^^IVRL+_u1Xg{rqLhZ#JN|%8BF1}QyoSPZITg7`~b5cAvO*Lg*5xm}D!?=NZXxqUKc?yV5!Cs!69 z;xE1ras-3iHV_E}FduG^k1d~UoE6M7p?Z4Q!@GWIudghVQdll0S~ugj8A#!W4Zuf7_8mIx1^>53$47H3=>J_Be!t$T;m@*@i}$$I zUuJx=vmLD6vbG7Rb;5Hwu?B`GzYU^V@4udS(`xHVwiC9O10OyOgSZZ=1Z*3SII!aV z;}y3>n4jER8d|Y^GDN-l+Z7)U-`NfdAP|6A0AdGV@yYxx2+sqRfLs7l3IYz0&^;gn zG)v*U?HYTAoz=Ob_ui*%^UGbu`047i6(6{xusY1)Ztgo^ynu9WFgws8zx40k+}q!Z zmuK1>SZ{Ax-NyFE;A8$<_Ivd{KSl1!SEaDJpA&63lgd0{XAXnWbY6#Nn;1{Tm@&*e o&8AR%lOaVFOo`AgM>FVdQ&MBb@0L_GHYXATM