From 38a68541c4c12e3fab8e0a3a41af7ce8329c8985 Mon Sep 17 00:00:00 2001 From: aidancbrady Date: Wed, 16 Mar 2016 21:41:55 -0400 Subject: [PATCH] Tiered Bins, better tier management! --- .../render/item/ItemRenderingHandler.java | 13 +- src/main/java/mekanism/common/Mekanism.java | 21 +- src/main/java/mekanism/common/Tier.java | 521 ++++++++---------- .../mekanism/common/block/BlockBasic.java | 35 +- .../common/inventory/InventoryBin.java | 21 +- .../mekanism/common/item/ItemBlockBasic.java | 5 +- .../mekanism/common/tile/TileEntityBin.java | 23 +- .../mekanism/common/util/MekanismUtils.java | 14 + .../mekanism/common/util/RecipeUtils.java | 72 +++ .../resources/assets/mekanism/lang/en_US.lang | 7 +- .../textures/blocks/BinAdvancedFront.png | Bin 0 -> 1762 bytes .../textures/blocks/BinAdvancedFrontOn.png | Bin 0 -> 1765 bytes .../textures/blocks/BinAdvancedSide.png | Bin 0 -> 1834 bytes .../textures/blocks/BinAdvancedTop.png | Bin 0 -> 1770 bytes .../textures/blocks/BinAdvancedTopOn.png | Bin 0 -> 1777 bytes .../textures/blocks/BinBasicFront.png | Bin 0 -> 1776 bytes .../textures/blocks/BinBasicFrontOn.png | Bin 0 -> 1777 bytes .../mekanism/textures/blocks/BinBasicSide.png | Bin 0 -> 1847 bytes .../mekanism/textures/blocks/BinBasicTop.png | Bin 0 -> 1783 bytes .../textures/blocks/BinBasicTopOn.png | Bin 0 -> 1786 bytes .../textures/blocks/BinEliteFront.png | Bin 0 -> 1767 bytes .../textures/blocks/BinEliteFrontOn.png | Bin 0 -> 1767 bytes .../mekanism/textures/blocks/BinEliteSide.png | Bin 0 -> 1836 bytes .../mekanism/textures/blocks/BinEliteTop.png | Bin 0 -> 1765 bytes .../textures/blocks/BinEliteTopOn.png | Bin 0 -> 1772 bytes .../mekanism/textures/blocks/BinFront.png | Bin 1770 -> 0 bytes .../mekanism/textures/blocks/BinFrontOn.png | Bin 1772 -> 0 bytes .../mekanism/textures/blocks/BinSide.png | Bin 1856 -> 0 bytes .../mekanism/textures/blocks/BinTop.png | Bin 1785 -> 0 bytes .../mekanism/textures/blocks/BinTopOn.png | Bin 1792 -> 0 bytes .../textures/blocks/BinUltimateFront.png | Bin 0 -> 1779 bytes .../textures/blocks/BinUltimateFrontOn.png | Bin 0 -> 1783 bytes .../textures/blocks/BinUltimateSide.png | Bin 0 -> 1849 bytes .../textures/blocks/BinUltimateTop.png | Bin 0 -> 1772 bytes .../textures/blocks/BinUltimateTopOn.png | Bin 0 -> 1790 bytes 35 files changed, 409 insertions(+), 323 deletions(-) create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinAdvancedFront.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinAdvancedFrontOn.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinAdvancedSide.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinAdvancedTop.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinAdvancedTopOn.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinBasicFront.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinBasicFrontOn.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinBasicSide.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinBasicTop.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinBasicTopOn.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinEliteFront.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinEliteFrontOn.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinEliteSide.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinEliteTop.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinEliteTopOn.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinFront.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinFrontOn.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinSide.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinTop.png delete mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinTopOn.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinUltimateFront.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinUltimateFrontOn.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinUltimateSide.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinUltimateTop.png create mode 100644 src/main/resources/assets/mekanism/textures/blocks/BinUltimateTopOn.png diff --git a/src/main/java/mekanism/client/render/item/ItemRenderingHandler.java b/src/main/java/mekanism/client/render/item/ItemRenderingHandler.java index f5bb19c39..04dac937a 100644 --- a/src/main/java/mekanism/client/render/item/ItemRenderingHandler.java +++ b/src/main/java/mekanism/client/render/item/ItemRenderingHandler.java @@ -28,6 +28,7 @@ import mekanism.common.Tier.BaseTier; import mekanism.common.Tier.EnergyCubeTier; import mekanism.common.Tier.FluidTankTier; import mekanism.common.base.IEnergyCube; +import mekanism.common.block.BlockBasic.BasicType; import mekanism.common.block.BlockMachine.MachineType; import mekanism.common.inventory.InventoryBin; import mekanism.common.item.ItemAtomicDisassembler; @@ -162,18 +163,16 @@ public class ItemRenderingHandler implements IItemRenderer GL11.glPopMatrix(); } - else if(Block.getBlockFromItem(item.getItem()) == MekanismBlocks.BasicBlock2 && item.getItemDamage() == 3) + else if(BasicType.get(item) == BasicType.INDUCTION_CELL || BasicType.get(item) == BasicType.INDUCTION_PROVIDER) { MekanismRenderer.renderCustomItem((RenderBlocks)data[0], item); } - else if(Block.getBlockFromItem(item.getItem()) == MekanismBlocks.BasicBlock2 && item.getItemDamage() == 4) + else if(BasicType.get(item) == BasicType.BIN) { + GL11.glRotatef(270, 0.0F, 1.0F, 0.0F); MekanismRenderer.renderCustomItem((RenderBlocks)data[0], item); - } - else if(Block.getBlockFromItem(item.getItem()) == MekanismBlocks.BasicBlock && item.getItemDamage() == 6) - { - RenderingRegistry.instance().renderInventoryBlock((RenderBlocks)data[0], MekanismBlocks.BasicBlock, item.getItemDamage(), ClientProxy.BASIC_RENDER_ID); - + GL11.glRotatef(-270, 0.0F, 1.0F, 0.0F); + if(binRenderer == null || binRenderer.func_147498_b()/*getFontRenderer()*/ == null) { return; diff --git a/src/main/java/mekanism/common/Mekanism.java b/src/main/java/mekanism/common/Mekanism.java index 2bdbb49bb..da863a21e 100644 --- a/src/main/java/mekanism/common/Mekanism.java +++ b/src/main/java/mekanism/common/Mekanism.java @@ -32,6 +32,7 @@ import mekanism.client.ClientTickHandler; import mekanism.common.EnergyNetwork.EnergyTransferEvent; import mekanism.common.FluidNetwork.FluidTransferEvent; import mekanism.common.Tier.BaseTier; +import mekanism.common.Tier.BinTier; import mekanism.common.Tier.EnergyCubeTier; import mekanism.common.Tier.FactoryTier; import mekanism.common.Tier.FluidTankTier; @@ -375,9 +376,6 @@ public class Mekanism MachineType.LOGISTICAL_SORTER.addRecipe(new ShapedMekanismRecipe(new ItemStack(MekanismBlocks.MachineBlock, 1, 15), new Object[] { "IPI", "ICI", "III", Character.valueOf('I'), "ingotIron", Character.valueOf('P'), Blocks.piston, Character.valueOf('C'), MekanismUtils.getControlCircuit(BaseTier.BASIC) })); - CraftingManager.getInstance().getRecipeList().add(new ShapedMekanismRecipe(new ItemStack(MekanismBlocks.BasicBlock, 1, 6), new Object[] { - "SSS", "SCS", "SSS", Character.valueOf('S'), Blocks.cobblestone, Character.valueOf('C'), MekanismUtils.getControlCircuit(BaseTier.BASIC) - })); MachineType.DIGITAL_MINER.addRecipe(new ShapedMekanismRecipe(new ItemStack(MekanismBlocks.MachineBlock, 1, 4), new Object[] { "ACA", "SES", "TIT", Character.valueOf('A'), MekanismItems.AtomicAlloy, Character.valueOf('C'), MekanismUtils.getControlCircuit(BaseTier.BASIC), Character.valueOf('S'), new ItemStack(MekanismBlocks.MachineBlock, 1, 15), Character.valueOf('E'), MekanismItems.Robit.getUnchargedItem(), Character.valueOf('I'), new ItemStack(MekanismBlocks.BasicBlock, 1, 8), Character.valueOf('T'), MekanismItems.TeleportationCore @@ -568,6 +566,20 @@ public class Mekanism "AIA", "ITI", "AIA", Character.valueOf('I'), "ingotIron", Character.valueOf('A'), "alloyUltimate", Character.valueOf('T'), MekanismUtils.getEmptyFluidTank(FluidTankTier.ELITE) })); + //Bin recipes + CraftingManager.getInstance().getRecipeList().add(new ShapedMekanismRecipe(MekanismUtils.getBin(BinTier.BASIC), new Object[] { + "SCS", "A A", "SSS", Character.valueOf('S'), Blocks.cobblestone, Character.valueOf('C'), MekanismUtils.getControlCircuit(BaseTier.BASIC), Character.valueOf('A'), "alloyBasic" + })); + CraftingManager.getInstance().getRecipeList().add(new ShapedMekanismRecipe(MekanismUtils.getBin(BinTier.ADVANCED), new Object[] { + "SCS", "ABA", "SSS", Character.valueOf('S'), Blocks.cobblestone, Character.valueOf('C'), MekanismUtils.getControlCircuit(BaseTier.ADVANCED), Character.valueOf('A'), "alloyAdvanced", Character.valueOf('B'), MekanismUtils.getBin(BinTier.BASIC) + })); + CraftingManager.getInstance().getRecipeList().add(new ShapedMekanismRecipe(MekanismUtils.getBin(BinTier.ELITE), new Object[] { + "SCS", "ABA", "SSS", Character.valueOf('S'), Blocks.cobblestone, Character.valueOf('C'), MekanismUtils.getControlCircuit(BaseTier.ELITE), Character.valueOf('A'), "alloyElite", Character.valueOf('B'), MekanismUtils.getBin(BinTier.ADVANCED) + })); + CraftingManager.getInstance().getRecipeList().add(new ShapedMekanismRecipe(MekanismUtils.getBin(BinTier.ULTIMATE), new Object[] { + "SCS", "ABA", "SSS", Character.valueOf('S'), Blocks.cobblestone, Character.valueOf('C'), MekanismUtils.getControlCircuit(BaseTier.ULTIMATE), Character.valueOf('A'), "alloyUltimate", Character.valueOf('B'), MekanismUtils.getBin(BinTier.ELITE) + })); + //Induction Cell recipes CraftingManager.getInstance().getRecipeList().add(new ShapedMekanismRecipe(MekanismUtils.getInductionCell(InductionCellTier.BASIC), new Object[] { "LTL", "TET", "LTL", Character.valueOf('T'), MekanismItems.EnergyTablet.getUnchargedItem(), Character.valueOf('E'), MekanismUtils.getEnergyCube(EnergyCubeTier.BASIC), Character.valueOf('L'), "dustLithium" @@ -1188,6 +1200,9 @@ public class Mekanism @EventHandler public void preInit(FMLPreInitializationEvent event) { + //Register tier information + Tier.init(); + File config = event.getSuggestedConfigurationFile(); //Set the mod's configuration diff --git a/src/main/java/mekanism/common/Tier.java b/src/main/java/mekanism/common/Tier.java index c3a3fd104..49416a7b5 100644 --- a/src/main/java/mekanism/common/Tier.java +++ b/src/main/java/mekanism/common/Tier.java @@ -1,6 +1,10 @@ package mekanism.common; import io.netty.buffer.ByteBuf; + +import java.util.ArrayList; +import java.util.List; + import mekanism.api.EnumColor; import mekanism.common.multipart.TransmitterType; import mekanism.common.util.LangUtils; @@ -14,6 +18,10 @@ import codechicken.lib.colour.ColourRGBA; */ public final class Tier { + private static List tierTypes = new ArrayList(); + + private static boolean initiated = false; + /** The default tiers used in Mekanism. * @author aidancbrady */ @@ -55,12 +63,7 @@ public final class Tier } } - /** - * The tiers used by the Energy Cube and their corresponding values. - * @author aidancbrady - * - */ - public static enum EnergyCubeTier + public static enum EnergyCubeTier implements ITier { BASIC(2000000, 800), ADVANCED(8000000, 3200), @@ -73,6 +76,12 @@ public final class Tier public double output; private double baseOutput; + + private EnergyCubeTier(double max, double out) + { + baseMaxEnergy = maxEnergy = max; + baseOutput = output = out; + } public static EnergyCubeTier getFromName(String tierName) { @@ -87,7 +96,8 @@ public final class Tier return BASIC; } - protected void loadConfig() + @Override + public void loadConfig() { if(this != CREATIVE) { @@ -96,7 +106,8 @@ public final class Tier } } - protected void readConfig(ByteBuf dataStream) + @Override + public void readConfig(ByteBuf dataStream) { if(this != CREATIVE) { @@ -105,7 +116,8 @@ public final class Tier } } - protected void writeConfig(ByteBuf dataStream) + @Override + public void writeConfig(ByteBuf dataStream) { if(this != CREATIVE) { @@ -114,19 +126,14 @@ public final class Tier } } + @Override public BaseTier getBaseTier() { return BaseTier.values()[ordinal()]; } - - private EnergyCubeTier(double max, double out) - { - baseMaxEnergy = maxEnergy = max; - baseOutput = output = out; - } } - public static enum InductionCellTier + public static enum InductionCellTier implements ITier { BASIC(1E9D), ADVANCED(8E9D), @@ -136,33 +143,37 @@ public final class Tier public double maxEnergy; private double baseMaxEnergy; + private InductionCellTier(double max) + { + baseMaxEnergy = maxEnergy = max; + } + + @Override public BaseTier getBaseTier() { return BaseTier.values()[ordinal()]; } - protected void loadConfig() + @Override + public void loadConfig() { maxEnergy = Mekanism.configuration.get("tier", getBaseTier().getName() + "InductionCellMaxEnergy", baseMaxEnergy).getDouble(); } - protected void readConfig(ByteBuf dataStream) + @Override + public void readConfig(ByteBuf dataStream) { maxEnergy = dataStream.readDouble(); } - protected void writeConfig(ByteBuf dataStream) + @Override + public void writeConfig(ByteBuf dataStream) { dataStream.writeDouble(maxEnergy); } - - private InductionCellTier(double max) - { - baseMaxEnergy = maxEnergy = max; - } } - public static enum InductionProviderTier + public static enum InductionProviderTier implements ITier { BASIC(64000), ADVANCED(512000), @@ -172,37 +183,36 @@ public final class Tier public double output; private double baseOutput; + private InductionProviderTier(double out) + { + baseOutput = output = out; + } + + @Override public BaseTier getBaseTier() { return BaseTier.values()[ordinal()]; } - protected void loadConfig() + @Override + public void loadConfig() { output = Mekanism.configuration.get("tier", getBaseTier().getName() + "InductionProviderOutput", baseOutput).getDouble(); } - protected void readConfig(ByteBuf dataStream) + @Override + public void readConfig(ByteBuf dataStream) { output = dataStream.readDouble(); } - protected void writeConfig(ByteBuf dataStream) + @Override + public void writeConfig(ByteBuf dataStream) { dataStream.writeDouble(output); } - - private InductionProviderTier(double out) - { - baseOutput = output = out; - } } - /** - * The tiers used by the Factory and their corresponding values. - * @author aidancbrady - * - */ public static enum FactoryTier { BASIC(3, new ResourceLocation("mekanism", "gui/factory/GuiBasicFactory.png")), @@ -238,22 +248,12 @@ public final class Tier } } - /** - * The tiers used by Universal Cables and their corresponding values. - * @author aidancbrady - * - */ - public static enum CableTier + public static enum CableTier implements ITier { BASIC(3200, TransmitterType.UNIVERSAL_CABLE_BASIC), ADVANCED(12800, TransmitterType.UNIVERSAL_CABLE_ADVANCED), ELITE(64000, TransmitterType.UNIVERSAL_CABLE_ELITE), ULTIMATE(320000, TransmitterType.UNIVERSAL_CABLE_ULTIMATE); - - public BaseTier getBaseTier() - { - return BaseTier.values()[ordinal()]; - } public int cableCapacity; private int baseCapacity; @@ -267,17 +267,26 @@ public final class Tier type = transmitterType; } - protected void loadConfig() + @Override + public BaseTier getBaseTier() + { + return BaseTier.values()[ordinal()]; + } + + @Override + public void loadConfig() { cableCapacity = Mekanism.configuration.get("tier", getBaseTier().getName() + "CableCapacity", baseCapacity).getInt(); } - - protected void readConfig(ByteBuf dataStream) + + @Override + public void readConfig(ByteBuf dataStream) { cableCapacity = dataStream.readInt(); } - - protected void writeConfig(ByteBuf dataStream) + + @Override + public void writeConfig(ByteBuf dataStream) { dataStream.writeInt(cableCapacity); } @@ -296,22 +305,12 @@ public final class Tier } } - /** - * The tiers used by Mechanical Pipes and their corresponding values. - * @author unpairedbracket - * - */ - public static enum PipeTier + public static enum PipeTier implements ITier { BASIC(1000, 100, TransmitterType.MECHANICAL_PIPE_BASIC), ADVANCED(4000, 400, TransmitterType.MECHANICAL_PIPE_ADVANCED), ELITE(16000, 1600, TransmitterType.MECHANICAL_PIPE_ELITE), ULTIMATE(64000, 6400, TransmitterType.MECHANICAL_PIPE_ULTIMATE); - - public BaseTier getBaseTier() - { - return BaseTier.values()[ordinal()]; - } public int pipeCapacity; private int baseCapacity; @@ -328,20 +327,29 @@ public final class Tier type = transmitterType; } - - protected void loadConfig() + + @Override + public BaseTier getBaseTier() + { + return BaseTier.values()[ordinal()]; + } + + @Override + public void loadConfig() { pipeCapacity = Mekanism.configuration.get("tier", getBaseTier().getName() + "PipeCapacity", baseCapacity).getInt(); pipePullAmount = Mekanism.configuration.get("tier", getBaseTier().getName() + "PipePullAmount", basePull).getInt(); } - - protected void readConfig(ByteBuf dataStream) + + @Override + public void readConfig(ByteBuf dataStream) { pipeCapacity = dataStream.readInt(); pipePullAmount = dataStream.readInt(); } - - protected void writeConfig(ByteBuf dataStream) + + @Override + public void writeConfig(ByteBuf dataStream) { dataStream.writeInt(pipeCapacity); dataStream.writeInt(pipePullAmount); @@ -360,23 +368,13 @@ public final class Tier return BASIC; } } - - /** - * The tiers used by Pressurized Tubes and their corresponding values. - * @author AidanBrady - * - */ - public static enum TubeTier + + public static enum TubeTier implements ITier { BASIC(256, 64, TransmitterType.PRESSURIZED_TUBE_BASIC), ADVANCED(1024, 256, TransmitterType.PRESSURIZED_TUBE_ADVANCED), ELITE(4096, 1024, TransmitterType.PRESSURIZED_TUBE_ELITE), ULTIMATE(16384, 4096, TransmitterType.PRESSURIZED_TUBE_ULTIMATE); - - public BaseTier getBaseTier() - { - return BaseTier.values()[ordinal()]; - } public int tubeCapacity; private int baseCapacity; @@ -393,20 +391,29 @@ public final class Tier type = transmitterType; } - - protected void loadConfig() + + @Override + public BaseTier getBaseTier() + { + return BaseTier.values()[ordinal()]; + } + + @Override + public void loadConfig() { tubeCapacity = Mekanism.configuration.get("tier", getBaseTier().getName() + "TubeCapacity", baseCapacity).getInt(); tubePullAmount = Mekanism.configuration.get("tier", getBaseTier().getName() + "TubePullAmount", basePull).getInt(); } - - protected void readConfig(ByteBuf dataStream) + + @Override + public void readConfig(ByteBuf dataStream) { tubeCapacity = dataStream.readInt(); tubePullAmount = dataStream.readInt(); } - - protected void writeConfig(ByteBuf dataStream) + + @Override + public void writeConfig(ByteBuf dataStream) { dataStream.writeInt(tubeCapacity); dataStream.writeInt(tubePullAmount); @@ -426,22 +433,12 @@ public final class Tier } } - /** - * The tiers used by Logistical Transporters and their corresponding values. - * @author AidanBrady - * - */ - public static enum TransporterTier + public static enum TransporterTier implements ITier { BASIC(1, 5, TransmitterType.LOGISTICAL_TRANSPORTER_BASIC), ADVANCED(16, 10, TransmitterType.LOGISTICAL_TRANSPORTER_ADVANCED), ELITE(32, 20, TransmitterType.LOGISTICAL_TRANSPORTER_ELITE), ULTIMATE(64, 50, TransmitterType.LOGISTICAL_TRANSPORTER_ULTIMATE); - - public BaseTier getBaseTier() - { - return BaseTier.values()[ordinal()]; - } public int pullAmount; private int basePull; @@ -458,20 +455,29 @@ public final class Tier type = transmitterType; } - - protected void loadConfig() + + @Override + public BaseTier getBaseTier() + { + return BaseTier.values()[ordinal()]; + } + + @Override + public void loadConfig() { pullAmount = Mekanism.configuration.get("tier", getBaseTier().getName() + "TransporterPullAmount", basePull).getInt(); speed = Mekanism.configuration.get("tier", getBaseTier().getName() + "TransporterSpeed", baseSpeed).getInt(); } - - protected void readConfig(ByteBuf dataStream) + + @Override + public void readConfig(ByteBuf dataStream) { pullAmount = dataStream.readInt(); speed = dataStream.readInt(); } - - protected void writeConfig(ByteBuf dataStream) + + @Override + public void writeConfig(ByteBuf dataStream) { dataStream.writeInt(pullAmount); dataStream.writeInt(speed); @@ -491,17 +497,12 @@ public final class Tier } } - public static enum ConductorTier + public static enum ConductorTier implements ITier { BASIC(5, 1, 10, new ColourRGBA(0.2, 0.2, 0.2, 1), TransmitterType.THERMODYNAMIC_CONDUCTOR_BASIC), ADVANCED(5, 1, 400, new ColourRGBA(0.2, 0.2, 0.2, 1), TransmitterType.THERMODYNAMIC_CONDUCTOR_ADVANCED), ELITE(5, 1, 8000, new ColourRGBA(0.2, 0.2, 0.2, 1), TransmitterType.THERMODYNAMIC_CONDUCTOR_ELITE), ULTIMATE(5, 1, 100000, new ColourRGBA(0.2, 0.2, 0.2, 1), TransmitterType.THERMODYNAMIC_CONDUCTOR_ULTIMATE); - - public BaseTier getBaseTier() - { - return BaseTier.values()[ordinal()]; - } public double inverseConduction; private double baseConduction; @@ -526,22 +527,31 @@ public final class Tier type = transmitterType; } - - protected void loadConfig() + + @Override + public BaseTier getBaseTier() + { + return BaseTier.values()[ordinal()]; + } + + @Override + public void loadConfig() { inverseConduction = Mekanism.configuration.get("tier", getBaseTier().getName() + "ConductorInverseConduction", baseConduction).getDouble(); inverseHeatCapacity = Mekanism.configuration.get("tier", getBaseTier().getName() + "ConductorHeatCapacity", baseHeatCapacity).getDouble(); inverseConductionInsulation = Mekanism.configuration.get("tier", getBaseTier().getName() + "ConductorConductionInsulation", baseConductionInsulation).getDouble(); } - - protected void readConfig(ByteBuf dataStream) + + @Override + public void readConfig(ByteBuf dataStream) { inverseConduction = dataStream.readDouble(); inverseHeatCapacity = dataStream.readDouble(); inverseConductionInsulation = dataStream.readDouble(); } - - protected void writeConfig(ByteBuf dataStream) + + @Override + public void writeConfig(ByteBuf dataStream) { dataStream.writeDouble(inverseConduction); dataStream.writeDouble(inverseHeatCapacity); @@ -562,17 +572,12 @@ public final class Tier } } - public static enum FluidTankTier + public static enum FluidTankTier implements ITier { BASIC(14000, 400), ADVANCED(28000, 800), ELITE(56000, 1600), ULTIMATE(112000, 3200); - - public BaseTier getBaseTier() - { - return BaseTier.values()[ordinal()]; - } public int storage; private int baseStorage; @@ -586,41 +591,40 @@ public final class Tier baseOutput = output = o; } - protected void loadConfig() + @Override + public BaseTier getBaseTier() + { + return BaseTier.values()[ordinal()]; + } + + @Override + public void loadConfig() { storage = Mekanism.configuration.get("tier", getBaseTier().getName() + "FluidTankStorage", baseStorage).getInt(); output = Mekanism.configuration.get("tier", getBaseTier().getName() + "FluidTankOutput", baseOutput).getInt(); } - - protected void readConfig(ByteBuf dataStream) + + @Override + public void readConfig(ByteBuf dataStream) { storage = dataStream.readInt(); output = dataStream.readInt(); } - - protected void writeConfig(ByteBuf dataStream) + + @Override + public void writeConfig(ByteBuf dataStream) { dataStream.writeInt(storage); dataStream.writeInt(output); } } - /** - * The tiers used by Logistical Transporters and their corresponding values. - * @author AidanBrady - * - */ - public static enum GasTankTier + public static enum GasTankTier implements ITier { BASIC(64000, 256), ADVANCED(128000, 512), ELITE(256000, 1028), ULTIMATE(512000, 2056); - - public BaseTier getBaseTier() - { - return BaseTier.values()[ordinal()]; - } public int storage; private int baseStorage; @@ -634,73 +638,105 @@ public final class Tier baseOutput = output = o; } - protected void loadConfig() + @Override + public BaseTier getBaseTier() + { + return BaseTier.values()[ordinal()]; + } + + @Override + public void loadConfig() { storage = Mekanism.configuration.get("tier", getBaseTier().getName() + "GasTankStorage", baseStorage).getInt(); output = Mekanism.configuration.get("tier", getBaseTier().getName() + "GasTankOutput", baseOutput).getInt(); } - - protected void readConfig(ByteBuf dataStream) + + @Override + public void readConfig(ByteBuf dataStream) { storage = dataStream.readInt(); output = dataStream.readInt(); } - protected void writeConfig(ByteBuf dataStream) + @Override + public void writeConfig(ByteBuf dataStream) { dataStream.writeInt(storage); dataStream.writeInt(output); } } + public static enum BinTier implements ITier + { + BASIC(4096), + ADVANCED(8192), + ELITE(32768), + ULTIMATE(262144); + + public int storage; + private int baseStorage; + + private BinTier(int s) + { + baseStorage = storage = s; + } + + @Override + public BaseTier getBaseTier() + { + return BaseTier.values()[ordinal()]; + } + + @Override + public void loadConfig() + { + storage = Mekanism.configuration.get("tier", getBaseTier().getName() + "BinStorage", baseStorage).getInt(); + } + + @Override + public void readConfig(ByteBuf dataStream) + { + storage = dataStream.readInt(); + } + + @Override + public void writeConfig(ByteBuf dataStream) + { + dataStream.writeInt(storage); + } + } + + public static void init() + { + if(initiated) + { + return; + } + + for(Class c : Tier.class.getDeclaredClasses()) + { + if(c.isEnum()) + { + try { + for(Object obj : c.getEnumConstants()) + { + if(obj instanceof ITier) + { + tierTypes.add((ITier)obj); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + initiated = true; + } + public static void loadConfig() { - for(CableTier tier : CableTier.values()) - { - tier.loadConfig(); - } - - for(InductionCellTier tier : InductionCellTier.values()) - { - tier.loadConfig(); - } - - for(InductionProviderTier tier : InductionProviderTier.values()) - { - tier.loadConfig(); - } - - for(EnergyCubeTier tier : EnergyCubeTier.values()) - { - tier.loadConfig(); - } - - for(PipeTier tier : PipeTier.values()) - { - tier.loadConfig(); - } - - for(TubeTier tier : TubeTier.values()) - { - tier.loadConfig(); - } - - for(TransporterTier tier : TransporterTier.values()) - { - tier.loadConfig(); - } - - for(ConductorTier tier : ConductorTier.values()) - { - tier.loadConfig(); - } - - for(FluidTankTier tier : FluidTankTier.values()) - { - tier.loadConfig(); - } - - for(GasTankTier tier : GasTankTier.values()) + for(ITier tier : tierTypes) { tier.loadConfig(); } @@ -708,52 +744,7 @@ public final class Tier public static void readConfig(ByteBuf dataStream) { - for(CableTier tier : CableTier.values()) - { - tier.readConfig(dataStream); - } - - for(InductionCellTier tier : InductionCellTier.values()) - { - tier.readConfig(dataStream); - } - - for(InductionProviderTier tier : InductionProviderTier.values()) - { - tier.readConfig(dataStream); - } - - for(EnergyCubeTier tier : EnergyCubeTier.values()) - { - tier.readConfig(dataStream); - } - - for(PipeTier tier : PipeTier.values()) - { - tier.readConfig(dataStream); - } - - for(TubeTier tier : TubeTier.values()) - { - tier.readConfig(dataStream); - } - - for(TransporterTier tier : TransporterTier.values()) - { - tier.readConfig(dataStream); - } - - for(ConductorTier tier : ConductorTier.values()) - { - tier.readConfig(dataStream); - } - - for(FluidTankTier tier : FluidTankTier.values()) - { - tier.readConfig(dataStream); - } - - for(GasTankTier tier : GasTankTier.values()) + for(ITier tier : tierTypes) { tier.readConfig(dataStream); } @@ -761,54 +752,20 @@ public final class Tier public static void writeConfig(ByteBuf dataStream) { - for(CableTier tier : CableTier.values()) - { - tier.writeConfig(dataStream); - } - - for(InductionCellTier tier : InductionCellTier.values()) - { - tier.writeConfig(dataStream); - } - - for(InductionProviderTier tier : InductionProviderTier.values()) - { - tier.writeConfig(dataStream); - } - - for(EnergyCubeTier tier : EnergyCubeTier.values()) - { - tier.writeConfig(dataStream); - } - - for(PipeTier tier : PipeTier.values()) - { - tier.writeConfig(dataStream); - } - - for(TubeTier tier : TubeTier.values()) - { - tier.writeConfig(dataStream); - } - - for(TransporterTier tier : TransporterTier.values()) - { - tier.writeConfig(dataStream); - } - - for(ConductorTier tier : ConductorTier.values()) - { - tier.writeConfig(dataStream); - } - - for(FluidTankTier tier : FluidTankTier.values()) - { - tier.writeConfig(dataStream); - } - - for(GasTankTier tier : GasTankTier.values()) + for(ITier tier : tierTypes) { tier.writeConfig(dataStream); } } + + public static interface ITier + { + public BaseTier getBaseTier(); + + public void loadConfig(); + + public void readConfig(ByteBuf dataStream); + + public void writeConfig(ByteBuf dataStream); + } } diff --git a/src/main/java/mekanism/common/block/BlockBasic.java b/src/main/java/mekanism/common/block/BlockBasic.java index 803160c55..eec036bd8 100644 --- a/src/main/java/mekanism/common/block/BlockBasic.java +++ b/src/main/java/mekanism/common/block/BlockBasic.java @@ -17,6 +17,7 @@ import mekanism.common.Tier.BaseTier; import mekanism.common.base.IActiveState; import mekanism.common.base.IBlockCTM; import mekanism.common.base.IBoundingBlock; +import mekanism.common.base.ITierItem; import mekanism.common.content.tank.TankUpdateProtocol; import mekanism.common.inventory.InventoryBin; import mekanism.common.item.ItemBlockBasic; @@ -99,6 +100,7 @@ import cpw.mods.fml.relauncher.SideOnly; public class BlockBasic extends Block implements IBlockCTM, ICustomBlockIcon { public IIcon[][] icons = new IIcon[16][16]; + public IIcon[][] binIcons = new IIcon[16][16]; public CTMData[][] ctms = new CTMData[16][4]; @@ -118,11 +120,15 @@ public class BlockBasic extends Block implements IBlockCTM, ICustomBlockIcon @Override public IIcon getIcon(ItemStack stack, int side) { - if(getBlockFromItem(stack.getItem()) == MekanismBlocks.BasicBlock2 && stack.getItemDamage() == 3) + if(BasicType.get(stack) == BasicType.BIN) + { + return binIcons[((ItemBlockBasic)stack.getItem()).getBaseTier(stack).ordinal()][side]; + } + else if(BasicType.get(stack) == BasicType.INDUCTION_CELL) { return icons[3][((ItemBlockBasic)stack.getItem()).getBaseTier(stack).ordinal()]; } - else if(getBlockFromItem(stack.getItem()) == MekanismBlocks.BasicBlock2 && stack.getItemDamage() == 4) + else if(BasicType.get(stack) == BasicType.INDUCTION_PROVIDER) { return icons[4][((ItemBlockBasic)stack.getItem()).getBaseTier(stack).ordinal()]; } @@ -176,9 +182,16 @@ public class BlockBasic extends Block implements IBlockCTM, ICustomBlockIcon icons[3][0] = register.registerIcon("mekanism:CoalBlock"); icons[4][0] = register.registerIcon("mekanism:RefinedGlowstone"); icons[5][0] = register.registerIcon("mekanism:SteelBlock"); + icons[6][0] = register.registerIcon(ICON_BASE); - MekanismRenderer.loadDynamicTextures(register, "Bin", icons[6], DefIcon.getActivePair(register.registerIcon("mekanism:BinSide"), 3, 4, 5), - new DefIcon(register.registerIcon("mekanism:BinTop"), 0), new DefIcon(register.registerIcon("mekanism:BinTopOn"), 6)); + MekanismRenderer.loadDynamicTextures(register, "BinBasic", binIcons[0], DefIcon.getActivePair(register.registerIcon("mekanism:BinBasicSide"), 3, 4, 5), + new DefIcon(register.registerIcon("mekanism:BinBasicTop"), 0), new DefIcon(register.registerIcon("mekanism:BinBasicTopOn"), 6)); + MekanismRenderer.loadDynamicTextures(register, "BinAdvanced", binIcons[1], DefIcon.getActivePair(register.registerIcon("mekanism:BinAdvancedSide"), 3, 4, 5), + new DefIcon(register.registerIcon("mekanism:BinAdvancedTop"), 0), new DefIcon(register.registerIcon("mekanism:BinAdvancedTopOn"), 6)); + MekanismRenderer.loadDynamicTextures(register, "BinElite", binIcons[2], DefIcon.getActivePair(register.registerIcon("mekanism:BinEliteSide"), 3, 4, 5), + new DefIcon(register.registerIcon("mekanism:BinEliteTop"), 0), new DefIcon(register.registerIcon("mekanism:BinEliteTopOn"), 6)); + MekanismRenderer.loadDynamicTextures(register, "BinUltimate", binIcons[3], DefIcon.getActivePair(register.registerIcon("mekanism:BinUltimateSide"), 3, 4, 5), + new DefIcon(register.registerIcon("mekanism:BinUltimateTop"), 0), new DefIcon(register.registerIcon("mekanism:BinUltimateTopOn"), 6)); icons[7][0] = ctms[7][0].mainTextureData.icon; icons[8][0] = register.registerIcon("mekanism:SteelCasing"); @@ -243,10 +256,10 @@ public class BlockBasic extends Block implements IBlockCTM, ICustomBlockIcon switch(meta) { case 6: - TileEntityBasicBlock tileEntity = (TileEntityBasicBlock)world.getTileEntity(x, y, z); + TileEntityBin tileEntity = (TileEntityBin)world.getTileEntity(x, y, z); boolean active = MekanismUtils.isActive(world, x, y, z); - return icons[meta][MekanismUtils.getBaseOrientation(side, tileEntity.facing)+(active ? 6 : 0)]; + return binIcons[tileEntity.tier.ordinal()][MekanismUtils.getBaseOrientation(side, tileEntity.facing)+(active ? 6 : 0)]; case 14: TileEntityThermalEvaporationController tileEntity1 = (TileEntityThermalEvaporationController)world.getTileEntity(x, y, z); @@ -289,8 +302,6 @@ public class BlockBasic extends Block implements IBlockCTM, ICustomBlockIcon case BASIC_BLOCK_1: switch(meta) { - case 6: - return icons[meta][side]; case 14: if(side == 2) { @@ -327,6 +338,7 @@ public class BlockBasic extends Block implements IBlockCTM, ICustomBlockIcon { case INDUCTION_CELL: case INDUCTION_PROVIDER: + case BIN: for(BaseTier tier : BaseTier.values()) { if(tier.isObtainable()) @@ -492,7 +504,7 @@ public class BlockBasic extends Block implements IBlockCTM, ICustomBlockIcon return true; } - if(bin.getItemCount() < bin.MAX_STORAGE) + if(bin.getItemCount() < bin.tier.storage) { if(bin.addTicks == 0 && entityplayer.getCurrentEquippedItem() != null) { @@ -509,7 +521,7 @@ public class BlockBasic extends Block implements IBlockCTM, ICustomBlockIcon for(int i = 0; i < inv.length; i++) { - if(bin.getItemCount() == bin.MAX_STORAGE) + if(bin.getItemCount() == bin.tier.storage) { break; } @@ -821,8 +833,9 @@ public class BlockBasic extends Block implements IBlockCTM, ICustomBlockIcon TileEntityBin tileEntity = (TileEntityBin)world.getTileEntity(x, y, z); InventoryBin inv = new InventoryBin(ret); + ((ITierItem)ret.getItem()).setBaseTier(ret, tileEntity.tier.getBaseTier()); inv.setItemCount(tileEntity.getItemCount()); - + if(tileEntity.getItemCount() > 0) { inv.setItemType(tileEntity.itemType); diff --git a/src/main/java/mekanism/common/inventory/InventoryBin.java b/src/main/java/mekanism/common/inventory/InventoryBin.java index 1ce4c1e39..a843aad30 100644 --- a/src/main/java/mekanism/common/inventory/InventoryBin.java +++ b/src/main/java/mekanism/common/inventory/InventoryBin.java @@ -1,14 +1,14 @@ package mekanism.common.inventory; import mekanism.api.util.StackUtils; -import mekanism.common.item.ItemBlockBasic; +import mekanism.common.Tier.BinTier; +import mekanism.common.base.ITierItem; +import mekanism.common.block.BlockBasic.BasicType; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; public class InventoryBin { - public final int MAX_STORAGE = 4096; - public ItemStack bin; public InventoryBin(ItemStack stack) @@ -44,23 +44,23 @@ public class InventoryBin public ItemStack add(ItemStack stack) { - if(isValid(stack) && getItemCount() != MAX_STORAGE) + if(isValid(stack) && getItemCount() != getMaxStorage()) { if(getItemType() == null) { setItemType(stack); } - if(getItemCount() + stack.stackSize <= MAX_STORAGE) + if(getItemCount() + stack.stackSize <= getMaxStorage()) { setItemCount(getItemCount() + stack.stackSize); return null; } else { ItemStack rejects = getItemType().copy(); - rejects.stackSize = (getItemCount()+stack.stackSize) - MAX_STORAGE; + rejects.stackSize = (getItemCount()+stack.stackSize) - getMaxStorage(); - setItemCount(MAX_STORAGE); + setItemCount(getMaxStorage()); return rejects; } @@ -76,7 +76,7 @@ public class InventoryBin return false; } - if(stack.getItem() instanceof ItemBlockBasic && stack.getItemDamage() == 6) + if(BasicType.get(stack) == BasicType.BIN) { return false; } @@ -93,6 +93,11 @@ public class InventoryBin return true; } + + public int getMaxStorage() + { + return BinTier.values()[((ITierItem)bin.getItem()).getBaseTier(bin).ordinal()].storage; + } public int getItemCount() { diff --git a/src/main/java/mekanism/common/item/ItemBlockBasic.java b/src/main/java/mekanism/common/item/ItemBlockBasic.java index 09359d002..283b6dd4a 100644 --- a/src/main/java/mekanism/common/item/ItemBlockBasic.java +++ b/src/main/java/mekanism/common/item/ItemBlockBasic.java @@ -13,6 +13,7 @@ import mekanism.client.MekanismKeyHandler; import mekanism.common.Mekanism; import mekanism.common.MekanismBlocks; import mekanism.common.Tier.BaseTier; +import mekanism.common.Tier.BinTier; import mekanism.common.Tier.InductionCellTier; import mekanism.common.Tier.InductionProviderTier; import mekanism.common.base.ITierItem; @@ -240,6 +241,8 @@ public class ItemBlockBasic extends ItemBlock implements IEnergizedItem, ITierIt { TileEntityBin tileEntity = (TileEntityBin)world.getTileEntity(x, y, z); InventoryBin inv = new InventoryBin(stack); + + tileEntity.tier = BinTier.values()[getBaseTier(stack).ordinal()]; if(inv.getItemType() != null) { @@ -289,7 +292,7 @@ public class ItemBlockBasic extends ItemBlock implements IEnergizedItem, ITierIt { String name = getUnlocalizedName() + "." + BasicType.get(itemstack).name; - if(type == BasicType.INDUCTION_CELL || type == BasicType.INDUCTION_PROVIDER) + if(type == BasicType.BIN || type == BasicType.INDUCTION_CELL || type == BasicType.INDUCTION_PROVIDER) { name += getBaseTier(itemstack).getName(); } diff --git a/src/main/java/mekanism/common/tile/TileEntityBin.java b/src/main/java/mekanism/common/tile/TileEntityBin.java index 938731d09..135b9228e 100644 --- a/src/main/java/mekanism/common/tile/TileEntityBin.java +++ b/src/main/java/mekanism/common/tile/TileEntityBin.java @@ -10,6 +10,7 @@ import mekanism.api.Range4D; import mekanism.api.util.StackUtils; import mekanism.common.Mekanism; import mekanism.common.PacketHandler; +import mekanism.common.Tier.BinTier; import mekanism.common.base.IActiveState; import mekanism.common.base.ILogisticalTransporter; import mekanism.common.base.ITransporterTile; @@ -44,8 +45,8 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento public int delayTicks; public int cacheCount; - - public final int MAX_STORAGE = 4096; + + public BinTier tier = BinTier.BASIC; public ItemStack itemType; @@ -69,7 +70,7 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento } int count = getItemCount(); - int remain = MAX_STORAGE-count; + int remain = tier.storage-count; if(remain >= itemType.getMaxStackSize()) { @@ -117,23 +118,23 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento public ItemStack add(ItemStack stack) { - if(isValid(stack) && getItemCount() != MAX_STORAGE) + if(isValid(stack) && getItemCount() != tier.storage) { if(itemType == null) { setItemType(stack); } - if(getItemCount() + stack.stackSize <= MAX_STORAGE) + if(getItemCount() + stack.stackSize <= tier.storage) { setItemCount(getItemCount() + stack.stackSize); return null; } else { ItemStack rejects = itemType.copy(); - rejects.stackSize = (getItemCount()+stack.stackSize) - MAX_STORAGE; + rejects.stackSize = (getItemCount()+stack.stackSize) - tier.storage; - setItemCount(MAX_STORAGE); + setItemCount(tier.storage); return rejects; } @@ -226,6 +227,7 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento nbtTags.setBoolean("isActive", isActive); nbtTags.setInteger("itemCount", cacheCount); + nbtTags.setInteger("tier", tier.ordinal()); if(bottomStack != null) { @@ -250,6 +252,7 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento isActive = nbtTags.getBoolean("isActive"); cacheCount = nbtTags.getInteger("itemCount"); + tier = BinTier.values()[nbtTags.getInteger("tier")]; bottomStack = ItemStack.loadItemStackFromNBT(nbtTags.getCompoundTag("bottomStack")); topStack = ItemStack.loadItemStackFromNBT(nbtTags.getCompoundTag("topStack")); @@ -267,6 +270,7 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento data.add(isActive); data.add(getItemCount()); + data.add(tier.ordinal()); if(getItemCount() > 0) { @@ -283,6 +287,7 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento isActive = dataStream.readBoolean(); clientAmount = dataStream.readInt(); + tier = BinTier.values()[dataStream.readInt()]; if(clientAmount > 0) { @@ -424,7 +429,7 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento @Override public String getInventoryName() { - return LangUtils.localize("tile.BasicBlock.Bin.name"); + return LangUtils.localize(getBlockType().getUnlocalizedName() + ".Bin" + tier.getBaseTier().getName() + ".name"); } @Override @@ -558,7 +563,7 @@ public class TileEntityBin extends TileEntityBasicBlock implements ISidedInvento @Override public int getMaxStoredCount() { - return MAX_STORAGE; + return tier.storage; } @Override diff --git a/src/main/java/mekanism/common/util/MekanismUtils.java b/src/main/java/mekanism/common/util/MekanismUtils.java index 0ddea9d88..3a659b18b 100644 --- a/src/main/java/mekanism/common/util/MekanismUtils.java +++ b/src/main/java/mekanism/common/util/MekanismUtils.java @@ -32,6 +32,7 @@ import mekanism.common.MekanismBlocks; import mekanism.common.MekanismItems; import mekanism.common.OreDictCache; import mekanism.common.Tier.BaseTier; +import mekanism.common.Tier.BinTier; import mekanism.common.Tier.EnergyCubeTier; import mekanism.common.Tier.FactoryTier; import mekanism.common.Tier.FluidTankTier; @@ -367,6 +368,19 @@ public final class MekanismUtils { return ((ItemBlockBasic)new ItemStack(MekanismBlocks.BasicBlock2, 1, 4).getItem()).getUnchargedProvider(tier); } + + /** + * Retrieves an Bin with a defined tier. + * @param tier - tier to add to the Bin + * @return Bin with defined tier + */ + public static ItemStack getBin(BinTier tier) + { + ItemStack ret = new ItemStack(MekanismBlocks.BasicBlock, 1, 6); + ((ItemBlockBasic)ret.getItem()).setBaseTier(ret, tier.getBaseTier()); + + return ret; + } /** * Retrieves an empty Gas Tank. diff --git a/src/main/java/mekanism/common/util/RecipeUtils.java b/src/main/java/mekanism/common/util/RecipeUtils.java index c73b8c3e4..4f3e5c857 100644 --- a/src/main/java/mekanism/common/util/RecipeUtils.java +++ b/src/main/java/mekanism/common/util/RecipeUtils.java @@ -14,7 +14,9 @@ import mekanism.common.Upgrade; import mekanism.common.base.IEnergyCube; import mekanism.common.base.IFactory; import mekanism.common.base.ITierItem; +import mekanism.common.block.BlockBasic.BasicType; import mekanism.common.block.BlockMachine.MachineType; +import mekanism.common.inventory.InventoryBin; import mekanism.common.recipe.ShapedMekanismRecipe; import mekanism.common.recipe.ShapelessMekanismRecipe; import net.minecraft.block.Block; @@ -25,6 +27,8 @@ import net.minecraft.item.crafting.CraftingManager; import net.minecraft.item.crafting.IRecipe; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidContainerItem; import net.minecraftforge.oredict.OreDictionary; public class RecipeUtils @@ -169,6 +173,74 @@ public class RecipeUtils ((IGasItem)toReturn.getItem()).setGas(toReturn, gasFound); } } + + if(toReturn.getItem() instanceof IFluidContainerItem) + { + FluidStack fluidFound = null; + + for(int i = 0; i < 9; i++) + { + ItemStack itemstack = inv.getStackInSlot(i); + + if(itemstack != null && itemstack.getItem() instanceof IFluidContainerItem) + { + FluidStack stored = ((IFluidContainerItem)itemstack.getItem()).getFluid(itemstack); + + if(stored != null) + { + if(((IFluidContainerItem)toReturn.getItem()).fill(toReturn, stored, false) == 0) + { + return null; + } + + if(fluidFound == null) + { + fluidFound = stored; + } + else { + if(fluidFound.getFluid() != stored.getFluid()) + { + return null; + } + + fluidFound.amount += stored.amount; + } + } + } + } + + if(fluidFound != null) + { + fluidFound.amount = Math.min(((IFluidContainerItem)toReturn.getItem()).getCapacity(toReturn), fluidFound.amount); + ((IFluidContainerItem)toReturn.getItem()).fill(toReturn, fluidFound, true); + } + } + + if(BasicType.get(toReturn) == BasicType.BIN) + { + int foundCount = 0; + ItemStack foundType = null; + + for(int i = 0; i < 9; i++) + { + ItemStack itemstack = inv.getStackInSlot(i); + + if(BasicType.get(itemstack) == BasicType.BIN) + { + InventoryBin binInv = new InventoryBin(itemstack); + + foundCount = binInv.getItemCount(); + foundType = binInv.getItemType(); + } + } + + if(foundCount > 0 && foundType != null) + { + InventoryBin binInv = new InventoryBin(toReturn); + binInv.setItemCount(foundCount); + binInv.setItemType(foundType); + } + } if(MachineType.get(toReturn) != null && MachineType.get(toReturn).supportsUpgrades) { diff --git a/src/main/resources/assets/mekanism/lang/en_US.lang b/src/main/resources/assets/mekanism/lang/en_US.lang index 59ed5d2db..f9066ecfb 100644 --- a/src/main/resources/assets/mekanism/lang/en_US.lang +++ b/src/main/resources/assets/mekanism/lang/en_US.lang @@ -84,7 +84,10 @@ tile.BasicBlock.RefinedObsidian.name=Refined Obsidian tile.BasicBlock.CharcoalBlock.name=Charcoal Block tile.BasicBlock.RefinedGlowstone.name=Refined Glowstone tile.BasicBlock.SteelBlock.name=Steel Block -tile.BasicBlock.Bin.name=Bin +tile.BasicBlock.BinBasic.name=Basic Bin +tile.BasicBlock.BinAdvanced.name=Advanced Bin +tile.BasicBlock.BinElite.name=Elite Bin +tile.BasicBlock.BinUltimate.name=Ultimate Bin tile.BasicBlock.TeleporterFrame.name=Teleporter Frame tile.BasicBlock.SteelCasing.name=Steel Casing tile.BasicBlock.DynamicTank.name=Dynamic Tank @@ -806,7 +809,7 @@ tooltip.SolarNeutronActivator=A machine that directs the neutron radiation of th tooltip.Oredictionificator=A machine used to unify and translate between various items and blocks using the Ore Dictionary. tooltip.Factory=A machine that serves as an upgrade to regular machinery, allowing for multiple processing operations to occur at once. tooltip.ResistiveHeater=A condensed, coiled resistor capable of converting electrical energy directly into heat energy. -tooltip.FormulaicAssemblicator=A machine that uses energy to rapidly craft items and blocks from Recipe Formulas. Doubles as an advanced crafting bench. +tooltip.FormulaicAssemblicator=A machine that uses energy to rapidly craft items and blocks from Crafting Formulas. Doubles as an advanced crafting bench. tooltip.HeatGenerator=A generator that uses the heat of lava or other burnable resources to produce energy. tooltip.SolarGenerator=A generator that uses the power of the sun to produce energy. diff --git a/src/main/resources/assets/mekanism/textures/blocks/BinAdvancedFront.png b/src/main/resources/assets/mekanism/textures/blocks/BinAdvancedFront.png new file mode 100644 index 0000000000000000000000000000000000000000..1d37f514ce7c5e9b9c7a94799a5b4400948071ef GIT binary patch literal 1762 zcmV<81|9i{P)4Tx062|}Rb6NtRTMtEb7vzY&QokOg>Hg1+lHrgWS zWcKdPn90sKGrRqvPeo9CG3uKX#J{(IASm?@+di}}l?o-=)F3E6wD^Ni=!>T7nL9I? zX}YoAW$t|Qo$sD|?zw001?ah|SeB6#0T!CBEf+H4bBB+JJu8rehoBb*p;u8ID_yBf z0ya+zcePvJL&AGs+11_tpRKn>9TgyPA7ZoSs0)aX0r00)%XR^J`jH<$>RKN5V(7Oq zK*TS4xZz{h!*f1C3ECFkK$#7nA@pGN!$;%jYvwjAKwmYb0gKL(K8 z-kPtb5${A?tlI~wzMrJ6wTdBr=Y%%%EaEMQ&o}4FQ^DA)s*}Z>!FI&AHCpoWI|RUq zx?7s@$8!5^Q=anY%X@i5{QA6kNcMelpE>R6eCYFpmMsVTrI(b06~u#xf1yS} z_UGdMvD``!0~u->P=lA4?YN`hilQ|3tHka)7T{2CGqw zjZfMwx$5irQN_*|e4l)UHmiYuz74Yp1t^#>hrJ3-SOXDcC_o0^7T9R1gAN8V6s;5) zieI5-7aQlmJn}lUna#nz!j%5V$X|o`xX!dHWQRV27P1=rj;t2bW$~+pTw@bIek?Zv zKPDL<64`^#UNTAck#RBsB6*5DP4<%UA_FqU$I>2EH_cM;u)Q~SI+rg`Rn{L_AC5qq~L$#SMj%U z$6Cz0vP{G5Y*=%5RT^yu;}-DInZ=349rJPVM6C3K^oO)8y(fJr{l>k`ead~!ea?NsT>_Ci%bnxC;Vy6=b6>{xYV#Ue-+LB$ z7`JEXmTRm^AtP)R9u{)KHsMiWGV&)32xCG~*nyU<>-!d;FP=Re4r3qYr~6#KE>;1F z`>_J_P5xC?ROxV(DIHdCO*p$HRQI@7^PwV@Pvuf+5K}u-6REM(K@W$s zrgorh0{i?O)v0c>QtHxU-hBdD(>iYJ4b2sIOVX2K8m~4gmYVA5h^QEb$V`rCQ-|7Z zS{nuL-t>?3n=-o(6I(7vocj#GzCZEo`!3>+v;dYIfPu#&ZWzzX2i^rZ^Mu;6+rb@? zNPG+6)c5T6zxpzGe*M(x+{AON=PiJ>H#?ob-|uwRK0yDg0B4PV0id6JRZw95ZvX%S zkV!;AR9FesS4)dpF%-_#>jNEp))pT{5fxlpHx6_oxGRHX9C7*ltnGjv*%?lc9;-U5d^{eX)DtzD-73(o?DcwR;PH5F#(>FWVos+M zc8Li(9jfmEQLooyWWit%Nb+;kLHW#tGq7APp-rc2wZC`NXJD~dU}TSj0Wcg61BnR; zS0?=S>vp@aQmIscANDrYXFwEpCz0-GK@hH-@6+ad-Ti()Dv0szLmRUC4AA+fUD|H% zM#gvUt%6RcW7TR^#=zUVyO+U$v;@Q9knza98js`?ZoxvM(O{Fw1d-c4v@H$b79Cw; zLnOa#u~^VP5C{OtM_gi5*@oLrBoZht6biuL{$^C40h%eDhQaq0`=D2`viux56bi9&xhzvHl}eCb zj5pM9Z^$F}hU5_sha8K=4#oe<^V?4uqR}Yhk^i80{O2j~`FzTDSIMXB3G_Fdr9Yt) z`oYlKjrPE?pHb`8|BQ$Mx(SJE`sE%&(xdnNtNk7S0R+w*jsTI%bN~PV07*qoM6N<$ Ef=In>82|tP literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/BinAdvancedFrontOn.png b/src/main/resources/assets/mekanism/textures/blocks/BinAdvancedFrontOn.png new file mode 100644 index 0000000000000000000000000000000000000000..a776eab8b29aa84411599653e444d44334c2cbf7 GIT binary patch literal 1765 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 M07*qoM6N<$g3K^+I{*Lx literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/BinAdvancedTopOn.png b/src/main/resources/assets/mekanism/textures/blocks/BinAdvancedTopOn.png new file mode 100644 index 0000000000000000000000000000000000000000..3cd450e728c20b2e78ec825d9fc210061208d2b6 GIT binary patch literal 1777 zcmV4Tx062|}Rb6NtRTMtEb7vzY&QokOg>Hg1+lHrgWS zWcKdPn90sKGrRqvPeo9CG3uKX#J{(IASm?@+di}}l?o-=)F3E6wD^Ni=!>T7nL9I? zX}YoAW$t|Qo$sD|?zw001?ah|SeB6#0T!CBEf+H4bBB+JJu8rehoBb*p;u8ID_yBf z0ya+zcePvJL&AGs+11_tpRKn>9TgyPA7ZoSs0)aX0r00)%XR^J`jH<$>RKN5V(7Oq zK*TS4xZz{h!*f1C3ECFkK$#7nA@pGN!$;%jYvwjAKwmYb0gKL(K8 z-kPtb5${A?tlI~wzMrJ6wTdBr=Y%%%EaEMQ&o}4FQ^DA)s*}Z>!FI&AHCpoWI|RUq zx?7s@$8!5^Q=anY%X@i5{QA6kNcMelpE>R6eCYFpmMsVTrI(b06~u#xf1yS} z_UGdMvD``!0~u->P=lA4?YN`hilQ|3tHka)7T{2CGqw zjZfMwx$5irQN_*|e4l)UHmiYuz74Yp1t^#>hrJ3-SOXDcC_o0^7T9R1gAN8V6s;5) zieI5-7aQlmJn}lUna#nz!j%5V$X|o`xX!dHWQRV27P1=rj;t2bW$~+pTw@bIek?Zv zKPDL<64`^#UNTAck#RBsB6*5DP4<%UA_FqU$I>2EH_cM;u)Q~SI+rg`Rn{L_AC5qq~L$#SMj%U z$6Cz0vP{G5Y*=%5RT^yu;}-DInZ=349rJPVM6C3K^oO)8y(fJr{l>k`ead~!ea?NsT>_Ci%bnxC;Vy6=b6>{xYV#Ue-+LB$ z7`JEXmTRm^AtP)R9u{)KHsMiWGV&)32xCG~*nyU<>-!d;FP=Re4r3qYr~6#KE>;1F z`>_J_P5xC?ROxV(DIHdCO*p$HRQI@7^PwV@Pvuf+5K}u-6REM(K@W$s zrgorh0{i?O)v0c>QtHxU-hBdD(>iYJ4b2sIOVX2K8m~4gmYVA5h^QEb$V`rCQ-|7Z zS{nuL-t>?3n=-o(6I(7vocj#GzCZEo`!3>+v;dYIfPu#&ZWzzX2i^rZ^Mu;6+rb@? zNPG+6)c5T6zxpzGe*M(x+{AON=PiJ>H#?ob-|uwRK0yDg0B4PV0id6JRZw95ZvX%S zpGibPR9Fe+m&uA+K@^6)&N$I3hNuxI6a-z_pa?Dk*$46pd4TM)%2T-rxN#H6CM1gD z5K$CoS`kzb#VPUk{!J^i+;lH)L++x!IyK!>r>f4W5y?mXOw|1M>ce|vr_(8@)9Jv$U;y6S+<sb{NO?A!LC$0{Ad_yl%j_AsCmt5g z=W|6Okw6jm1W(si^gH**@L|Wx{Le36FN-9}wvVUfyVh8}UawJqHynbYPza|-w@oA^eQeGdr#{pE+T literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/BinBasicFront.png b/src/main/resources/assets/mekanism/textures/blocks/BinBasicFront.png new file mode 100644 index 0000000000000000000000000000000000000000..19b8520b7df0db69f3d0e8f612c558ce389e3475 GIT binary patch literal 1776 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/BinBasicTop.png b/src/main/resources/assets/mekanism/textures/blocks/BinBasicTop.png new file mode 100644 index 0000000000000000000000000000000000000000..dc5a1fffd113cbf39ca4bc5cdade6aa04efb0f31 GIT binary patch literal 1783 zcmV4Tx062|}Rb6NtRTMtEb7vzY&QokOg>Hg1+lHrgWS zWcKdPn90sKGrRqvPeo9CG3uKX#J{(IASm?@+di}}l?o-=)F3E6wD^Ni=!>T7nL9I? zX}YoAW$t|Qo$sD|?zw001?ah|SeB6#0T!CBEf+H4bBB+JJu8rehoBb*p;u8ID_yBf z0ya+zcePvJL&AGs+11_tpRKn>9TgyPA7ZoSs0)aX0r00)%XR^J`jH<$>RKN5V(7Oq zK*TS4xZz{h!*f1C3ECFkK$#7nA@pGN!$;%jYvwjAKwmYb0gKL(K8 z-kPtb5${A?tlI~wzMrJ6wTdBr=Y%%%EaEMQ&o}4FQ^DA)s*}Z>!FI&AHCpoWI|RUq zx?7s@$8!5^Q=anY%X@i5{QA6kNcMelpE>R6eCYFpmMsVTrI(b06~u#xf1yS} z_UGdMvD``!0~u->P=lA4?YN`hilQ|3tHka)7T{2CGqw zjZfMwx$5irQN_*|e4l)UHmiYuz74Yp1t^#>hrJ3-SOXDcC_o0^7T9R1gAN8V6s;5) zieI5-7aQlmJn}lUna#nz!j%5V$X|o`xX!dHWQRV27P1=rj;t2bW$~+pTw@bIek?Zv zKPDL<64`^#UNTAck#RBsB6*5DP4<%UA_FqU$I>2EH_cM;u)Q~SI+rg`Rn{L_AC5qq~L$#SMj%U z$6Cz0vP{G5Y*=%5RT^yu;}-DInZ=349rJPVM6C3K^oO)8y(fJr{l>k`ead~!ea?NsT>_Ci%bnxC;Vy6=b6>{xYV#Ue-+LB$ z7`JEXmTRm^AtP)R9u{)KHsMiWGV&)32xCG~*nyU<>-!d;FP=Re4r3qYr~6#KE>;1F z`>_J_P5xC?ROxV(DIHdCO*p$HRQI@7^PwV@Pvuf+5K}u-6REM(K@W$s zrgorh0{i?O)v0c>QtHxU-hBdD(>iYJ4b2sIOVX2K8m~4gmYVA5h^QEb$V`rCQ-|7Z zS{nuL-t>?3n=-o(6I(7vocj#GzCZEo`!3>+v;dYIfPu#&ZWzzX2i^rZ^Mu;6+rb@? zNPG+6)c5T6zxpzGe*M(x+{AON=PiJ>H#?ob-|uwRK0yDg0B4PV0id6JRZw95ZvX%S zrAb6VR9Fe+SILT6K@{~lfS2p^~cCY@#kBw*IRh}HXAf64j~1X%O$Et zqY+4X>SOmo?6r6f(HXC@!RshQHf!S;ZOFBQrOs}r4z-zS{kTZ@(qu?z1{XVKLmkT%; z41lp%47gY!UpcjR;vXI-EKGV`uZA}&1QjqzaMBen}O|i z8|d+PfW=}FNWB(|1>E6q0O_&v{IiflDPy75YPI-%AP@kOk47W#+uPe6^P0`(4kzKB zAm8G6JXYM?+@Ohjf~RZ!OT?YWWBBjD{dy*o*>5_DUtC-ql~d2>a|m^Rbb+Bz2uM#H z)o?_Bk+0EcKr)xhi4kD|@}B~=TC4&sl_crNoX+d!ntQ!o45Y_Dt-pfH?*X2F?$Z1F zdst>L7|xsO0cnj!gPwdo52Oc7E)%%?9-!g9UJunsBm!g(V5FnmxmYTdFk~AOwjXoK zm&qNt{2pN5X3X~ae8RH7IRfMv1@$Hp31~^BQozM4kuBx-0J9cPL$@m;B5yX&nEcMr zLP6YsUVb*@osGM8XBtl+!C(-h7+)9}PtJy0Lr%$RPp}O`r0|Cj9sqBqZ%@+Ubc)-r z$s{5fZ_T`0#^Z75A>a38I-N%U_wYBM{HI_)8`|x5SjKq3*v+*om&@p{*XuxfB$-Tt z^LEUca~$>Xj`?!3AKt96L^677-0{+jPy3~MwERINdNuo Z_&44(E_Dk_X+Hn}002ovPDHLkV1oR)aH0SJ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/BinBasicTopOn.png b/src/main/resources/assets/mekanism/textures/blocks/BinBasicTopOn.png new file mode 100644 index 0000000000000000000000000000000000000000..f105955553cb37fe129f1669bce88c5f8603542c GIT binary patch literal 1786 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 JPDHLkV1lBnVR8Tf literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/BinEliteSide.png b/src/main/resources/assets/mekanism/textures/blocks/BinEliteSide.png new file mode 100644 index 0000000000000000000000000000000000000000..5faafe1a9dce792e4c5e9c15a8a74cf585255ce8 GIT binary patch literal 1836 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 M07*qoM6N<$f&->nBLDyZ diff --git a/src/main/resources/assets/mekanism/textures/blocks/BinFrontOn.png b/src/main/resources/assets/mekanism/textures/blocks/BinFrontOn.png deleted file mode 100644 index 4278df44ed05db4c52f224fb86c7f3f30612ec6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1772 zcmV4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER0007mNklEE0R*?MbSH|Uq97tFvk+AL|Hgbn6kT>Vl?AFfbGY7FetK$Xu~c^*=$B8!C(;h_Vxz+j5;_y*>MJr z$0NMy>mply23D&TGMi4Pz;HMWBqm_I*cpvRHX4l(rCzT~qN&dSy%U}#Z-O95GE~Cg zbNKy!gxc@-z)Gb8RG$IbvuRb*9?e&-QcbVdvqqzVaKr#rPt_R^6PV3rj0>-7T&N}} z!9u&;X3OOg!sBw`YmJMTfD#k^OAH;IR4f(?o(}{9K#fMZ+<5GCI*qvHav8W@um8-0 zUd8T1HKZMpPBu!_gl4mezjA zk~n6wSym_%#Ia(rDC(an`Fx(yjz_+kOa?0LJF+Y7*Uu*7qEvenPe)YJyT6~5PQ~}* z&)A_*h}CK}iEFi5mDsWjNId?tq2ZN^3$KP$5#P@li^blXf2H%?@4oTVHy3`>;v)MM zeEaeJ{<)XzNAU!@8^+^tOhPvpIw#N?__{YEVt~#C#5LU$X#C6Gj(-F3(i+GifU~y% O000098^C5 diff --git a/src/main/resources/assets/mekanism/textures/blocks/BinSide.png b/src/main/resources/assets/mekanism/textures/blocks/BinSide.png deleted file mode 100644 index 286ea845de6536b9fdfe3203fbe9f56a3e3f93bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1856 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 V7}D#4RoMUl002ovPDHLkV1mhFX}tgd literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/BinUltimateFrontOn.png b/src/main/resources/assets/mekanism/textures/blocks/BinUltimateFrontOn.png new file mode 100644 index 0000000000000000000000000000000000000000..1a2584411487f20bb5afa9c0ee6e627d1ecc7c33 GIT binary patch literal 1783 zcmV4Tx062|}Rb6NtRTMtEb7vzY&QokOg>Hg1+lHrgWS zWcKdPn90sKGrRqvPeo9CG3uKX#J{(IASm?@+di}}l?o-=)F3E6wD^Ni=!>T7nL9I? zX}YoAW$t|Qo$sD|?zw001?ah|SeB6#0T!CBEf+H4bBB+JJu8rehoBb*p;u8ID_yBf z0ya+zcePvJL&AGs+11_tpRKn>9TgyPA7ZoSs0)aX0r00)%XR^J`jH<$>RKN5V(7Oq zK*TS4xZz{h!*f1C3ECFkK$#7nA@pGN!$;%jYvwjAKwmYb0gKL(K8 z-kPtb5${A?tlI~wzMrJ6wTdBr=Y%%%EaEMQ&o}4FQ^DA)s*}Z>!FI&AHCpoWI|RUq zx?7s@$8!5^Q=anY%X@i5{QA6kNcMelpE>R6eCYFpmMsVTrI(b06~u#xf1yS} z_UGdMvD``!0~u->P=lA4?YN`hilQ|3tHka)7T{2CGqw zjZfMwx$5irQN_*|e4l)UHmiYuz74Yp1t^#>hrJ3-SOXDcC_o0^7T9R1gAN8V6s;5) zieI5-7aQlmJn}lUna#nz!j%5V$X|o`xX!dHWQRV27P1=rj;t2bW$~+pTw@bIek?Zv zKPDL<64`^#UNTAck#RBsB6*5DP4<%UA_FqU$I>2EH_cM;u)Q~SI+rg`Rn{L_AC5qq~L$#SMj%U z$6Cz0vP{G5Y*=%5RT^yu;}-DInZ=349rJPVM6C3K^oO)8y(fJr{l>k`ead~!ea?NsT>_Ci%bnxC;Vy6=b6>{xYV#Ue-+LB$ z7`JEXmTRm^AtP)R9u{)KHsMiWGV&)32xCG~*nyU<>-!d;FP=Re4r3qYr~6#KE>;1F z`>_J_P5xC?ROxV(DIHdCO*p$HRQI@7^PwV@Pvuf+5K}u-6REM(K@W$s zrgorh0{i?O)v0c>QtHxU-hBdD(>iYJ4b2sIOVX2K8m~4gmYVA5h^QEb$V`rCQ-|7Z zS{nuL-t>?3n=-o(6I(7vocj#GzCZEo`!3>+v;dYIfPu#&ZWzzX2i^rZ^Mu;6+rb@? zNPG+6)c5T6zxpzGe*M(x+{AON=PiJ>H#?ob-|uwRK0yDg0B4PV0id6JRZw95ZvX%S zrAb6VR9FesSIvqVK@e_r{6R%mT|-oeA}SaN1jLKSxOmDza?DxC)A#^+1s_20>Pc@# zQN&dUB5HCFRM3cj+5U!_IFr>iIxwc8`|Ikisj2z8yJ}kZ@$Kh5dn&u#j)PS8dknK< zNQ#@y23?!Y1|)s5NAuh57V{R11xWLHNE$W*y*vDHkM3kL0h-Nb;BYtu-rd~+1AzdL znog&K?!DIpG#Cs(`r^f60eLc+0&OlMaQ;mP)SLm`L--RG+wmR_u~;mIPOsNv&1O>^ zys}Lulg#Jy!AiT`2L5V^j7dvy>>W<0^Vrl`AIabuv)F)*=RHZ zMx#+6F#+MqhDX1CzYi<5S`BDruYua{0YMN?BE@K(PK;1jezfdyzV5+b5M#vn_mLQJ zwP%2KBkj^|w+m1C&Q+@zjYd|l*JTXY?RLnTGaxxI9*-HXUauFGa)KHxv|24To6S(U z-9y`w18ThJ5*q^LZHL2w=R=_okaEN&MwQQS+o@Cv!=+LQxL%79SbGNOODP*tM5I3( zwQ@qE(ZH80v*F4AfowJ_u}R01sGQH|m|HHFk`C{XuT`DU`Ao@YZ|c{Zesc<6E>kvJ6psn4UIvc%(Y#w));@%rp3c=hF-^0}+z zQ}%RpHw=9ckISVuBc4Nep<_r9_Rq~o%>OQz3wpP6Ga?4)T*AGlhHkmXko4&G``_M< Ze*-*)7$%XsM9TmG002ovPDHLkV1lLvatQzc literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/mekanism/textures/blocks/BinUltimateSide.png b/src/main/resources/assets/mekanism/textures/blocks/BinUltimateSide.png new file mode 100644 index 0000000000000000000000000000000000000000..19b58516f820cf8abe762159a6d907eb6ce58add GIT binary patch literal 1849 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 g_Gqa5?_bA10sCbw&2`wTw*UYD07*qoM6N<$f-