diff --git a/src/main/java/mekanism/api/transmitters/TransmissionType.java b/src/main/java/mekanism/api/transmitters/TransmissionType.java index 9cfc5ba99..0c145b837 100644 --- a/src/main/java/mekanism/api/transmitters/TransmissionType.java +++ b/src/main/java/mekanism/api/transmitters/TransmissionType.java @@ -1,28 +1,40 @@ package mekanism.api.transmitters; import mekanism.api.gas.IGasTransmitter; - +import mekanism.common.util.MekanismUtils; import net.minecraft.tileentity.TileEntity; public enum TransmissionType { - ENERGY("EnergyNetwork"), - FLUID("FluidNetwork"), - GAS("GasNetwork"), - ITEM("InventoryNetwork"), - HEAT("HeatNetwork"); + ENERGY("EnergyNetwork", "Energy"), + FLUID("FluidNetwork", "Fluids"), + GAS("GasNetwork", "Gases"), + ITEM("InventoryNetwork", "Items"), + HEAT("HeatNetwork", "Heat"); private String name; + private String transmission; - private TransmissionType(String n) + private TransmissionType(String n, String t) { name = n; + transmission = t; } public String getName() { return name; } + + public String getTransmission() + { + return transmission; + } + + public String localize() + { + return MekanismUtils.localize("transmission." + getTransmission()); + } public static boolean checkTransmissionType(TileEntity sideTile, TransmissionType type) { diff --git a/src/main/java/mekanism/client/ClientProxy.java b/src/main/java/mekanism/client/ClientProxy.java index 2a8bdd4dd..26b64efdc 100644 --- a/src/main/java/mekanism/client/ClientProxy.java +++ b/src/main/java/mekanism/client/ClientProxy.java @@ -104,7 +104,7 @@ import mekanism.common.Mekanism; import mekanism.common.MekanismBlocks; import mekanism.common.MekanismItems; import mekanism.common.base.IElectricChest; -import mekanism.common.base.IInvConfiguration; +import mekanism.common.base.ISideConfiguration; import mekanism.common.base.IUpgradeTile; import mekanism.common.block.BlockMachine.MachineType; import mekanism.common.entity.EntityBabySkeleton; @@ -404,7 +404,7 @@ public class ClientProxy extends CommonProxy case 8: return new GuiEnergyCube(player.inventory, (TileEntityEnergyCube)tileEntity); case 9: - return new GuiConfiguration(player, (IInvConfiguration)tileEntity); + return new GuiConfiguration(player, (ISideConfiguration)tileEntity); case 10: return new GuiGasTank(player.inventory, (TileEntityGasTank)tileEntity); case 11: diff --git a/src/main/java/mekanism/client/MekanismKeyHandler.java b/src/main/java/mekanism/client/MekanismKeyHandler.java index 4132a76d5..43d835c5f 100644 --- a/src/main/java/mekanism/client/MekanismKeyHandler.java +++ b/src/main/java/mekanism/client/MekanismKeyHandler.java @@ -7,6 +7,7 @@ import mekanism.common.Mekanism; import mekanism.common.block.BlockMachine.MachineType; import mekanism.common.item.ItemBlockMachine; import mekanism.common.item.ItemConfigurator; +import mekanism.common.item.ItemConfigurator.ConfiguratorMode; import mekanism.common.item.ItemElectricBow; import mekanism.common.item.ItemJetpack; import mekanism.common.item.ItemJetpack.JetpackMode; @@ -22,13 +23,15 @@ import mekanism.common.network.PacketScubaTankData.ScubaTankPacket; import mekanism.common.network.PacketWalkieTalkieState.WalkieTalkieStateMessage; import mekanism.common.util.LangUtils; import mekanism.common.util.MekanismUtils; - import net.minecraft.client.Minecraft; import net.minecraft.client.settings.KeyBinding; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ChatComponentText; + +import org.lwjgl.input.Keyboard; + import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.common.FMLCommonHandler; @@ -37,8 +40,6 @@ import cpw.mods.fml.common.gameevent.InputEvent; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import org.lwjgl.input.Keyboard; - @SideOnly(Side.CLIENT) public class MekanismKeyHandler extends MekKeyHandler { @@ -75,11 +76,13 @@ public class MekanismKeyHandler extends MekKeyHandler ItemStack toolStack = player.getCurrentEquippedItem(); Item item = StackUtils.getItem(toolStack); + if(player.isSneaking() && item instanceof ItemConfigurator) { ItemConfigurator configurator = (ItemConfigurator)item; - configurator.setState(toolStack, (byte) (configurator.getState(toolStack) < 3 ? configurator.getState(toolStack) + 1 : 0)); + int toSet = configurator.getState(toolStack).ordinal() < ConfiguratorMode.values().length-1 ? configurator.getState(toolStack).ordinal() + 1 : 0; + configurator.setState(toolStack, ConfiguratorMode.values()[toSet]); Mekanism.packetHandler.sendToServer(new ConfiguratorStateMessage(configurator.getState(toolStack))); player.addChatMessage(new ChatComponentText(EnumColor.DARK_BLUE + "[Mekanism] " + EnumColor.GREY + MekanismUtils.localize("tooltip.configureState") + ": " + configurator.getColor(configurator.getState(toolStack)) + configurator.getStateDisplay(configurator.getState(toolStack)))); } diff --git a/src/main/java/mekanism/client/gui/GuiConfigTypeTab.java b/src/main/java/mekanism/client/gui/GuiConfigTypeTab.java new file mode 100644 index 000000000..3bf683b89 --- /dev/null +++ b/src/main/java/mekanism/client/gui/GuiConfigTypeTab.java @@ -0,0 +1,5 @@ +package mekanism.client.gui; + +public class GuiConfigTypeTab { + +} diff --git a/src/main/java/mekanism/client/gui/GuiConfiguration.java b/src/main/java/mekanism/client/gui/GuiConfiguration.java index 100e477c9..7581b7d98 100644 --- a/src/main/java/mekanism/client/gui/GuiConfiguration.java +++ b/src/main/java/mekanism/client/gui/GuiConfiguration.java @@ -5,11 +5,12 @@ import java.util.Map; import mekanism.api.Coord4D; import mekanism.api.EnumColor; +import mekanism.api.transmitters.TransmissionType; import mekanism.client.render.MekanismRenderer; import mekanism.client.sound.SoundHandler; import mekanism.common.Mekanism; import mekanism.common.SideData; -import mekanism.common.base.IInvConfiguration; +import mekanism.common.base.ISideConfiguration; import mekanism.common.block.BlockMachine.MachineType; import mekanism.common.inventory.container.ContainerNull; import mekanism.common.network.PacketConfigurationUpdate.ConfigurationPacket; @@ -18,17 +19,17 @@ import mekanism.common.network.PacketSimpleGui.SimpleGuiMessage; import mekanism.common.tile.TileEntityContainerBlock; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + @SideOnly(Side.CLIENT) public class GuiConfiguration extends GuiMekanism { @@ -36,9 +37,9 @@ public class GuiConfiguration extends GuiMekanism public Map inputPosMap = new HashMap(); - public IInvConfiguration configurable; + public ISideConfiguration configurable; - public GuiConfiguration(EntityPlayer player, IInvConfiguration tile) + public GuiConfiguration(EntityPlayer player, ISideConfiguration tile) { super(new ContainerNull(player, (TileEntityContainerBlock)tile)); @@ -108,7 +109,7 @@ public class GuiConfiguration extends GuiMekanism int x = slotPosMap.get(i).xPos; int y = slotPosMap.get(i).yPos; - SideData data = configurable.getSideData().get(configurable.getConfiguration()[i]); + SideData data = configurable.getConfig().getOutput(TransmissionType.ITEM, i); if(data.color != EnumColor.GREY) { @@ -182,7 +183,7 @@ public class GuiConfiguration extends GuiMekanism int x = slotPosMap.get(i).xPos; int y = slotPosMap.get(i).yPos; - SideData data = configurable.getSideData().get(configurable.getConfiguration()[i]); + SideData data = configurable.getConfig().getOutput(TransmissionType.ITEM, i); if(xAxis >= x && xAxis <= x+14 && yAxis >= y && yAxis <= y+14) { @@ -262,13 +263,13 @@ public class GuiConfiguration extends GuiMekanism if(xAxis >= 156 && xAxis <= 170 && yAxis >= 6 && yAxis <= 20) { SoundHandler.playSound("gui.button.press"); - Mekanism.packetHandler.sendToServer(new ConfigurationUpdateMessage(ConfigurationPacket.EJECT, Coord4D.get(tile), 0, 0)); + Mekanism.packetHandler.sendToServer(new ConfigurationUpdateMessage(ConfigurationPacket.EJECT, Coord4D.get(tile), 0, 0, null)); } if(xAxis >= 156 && xAxis <= 170 && yAxis >= 21 && yAxis <= 35) { SoundHandler.playSound("gui.button.press"); - Mekanism.packetHandler.sendToServer(new ConfigurationUpdateMessage(ConfigurationPacket.STRICT_INPUT, Coord4D.get(tile), 0, 0)); + Mekanism.packetHandler.sendToServer(new ConfigurationUpdateMessage(ConfigurationPacket.STRICT_INPUT, Coord4D.get(tile), 0, 0, null)); } } @@ -280,7 +281,7 @@ public class GuiConfiguration extends GuiMekanism if(xAxis >= 80 && xAxis <= 96 && yAxis >= 49 && yAxis <= 65) { SoundHandler.playSound("gui.button.press"); - Mekanism.packetHandler.sendToServer(new ConfigurationUpdateMessage(ConfigurationPacket.EJECT_COLOR, Coord4D.get(tile), button, 0)); + Mekanism.packetHandler.sendToServer(new ConfigurationUpdateMessage(ConfigurationPacket.EJECT_COLOR, Coord4D.get(tile), button, 0, null)); } for(int i = 0; i < slotPosMap.size(); i++) @@ -291,7 +292,7 @@ public class GuiConfiguration extends GuiMekanism if(xAxis >= x && xAxis <= x+14 && yAxis >= y && yAxis <= y+14) { SoundHandler.playSound("gui.button.press"); - Mekanism.packetHandler.sendToServer(new ConfigurationUpdateMessage(ConfigurationPacket.SIDE_DATA, Coord4D.get(tile), button, i)); + Mekanism.packetHandler.sendToServer(new ConfigurationUpdateMessage(ConfigurationPacket.SIDE_DATA, Coord4D.get(tile), button, i, TransmissionType.ITEM)); } } @@ -303,7 +304,7 @@ public class GuiConfiguration extends GuiMekanism if(xAxis >= x && xAxis <= x+14 && yAxis >= y && yAxis <= y+14) { SoundHandler.playSound("gui.button.press"); - Mekanism.packetHandler.sendToServer(new ConfigurationUpdateMessage(ConfigurationPacket.INPUT_COLOR, Coord4D.get(tile), button, i)); + Mekanism.packetHandler.sendToServer(new ConfigurationUpdateMessage(ConfigurationPacket.INPUT_COLOR, Coord4D.get(tile), button, i, null)); } } } diff --git a/src/main/java/mekanism/client/gui/GuiMekanism.java b/src/main/java/mekanism/client/gui/GuiMekanism.java index c3c3ec966..ef92e504a 100644 --- a/src/main/java/mekanism/client/gui/GuiMekanism.java +++ b/src/main/java/mekanism/client/gui/GuiMekanism.java @@ -5,8 +5,9 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import mekanism.api.transmitters.TransmissionType; import mekanism.common.SideData; -import mekanism.common.base.IInvConfiguration; +import mekanism.common.base.ISideConfiguration; import mekanism.common.item.ItemConfigurator; import mekanism.common.tile.TileEntityContainerBlock; import net.minecraft.client.gui.FontRenderer; @@ -70,7 +71,7 @@ public abstract class GuiMekanism extends GuiContainer implements IGuiWrapper element.renderForeground(xAxis, yAxis); } - if(tileEntity instanceof IInvConfiguration) + if(tileEntity instanceof ISideConfiguration) { Slot hovering = null; @@ -108,9 +109,9 @@ public abstract class GuiMekanism extends GuiContainer implements IGuiWrapper { if(slot.slotNumber < tileEntity.getSizeInventory()) { - IInvConfiguration config = (IInvConfiguration)tileEntity; + ISideConfiguration config = (ISideConfiguration)tileEntity; - for(SideData data : config.getSideData()) + for(SideData data : config.getConfig().getOutputs(TransmissionType.ITEM)) { for(int id : data.availableSlots) { diff --git a/src/main/java/mekanism/client/render/MekanismRenderer.java b/src/main/java/mekanism/client/render/MekanismRenderer.java index 91c473a5a..dbf71adab 100644 --- a/src/main/java/mekanism/client/render/MekanismRenderer.java +++ b/src/main/java/mekanism/client/render/MekanismRenderer.java @@ -1,12 +1,15 @@ package mekanism.client.render; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; import mekanism.api.EnumColor; import mekanism.api.gas.Gas; import mekanism.api.gas.GasRegistry; import mekanism.api.gas.OreGas; +import mekanism.api.transmitters.TransmissionType; import mekanism.client.render.tileentity.RenderConfigurableMachine; import mekanism.client.render.tileentity.RenderDynamicTank; import mekanism.client.render.tileentity.RenderPortableTank; @@ -52,6 +55,8 @@ public class MekanismRenderer public static IIcon energyIcon; public static IIcon heatIcon; + public static Map overlays = new HashMap(); + private static float lightmapLastX; private static float lightmapLastY; private static boolean optifineBreak = false; @@ -73,6 +78,11 @@ public class MekanismRenderer colors[color.ordinal()] = event.map.registerIcon("mekanism:overlay/overlay_" + color.unlocalizedName); } + for(TransmissionType type : TransmissionType.values()) + { + overlays.put(type, event.map.registerIcon("mekanism:overlay/" + type.getTransmission() + "Overlay")); + } + energyIcon = event.map.registerIcon("mekanism:LiquidEnergy"); heatIcon = event.map.registerIcon("mekanism:LiquidHeat"); diff --git a/src/main/java/mekanism/client/render/tileentity/RenderConfigurableMachine.java b/src/main/java/mekanism/client/render/tileentity/RenderConfigurableMachine.java index 7911a3747..4fb89ae0a 100644 --- a/src/main/java/mekanism/client/render/tileentity/RenderConfigurableMachine.java +++ b/src/main/java/mekanism/client/render/tileentity/RenderConfigurableMachine.java @@ -4,13 +4,13 @@ import java.util.HashMap; import mekanism.api.Coord4D; import mekanism.api.EnumColor; +import mekanism.api.transmitters.TransmissionType; import mekanism.client.render.MekanismRenderer; import mekanism.client.render.MekanismRenderer.DisplayInteger; import mekanism.client.render.MekanismRenderer.Model3D; -import mekanism.common.base.IInvConfiguration; +import mekanism.common.base.ISideConfiguration; import mekanism.common.item.ItemConfigurator; import mekanism.common.util.MekanismUtils; - import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; @@ -18,22 +18,23 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.MathHelper; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; + +import org.lwjgl.opengl.GL11; + +import codechicken.lib.math.MathHelper; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import org.lwjgl.opengl.GL11; - @SideOnly(Side.CLIENT) public class RenderConfigurableMachine extends TileEntitySpecialRenderer { private Minecraft mc = FMLClientHandler.instance().getClient(); - private HashMap> cachedOverlays = new HashMap>(); + private HashMap> cachedOverlays = new HashMap>(); public RenderConfigurableMachine() { @@ -43,10 +44,10 @@ public class RenderConfigurableMachine extends TileEntitySpecialRenderer @Override public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTick) { - renderAModelAt((IInvConfiguration)tileEntity, x, y, z, partialTick); + renderAModelAt((ISideConfiguration)tileEntity, x, y, z, partialTick); } - public void renderAModelAt(IInvConfiguration configurable, double x, double y, double z, float partialTick) + public void renderAModelAt(ISideConfiguration configurable, double x, double y, double z, float partialTick) { GL11.glPushMatrix(); @@ -56,29 +57,33 @@ public class RenderConfigurableMachine extends TileEntitySpecialRenderer ItemStack itemStack = player.getCurrentEquippedItem(); MovingObjectPosition pos = player.rayTrace(8.0D, 1.0F); - if(pos != null && itemStack != null && itemStack.getItem() instanceof ItemConfigurator && ((ItemConfigurator)itemStack.getItem()).getState(itemStack) == 0) + if(pos != null && itemStack != null && itemStack.getItem() instanceof ItemConfigurator && ((ItemConfigurator)itemStack.getItem()).getState(itemStack).isConfigurating()) { int xPos = MathHelper.floor_double(pos.blockX); int yPos = MathHelper.floor_double(pos.blockY); int zPos = MathHelper.floor_double(pos.blockZ); Coord4D obj = new Coord4D(xPos, yPos, zPos, tileEntity.getWorldObj().provider.dimensionId); + TransmissionType type = ((ItemConfigurator)itemStack.getItem()).getState(itemStack).getTransmission(); - if(xPos == tileEntity.xCoord && yPos == tileEntity.yCoord && zPos == tileEntity.zCoord) + if(configurable.getConfig().supports(type)) { - EnumColor color = configurable.getSideData().get(configurable.getConfiguration()[MekanismUtils.getBaseOrientation(pos.sideHit, configurable.getOrientation())]).color; - - push(); - - GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.4F); - - bindTexture(MekanismRenderer.getBlocksTexture()); - GL11.glTranslatef((float)x, (float)y, (float)z); - - int display = getOverlayDisplay(world, ForgeDirection.getOrientation(pos.sideHit), color).display; - GL11.glCallList(display); - - pop(); + if(xPos == tileEntity.xCoord && yPos == tileEntity.yCoord && zPos == tileEntity.zCoord) + { + EnumColor color = configurable.getConfig().getOutput(type, pos.sideHit, configurable.getOrientation()).color; + + push(); + + MekanismRenderer.color(color, 0.4F); + + bindTexture(MekanismRenderer.getBlocksTexture()); + GL11.glTranslatef((float)x, (float)y, (float)z); + + int display = getOverlayDisplay(world, ForgeDirection.getOrientation(pos.sideHit), TransmissionType.ITEM).display; + GL11.glCallList(display); + + pop(); + } } } @@ -103,26 +108,26 @@ public class RenderConfigurableMachine extends TileEntitySpecialRenderer MekanismRenderer.blendOn(); } - private DisplayInteger getOverlayDisplay(World world, ForgeDirection side, EnumColor color) + private DisplayInteger getOverlayDisplay(World world, ForgeDirection side, TransmissionType type) { - if(cachedOverlays.containsKey(side) && cachedOverlays.get(side).containsKey(color)) + if(cachedOverlays.containsKey(side) && cachedOverlays.get(side).containsKey(type)) { - return cachedOverlays.get(side).get(color); + return cachedOverlays.get(side).get(type); } Model3D toReturn = new Model3D(); toReturn.baseBlock = Blocks.stone; - toReturn.setTexture(MekanismRenderer.getColorIcon(color)); + toReturn.setTexture(MekanismRenderer.overlays.get(type)); DisplayInteger display = DisplayInteger.createAndStart(); if(cachedOverlays.containsKey(side)) { - cachedOverlays.get(side).put(color, display); + cachedOverlays.get(side).put(type, display); } else { - HashMap map = new HashMap(); - map.put(color, display); + HashMap map = new HashMap(); + map.put(type, display); cachedOverlays.put(side, map); } @@ -205,4 +210,32 @@ public class RenderConfigurableMachine extends TileEntitySpecialRenderer return display; } + + public static class OverlayRenderData + { + public EnumColor color; + public TransmissionType type; + + public OverlayRenderData(EnumColor c, TransmissionType t) + { + color = c; + type = t; + } + + @Override + public boolean equals(Object data) + { + return data instanceof OverlayRenderData && ((OverlayRenderData)data).color == color && + ((OverlayRenderData)data).type == type; + } + + @Override + public int hashCode() + { + int code = 1; + code = 31 * code + color.ordinal(); + code = 31 * code + type.ordinal(); + return code; + } + } } \ No newline at end of file diff --git a/src/main/java/mekanism/common/base/IInvConfiguration.java b/src/main/java/mekanism/common/base/IInvConfiguration.java deleted file mode 100644 index e58235088..000000000 --- a/src/main/java/mekanism/common/base/IInvConfiguration.java +++ /dev/null @@ -1,37 +0,0 @@ -package mekanism.common.base; - -import java.util.ArrayList; - -import mekanism.common.SideData; - -/** - * Implement this if your TileEntity is capable of being modified by a Configurator in it's 'modify' mode. - * @author AidanBrady - * - */ -public interface IInvConfiguration -{ - /** - * Gets an ArrayList of side data this machine contains. - * @return - */ - public ArrayList getSideData(); - - /** - * Gets this machine's configuration as a byte[] -- each byte matching with the index of the defined SideData. - * @return - */ - public byte[] getConfiguration(); - - /** - * Gets this machine's current orientation. - * @return - */ - public int getOrientation(); - - /** - * Gets this machine's ejector. - * @return - */ - public IEjector getEjector(); -} diff --git a/src/main/java/mekanism/common/base/ISideConfiguration.java b/src/main/java/mekanism/common/base/ISideConfiguration.java new file mode 100644 index 000000000..d1d4a5dfd --- /dev/null +++ b/src/main/java/mekanism/common/base/ISideConfiguration.java @@ -0,0 +1,29 @@ +package mekanism.common.base; + +import mekanism.common.tile.component.TileComponentConfig; + +/** + * Implement this if your TileEntity is capable of being modified by a Configurator in it's 'modify' mode. + * @author AidanBrady + * + */ +public interface ISideConfiguration +{ + /** + * Gets the tile's configuration component. + * @return the tile's configuration component + */ + public TileComponentConfig getConfig(); + + /** + * Gets this machine's current orientation. + * @return machine's current orientation + */ + public int getOrientation(); + + /** + * Gets this machine's ejector. + * @return + */ + public IEjector getEjector(); +} diff --git a/src/main/java/mekanism/common/block/BlockMachine.java b/src/main/java/mekanism/common/block/BlockMachine.java index 1ad9b5ca3..6dc6ee712 100644 --- a/src/main/java/mekanism/common/block/BlockMachine.java +++ b/src/main/java/mekanism/common/block/BlockMachine.java @@ -13,6 +13,7 @@ import mekanism.api.MekanismConfig.machines; import mekanism.api.MekanismConfig.usage; import mekanism.api.energy.IEnergizedItem; import mekanism.api.energy.IStrictEnergyStorage; +import mekanism.api.transmitters.TransmissionType; import mekanism.client.ClientProxy; import mekanism.common.ItemAttacher; import mekanism.common.Mekanism; @@ -22,7 +23,7 @@ import mekanism.common.base.IBoundingBlock; import mekanism.common.base.IElectricChest; import mekanism.common.base.IFactory; import mekanism.common.base.IFactory.RecipeType; -import mekanism.common.base.IInvConfiguration; +import mekanism.common.base.ISideConfiguration; import mekanism.common.base.IRedstoneControl; import mekanism.common.base.ISpecialBounds; import mekanism.common.base.ISustainedData; @@ -896,18 +897,15 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer ((IUpgradeTile)tileEntity).getComponent().write(itemStack.stackTagCompound); } - if(tileEntity instanceof IInvConfiguration) + if(tileEntity instanceof ISideConfiguration) { - IInvConfiguration config = (IInvConfiguration)tileEntity; + ISideConfiguration config = (ISideConfiguration)tileEntity; itemStack.stackTagCompound.setBoolean("hasSideData", true); itemStack.stackTagCompound.setBoolean("ejecting", config.getEjector().isEjecting()); - for(int i = 0; i < 6; i++) - { - itemStack.stackTagCompound.setByte("config"+i, config.getConfiguration()[i]); - } + config.getConfig().write(itemStack.stackTagCompound); } if(tileEntity instanceof ISustainedData) diff --git a/src/main/java/mekanism/common/content/transporter/TransporterManager.java b/src/main/java/mekanism/common/content/transporter/TransporterManager.java index c09d28af2..4d1de653e 100644 --- a/src/main/java/mekanism/common/content/transporter/TransporterManager.java +++ b/src/main/java/mekanism/common/content/transporter/TransporterManager.java @@ -7,7 +7,7 @@ import java.util.Set; import mekanism.api.Coord4D; import mekanism.api.EnumColor; -import mekanism.common.base.IInvConfiguration; +import mekanism.common.base.ISideConfiguration; import mekanism.common.content.transporter.TransporterStack.Path; import mekanism.common.tile.TileEntityBin; import mekanism.common.util.InventoryUtils; @@ -96,9 +96,9 @@ public class TransporterManager { ItemStack toInsert = stack.itemStack.copy(); - if(stack.pathType != Path.HOME && inv instanceof IInvConfiguration) + if(stack.pathType != Path.HOME && inv instanceof ISideConfiguration) { - IInvConfiguration config = (IInvConfiguration)inv; + ISideConfiguration config = (ISideConfiguration)inv; int tileSide = config.getOrientation(); EnumColor configColor = config.getEjector().getInputColor(ForgeDirection.getOrientation(MekanismUtils.getBaseOrientation(side, tileSide)).getOpposite()); @@ -242,9 +242,9 @@ public class TransporterManager return itemStack; } - if(tileEntity instanceof IInvConfiguration) + if(tileEntity instanceof ISideConfiguration) { - IInvConfiguration config = (IInvConfiguration)tileEntity; + ISideConfiguration config = (ISideConfiguration)tileEntity; int tileSide = config.getOrientation(); EnumColor configColor = config.getEjector().getInputColor(ForgeDirection.getOrientation(MekanismUtils.getBaseOrientation(side, tileSide)).getOpposite()); diff --git a/src/main/java/mekanism/common/item/ItemBlockMachine.java b/src/main/java/mekanism/common/item/ItemBlockMachine.java index ef3cf39a7..83bca485d 100644 --- a/src/main/java/mekanism/common/item/ItemBlockMachine.java +++ b/src/main/java/mekanism/common/item/ItemBlockMachine.java @@ -14,7 +14,7 @@ import mekanism.common.Mekanism; import mekanism.common.Upgrade; import mekanism.common.base.IElectricChest; import mekanism.common.base.IFactory; -import mekanism.common.base.IInvConfiguration; +import mekanism.common.base.ISideConfiguration; import mekanism.common.base.IRedstoneControl; import mekanism.common.base.IRedstoneControl.RedstoneControl; import mekanism.common.base.ISustainedData; @@ -270,18 +270,14 @@ public class ItemBlockMachine extends ItemBlock implements IEnergizedItem, ISpec } } - if(tileEntity instanceof IInvConfiguration) + if(tileEntity instanceof ISideConfiguration) { - IInvConfiguration config = (IInvConfiguration)tileEntity; + ISideConfiguration config = (ISideConfiguration)tileEntity; if(stack.stackTagCompound != null && stack.stackTagCompound.hasKey("hasSideData")) { config.getEjector().setEjecting(stack.stackTagCompound.getBoolean("ejecting")); - - for(int i = 0; i < 6; i++) - { - config.getConfiguration()[i] = stack.stackTagCompound.getByte("config"+i); - } + config.getConfig().read(stack.stackTagCompound); } } diff --git a/src/main/java/mekanism/common/item/ItemConfigurator.java b/src/main/java/mekanism/common/item/ItemConfigurator.java index 326d91020..770d7afd2 100644 --- a/src/main/java/mekanism/common/item/ItemConfigurator.java +++ b/src/main/java/mekanism/common/item/ItemConfigurator.java @@ -10,8 +10,9 @@ import mekanism.api.EnumColor; import mekanism.api.IConfigurable; import mekanism.api.IMekWrench; import mekanism.api.Range4D; +import mekanism.api.transmitters.TransmissionType; import mekanism.common.Mekanism; -import mekanism.common.base.IInvConfiguration; +import mekanism.common.base.ISideConfiguration; import mekanism.common.network.PacketTileEntity.TileEntityMessage; import mekanism.common.tile.TileEntityBasicBlock; import mekanism.common.tile.TileEntityElectricChest; @@ -49,7 +50,7 @@ public class ItemConfigurator extends ItemEnergized implements IMekWrench, ITool public void addInformation(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) { super.addInformation(itemstack, entityplayer, list, flag); - list.add(EnumColor.PINK + MekanismUtils.localize("gui.state") + ": " + EnumColor.GREY + getStateDisplay(getState(itemstack))); + list.add(EnumColor.PINK + MekanismUtils.localize("gui.state") + ": " + getColor(getState(itemstack)) + getStateDisplay(getState(itemstack))); } @Override @@ -60,23 +61,23 @@ public class ItemConfigurator extends ItemEnergized implements IMekWrench, ITool Block block = world.getBlock(x, y, z); TileEntity tile = world.getTileEntity(x, y, z); - if(getState(stack) == 0) //Configurate + if(getState(stack).isConfigurating()) //Configurate { - if(tile instanceof IInvConfiguration) + if(tile instanceof ISideConfiguration && ((ISideConfiguration)tile).getConfig().supports(getState(stack).getTransmission())) { - IInvConfiguration config = (IInvConfiguration)tile; + ISideConfiguration config = (ISideConfiguration)tile; if(!player.isSneaking()) { - player.addChatMessage(new ChatComponentText(EnumColor.DARK_BLUE + "[Mekanism]" + EnumColor.GREY + " " + MekanismUtils.localize("tooltip.configurator.viewColor") + ": " + config.getSideData().get(config.getConfiguration()[MekanismUtils.getBaseOrientation(side, config.getOrientation())]).color.getName())); + player.addChatMessage(new ChatComponentText(EnumColor.DARK_BLUE + "[Mekanism]" + EnumColor.GREY + " " + MekanismUtils.localize("tooltip.configurator.viewColor") + ": " + config.getConfig().getOutput(getState(stack).getTransmission(), side, config.getOrientation()).color.getName())); return true; } else { if(getEnergy(stack) >= ENERGY_PER_CONFIGURE) { setEnergy(stack, getEnergy(stack) - ENERGY_PER_CONFIGURE); - MekanismUtils.incrementOutput(config, MekanismUtils.getBaseOrientation(side, config.getOrientation())); - player.addChatMessage(new ChatComponentText(EnumColor.DARK_BLUE + "[Mekanism]" + EnumColor.GREY + " " + MekanismUtils.localize("tooltip.configurator.toggleColor") + ": " + config.getSideData().get(config.getConfiguration()[MekanismUtils.getBaseOrientation(side, config.getOrientation())]).color.getName())); + MekanismUtils.incrementOutput(config, getState(stack).getTransmission(), MekanismUtils.getBaseOrientation(side, config.getOrientation())); + player.addChatMessage(new ChatComponentText(EnumColor.DARK_BLUE + "[Mekanism]" + EnumColor.GREY + " " + MekanismUtils.localize("tooltip.configurator.toggleColor") + ": " + config.getConfig().getOutput(getState(stack).getTransmission(), side, config.getOrientation()).color.getName())); if(config instanceof TileEntityBasicBlock) { @@ -101,7 +102,7 @@ public class ItemConfigurator extends ItemEnergized implements IMekWrench, ITool } } } - else if(getState(stack) == 1) //Empty + else if(getState(stack) == ConfiguratorMode.EMPTY) //Empty { if(tile instanceof IInventory) { @@ -161,7 +162,7 @@ public class ItemConfigurator extends ItemEnergized implements IMekWrench, ITool } } } - else if(getState(stack) == 2) //Rotate + else if(getState(stack) == ConfiguratorMode.ROTATE) //Rotate { ForgeDirection axis = ForgeDirection.getOrientation(side); List l = Arrays.asList(block.getValidRotations(world, x, y, z)); @@ -177,7 +178,7 @@ public class ItemConfigurator extends ItemEnergized implements IMekWrench, ITool return true; } - else if(getState(stack) == 3) //Wrench + else if(getState(stack) == ConfiguratorMode.WRENCH) //Wrench { return false; } @@ -186,65 +187,39 @@ public class ItemConfigurator extends ItemEnergized implements IMekWrench, ITool return false; } - public String getStateDisplay(int state) + public String getStateDisplay(ConfiguratorMode mode) { - switch(state) - { - case 0: - return MekanismUtils.localize("tooltip.configurator.configurate"); - case 1: - return MekanismUtils.localize("tooltip.configurator.empty"); - case 2: - return MekanismUtils.localize("tooltip.configurator.rotate"); - case 3: - return MekanismUtils.localize("tooltip.configurator.wrench"); - } - - return "unknown"; + return mode.getName(); } - public EnumColor getColor(int state) + public EnumColor getColor(ConfiguratorMode mode) { - switch(state) - { - case 0: - return EnumColor.BRIGHT_GREEN; - case 1: - return EnumColor.AQUA; - case 2: - return EnumColor.YELLOW; - case 3: - return EnumColor.PINK; - } - - return EnumColor.GREY; + return mode.getColor(); } - public void setState(ItemStack itemstack, byte state) + public void setState(ItemStack itemstack, ConfiguratorMode state) { if(itemstack.stackTagCompound == null) { itemstack.setTagCompound(new NBTTagCompound()); } - itemstack.stackTagCompound.setByte("state", state); + itemstack.stackTagCompound.setInteger("state", state.ordinal()); } - public byte getState(ItemStack itemstack) + public ConfiguratorMode getState(ItemStack itemstack) { if(itemstack.stackTagCompound == null) { - return 0; + return ConfiguratorMode.CONFIGURATE_ITEMS; } - byte state = 0; - if(itemstack.stackTagCompound.getTag("state") != null) { - state = itemstack.stackTagCompound.getByte("state"); + return ConfiguratorMode.values()[itemstack.stackTagCompound.getInteger("state")]; } - return state; + return ConfiguratorMode.CONFIGURATE_ITEMS; } @Override @@ -267,13 +242,13 @@ public class ItemConfigurator extends ItemEnergized implements IMekWrench, ITool @Override public boolean canUseWrench(EntityPlayer player, int x, int y, int z) { - return getState(player.getCurrentEquippedItem()) == 3; + return getState(player.getCurrentEquippedItem()) == ConfiguratorMode.WRENCH; } @Override public boolean doesSneakBypassUse(World world, int x, int y, int z, EntityPlayer player) { - return getState(player.getCurrentEquippedItem()) == 3; + return getState(player.getCurrentEquippedItem()) == ConfiguratorMode.WRENCH; } @Override @@ -284,4 +259,60 @@ public class ItemConfigurator extends ItemEnergized implements IMekWrench, ITool @Override public void toolUsed(ItemStack item, EntityLivingBase user, int x, int y, int z) {} + + public static enum ConfiguratorMode + { + CONFIGURATE_ITEMS("configurate", "(" + TransmissionType.ITEM.getName() + ")", EnumColor.BRIGHT_GREEN, true), + CONFIGURATE_FLUIDS("configurate", "(" + TransmissionType.FLUID.getName() + ")", EnumColor.BRIGHT_GREEN, true), + CONFIGURATE_GASES("configurate", "(" + TransmissionType.GAS.getName() + ")", EnumColor.BRIGHT_GREEN, true), + CONFIGURATE_ENERGY("configurate", "(" + TransmissionType.ENERGY.getName() + ")", EnumColor.BRIGHT_GREEN, true), + EMPTY("empty", "", EnumColor.DARK_RED, false), + ROTATE("rotate", "", EnumColor.YELLOW, false), + WRENCH("wrench", "", EnumColor.PINK, false); + + private String name; + private String info; + private EnumColor color; + private boolean configurating; + + private ConfiguratorMode(String s, String s1, EnumColor c, boolean b) + { + name = s; + info = s1; + color = c; + configurating = b; + } + + public String getName() + { + return MekanismUtils.localize("tooltip.configurator." + name) + info; + } + + public EnumColor getColor() + { + return color; + } + + public boolean isConfigurating() + { + return configurating; + } + + public TransmissionType getTransmission() + { + switch(this) + { + case CONFIGURATE_ITEMS: + return TransmissionType.ITEM; + case CONFIGURATE_FLUIDS: + return TransmissionType.FLUID; + case CONFIGURATE_GASES: + return TransmissionType.GAS; + case CONFIGURATE_ENERGY: + return TransmissionType.ENERGY; + } + + return null; + } + } } diff --git a/src/main/java/mekanism/common/network/PacketConfigurationUpdate.java b/src/main/java/mekanism/common/network/PacketConfigurationUpdate.java index f78a40567..baddf35fa 100644 --- a/src/main/java/mekanism/common/network/PacketConfigurationUpdate.java +++ b/src/main/java/mekanism/common/network/PacketConfigurationUpdate.java @@ -1,19 +1,21 @@ package mekanism.common.network; +import io.netty.buffer.ByteBuf; + import java.util.ArrayList; import mekanism.api.Coord4D; import mekanism.api.Range4D; +import mekanism.api.transmitters.TransmissionType; import mekanism.common.Mekanism; import mekanism.common.PacketHandler; -import mekanism.common.base.IInvConfiguration; +import mekanism.common.base.ISideConfiguration; import mekanism.common.base.ITileNetwork; import mekanism.common.network.PacketConfigurationUpdate.ConfigurationUpdateMessage; import mekanism.common.network.PacketTileEntity.TileEntityMessage; import mekanism.common.tile.TileEntityBasicBlock; import mekanism.common.util.MekanismUtils; import mekanism.common.util.TransporterUtils; - import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.tileentity.TileEntity; @@ -22,8 +24,6 @@ import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; -import io.netty.buffer.ByteBuf; - public class PacketConfigurationUpdate implements IMessageHandler { @Override @@ -31,9 +31,9 @@ public class PacketConfigurationUpdate implements IMessageHandler { @Override @@ -20,7 +19,7 @@ public class PacketConfiguratorState implements IMessageHandler, OUTPUT extends MachineOutput, RECIPE extends MachineRecipe> extends TileEntityNoisyElectricBlock implements IElectricMachine, IPeripheral, IInvConfiguration, IUpgradeTile, IRedstoneControl +public abstract class TileEntityBasicMachine, OUTPUT extends MachineOutput, RECIPE extends MachineRecipe> extends TileEntityNoisyElectricBlock implements IElectricMachine, IPeripheral, ISideConfiguration, IUpgradeTile, IRedstoneControl { - /** This machine's side configuration. */ - public byte[] sideConfig; - - /** An arraylist of SideData for this machine. */ - public ArrayList sideOutputs = new ArrayList(); - /** How much energy this machine uses per tick, un-upgraded. */ public double BASE_ENERGY_PER_TICK; @@ -77,6 +70,7 @@ public abstract class TileEntityBasicMachine, public TileComponentUpgrade upgradeComponent; public TileComponentEjector ejectorComponent; + public TileComponentConfig configComponent; /** * The foundation of all machines - a simple tile entity with a facing, active state, initialized state, sound effect, and animated texture. @@ -136,14 +130,6 @@ public abstract class TileEntityBasicMachine, operatingTicks = nbtTags.getInteger("operatingTicks"); clientActive = isActive = nbtTags.getBoolean("isActive"); controlType = RedstoneControl.values()[nbtTags.getInteger("controlType")]; - - if(nbtTags.hasKey("sideDataStored")) - { - for(int i = 0; i < 6; i++) - { - sideConfig[i] = nbtTags.getByte("config"+i); - } - } } @Override @@ -154,13 +140,6 @@ public abstract class TileEntityBasicMachine, nbtTags.setInteger("operatingTicks", operatingTicks); nbtTags.setBoolean("isActive", isActive); nbtTags.setInteger("controlType", controlType.ordinal()); - - nbtTags.setBoolean("sideDataStored", true); - - for(int i = 0; i < 6; i++) - { - nbtTags.setByte("config"+i, sideConfig[i]); - } } @Override @@ -173,11 +152,6 @@ public abstract class TileEntityBasicMachine, ticksRequired = dataStream.readInt(); controlType = RedstoneControl.values()[dataStream.readInt()]; - for(int i = 0; i < 6; i++) - { - sideConfig[i] = dataStream.readByte(); - } - if(updateDelay == 0 && clientActive != isActive) { updateDelay = general.UPDATE_DELAY; @@ -195,7 +169,6 @@ public abstract class TileEntityBasicMachine, data.add(isActive); data.add(ticksRequired); data.add(controlType.ordinal()); - data.add(sideConfig); return data; } @@ -275,19 +248,13 @@ public abstract class TileEntityBasicMachine, @Override public int[] getAccessibleSlotsFromSide(int side) { - return sideOutputs.get(sideConfig[MekanismUtils.getBaseOrientation(side, facing)]).availableSlots; + return configComponent.getOutput(TransmissionType.ITEM, side, facing).availableSlots; } @Override - public ArrayList getSideData() + public TileComponentConfig getConfig() { - return sideOutputs; - } - - @Override - public byte[] getConfiguration() - { - return sideConfig; + return configComponent; } @Override diff --git a/src/main/java/mekanism/common/tile/TileEntityChanceMachine.java b/src/main/java/mekanism/common/tile/TileEntityChanceMachine.java index 3d32ae37c..3fcb61663 100644 --- a/src/main/java/mekanism/common/tile/TileEntityChanceMachine.java +++ b/src/main/java/mekanism/common/tile/TileEntityChanceMachine.java @@ -3,45 +3,46 @@ package mekanism.common.tile; import java.util.Map; import mekanism.api.EnumColor; +import mekanism.api.transmitters.TransmissionType; import mekanism.common.MekanismItems; import mekanism.common.SideData; import mekanism.common.recipe.RecipeHandler; import mekanism.common.recipe.inputs.ItemStackInput; import mekanism.common.recipe.machines.ChanceMachineRecipe; import mekanism.common.recipe.outputs.ChanceOutput; +import mekanism.common.tile.component.TileComponentConfig; import mekanism.common.tile.component.TileComponentEjector; import mekanism.common.tile.component.TileComponentUpgrade; import mekanism.common.util.ChargeUtils; import mekanism.common.util.InventoryUtils; import mekanism.common.util.MekanismUtils; - import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import cpw.mods.fml.common.Optional.Method; - import dan200.computercraft.api.lua.ILuaContext; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.peripheral.IComputerAccess; - public abstract class TileEntityChanceMachine> extends TileEntityBasicMachine { public TileEntityChanceMachine(String soundPath, String name, ResourceLocation location, double perTick, int ticksRequired, double maxEnergy) { super(soundPath, name, location, perTick, ticksRequired, maxEnergy); - sideOutputs.add(new SideData(EnumColor.GREY, InventoryUtils.EMPTY)); - sideOutputs.add(new SideData(EnumColor.DARK_RED, new int[] {0})); - sideOutputs.add(new SideData(EnumColor.DARK_GREEN, new int[] {1})); - sideOutputs.add(new SideData(EnumColor.DARK_BLUE, new int[] {2, 4})); - sideOutputs.add(new SideData(EnumColor.ORANGE, new int[] {3})); + configComponent = new TileComponentConfig(this, TransmissionType.ITEM); + + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.GREY, InventoryUtils.EMPTY)); + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.DARK_RED, new int[] {0})); + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.DARK_GREEN, new int[] {1})); + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.DARK_BLUE, new int[] {2, 4})); + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.ORANGE, new int[] {3})); - sideConfig = new byte[] {2, 1, 0, 0, 4, 3}; + configComponent.setConfig(TransmissionType.ITEM, new byte[] {2, 1, 0, 0, 4, 3}); inventory = new ItemStack[5]; upgradeComponent = new TileComponentUpgrade(this, 3); - ejectorComponent = new TileComponentEjector(this, sideOutputs.get(3)); + ejectorComponent = new TileComponentEjector(this, configComponent.getOutputs(TransmissionType.ITEM).get(3)); } @Override diff --git a/src/main/java/mekanism/common/tile/TileEntityChemicalCrystallizer.java b/src/main/java/mekanism/common/tile/TileEntityChemicalCrystallizer.java index ca82743c9..8b8d673fe 100644 --- a/src/main/java/mekanism/common/tile/TileEntityChemicalCrystallizer.java +++ b/src/main/java/mekanism/common/tile/TileEntityChemicalCrystallizer.java @@ -16,13 +16,14 @@ import mekanism.api.gas.GasTransmission; import mekanism.api.gas.IGasHandler; import mekanism.api.gas.IGasItem; import mekanism.api.gas.ITubeConnection; +import mekanism.api.transmitters.TransmissionType; import mekanism.common.Mekanism; import mekanism.common.SideData; import mekanism.common.Upgrade; import mekanism.common.base.IDropperHandler; import mekanism.common.base.IEjector; -import mekanism.common.base.IInvConfiguration; import mekanism.common.base.IRedstoneControl; +import mekanism.common.base.ISideConfiguration; import mekanism.common.base.ISustainedData; import mekanism.common.base.IUpgradeTile; import mekanism.common.block.BlockMachine.MachineType; @@ -30,6 +31,7 @@ import mekanism.common.network.PacketTileEntity.TileEntityMessage; import mekanism.common.recipe.RecipeHandler; import mekanism.common.recipe.inputs.GasInput; import mekanism.common.recipe.machines.CrystallizerRecipe; +import mekanism.common.tile.component.TileComponentConfig; import mekanism.common.tile.component.TileComponentEjector; import mekanism.common.tile.component.TileComponentUpgrade; import mekanism.common.util.ChargeUtils; @@ -43,14 +45,10 @@ import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidRegistry; -public class TileEntityChemicalCrystallizer extends TileEntityNoisyElectricBlock implements IGasHandler, ITubeConnection, IRedstoneControl, IInvConfiguration, IUpgradeTile, ISustainedData, IDropperHandler +public class TileEntityChemicalCrystallizer extends TileEntityNoisyElectricBlock implements IGasHandler, ITubeConnection, IRedstoneControl, ISideConfiguration, IUpgradeTile, ISustainedData, IDropperHandler { public static final int MAX_GAS = 10000; - - public byte[] sideConfig = new byte[] {0, 3, 0, 0, 1, 2}; - - public ArrayList sideOutputs = new ArrayList(); - + public GasTank inputTank = new GasTank(MAX_GAS); public int updateDelay; @@ -80,20 +78,27 @@ public class TileEntityChemicalCrystallizer extends TileEntityNoisyElectricBlock /** This machine's current RedstoneControl type. */ public RedstoneControl controlType = RedstoneControl.DISABLED; + public TileComponentUpgrade upgradeComponent; public TileComponentEjector ejectorComponent; - public TileComponentUpgrade upgradeComponent = new TileComponentUpgrade(this, 3); + public TileComponentConfig configComponent; public TileEntityChemicalCrystallizer() { super("crystallizer", "ChemicalCrystallizer", MachineType.CHEMICAL_CRYSTALLIZER.baseEnergy); - sideOutputs.add(new SideData(EnumColor.GREY, InventoryUtils.EMPTY)); - sideOutputs.add(new SideData(EnumColor.PURPLE, new int[] {0})); - sideOutputs.add(new SideData(EnumColor.DARK_BLUE, new int[] {1})); - sideOutputs.add(new SideData(EnumColor.DARK_GREEN, new int[] {2})); - + configComponent = new TileComponentConfig(this, TransmissionType.ITEM); + + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.GREY, InventoryUtils.EMPTY)); + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.PURPLE, new int[] {0})); + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.DARK_BLUE, new int[] {1})); + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.DARK_GREEN, new int[] {2})); + + configComponent.setConfig(TransmissionType.ITEM, new byte[] {0, 3, 0, 0, 1, 2}); + inventory = new ItemStack[4]; - ejectorComponent = new TileComponentEjector(this, sideOutputs.get(2)); + + upgradeComponent = new TileComponentUpgrade(this, 3); + ejectorComponent = new TileComponentEjector(this, configComponent.getOutputs(TransmissionType.ITEM).get(2)); } @Override @@ -218,12 +223,6 @@ public class TileEntityChemicalCrystallizer extends TileEntityNoisyElectricBlock isActive = dataStream.readBoolean(); operatingTicks = dataStream.readInt(); - - for(int i = 0; i < 6; i++) - { - sideConfig[i] = dataStream.readByte(); - } - controlType = RedstoneControl.values()[dataStream.readInt()]; if(dataStream.readBoolean()) @@ -245,7 +244,6 @@ public class TileEntityChemicalCrystallizer extends TileEntityNoisyElectricBlock data.add(isActive); data.add(operatingTicks); - data.add(sideConfig); data.add(controlType.ordinal()); if(inputTank.getGas() != null) @@ -271,14 +269,6 @@ public class TileEntityChemicalCrystallizer extends TileEntityNoisyElectricBlock controlType = RedstoneControl.values()[nbtTags.getInteger("controlType")]; inputTank.read(nbtTags.getCompoundTag("rightTank")); - - if(nbtTags.hasKey("sideDataStored")) - { - for(int i = 0; i < 6; i++) - { - sideConfig[i] = nbtTags.getByte("config"+i); - } - } } @Override @@ -293,11 +283,6 @@ public class TileEntityChemicalCrystallizer extends TileEntityNoisyElectricBlock nbtTags.setTag("rightTank", inputTank.write(new NBTTagCompound())); nbtTags.setBoolean("sideDataStored", true); - - for(int i = 0; i < 6; i++) - { - nbtTags.setByte("config"+i, sideConfig[i]); - } } @Override @@ -434,32 +419,13 @@ public class TileEntityChemicalCrystallizer extends TileEntityNoisyElectricBlock @Override public int[] getAccessibleSlotsFromSide(int side) { - if(side == MekanismUtils.getLeft(facing).ordinal()) - { - return new int[] {0}; - } - else if(side == MekanismUtils.getRight(facing).ordinal()) - { - return new int[] {1}; - } - else if(side == 0 || side == 1) - { - return new int[2]; - } - - return InventoryUtils.EMPTY; + return configComponent.getOutput(TransmissionType.ITEM, side, facing).availableSlots; } @Override - public ArrayList getSideData() + public TileComponentConfig getConfig() { - return sideOutputs; - } - - @Override - public byte[] getConfiguration() - { - return sideConfig; + return configComponent; } @Override diff --git a/src/main/java/mekanism/common/tile/TileEntityElectricMachine.java b/src/main/java/mekanism/common/tile/TileEntityElectricMachine.java index 74e19bb4e..1fd07b4dc 100644 --- a/src/main/java/mekanism/common/tile/TileEntityElectricMachine.java +++ b/src/main/java/mekanism/common/tile/TileEntityElectricMachine.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import mekanism.api.Coord4D; import mekanism.api.EnumColor; import mekanism.api.Range4D; +import mekanism.api.transmitters.TransmissionType; import mekanism.common.Mekanism; import mekanism.common.MekanismBlocks; import mekanism.common.MekanismItems; @@ -16,6 +17,7 @@ import mekanism.common.recipe.RecipeHandler; import mekanism.common.recipe.inputs.ItemStackInput; import mekanism.common.recipe.machines.BasicMachineRecipe; import mekanism.common.recipe.outputs.ItemStackOutput; +import mekanism.common.tile.component.TileComponentConfig; import mekanism.common.tile.component.TileComponentEjector; import mekanism.common.tile.component.TileComponentUpgrade; import mekanism.common.util.ChargeUtils; @@ -44,18 +46,20 @@ public abstract class TileEntityElectricMachine sideOutputs = new ArrayList(); - /** An int[] used to track all current operations' progress. */ public int[] progress; @@ -114,21 +110,27 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I /** This machine's current RedstoneControl type. */ public RedstoneControl controlType = RedstoneControl.DISABLED; - public TileComponentUpgrade upgradeComponent = new TileComponentUpgrade(this, 0); + public TileComponentUpgrade upgradeComponent; public TileComponentEjector ejectorComponent; + public TileComponentConfig configComponent; public TileEntityFactory() { this(FactoryTier.BASIC, MachineType.BASIC_FACTORY); + + configComponent = new TileComponentConfig(this, TransmissionType.ITEM); - sideOutputs.add(new SideData(EnumColor.GREY, InventoryUtils.EMPTY)); - sideOutputs.add(new SideData(EnumColor.ORANGE, new int[] {0})); - sideOutputs.add(new SideData(EnumColor.DARK_GREEN, new int[] {1})); - sideOutputs.add(new SideData(EnumColor.PURPLE, new int[] {4})); - sideOutputs.add(new SideData(EnumColor.DARK_RED, new int[] {5, 6, 7})); - sideOutputs.add(new SideData(EnumColor.DARK_BLUE, new int[] {8, 9, 10})); + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.GREY, InventoryUtils.EMPTY)); + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.ORANGE, new int[] {0})); + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.DARK_GREEN, new int[] {1})); + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.PURPLE, new int[] {4})); + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.DARK_RED, new int[] {5, 6, 7})); + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.DARK_BLUE, new int[] {8, 9, 10})); + + configComponent.setConfig(TransmissionType.ITEM, new byte[] {5, 4, 0, 3, 2, 1}); - ejectorComponent = new TileComponentEjector(this, sideOutputs.get(5)); + upgradeComponent = new TileComponentUpgrade(this, 0); + ejectorComponent = new TileComponentEjector(this, configComponent.getOutputs(TransmissionType.ITEM).get(5)); } public TileEntityFactory(FactoryTier type, MachineType machine) @@ -157,7 +159,6 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I factory.redstone = redstone; factory.redstoneLastTick = redstoneLastTick; factory.doAutoSync = doAutoSync; - factory.components = components; //Electric factory.electricityStored = electricityStored; @@ -168,7 +169,6 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I factory.sound = sound; //Factory - factory.sideConfig = sideConfig; for(int i = 0; i < tier.processes; i++) { @@ -189,7 +189,7 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I factory.upgradeComponent.tileEntity = factory; factory.ejectorComponent = ejectorComponent; factory.ejectorComponent.tileEntity = factory; - factory.ejectorComponent.sideData = factory.sideOutputs.get(5); + factory.ejectorComponent.sideData = factory.configComponent.getOutputs(TransmissionType.ITEM).get(5); factory.ejectorComponent.trackers = new int[factory.ejectorComponent.sideData.availableSlots.length]; for(int i = 0; i < tier.processes+5; i++) @@ -676,11 +676,6 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I progress[i] = dataStream.readInt(); } - for(int i = 0; i < 6; i++) - { - sideConfig[i] = dataStream.readByte(); - } - if(dataStream.readBoolean()) { gasTank.setGas(new GasStack(dataStream.readInt(), dataStream.readInt())); @@ -727,14 +722,6 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I progress[i] = nbtTags.getInteger("progress" + i); } - if(nbtTags.hasKey("sideDataStored")) - { - for(int i = 0; i < 6; i++) - { - sideConfig[i] = nbtTags.getByte("config"+i); - } - } - gasTank.read(nbtTags.getCompoundTag("gasTank")); } @@ -754,13 +741,6 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I nbtTags.setInteger("progress" + i, progress[i]); } - nbtTags.setBoolean("sideDataStored", true); - - for(int i = 0; i < 6; i++) - { - nbtTags.setByte("config"+i, sideConfig[i]); - } - nbtTags.setTag("gasTank", gasTank.write(new NBTTagCompound())); } @@ -776,7 +756,6 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I data.add(sorting); data.add(upgraded); data.add(progress); - data.add(sideConfig); if(gasTank.getGas() != null) { @@ -909,7 +888,7 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I @Override public int[] getAccessibleSlotsFromSide(int side) { - return sideOutputs.get(sideConfig[MekanismUtils.getBaseOrientation(side, facing)]).availableSlots; + return configComponent.getOutput(TransmissionType.ITEM, side, facing).availableSlots; } @Override @@ -919,15 +898,9 @@ public class TileEntityFactory extends TileEntityNoisyElectricBlock implements I } @Override - public ArrayList getSideData() + public TileComponentConfig getConfig() { - return sideOutputs; - } - - @Override - public byte[] getConfiguration() - { - return sideConfig; + return configComponent; } @Override diff --git a/src/main/java/mekanism/common/tile/TileEntityMetallurgicInfuser.java b/src/main/java/mekanism/common/tile/TileEntityMetallurgicInfuser.java index 6e83fa87b..8160f7810 100644 --- a/src/main/java/mekanism/common/tile/TileEntityMetallurgicInfuser.java +++ b/src/main/java/mekanism/common/tile/TileEntityMetallurgicInfuser.java @@ -1,5 +1,7 @@ package mekanism.common.tile; +import io.netty.buffer.ByteBuf; + import java.util.ArrayList; import mekanism.api.Coord4D; @@ -9,6 +11,7 @@ import mekanism.api.MekanismConfig.usage; import mekanism.api.Range4D; import mekanism.api.infuse.InfuseObject; import mekanism.api.infuse.InfuseRegistry; +import mekanism.api.transmitters.TransmissionType; import mekanism.common.InfuseStorage; import mekanism.common.Mekanism; import mekanism.common.MekanismItems; @@ -16,8 +19,8 @@ import mekanism.common.PacketHandler; import mekanism.common.SideData; import mekanism.common.Upgrade; import mekanism.common.base.IEjector; -import mekanism.common.base.IInvConfiguration; import mekanism.common.base.IRedstoneControl; +import mekanism.common.base.ISideConfiguration; import mekanism.common.base.IUpgradeTile; import mekanism.common.block.BlockMachine.MachineType; import mekanism.common.network.PacketTileEntity.TileEntityMessage; @@ -25,33 +28,24 @@ import mekanism.common.recipe.RecipeHandler; import mekanism.common.recipe.RecipeHandler.Recipe; import mekanism.common.recipe.inputs.InfusionInput; import mekanism.common.recipe.machines.MetallurgicInfuserRecipe; +import mekanism.common.tile.component.TileComponentConfig; import mekanism.common.tile.component.TileComponentEjector; import mekanism.common.tile.component.TileComponentUpgrade; import mekanism.common.util.ChargeUtils; import mekanism.common.util.InventoryUtils; import mekanism.common.util.MekanismUtils; - import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import cpw.mods.fml.common.Optional.Interface; import cpw.mods.fml.common.Optional.Method; - -import io.netty.buffer.ByteBuf; - import dan200.computercraft.api.lua.ILuaContext; import dan200.computercraft.api.lua.LuaException; import dan200.computercraft.api.peripheral.IComputerAccess; import dan200.computercraft.api.peripheral.IPeripheral; @Interface(iface = "dan200.computercraft.api.peripheral.IPeripheral", modid = "ComputerCraft") -public class TileEntityMetallurgicInfuser extends TileEntityNoisyElectricBlock implements IPeripheral, IInvConfiguration, IUpgradeTile, IRedstoneControl +public class TileEntityMetallurgicInfuser extends TileEntityNoisyElectricBlock implements IPeripheral, ISideConfiguration, IUpgradeTile, IRedstoneControl { - /** This machine's side configuration. */ - public byte[] sideConfig = new byte[] {2, 1, 0, 5, 3, 4}; - - /** An arraylist of SideData for this machine. */ - public ArrayList sideOutputs = new ArrayList(); - /** The maxiumum amount of infuse this machine can store. */ public int MAX_INFUSE = 1000; @@ -86,22 +80,29 @@ public class TileEntityMetallurgicInfuser extends TileEntityNoisyElectricBlock i /** This machine's current RedstoneControl type. */ public RedstoneControl controlType = RedstoneControl.DISABLED; - public TileComponentUpgrade upgradeComponent = new TileComponentUpgrade(this, 4); + public TileComponentUpgrade upgradeComponent; public TileComponentEjector ejectorComponent; + public TileComponentConfig configComponent; public TileEntityMetallurgicInfuser() { super("metalinfuser", "MetallurgicInfuser", MachineType.METALLURGIC_INFUSER.baseEnergy); - sideOutputs.add(new SideData(EnumColor.GREY, InventoryUtils.EMPTY)); - sideOutputs.add(new SideData(EnumColor.ORANGE, new int[] {0})); - sideOutputs.add(new SideData(EnumColor.PURPLE, new int[] {1})); - sideOutputs.add(new SideData(EnumColor.DARK_RED, new int[] {2})); - sideOutputs.add(new SideData(EnumColor.DARK_BLUE, new int[] {3})); - sideOutputs.add(new SideData(EnumColor.DARK_GREEN, new int[] {4})); + configComponent = new TileComponentConfig(this, TransmissionType.ITEM); + + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.GREY, InventoryUtils.EMPTY)); + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.ORANGE, new int[] {0})); + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.PURPLE, new int[] {1})); + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.DARK_RED, new int[] {2})); + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.DARK_BLUE, new int[] {3})); + configComponent.addOutput(TransmissionType.ITEM, new SideData(EnumColor.DARK_GREEN, new int[] {4})); + + configComponent.setConfig(TransmissionType.ITEM, new byte[] {2, 1, 0, 5, 3, 4}); inventory = new ItemStack[5]; - ejectorComponent = new TileComponentEjector(this, sideOutputs.get(4)); + + upgradeComponent = new TileComponentUpgrade(this, 3); + ejectorComponent = new TileComponentEjector(this, configComponent.getOutputs(TransmissionType.ITEM).get(4)); } @Override @@ -295,14 +296,6 @@ public class TileEntityMetallurgicInfuser extends TileEntityNoisyElectricBlock i infuseStored.amount = nbtTags.getInteger("infuseStored"); controlType = RedstoneControl.values()[nbtTags.getInteger("controlType")]; infuseStored.type = InfuseRegistry.get(nbtTags.getString("type")); - - if(nbtTags.hasKey("sideDataStored")) - { - for(int i = 0; i < 6; i++) - { - sideConfig[i] = nbtTags.getByte("config"+i); - } - } } @Override @@ -324,11 +317,6 @@ public class TileEntityMetallurgicInfuser extends TileEntityNoisyElectricBlock i } nbtTags.setBoolean("sideDataStored", true); - - for(int i = 0; i < 6; i++) - { - nbtTags.setByte("config"+i, sideConfig[i]); - } } @Override @@ -348,11 +336,6 @@ public class TileEntityMetallurgicInfuser extends TileEntityNoisyElectricBlock i controlType = RedstoneControl.values()[dataStream.readInt()]; infuseStored.type = InfuseRegistry.get(PacketHandler.readString(dataStream)); - for(int i = 0; i < 6; i++) - { - sideConfig[i] = dataStream.readByte(); - } - if(updateDelay == 0 && clientActive != isActive) { updateDelay = general.UPDATE_DELAY; @@ -379,7 +362,6 @@ public class TileEntityMetallurgicInfuser extends TileEntityNoisyElectricBlock i data.add("null"); } - data.add(sideConfig); return data; } @@ -443,7 +425,7 @@ public class TileEntityMetallurgicInfuser extends TileEntityNoisyElectricBlock i @Override public int[] getAccessibleSlotsFromSide(int side) { - return sideOutputs.get(sideConfig[MekanismUtils.getBaseOrientation(side, facing)]).availableSlots; + return configComponent.getOutput(TransmissionType.ITEM, side, facing).availableSlots; } @Override @@ -473,15 +455,9 @@ public class TileEntityMetallurgicInfuser extends TileEntityNoisyElectricBlock i } @Override - public ArrayList getSideData() + public TileComponentConfig getConfig() { - return sideOutputs; - } - - @Override - public byte[] getConfiguration() - { - return sideConfig; + return configComponent; } @Override diff --git a/src/main/java/mekanism/common/tile/TileEntityPRC.java b/src/main/java/mekanism/common/tile/TileEntityPRC.java index e02c5836a..d44ce797a 100644 --- a/src/main/java/mekanism/common/tile/TileEntityPRC.java +++ b/src/main/java/mekanism/common/tile/TileEntityPRC.java @@ -14,6 +14,7 @@ import mekanism.api.gas.GasStack; import mekanism.api.gas.GasTank; import mekanism.api.gas.IGasHandler; import mekanism.api.gas.ITubeConnection; +import mekanism.api.transmitters.TransmissionType; import mekanism.common.SideData; import mekanism.common.Upgrade; import mekanism.common.base.IDropperHandler; @@ -24,6 +25,7 @@ import mekanism.common.recipe.RecipeHandler; import mekanism.common.recipe.inputs.PressurizedInput; import mekanism.common.recipe.machines.PressurizedRecipe; import mekanism.common.recipe.outputs.PressurizedProducts; +import mekanism.common.tile.component.TileComponentConfig; import mekanism.common.tile.component.TileComponentEjector; import mekanism.common.tile.component.TileComponentUpgrade; import mekanism.common.util.ChargeUtils; @@ -57,18 +59,20 @@ public class TileEntityPRC extends TileEntityBasicMachine sideConfigs = new ArrayList(); + public List> sideOutputs = new ArrayList>(); + + public List transmissions = new ArrayList(); + + public TileComponentConfig(TileEntityContainerBlock tile, TransmissionType... types) + { + tileEntity = tile; + transmissions = Arrays.asList(types); + + tile.components.add(this); + } + + public void setConfig(TransmissionType type, byte[] config) + { + sideConfigs.set(type.ordinal(), config); + } + + public void addOutput(TransmissionType type, SideData data) + { + if(sideOutputs.get(type.ordinal()) == null) + { + sideOutputs.set(type.ordinal(), new ArrayList()); + } + + sideOutputs.get(type.ordinal()).add(data); + } + + public ArrayList getOutputs(TransmissionType type) + { + return sideOutputs.get(type.ordinal()); + } + + public byte[] getConfig(TransmissionType type) + { + return sideConfigs.get(type.ordinal()); + } + + public SideData getOutput(TransmissionType type, int side, int facing) + { + return getOutputs(type).get(getConfig(type)[MekanismUtils.getBaseOrientation(side, facing)]); + } + + public SideData getOutput(TransmissionType type, int side) + { + return getOutputs(type).get(getConfig(type)[side]); + } + + public boolean supports(TransmissionType type) + { + return transmissions.contains(type); + } + + @Override + public void tick() {} + + @Override + public void read(NBTTagCompound nbtTags) + { + if(nbtTags.getBoolean("sideDataStored")) + { + for(TransmissionType type : transmissions) + { + sideConfigs.set(type.ordinal(), nbtTags.getByteArray("config" + type.ordinal())); + } + } + } + + @Override + public void read(ByteBuf dataStream) + { + for(TransmissionType type : transmissions) + { + dataStream.readBytes(sideConfigs.get(type.ordinal())); + } + } + + @Override + public void write(NBTTagCompound nbtTags) + { + for(TransmissionType type : transmissions) + { + nbtTags.setByteArray("config" + type.ordinal(), sideConfigs.get(type.ordinal())); + } + + nbtTags.setBoolean("sideDataStored", true); + } + + @Override + public void write(ArrayList data) + { + for(TransmissionType type : transmissions) + { + data.add(sideConfigs.get(type.ordinal())); + } + } +} diff --git a/src/main/java/mekanism/common/tile/component/TileComponentEjector.java b/src/main/java/mekanism/common/tile/component/TileComponentEjector.java index 7ac35160c..f51e34d4e 100644 --- a/src/main/java/mekanism/common/tile/component/TileComponentEjector.java +++ b/src/main/java/mekanism/common/tile/component/TileComponentEjector.java @@ -1,29 +1,29 @@ package mekanism.common.tile.component; +import io.netty.buffer.ByteBuf; + import java.util.ArrayList; import java.util.List; import mekanism.api.Coord4D; import mekanism.api.EnumColor; +import mekanism.api.transmitters.TransmissionType; import mekanism.common.SideData; import mekanism.common.base.IEjector; -import mekanism.common.base.IInvConfiguration; import mekanism.common.base.ILogisticalTransporter; +import mekanism.common.base.ISideConfiguration; import mekanism.common.base.ITileComponent; import mekanism.common.content.transporter.TransporterManager; import mekanism.common.tile.TileEntityContainerBlock; import mekanism.common.util.InventoryUtils; import mekanism.common.util.MekanismUtils; import mekanism.common.util.TransporterUtils; - import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -import io.netty.buffer.ByteBuf; - public class TileComponentEjector implements ITileComponent, IEjector { public TileEntityContainerBlock tileEntity; @@ -91,11 +91,11 @@ public class TileComponentEjector implements ITileComponent, IEjector List outputSides = new ArrayList(); - IInvConfiguration configurable = (IInvConfiguration)tileEntity; + ISideConfiguration configurable = (ISideConfiguration)tileEntity; - for(int i = 0; i < configurable.getConfiguration().length; i++) + for(int i = 0; i < configurable.getConfig().getConfig(TransmissionType.ITEM).length; i++) { - if(configurable.getConfiguration()[i] == configurable.getSideData().indexOf(sideData)) + if(configurable.getConfig().getConfig(TransmissionType.ITEM)[i] == configurable.getConfig().getOutputs(TransmissionType.ITEM).indexOf(sideData)) { outputSides.add(ForgeDirection.getOrientation(MekanismUtils.getBaseOrientation(i, tileEntity.facing))); } diff --git a/src/main/java/mekanism/common/util/InventoryUtils.java b/src/main/java/mekanism/common/util/InventoryUtils.java index 119eb1a50..d355df309 100644 --- a/src/main/java/mekanism/common/util/InventoryUtils.java +++ b/src/main/java/mekanism/common/util/InventoryUtils.java @@ -2,7 +2,7 @@ package mekanism.common.util; import mekanism.api.EnumColor; import mekanism.api.util.StackUtils; -import mekanism.common.base.IInvConfiguration; +import mekanism.common.base.ISideConfiguration; import mekanism.common.content.transporter.Finder; import mekanism.common.content.transporter.InvStack; import mekanism.common.tile.TileEntityBin; @@ -366,9 +366,9 @@ public final class InventoryUtils return ((TileEntityLogisticalSorter)tileEntity).canSendHome(itemStack); } - if(!force && tileEntity instanceof IInvConfiguration) + if(!force && tileEntity instanceof ISideConfiguration) { - IInvConfiguration config = (IInvConfiguration)tileEntity; + ISideConfiguration config = (ISideConfiguration)tileEntity; int tileSide = config.getOrientation(); EnumColor configColor = config.getEjector().getInputColor(ForgeDirection.getOrientation(MekanismUtils.getBaseOrientation(side, tileSide)).getOpposite()); diff --git a/src/main/java/mekanism/common/util/MekanismUtils.java b/src/main/java/mekanism/common/util/MekanismUtils.java index 4dfd51254..c658ba429 100644 --- a/src/main/java/mekanism/common/util/MekanismUtils.java +++ b/src/main/java/mekanism/common/util/MekanismUtils.java @@ -23,6 +23,7 @@ import mekanism.api.MekanismConfig.client; import mekanism.api.MekanismConfig.general; import mekanism.api.gas.Gas; import mekanism.api.gas.GasStack; +import mekanism.api.transmitters.TransmissionType; import mekanism.api.util.UnitDisplayUtils; import mekanism.api.util.UnitDisplayUtils.ElectricUnit; import mekanism.api.util.UnitDisplayUtils.TemperatureUnit; @@ -39,9 +40,9 @@ import mekanism.common.Version; import mekanism.common.base.IActiveState; import mekanism.common.base.IFactory; import mekanism.common.base.IFactory.RecipeType; -import mekanism.common.base.IInvConfiguration; import mekanism.common.base.IModule; import mekanism.common.base.IRedstoneControl; +import mekanism.common.base.ISideConfiguration; import mekanism.common.base.IUpgradeTile; import mekanism.common.inventory.container.ContainerElectricChest; import mekanism.common.item.ItemBlockBasic; @@ -580,20 +581,21 @@ public final class MekanismUtils /** * Increments the output type of a machine's side. * @param config - configurable machine + * @param type - the TransmissionType to modify * @param side - side to increment output of */ - public static void incrementOutput(IInvConfiguration config, int side) + public static void incrementOutput(ISideConfiguration config, TransmissionType type, int side) { - int max = config.getSideData().size()-1; - int current = config.getSideData().indexOf(config.getSideData().get(config.getConfiguration()[side])); + int max = config.getConfig().getOutputs(type).size()-1; + int current = config.getConfig().getOutputs(type).indexOf(config.getConfig().getOutputs(type).get(config.getConfig().getConfig(type)[side])); if(current < max) { - config.getConfiguration()[side] = (byte)(current+1); + config.getConfig().getConfig(type)[side] = (byte)(current+1); } else if(current == max) { - config.getConfiguration()[side] = 0; + config.getConfig().getConfig(type)[side] = 0; } TileEntity tile = (TileEntity)config; @@ -605,20 +607,21 @@ public final class MekanismUtils /** * Decrements the output type of a machine's side. * @param config - configurable machine + * @param type - the TransmissionType to modify * @param side - side to increment output of */ - public static void decrementOutput(IInvConfiguration config, int side) + public static void decrementOutput(ISideConfiguration config, TransmissionType type, int side) { - int max = config.getSideData().size()-1; - int current = config.getSideData().indexOf(config.getSideData().get(config.getConfiguration()[side])); + int max = config.getConfig().getOutputs(type).size()-1; + int current = config.getConfig().getOutputs(type).indexOf(config.getConfig().getOutputs(type).get(config.getConfig().getConfig(type)[side])); if(current > 0) { - config.getConfiguration()[side] = (byte)(current-1); + config.getConfig().getConfig(type)[side] = (byte)(current-1); } else if(current == 0) { - config.getConfiguration()[side] = (byte)max; + config.getConfig().getConfig(type)[side] = (byte)max; } TileEntity tile = (TileEntity)config; diff --git a/src/main/resources/assets/mekanism/gui/GuiRobitMain.png b/src/main/resources/assets/mekanism/gui/GuiRobitMain.png index d1ffd3d84..a01146df7 100644 Binary files a/src/main/resources/assets/mekanism/gui/GuiRobitMain.png and b/src/main/resources/assets/mekanism/gui/GuiRobitMain.png differ diff --git a/src/main/resources/assets/mekanism/gui/elements/GuiFluidsTab.png b/src/main/resources/assets/mekanism/gui/elements/GuiFluidsTab.png new file mode 100644 index 000000000..2a1c1ad64 Binary files /dev/null and b/src/main/resources/assets/mekanism/gui/elements/GuiFluidsTab.png differ diff --git a/src/main/resources/assets/mekanism/gui/elements/GuiGasesTab.png b/src/main/resources/assets/mekanism/gui/elements/GuiGasesTab.png new file mode 100644 index 000000000..2bac68734 Binary files /dev/null and b/src/main/resources/assets/mekanism/gui/elements/GuiGasesTab.png differ diff --git a/src/main/resources/assets/mekanism/gui/elements/GuiHeatTab.png b/src/main/resources/assets/mekanism/gui/elements/GuiHeatTab.png index ca54790d6..691a64f26 100644 Binary files a/src/main/resources/assets/mekanism/gui/elements/GuiHeatTab.png and b/src/main/resources/assets/mekanism/gui/elements/GuiHeatTab.png differ diff --git a/src/main/resources/assets/mekanism/gui/elements/GuiItemsTab.png b/src/main/resources/assets/mekanism/gui/elements/GuiItemsTab.png new file mode 100644 index 000000000..795251c4b Binary files /dev/null and b/src/main/resources/assets/mekanism/gui/elements/GuiItemsTab.png differ diff --git a/src/main/resources/assets/mekanism/textures/blocks/models/PressurizedTube.png b/src/main/resources/assets/mekanism/textures/blocks/models/PressurizedTube.png index c9ccc2682..ae840c2af 100644 Binary files a/src/main/resources/assets/mekanism/textures/blocks/models/PressurizedTube.png and b/src/main/resources/assets/mekanism/textures/blocks/models/PressurizedTube.png differ diff --git a/src/main/resources/assets/mekanism/textures/blocks/overlay/EnergyOverlay.png b/src/main/resources/assets/mekanism/textures/blocks/overlay/EnergyOverlay.png new file mode 100644 index 000000000..171ba3152 Binary files /dev/null and b/src/main/resources/assets/mekanism/textures/blocks/overlay/EnergyOverlay.png differ diff --git a/src/main/resources/assets/mekanism/textures/blocks/overlay/FluidsOverlay.png b/src/main/resources/assets/mekanism/textures/blocks/overlay/FluidsOverlay.png new file mode 100644 index 000000000..b3c0f2eec Binary files /dev/null and b/src/main/resources/assets/mekanism/textures/blocks/overlay/FluidsOverlay.png differ diff --git a/src/main/resources/assets/mekanism/textures/blocks/overlay/GasesOverlay.png b/src/main/resources/assets/mekanism/textures/blocks/overlay/GasesOverlay.png new file mode 100644 index 000000000..d6aeb76bc Binary files /dev/null and b/src/main/resources/assets/mekanism/textures/blocks/overlay/GasesOverlay.png differ diff --git a/src/main/resources/assets/mekanism/textures/blocks/overlay/HeatOverlay.png b/src/main/resources/assets/mekanism/textures/blocks/overlay/HeatOverlay.png new file mode 100644 index 000000000..5d3995265 Binary files /dev/null and b/src/main/resources/assets/mekanism/textures/blocks/overlay/HeatOverlay.png differ diff --git a/src/main/resources/assets/mekanism/textures/blocks/overlay/ItemsOverlay.png b/src/main/resources/assets/mekanism/textures/blocks/overlay/ItemsOverlay.png new file mode 100644 index 000000000..e29835979 Binary files /dev/null and b/src/main/resources/assets/mekanism/textures/blocks/overlay/ItemsOverlay.png differ