From 9915d18baaaecbf62d392031c976ff9717e6ff96 Mon Sep 17 00:00:00 2001 From: "Aidan C. Brady" Date: Mon, 17 Feb 2014 00:14:02 -0500 Subject: [PATCH] Add visible configuration to Metallurgic Infuser, made Chemical Crystalizer auto-eject and gave it inventory configuration --- .../client/gui/GuiChemicalCrystalizer.java | 3 +- .../client/render/MekanismRenderer.java | 3 + .../tileentity/RenderChemicalCrystalizer.java | 5 +- .../tileentity/RenderConfigurableMachine.java | 14 ++++- .../tileentity/RenderMetallurgicInfuser.java | 5 +- .../tile/TileEntityChemicalCrystalizer.java | 55 +++++++++++++++--- .../mekanism/gui/GuiChemicalCrystalizer.png | Bin 4271 -> 4341 bytes .../gui/nei/GuiChemicalCrystalizer.png | Bin 4266 -> 4339 bytes 8 files changed, 69 insertions(+), 16 deletions(-) diff --git a/common/mekanism/client/gui/GuiChemicalCrystalizer.java b/common/mekanism/client/gui/GuiChemicalCrystalizer.java index 2b49e54ae..d2f3920a8 100644 --- a/common/mekanism/client/gui/GuiChemicalCrystalizer.java +++ b/common/mekanism/client/gui/GuiChemicalCrystalizer.java @@ -4,7 +4,6 @@ import java.util.ArrayList; import java.util.List; import mekanism.api.Coord4D; -import mekanism.api.EnumColor; import mekanism.api.ListUtils; import mekanism.api.gas.Gas; import mekanism.api.gas.GasStack; @@ -24,7 +23,6 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.oredict.OreDictionary; -import org.apache.commons.lang3.text.WordUtils; import org.lwjgl.opengl.GL11; import cpw.mods.fml.relauncher.Side; @@ -52,6 +50,7 @@ public class GuiChemicalCrystalizer extends GuiMekanism guiElements.add(new GuiRedstoneControl(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiChemicalCrystalizer.png"))); guiElements.add(new GuiPowerBar(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiChemicalCrystalizer.png"), 160, 23)); + guiElements.add(new GuiConfigurationTab(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiChemicalCrystalizer.png"))); guiElements.add(new GuiEnergyInfo(new IInfoHandler() { @Override public List getInfo() diff --git a/common/mekanism/client/render/MekanismRenderer.java b/common/mekanism/client/render/MekanismRenderer.java index 5460d0ec6..c49dd12e3 100644 --- a/common/mekanism/client/render/MekanismRenderer.java +++ b/common/mekanism/client/render/MekanismRenderer.java @@ -7,6 +7,7 @@ import mekanism.api.EnumColor; import mekanism.api.gas.Gas; import mekanism.api.gas.GasRegistry; import mekanism.api.gas.OreGas; +import mekanism.client.render.tileentity.RenderConfigurableMachine; import mekanism.common.ISpecialBounds; import mekanism.common.ObfuscatedNames; import mekanism.common.util.MekanismUtils; @@ -50,6 +51,8 @@ public class MekanismRenderer private static float lightmapLastY; private static boolean optifineBreak = false; + public static RenderConfigurableMachine machineRenderer = new RenderConfigurableMachine(); + public static void init() { MinecraftForge.EVENT_BUS.register(new MekanismRenderer()); diff --git a/common/mekanism/client/render/tileentity/RenderChemicalCrystalizer.java b/common/mekanism/client/render/tileentity/RenderChemicalCrystalizer.java index a4e693800..3cdfb4601 100644 --- a/common/mekanism/client/render/tileentity/RenderChemicalCrystalizer.java +++ b/common/mekanism/client/render/tileentity/RenderChemicalCrystalizer.java @@ -1,6 +1,7 @@ package mekanism.client.render.tileentity; import mekanism.client.model.ModelChemicalCrystalizer; +import mekanism.client.render.MekanismRenderer; import mekanism.common.tile.TileEntityChemicalCrystalizer; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; @@ -24,7 +25,7 @@ public class RenderChemicalCrystalizer extends TileEntitySpecialRenderer } private void renderAModelAt(TileEntityChemicalCrystalizer tileEntity, double x, double y, double z, float partialTick) - { + { GL11.glPushMatrix(); GL11.glTranslatef((float)x + 0.5F, (float)y + 1.5F, (float)z + 0.5F); bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "ChemicalCrystalizer.png")); @@ -50,5 +51,7 @@ public class RenderChemicalCrystalizer extends TileEntitySpecialRenderer GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); model.renderWithRotation(0.0625F, tileEntity.spin); GL11.glPopMatrix(); + + MekanismRenderer.machineRenderer.renderAModelAt(tileEntity, x, y, z, partialTick); } } diff --git a/common/mekanism/client/render/tileentity/RenderConfigurableMachine.java b/common/mekanism/client/render/tileentity/RenderConfigurableMachine.java index c3ae01cba..5325fdfb3 100644 --- a/common/mekanism/client/render/tileentity/RenderConfigurableMachine.java +++ b/common/mekanism/client/render/tileentity/RenderConfigurableMachine.java @@ -2,18 +2,17 @@ package mekanism.client.render.tileentity; import java.util.HashMap; -import mekanism.api.EnumColor; import mekanism.api.Coord4D; +import mekanism.api.EnumColor; import mekanism.client.render.MekanismRenderer; import mekanism.client.render.MekanismRenderer.DisplayInteger; import mekanism.client.render.MekanismRenderer.Model3D; import mekanism.common.IInvConfiguration; import mekanism.common.item.ItemConfigurator; import mekanism.common.util.MekanismUtils; -import mekanism.common.util.MekanismUtils.ResourceType; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.tileentity.TileEntityRenderer; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -36,6 +35,11 @@ public class RenderConfigurableMachine extends TileEntitySpecialRenderer private HashMap> cachedOverlays = new HashMap>(); + public RenderConfigurableMachine() + { + tileEntityRenderer = TileEntityRenderer.instance; + } + @Override public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTick) { @@ -44,6 +48,8 @@ public class RenderConfigurableMachine extends TileEntitySpecialRenderer public void renderAModelAt(IInvConfiguration configurable, double x, double y, double z, float partialTick) { + GL11.glPushMatrix(); + TileEntity tileEntity = (TileEntity)configurable; EntityPlayer player = mc.thePlayer; World world = mc.thePlayer.worldObj; @@ -75,6 +81,8 @@ public class RenderConfigurableMachine extends TileEntitySpecialRenderer pop(); } } + + GL11.glPopMatrix(); } private void pop() diff --git a/common/mekanism/client/render/tileentity/RenderMetallurgicInfuser.java b/common/mekanism/client/render/tileentity/RenderMetallurgicInfuser.java index ac16d8148..b6aa50d4e 100644 --- a/common/mekanism/client/render/tileentity/RenderMetallurgicInfuser.java +++ b/common/mekanism/client/render/tileentity/RenderMetallurgicInfuser.java @@ -1,6 +1,7 @@ package mekanism.client.render.tileentity; import mekanism.client.model.ModelMetallurgicInfuser; +import mekanism.client.render.MekanismRenderer; import mekanism.common.tile.TileEntityMetallurgicInfuser; import mekanism.common.util.MekanismUtils; import mekanism.common.util.MekanismUtils.ResourceType; @@ -24,7 +25,7 @@ public class RenderMetallurgicInfuser extends TileEntitySpecialRenderer } private void renderAModelAt(TileEntityMetallurgicInfuser tileEntity, double x, double y, double z, float partialTick) - { + { GL11.glPushMatrix(); GL11.glTranslatef((float)x + 0.5F, (float)y + 1.5F, (float)z + 0.5F); @@ -41,5 +42,7 @@ public class RenderMetallurgicInfuser extends TileEntitySpecialRenderer GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); model.render(0.0625F); GL11.glPopMatrix(); + + MekanismRenderer.machineRenderer.renderAModelAt(tileEntity, x, y, z, partialTick); } } \ No newline at end of file diff --git a/common/mekanism/common/tile/TileEntityChemicalCrystalizer.java b/common/mekanism/common/tile/TileEntityChemicalCrystalizer.java index 3ecc5793e..2d645ebdd 100644 --- a/common/mekanism/common/tile/TileEntityChemicalCrystalizer.java +++ b/common/mekanism/common/tile/TileEntityChemicalCrystalizer.java @@ -3,6 +3,7 @@ package mekanism.common.tile; import java.util.ArrayList; import mekanism.api.Coord4D; +import mekanism.api.EnumColor; import mekanism.api.gas.Gas; import mekanism.api.gas.GasRegistry; import mekanism.api.gas.GasStack; @@ -13,37 +14,40 @@ import mekanism.api.gas.IGasItem; import mekanism.api.gas.ITubeConnection; import mekanism.client.sound.IHasSound; import mekanism.common.IActiveState; +import mekanism.common.IEjector; +import mekanism.common.IInvConfiguration; import mekanism.common.IRedstoneControl; import mekanism.common.Mekanism; import mekanism.common.PacketHandler; import mekanism.common.PacketHandler.Transmission; +import mekanism.common.SideData; import mekanism.common.block.BlockMachine.MachineType; import mekanism.common.network.PacketTileEntity; import mekanism.common.recipe.RecipeHandler; +import mekanism.common.tile.component.TileComponentEjector; import mekanism.common.util.ChargeUtils; import mekanism.common.util.InventoryUtils; import mekanism.common.util.MekanismUtils; -import mekanism.common.util.PipeUtils; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.ForgeDirection; -import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; import com.google.common.io.ByteArrayDataInput; -public class TileEntityChemicalCrystalizer extends TileEntityElectricBlock implements IActiveState, IGasHandler, ITubeConnection, IRedstoneControl, IHasSound -{ - public GasTank inputTank = new GasTank(MAX_GAS); - +public class TileEntityChemicalCrystalizer extends TileEntityElectricBlock implements IActiveState, IGasHandler, ITubeConnection, IRedstoneControl, IHasSound, IInvConfiguration +{ public static final int MAX_GAS = 10000; public static final int MAX_FLUID = 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 static int WATER_USAGE = 5; public int updateDelay; @@ -69,10 +73,19 @@ public class TileEntityChemicalCrystalizer extends TileEntityElectricBlock imple /** This machine's current RedstoneControl type. */ public RedstoneControl controlType = RedstoneControl.DISABLED; + public TileComponentEjector ejectorComponent; + public TileEntityChemicalCrystalizer() { super("ChemicalCrystalizer", MachineType.CHEMICAL_CRYSTALIZER.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})); + inventory = new ItemStack[3]; + ejectorComponent = new TileComponentEjector(this, sideOutputs.get(1)); } @Override @@ -433,4 +446,28 @@ public class TileEntityChemicalCrystalizer extends TileEntityElectricBlock imple { return 1; } + + @Override + public ArrayList getSideData() + { + return sideOutputs; + } + + @Override + public byte[] getConfiguration() + { + return sideConfig; + } + + @Override + public int getOrientation() + { + return facing; + } + + @Override + public IEjector getEjector() + { + return ejectorComponent; + } } diff --git a/resources/assets/mekanism/gui/GuiChemicalCrystalizer.png b/resources/assets/mekanism/gui/GuiChemicalCrystalizer.png index b518b6c411ccb22ad1f354e1711719fae9eb03dd..7d04f546ad03e1f72b5cc51ad493c4c76aaed2ed 100644 GIT binary patch delta 2872 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 K_7(4?T=^Fnx!r33 diff --git a/resources/assets/mekanism/gui/nei/GuiChemicalCrystalizer.png b/resources/assets/mekanism/gui/nei/GuiChemicalCrystalizer.png index caf83c97443e269651e05de2b34d5d04fde24610..8340ad259da8c4124d99bafb8002fefe859b1545 100644 GIT binary patch delta 2866 zcmcJQdpuNI8^`zFP0eg~GcnGo7{!!JF}jdTwhp3_&S?ns)*K-fk;vViNsbt0B%)H1 zE=oAY?c_F!gefG~A`(LG#>}{kclUWa|Gekl_g(+2=kxnxt>^cB*7K|<>NDzjbQ~IM zYiU6b0>`>(o@+aQ0(yV7Nmy@Jf;()HxnG}lTjvAKB89U}5#Ce?<77@<ol|EA5er+9gx-Fd3!6I&Rrvyd`9)Lxmr=#~G# zYfm@MnAFjA^Umyq{dM2ZaleNySS^=}x-xAyqRZnhaSBGp#!?Sz&$aC_^8a<4TeA@E zot-UU8@F0evUpWhRRxm%{{GLm%s0mdg!w%j=|#$?Qt`iMqd@>n1!(gAyHvkuBdKQ`dqS^B32E4~yP(1t|zLaQw zdy@NMXgMX^ajC=hm^ZinPCc$y<9Jjf?N2Ca<8o#A>*}tY-+IiL4%gQvS~8mJ)PA0q z$ZuR;NS|Nhd5y87;9b2Bpk=CR7IHnqB|y%m_idVq&YqdNyFKCcXe0Ha@c2^r3a3um zAnzCnAPKw)2 zxxILIQP7Z6uvl#UrQc1(Zw z)*cj-j68xWK>zxz{EC$$9-w24dyCI{M=JBVGt+^=u2aJoDxx-<^M*J2X8X89`qB#f zo|>}yq)YJni!`D-%MBtT1};h@l?o>AZzV|xTq}I+3ayiR{{||tC|Ud50Q?cPDJ~I= z>iTc%keG?4a*n5Ho-VRB``r=&gLyvZM;S4<%urxw+%*+ggUA7hRZo&J%0xu&zJ@gv^Sw+Or|k=I z#!6W7wa%#kAF8g>?vBTZ84dj?*Y`Z=R3^RZh_P`}b_l$U{B=7hN^E?Cw}Bxobmg^; z%rosdR<-D|WXUx!(D1pc5?%UekDcPav&f58Pw-;jVVxF$<-F z)j*EZT%Q_R_BnwqUn*>VQ+KtP9Y_sn#awu~LpIx`C%@Dso~rI6nVH^Ma=Y72Zr}XC z&{AxNqBNa>Hko%f`KzZK%N-ZO@gbZKGXr zV*CzubatjLdN-bxl$=Zf34v1!AN`grlW_B4H?ki+!e6dRD}Z%-D_n|E#ETqdDthT31h(3?|J{GJHBF@+SqjF>0^H3n!EXW$16-r{RZk? z^zhcHfS*ZBeJHB@S50|E%btdR!Epwle^kp!vjdX3uASj4O8kf472H=J3_$0j5f@G7 z;oM_(Cg;S{1H<;qY?AMEv2e}1bpnSF#frJ;{y%)Dqm4qAqLF(RYgl$|e(%yM?yw=-Mt9`2@8PBgC`rl9fTm-EYc(KV%?hJ21kUK7LF zw*e3Hz6N_qXZ!T%^UEh!_B{L2GU2Mq9Sbc}1%*Ice~tqbiOq~vG?|N(JXKbb9_aCM zrWJL3+3&;}8yoA;zV4&dqzx8$?V~|t+}WNo=S$08ql&(8o@(GTqRJ(#n=b#ZfMW>= zx@9O1n=oYy;SvGvfdhn_S9D4NUhLhaJoEJ=P_Ubk21%2UpPD3+2yvdEvAn$e^Wd!09z9A<)-ii7 z8KyGYGe$OW5|}tnGXqXS+Oalj&p`hv{eKl?EClEa6uq1{QG0eIi;R9bG;zYmnDxxI z^<<)V*9&nJIh#P2RXgCKvrf=|KEf(JGBWbi%i7x7zLP=nA6%r~N30+O{9zcv_o%rQ zVz#Rx{4J{AdLyqm2AdOh1#9;)u&Kp+y^0=4*rvzXZ4Syh{)iIO<@oX!~VYog#H(y_c?e*>xcQ~ftGmt zaGkkV1ScgUYx~YZY%ejna0BReeiDORz|y$z3zY$NWA6x4vhb|wQB>Z}+mh5r?QL^2 zF)=pQRy7UEQ%q~Kg>XGEU*i0Ld!+d6Idx7H(_Fgkjs6=d^I*TTVXO3$D8!F7GtvD; j_B0oiPXK=+WRgYZB!2h(m=&dX09&?J2P|`TGcNuc{vRus delta 2795 zcmbVOXIK;I7M>XfNvI(dv4Byk4FRR7ltEn}(m|zYAPS3$AVF|JDU-M$Rmkot0uhM~ z1Oag&V4-9w7Zp%ca0yY0XpoM<0D%a1@Y(zC?sNCK^JnHc-}AlaocBH7JKyyB;`QYR zVAPhp&-OqxIR4%$Y;DUbpg(~5+L^gW_ZJg7K`rMnkGnTwff}lng&NEJWm;>jI17ZpxR4?`Tz*ID zJ|Dh7hx_9YYMONLBpC7_r7R5T53~0#TPqq|;EgSq`KO+2$%T_9DTb1B9?juPvM zmYRW*q1G%e27{LUyP_N8A<$ne`d$pC^bwn|X6q#kl6wq=?5#z-?82Ak7XZp`fxB*53L z<9c@GhSe{A@{Hf9e8g}533Osy!;{tt6QDS;@JFYb5j|qG@Z&Rd?AyX-|EAqqqZ99+ zXr5{d>UuWWH0fmSkoZc4OL9MT8^@pt(S?`(PhL-}^ld@j9ll`(W=kjkeDH}+zwqPa zxes2YEa|&C^WRFGfgo_6QQYOio?q-MtMn*>+o0ROb{R6{VI8{s3UV^+fp-9k0y&N( zDMn8Wu&T+hDIJ9yAmgK#l5dz-0O2<|c#M6(pDA?B52D21ne&zMJF%4nRu*^|UEz-YdEYCy_x*dyxe4+v zumTtk;W$x+P#K_SvkwX(8p(Csj+n0NfvM{KL8zs!**2;=>9jmXxDVaJn}h#Ia$^B! zaDM5HvR}osl14i==Yg~i{Xw(-`I`0W!T7Y)ZXpK3{4+Wwi_6AfSA6R1?uMKzfY4*S z8CEg}&pxTnRv44`$5(DDATTr-p*D^LN#?H$$)rLk~>kGu@B&rZCFC~JK zl9EKb(ZdrwK7YH**3trxE$1Mdrh-1LZAQ?(Cagq*n{`%6QPDT+i2vA$I#r2SES}Fx z@iUbp$Q)(?9_>)gc~P)(_}o6F%&RuMtFz5#9mhkLt1^Gh!IPS|aJy9EDW6A)jgQax zX(J>*>X~|cw;s7E>aZM)gBk8Bh-lakrHmv24TGPC4(61H9j=O+> z^GV2gU3%s^8^c}U3p3-*uIN&l3QagW%X+OTGONX1{dVJ>s>>pw+T0^>kQ&xn4%7Gh)0!KtF_Nua86`Yu~`J~DbA zXl;M;)&K33#UW}`lzA0i6eIg}KVX%4XEoy#l&NKvo46FhQl3(yZlB25PbES`uFgeU z0&J#TKC_v=bD&-R;w_@aVT?{Aeajgm3oS-F4zs0$274us?w0@F@$4D7D{wNu=VZZV z-q1i}QhQ!CT3w90;~W4= zUk4y&B+VNYq)e!EO6Hru88> zxGICkkCrB^R+L&*;q#@yC-Y_da@Z`DH>!oCUw;gntYiWv>yQDJWMw9B>}#hk^AR0p ziUHYtB%KZuZWS6b+AzV|WZdT9W0)EmR%h{nhA0UPw5B)c6SPTS)8`^bQUvCJ)1ay~ zLj(J;bEQBzat=U_5_<~Yg!OEEeuVh+2m(Eg1rl9Jb_kUG%JV8BfG&-K-d_sNMT*l0 z-^8lM1i-7k;M9}e6sQPZzKl3ymyyK$0jrSFjs2SuSBoy(Wz1kN8>P;p2)huYTgAl` z(#7rQg)J>D(%@1L}Xnv5DwfTa#+C!c} z(Ea;=TNDuyNEyUJ#+WjHOAz`$8TtnV?I@F>cJT$TK5fr%opv9)q+Gs