From 3fecbb8b2b08382effaea7292590761e152c76ae Mon Sep 17 00:00:00 2001 From: Vexatos Date: Sat, 11 Jan 2014 17:33:31 +0100 Subject: [PATCH 1/4] Update de_DE.lang --- resources/assets/mekanism/lang/de_DE.lang | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/resources/assets/mekanism/lang/de_DE.lang b/resources/assets/mekanism/lang/de_DE.lang index d3782df67..c6edbc498 100644 --- a/resources/assets/mekanism/lang/de_DE.lang +++ b/resources/assets/mekanism/lang/de_DE.lang @@ -26,7 +26,8 @@ item.Jetpack.name=Jetpack item.ScubaTank.name=Taucherflasche item.GasMask.name=Gasmaske item.Dictionary.name=Lexikon -item.ElectrolyticCore.name=Elektrolytischer Kern +item.ElectrolyticCore.name=Elektrolysekern +item.CompressedRedstone.name=Komprimiertes Redstone //Gas Tank tile.GasTank.GasTank.name=Gastank @@ -78,16 +79,11 @@ tile.OreBlock.OsmiumOre.name=Osmiumerz tile.OreBlock.CopperOre.name=Kupfererz tile.OreBlock.TinOre.name=Zinnerz -//Transmitters -tile.Transmitter.PressurizedTube.name=Druckröhre -tile.Transmitter.UniversalCable.name=Universelles Kabel -tile.Transmitter.MechanicalPipe.name=Mechanisches Rohr -tile.Transmitter.LogisticalTransporter.name=Logistischer Transporter -tile.Transmitter.RestrictiveTransporter.name=Restriktiver Transporter -tile.Transmitter.DiversionTransporter.name=Diversionstransporter - item.MultipartTransmitter.PressurizedTube.name=Druckröhre -item.MultipartTransmitter.UniversalCable.name=Universelles Kabel +item.MultipartTransmitter.BasicUniversalCable.name=Universelles Basiskabel +item.MultipartTransmitter.AdvancedUniversalCable.name=Fortgeschrittenes Universelles Kabel +item.MultipartTransmitter.EliteUniversalCable.name=Universelles Elitekabel +item.MultipartTransmitter.UltimateUniversalCable.name=Ultimatives Universelles Kabel item.MultipartTransmitter.MechanicalPipe.name=Mechanisches Rohr item.MultipartTransmitter.LogisticalTransporter.name=Logistischer Transporter item.MultipartTransmitter.RestrictiveTransporter.name=Restriktiver Transporter @@ -155,16 +151,20 @@ item.tinIngot.name=Zinnbarren gas.hydrogen=Wasserstoff gas.oxygen=Sauerstoff gas.water=Wasserdampf +gas.chlorine=Chlor gas.sulfurDioxideGas=Schwefeldioxid gas.sulfurTrioxideGas=Schwefeltrioxid gas.sulfuricAcid=Schwefelsäure +gas.hydrogenChloride=Chlorwasserstoff //Fluids fluid.hydrogen=Flüssiger Wasserstoff fluid.oxygen=Flüssiger Sauerstoff +fluid.chlorine=Flüssiges Chlor fluid.sulfurDioxideGas=Flüssiges Schwefeldioxid fluid.sulfurTrioxideGas=Flüssiges Schwefeltrioxid fluid.sulfuricAcid=Flüssige Schwefelsäure +gas.hydrogenChloride=Flüssiger Chlorwasserstoff //Gui text gui.removeSpeedUpgrade=Entferne Geschwindigkeitsupgrade @@ -275,6 +275,7 @@ gui.digitalMiner.silk=Behutsam gui.digitalMiner.toMine=Zum Abbauen gui.digitalMiner.running=Arbeitend gui.digitalMiner.idle=Bereit +gui.digitalMiner.inverse=Inversionsmodus //Item and block tooltip text tooltip.configurator.modify=Verändern From 70d31402968ceb5a8e3a890e6b6123d6fc1b459c Mon Sep 17 00:00:00 2001 From: Aidan Brady Date: Sat, 11 Jan 2014 11:49:27 -0500 Subject: [PATCH 2/4] Config property for displaying different energy units --- common/mekanism/client/ClientProxy.java | 24 ++++++++++++++++++ common/mekanism/client/gui/GuiEnergyCube.java | 2 +- common/mekanism/common/EnergyDisplay.java | 8 ++++++ common/mekanism/common/Mekanism.java | 2 ++ .../mekanism/common/util/MekanismUtils.java | 14 +++++++++- .../assets/mekanism/gui/GuiEnergyCube.png | Bin 4087 -> 3700 bytes 6 files changed, 48 insertions(+), 2 deletions(-) diff --git a/common/mekanism/client/ClientProxy.java b/common/mekanism/client/ClientProxy.java index 487a15a04..e98979acd 100644 --- a/common/mekanism/client/ClientProxy.java +++ b/common/mekanism/client/ClientProxy.java @@ -66,6 +66,7 @@ import mekanism.common.CommonProxy; import mekanism.common.IElectricChest; import mekanism.common.IInvConfiguration; import mekanism.common.Mekanism; +import mekanism.common.EnergyDisplay.EnergyType; import mekanism.common.block.BlockMachine.MachineType; import mekanism.common.entity.EntityBalloon; import mekanism.common.entity.EntityObsidianTNT; @@ -141,6 +142,29 @@ public class ClientProxy extends CommonProxy MekanismClient.fancyUniversalCableRender = Mekanism.configuration.get(Configuration.CATEGORY_GENERAL, "FancyUniversalCableRender", true).getBoolean(true); MekanismClient.holidays = Mekanism.configuration.get(Configuration.CATEGORY_GENERAL, "Holidays", true).getBoolean(true); MekanismClient.baseSoundVolume = Mekanism.configuration.get(Configuration.CATEGORY_GENERAL, "SoundVolume", 1D).getDouble(1D); + + String s = Mekanism.configuration.get(Configuration.CATEGORY_GENERAL, "EnergyType", "J").getString(); + + if(s != null) + { + if(s.trim().equalsIgnoreCase("j") || s.trim().equalsIgnoreCase("joules")) + { + Mekanism.activeType = EnergyType.J; + } + else if(s.trim().equalsIgnoreCase("rf") || s.trim().equalsIgnoreCase("te") || s.trim().equalsIgnoreCase("thermal expansion")) + { + Mekanism.activeType = EnergyType.RF; + } + else if(s.trim().equalsIgnoreCase("eu") || s.trim().equalsIgnoreCase("ic2")) + { + Mekanism.activeType = EnergyType.EU; + } + else if(s.trim().equalsIgnoreCase("mj") || s.trim().equalsIgnoreCase("bc") || s.trim().equalsIgnoreCase("buildcraft")) + { + Mekanism.activeType = EnergyType.MJ; + } + } + Mekanism.configuration.save(); } diff --git a/common/mekanism/client/gui/GuiEnergyCube.java b/common/mekanism/client/gui/GuiEnergyCube.java index 95554d5b7..a5948d079 100644 --- a/common/mekanism/client/gui/GuiEnergyCube.java +++ b/common/mekanism/client/gui/GuiEnergyCube.java @@ -32,7 +32,7 @@ public class GuiEnergyCube extends GuiMekanism int xAxis = (mouseX - (width - xSize) / 2); int yAxis = (mouseY - (height - ySize) / 2); - String capacityInfo = MekanismUtils.getEnergyDisplay(tileEntity.getEnergy()) + "/" + MekanismUtils.getEnergyDisplay(tileEntity.getMaxEnergy()); + String capacityInfo = MekanismUtils.getEnergyDisplay(tileEntity.getEnergy()); String outputInfo = MekanismUtils.localize("gui.out") + ": " + MekanismUtils.getEnergyDisplay(tileEntity.getMaxOutput()) + "/t"; fontRenderer.drawString(tileEntity.getInvName(), 43, 6, 0x404040); diff --git a/common/mekanism/common/EnergyDisplay.java b/common/mekanism/common/EnergyDisplay.java index 33a39769f..a7641006e 100644 --- a/common/mekanism/common/EnergyDisplay.java +++ b/common/mekanism/common/EnergyDisplay.java @@ -190,4 +190,12 @@ public class EnergyDisplay { return roundDecimals(d, 2); } + + public static enum EnergyType + { + J, + RF, + EU, + MJ + } } diff --git a/common/mekanism/common/Mekanism.java b/common/mekanism/common/Mekanism.java index ee3d93ce0..9ba16b6cd 100644 --- a/common/mekanism/common/Mekanism.java +++ b/common/mekanism/common/Mekanism.java @@ -25,6 +25,7 @@ import mekanism.api.transmitters.DynamicNetwork.ClientTickUpdate; import mekanism.api.transmitters.DynamicNetwork.NetworkClientRequest; import mekanism.api.transmitters.TransmitterNetworkRegistry; import mekanism.client.ClientTickHandler; +import mekanism.common.EnergyDisplay.EnergyType; import mekanism.common.EnergyNetwork.EnergyTransferEvent; import mekanism.common.FluidNetwork.FluidTransferEvent; import mekanism.common.IFactory.RecipeType; @@ -275,6 +276,7 @@ public class Mekanism public static int VOICE_PORT = 36123; public static int maxUpgradeMultiplier = 10; public static double ENERGY_PER_REDSTONE = 10000; + public static EnergyType activeType = EnergyType.J; public static double TO_IC2; public static double TO_BC; diff --git a/common/mekanism/common/util/MekanismUtils.java b/common/mekanism/common/util/MekanismUtils.java index c86891e8c..02f8277db 100644 --- a/common/mekanism/common/util/MekanismUtils.java +++ b/common/mekanism/common/util/MekanismUtils.java @@ -1129,7 +1129,19 @@ public final class MekanismUtils */ public static String getEnergyDisplay(double energy) { - return EnergyDisplay.getDisplayShort(energy, ElectricUnit.JOULES); + switch(Mekanism.activeType) + { + case J: + return EnergyDisplay.getDisplayShort(energy, ElectricUnit.JOULES); + case RF: + return Math.round(energy*Mekanism.TO_TE) + " RF"; + case EU: + return Math.round(energy*Mekanism.TO_IC2) + " EU"; + case MJ: + return (Math.round((energy*Mekanism.TO_BC)*100)/100) + " MJ"; + } + + return "error"; } /** diff --git a/resources/assets/mekanism/gui/GuiEnergyCube.png b/resources/assets/mekanism/gui/GuiEnergyCube.png index d5538684392862a78a0847b0a9f76af9a66d54e7..907c03b9eb67496f36028eb8462b2a74d77fc052 100644 GIT binary patch delta 2621 zcmc&#X;c$g7OpA^sj!P8*n&yR1OyB)2-t!Ng)G`2%LszvLfjg~5u+lTKvmHP7-(7| zIDoPwt)n3Ope7(RL~OtX1w=ququ3w}5SCy_&@k1%`kd)LbLLE+nSQ_SkMG@k-*><7 zJ{eVNROJt2>Kb3VxdcRmQ-jR#bvq1Kuq}3u*xsx>`k>sJopZLmCDaC?KDcMix3Y~k zP%+n(fd}BfTwl5UE7xysYzmEvY`Xeo7F`Et#=DBV6`>|5doAIv!oKS2U;#pEAjsj)WQo*O zOB#{ISFXx8$16h`4;@}>WJ_Sj;Sx2GZAwhSOC2gJzww3r4kAi2WGtJKn)oq+pP)&8B}NO zjA0hBM`M!$VOz;_tV384OwGiHu2=>zy1Vy`8)2nF(|^mEbDA|7VmzzOMje0`!NBn^=&4KWRgvCO8JqJDZ^!Ro`0iVP_yAXf+*^4* z;!H-lnRrW7DqjGPuA12(juXV1cGTm*i3T^*oop5e+VIK?DR$O0;F|Siie9cS3bcim zhCB5TF0_Tz=v3SWCoK;+}dmT-Ec$DIAhP-53>I)RH9Z z;2VP(K;P}8tGdNjG@vAF9T#NF8Mq*4{x>hNTnS9~x9OJ@@q4qvE<6IbC82t3XrfIxMBM^4f;rRqx8h6ib zJ-G6Ou%D?}KP>5LkDv+;Zsf+pT*a;^Y38%EEip`%?^3?<$P*!F$`Gss(>u@YhYBbN z{#<>6gQTz21&-bw$VNj+E!|0UG=h%8u*i@h#ONJYao~L!Upqx)NJ`q{>1j#?={ZNs z;)kExc%Z<4nCDm1a1ZK;JniLS^S4K`sLl82P#}EYuRRTosWFc)L#_y|Y8|j8gmxic zeP8vyS<}kav6ECw=*Mq8D;7ROQws%fA~_PVs$D!pC);-O-48ubh0z)48jH{)6?naf zL5LxU77cpy&{Q1Q*x8khazIeG9>3+wcSC_I?@xNsYRG9GLc7fTHqZc1>0P?+0Th6( z`QxiLlAO@7*gidkbX=lAhm>-Kl!6}fGzB(zRH4Rh&WpPse>wX&<87ZFF`0(ajZb;8 zt;kPD*0GS#=|e-2Bbh+y&}iw?qD#IBt9!GNz4|q7zWwfSnff;4x+0)!-$W|<1<7&6 zG1FaaM^Z5bHw!HgqxH%l!!Ui1?-QYx$2%Ch8WP`8O>;Mpg5nURJ|9=DQcd7bwQSA44^v~sC`+v)M bZix8I+;O-3F8`!s0C~Q2_i?M(&QAO%*0b$q delta 3011 zcmchXe>hb69>>4uI5ZO)!(KlMGncYkE2=R?`EhiSVl&&+j#**uEe&y_M1`Dls=Mw} z#I4p8LXS;|*sBoXbSckjRP;kJ!?^lEC5FNHHFMAIv;XWq`|Pc!eL8=A&-s3z_j!Ll z@7MREvYcd9@DWV^Kx#=O#h(zjOpUyk{)bj1@h zo>Rt!I`b!FjH`~bx#)U=>_SzFX^>yTl@@_KREJaO8y`0=Xbb(sn_FJhJyc>Z5D2vO z6*H|`n(FfyOd2v&H`7ulKH2Sd`(`7iiL9HRtJVswWY~?FQOT%wRM9){=8gmVtcYAh zvo?gaKHqX6Gf!7D*K)7ZDr8K0RGZPM9{A>3L(!Xt&RqKjJW-?grr8la0w&B6>UN}Gxl@)HY z<2mwrbVjtZ4Ry(WW2J2H!lm=pn@9ZN{XquJ=hnUQCOLhjKB5J%nIV2J&!fB*GldZc z+n9DxBX#Ir2EmCCR3RC0By{IHVN7h~`%AM;uX}DBsw7uF34X6PiJ_pZ5N<*iItHA}>ZcP~ z4f@KN$>Gb@(Y=q&z9L8iWS13qelyg1r0ID}I;+Vs*sda+IH89=<7;0etK%`<>i1pcf-lvF!+RN%>W1gY)VibGPH?tRHS{_OTEU$app@` zfmZeeBbhOqnsPBWh@Ps4x|pF;iJB}xyR*fSE@sT?c*>k<(wUu&#&_EuYD6f(_7ovT{D~Nqa&&h z5gZ8Ad{;BO?ZQ6*p+P7jt_E3?TtAmQd|1Xk@_32SrwVVvT7pNJfxf9}%fK@#ovY^WmxG2u;ctIf2%5NjcIT zxksx7$Z?znS<_Br&*LD*z$mbS9EgSzVwIl8^`zQ+;l zkCFLV#V3GX6;ggV(ShX{9~)b6mkGIV5NT>_)n@{V{@qNY_Z~I#M?kAcbZ|;6ZkYFFOqfzMN%g#%DuN;2&LL zLpZ@OyRFD+lPCd#R@4_CM>;6doC-QVBL=Av^ByADuT)ZV8Tqq@*i_=1F7NYuJ>C1= z_oSKB)H>GJhsFmvyDE=xV5<~I#@FJtyZd7g`sBCms_Y(-%Y$7G-dP#t!WXG5&|={N zRn{$w=-cCJ*P&Q-T11jzb*_zqi}SC_B%~BUNU7fL1GF3)HrU*b?F)rDCPsj>s7U_j znBzEb_P%qNF7-!&G%7zng0&O$`{805@vQ(v9B zsCA*`=g1B84xyS0T9&f(H^RfNigPbcZFC$pg?wXS8k0Jp# z;qj7;?I>8x%AcS=q|7XIdu{AX-H1~R-VCyvx)Eu)arDJhbU(~1It+6uFn#XTBB%6e z_%oe{?!-a};uVO4;U6e;MQEMRF0|AJS`7v2PtebmMo(>)eOT5_B81Y@R%FyI2HD3J1#ancUxd&Rk?5~^cl9%R{ z?rV&Sj*b?@n5~Rmw^8AVDPFmQ_|P*(H4P2PH8*u(H+^+rMMUA45xBUWPDHeptY?2k zis8-uGu7a1;djdr+D_((jVN>D;As@c0S(=D3N@v23fnTh*oe&rFz?&N8Qv(^dG3rm z9ii|5TbIyxQbh{wE(X956*1Vh5f)OI{3L<>0U947f&J{`Lo_}_0{dk Date: Sat, 11 Jan 2014 23:35:39 +0000 Subject: [PATCH 3/4] Make a start on the Salination plant. Primitive so far but the multiblock system just about works. --- common/mekanism/client/ClientProxy.java | 7 ++ .../client/gui/GuiSalinationController.java | 38 +++++++ .../client/render/MekanismRenderer.java | 3 + common/mekanism/common/CommonProxy.java | 7 ++ common/mekanism/common/Mekanism.java | 5 +- common/mekanism/common/block/BlockBasic.java | 53 ++++++++-- .../ContainerSalinationController.java | 44 ++++++++ .../mekanism/common/item/ItemBlockBasic.java | 6 ++ .../tile/TileEntitySalinationController.java | 97 ++++++++++++++++++ .../tile/TileEntitySalinationValve.java | 67 ++++++++++++ .../mekanism/gui/GuiSalinationController.png | Bin 0 -> 2200 bytes .../mekanism/textures/blocks/LiquidBrine.png | Bin 0 -> 11862 bytes .../textures/blocks/LiquidBrine.png.mcmeta | 5 + .../textures/blocks/SalinationController.png | Bin 0 -> 2860 bytes .../textures/blocks/SalinationValve.png | Bin 0 -> 1447 bytes 15 files changed, 322 insertions(+), 10 deletions(-) create mode 100644 common/mekanism/client/gui/GuiSalinationController.java create mode 100644 common/mekanism/common/inventory/container/ContainerSalinationController.java create mode 100644 common/mekanism/common/tile/TileEntitySalinationController.java create mode 100644 common/mekanism/common/tile/TileEntitySalinationValve.java create mode 100644 resources/assets/mekanism/gui/GuiSalinationController.png create mode 100644 resources/assets/mekanism/textures/blocks/LiquidBrine.png create mode 100644 resources/assets/mekanism/textures/blocks/LiquidBrine.png.mcmeta create mode 100644 resources/assets/mekanism/textures/blocks/SalinationController.png create mode 100644 resources/assets/mekanism/textures/blocks/SalinationValve.png diff --git a/common/mekanism/client/ClientProxy.java b/common/mekanism/client/ClientProxy.java index e98979acd..35e8baf07 100644 --- a/common/mekanism/client/ClientProxy.java +++ b/common/mekanism/client/ClientProxy.java @@ -33,6 +33,7 @@ import mekanism.client.gui.GuiRobitMain; import mekanism.client.gui.GuiRobitRepair; import mekanism.client.gui.GuiRobitSmelting; import mekanism.client.gui.GuiRotaryCondensentrator; +import mekanism.client.gui.GuiSalinationController; import mekanism.client.gui.GuiTeleporter; import mekanism.client.render.MekanismRenderer; import mekanism.client.render.RenderPartTransmitter; @@ -101,6 +102,8 @@ import mekanism.common.tile.TileEntityObsidianTNT; import mekanism.common.tile.TileEntityOsmiumCompressor; import mekanism.common.tile.TileEntityPurificationChamber; import mekanism.common.tile.TileEntityRotaryCondensentrator; +import mekanism.common.tile.TileEntitySalinationController; +import mekanism.common.tile.TileEntitySalinationValve; import mekanism.common.tile.TileEntityTeleporter; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; @@ -287,6 +290,8 @@ public class ClientProxy extends CommonProxy ClientRegistry.registerTileEntity(TileEntityChemicalInfuser.class, "ChemicalInfuser", new RenderChemicalInfuser()); ClientRegistry.registerTileEntity(TileEntityChemicalInjectionChamber.class, "ChemicalInjectionChamber", new RenderConfigurableMachine()); ClientRegistry.registerTileEntity(TileEntityElectrolyticSeparator.class, "ElectrolyticSeparator", new RenderElectrolyticSeparator()); + GameRegistry.registerTileEntity(TileEntitySalinationController.class, "SalinationController"); + GameRegistry.registerTileEntity(TileEntitySalinationValve.class, "SalinationValve"); } @Override @@ -415,6 +420,8 @@ public class ClientProxy extends CommonProxy return new GuiChemicalInjectionChamber(player.inventory, (TileEntityAdvancedElectricMachine)tileEntity); case 32: return new GuiElectrolyticSeparator(player.inventory, (TileEntityElectrolyticSeparator)tileEntity); + case 33: + return new GuiSalinationController(player.inventory, (TileEntitySalinationController)tileEntity); } diff --git a/common/mekanism/client/gui/GuiSalinationController.java b/common/mekanism/client/gui/GuiSalinationController.java new file mode 100644 index 000000000..96c597c2b --- /dev/null +++ b/common/mekanism/client/gui/GuiSalinationController.java @@ -0,0 +1,38 @@ +package mekanism.client.gui; + +import java.util.List; + +import mekanism.api.ListUtils; +import mekanism.client.gui.GuiEnergyInfo.IInfoHandler; +import mekanism.common.inventory.container.ContainerSalinationController; +import mekanism.common.tile.TileEntitySalinationController; +import mekanism.common.util.MekanismUtils; +import mekanism.common.util.MekanismUtils.ResourceType; + +import net.minecraft.entity.player.InventoryPlayer; +import org.lwjgl.opengl.GL11; + +public class GuiSalinationController extends GuiMekanism +{ + TileEntitySalinationController tileEntity; + + public GuiSalinationController(InventoryPlayer inventory, TileEntitySalinationController tentity) + { + super(tentity, new ContainerSalinationController(inventory, tentity)); + tileEntity = tentity; + } + + @Override + protected void drawGuiContainerBackgroundLayer(float partialTick, int mouseX, int mouseY) + { + super.drawGuiContainerBackgroundLayer(partialTick, mouseX, mouseY); + + mc.renderEngine.bindTexture(MekanismUtils.getResource(ResourceType.GUI, "GuiSalinationController.png")); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + int guiWidth = (width - xSize) / 2; + int guiHeight = (height - ySize) / 2; + drawTexturedModalRect(guiWidth, guiHeight, 0, 0, xSize, ySize); + } + + +} diff --git a/common/mekanism/client/render/MekanismRenderer.java b/common/mekanism/client/render/MekanismRenderer.java index 2fb5d0353..37dcb2c54 100644 --- a/common/mekanism/client/render/MekanismRenderer.java +++ b/common/mekanism/client/render/MekanismRenderer.java @@ -28,6 +28,7 @@ import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.ForgeSubscribe; import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; @@ -73,6 +74,8 @@ public class MekanismRenderer GasRegistry.getGas("sulfurTrioxideGas").setIcon(event.map.registerIcon("mekanism:LiquidSulfurTrioxide")); GasRegistry.getGas("sulfuricAcid").setIcon(event.map.registerIcon("mekanism:LiquidSulfuricAcid")); GasRegistry.getGas("hydrogenChloride").setIcon(event.map.registerIcon("mekanism:LiquidHydrogenChloride")); + + FluidRegistry.getFluid("brine").setIcons(event.map.registerIcon("mekanism:LiquidBrine")); } } diff --git a/common/mekanism/common/CommonProxy.java b/common/mekanism/common/CommonProxy.java index b7ab83a91..68cc1d1b5 100644 --- a/common/mekanism/common/CommonProxy.java +++ b/common/mekanism/common/CommonProxy.java @@ -24,6 +24,7 @@ import mekanism.common.inventory.container.ContainerRobitMain; import mekanism.common.inventory.container.ContainerRobitRepair; import mekanism.common.inventory.container.ContainerRobitSmelting; import mekanism.common.inventory.container.ContainerRotaryCondensentrator; +import mekanism.common.inventory.container.ContainerSalinationController; import mekanism.common.inventory.container.ContainerTeleporter; import mekanism.common.tile.TileEntityAdvancedElectricMachine; import mekanism.common.tile.TileEntityAdvancedFactory; @@ -54,6 +55,8 @@ import mekanism.common.tile.TileEntityObsidianTNT; import mekanism.common.tile.TileEntityOsmiumCompressor; import mekanism.common.tile.TileEntityPurificationChamber; import mekanism.common.tile.TileEntityRotaryCondensentrator; +import mekanism.common.tile.TileEntitySalinationController; +import mekanism.common.tile.TileEntitySalinationValve; import mekanism.common.tile.TileEntityTeleporter; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; @@ -104,6 +107,8 @@ public class CommonProxy GameRegistry.registerTileEntity(TileEntityChemicalInfuser.class, "ChemicalInfuser"); GameRegistry.registerTileEntity(TileEntityChemicalInjectionChamber.class, "ChemicalInjectionChamber"); GameRegistry.registerTileEntity(TileEntityElectrolyticSeparator.class, "ElectrolyticSeparator"); + GameRegistry.registerTileEntity(TileEntitySalinationController.class, "SalinationController"); + GameRegistry.registerTileEntity(TileEntitySalinationValve.class, "SalinationValve"); } /** @@ -347,6 +352,8 @@ public class CommonProxy return new ContainerAdvancedElectricMachine(player.inventory, (TileEntityAdvancedElectricMachine)tileEntity); case 32: return new ContainerElectrolyticSeparator(player.inventory, (TileEntityElectrolyticSeparator)tileEntity); + case 33: + return new ContainerSalinationController(player.inventory, (TileEntitySalinationController)tileEntity); } return null; diff --git a/common/mekanism/common/Mekanism.java b/common/mekanism/common/Mekanism.java index 9ba16b6cd..30f96752a 100644 --- a/common/mekanism/common/Mekanism.java +++ b/common/mekanism/common/Mekanism.java @@ -118,6 +118,7 @@ import net.minecraftforge.common.Configuration; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.ForgeSubscribe; import net.minecraftforge.event.world.ChunkEvent; +import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.oredict.OreDictionary; import net.minecraftforge.oredict.ShapelessOreRecipe; @@ -653,7 +654,7 @@ public class Mekanism //Electrolytic Separator Recipes RecipeHandler.addElectrolyticSeparatorRecipe(FluidRegistry.getFluidStack("water", 2), new ChemicalPair(new GasStack(GasRegistry.getGas("hydrogen"), 2), new GasStack(GasRegistry.getGas("oxygen"), 1))); - RecipeHandler.addElectrolyticSeparatorRecipe(FluidRegistry.getFluidStack("lava", 10), new ChemicalPair(new GasStack(GasRegistry.getGas("hydrogen"), 1), new GasStack(GasRegistry.getGas("chlorine"), 1))); + RecipeHandler.addElectrolyticSeparatorRecipe(FluidRegistry.getFluidStack("brine", 10), new ChemicalPair(new GasStack(GasRegistry.getGas("hydrogen"), 1), new GasStack(GasRegistry.getGas("chlorine"), 1))); //Infuse objects InfuseRegistry.registerInfuseObject(new ItemStack(Item.coal, 1, 0), new InfuseObject(InfuseRegistry.get("CARBON"), 10)); @@ -1005,6 +1006,8 @@ public class Mekanism GasRegistry.register(new Gas("sulfurTrioxideGas")).registerFluid(); GasRegistry.register(new Gas("sulfuricAcid")).registerFluid(); GasRegistry.register(new Gas("hydrogenChloride")).registerFluid(); + + FluidRegistry.registerFluid(new Fluid("brine")); Mekanism.proxy.preInit(); diff --git a/common/mekanism/common/block/BlockBasic.java b/common/mekanism/common/block/BlockBasic.java index fe9bb818a..0dd95e926 100644 --- a/common/mekanism/common/block/BlockBasic.java +++ b/common/mekanism/common/block/BlockBasic.java @@ -20,6 +20,8 @@ import mekanism.common.tile.TileEntityBasicBlock; import mekanism.common.tile.TileEntityBin; import mekanism.common.tile.TileEntityDynamicTank; import mekanism.common.tile.TileEntityDynamicValve; +import mekanism.common.tile.TileEntitySalinationController; +import mekanism.common.tile.TileEntitySalinationValve; import mekanism.common.util.MekanismUtils; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -33,6 +35,7 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatMessageComponent; import net.minecraft.util.Icon; import net.minecraft.util.MathHelper; import net.minecraft.util.MovingObjectPosition; @@ -60,6 +63,7 @@ import cpw.mods.fml.relauncher.SideOnly; * 11: Dynamic Valve * 12: Copper Block * 13: Tin Block + * 14: Salination Controller * @author AidanBrady * */ @@ -118,6 +122,9 @@ public class BlockBasic extends Block icons[11][0] = register.registerIcon("mekanism:DynamicValve"); icons[12][0] = register.registerIcon("mekanism:CopperBlock"); icons[13][0] = register.registerIcon("mekanism:TinBlock"); + icons[14][0] = register.registerIcon("mekanism:SalinationController"); + icons[14][1] = register.registerIcon("mekanism:CopperBlock"); + icons[15][0] = register.registerIcon("mekanism:SalinationValve"); glassRenderer.registerIcons(register); } @@ -127,12 +134,12 @@ public class BlockBasic extends Block public Icon getBlockTexture(IBlockAccess world, int x, int y, int z, int side) { int metadata = world.getBlockMetadata(x, y, z); - - if(metadata == 6) - { - TileEntityBasicBlock tileEntity = (TileEntityBasicBlock)world.getBlockTileEntity(x, y, z); - - if(side == 0 || side == 1) + + if(metadata == 6) + { + TileEntityBasicBlock tileEntity = (TileEntityBasicBlock)world.getBlockTileEntity(x, y, z); + + if(side == 0 || side == 1) { return MekanismUtils.isActive(world, x, y, z) ? icons[6][3] : icons[6][1]; } @@ -143,7 +150,19 @@ public class BlockBasic extends Block else { return icons[6][0]; } - } + } + else if(metadata == 14) + { + TileEntityBasicBlock tileEntity = (TileEntityBasicBlock)world.getBlockTileEntity(x, y, z); + + if(side == tileEntity.facing) + { + return icons[14][0]; + } + else { + return icons[14][1]; + } + } else if(metadata == 10) { return glassRenderer.getIcon(world, x, y, z, side); @@ -200,6 +219,8 @@ public class BlockBasic extends Block list.add(new ItemStack(i, 1, 11)); list.add(new ItemStack(i, 1, 12)); list.add(new ItemStack(i, 1, 13)); + list.add(new ItemStack(i, 1, 14)); + list.add(new ItemStack(i, 1, 15)); } @Override @@ -279,7 +300,17 @@ public class BlockBasic extends Block return true; } } - + + if(metadata == 14) + { + entityplayer.openGui(Mekanism.instance, 33, world, x, y, z); + TileEntitySalinationController controller = (TileEntitySalinationController)new Coord4D(x, y, z).getTileEntity(world); + entityplayer.sendChatToPlayer(ChatMessageComponent.createFromText("Water Level: " + controller.waterTank.getFluidAmount())); + entityplayer.sendChatToPlayer(ChatMessageComponent.createFromText("Brine Level: " + controller.brineTank.getFluidAmount())); + entityplayer.sendChatToPlayer(ChatMessageComponent.createFromText("Can operate: " + controller.canOperate())); + return true; + } + if(world.isRemote) { return true; @@ -532,7 +563,7 @@ public class BlockBasic extends Block @Override public boolean hasTileEntity(int metadata) { - return metadata == 6 || metadata == 9 || metadata == 10 || metadata == 11; + return metadata == 6 || metadata == 9 || metadata == 10 || metadata == 11 || metadata == 14 || metadata == 15; } @Override @@ -548,6 +579,10 @@ public class BlockBasic extends Block return new TileEntityDynamicTank(); case 11: return new TileEntityDynamicValve(); + case 14: + return new TileEntitySalinationController(); + case 15: + return new TileEntitySalinationValve(); } return null; diff --git a/common/mekanism/common/inventory/container/ContainerSalinationController.java b/common/mekanism/common/inventory/container/ContainerSalinationController.java new file mode 100644 index 000000000..1d17a0ce3 --- /dev/null +++ b/common/mekanism/common/inventory/container/ContainerSalinationController.java @@ -0,0 +1,44 @@ +package mekanism.common.inventory.container; + +import mekanism.common.tile.TileEntitySalinationController; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; + + +public class ContainerSalinationController extends Container +{ + private TileEntitySalinationController tileEntity; + + public ContainerSalinationController(InventoryPlayer inventory, TileEntitySalinationController tile) + { + tileEntity = tile; + + int slotX; + + for(slotX = 0; slotX < 3; slotX++) + { + for(int slotY = 0; slotY < 9; slotY++) + { + addSlotToContainer(new Slot(inventory, slotY + slotX * 9 + 9, 8 + slotY * 18, 84 + slotX * 18)); + } + } + + for(slotX = 0; slotX < 9; ++slotX) + { + addSlotToContainer(new Slot(inventory, slotX, 8 + slotX * 18, 142)); + } + + tileEntity.open(inventory.player); + tileEntity.openChest(); + } + + + @Override + public boolean canInteractWith(EntityPlayer entityplayer) + { + return tileEntity.isUseableByPlayer(entityplayer); + } +} diff --git a/common/mekanism/common/item/ItemBlockBasic.java b/common/mekanism/common/item/ItemBlockBasic.java index e998d6b45..e026c881b 100644 --- a/common/mekanism/common/item/ItemBlockBasic.java +++ b/common/mekanism/common/item/ItemBlockBasic.java @@ -199,6 +199,12 @@ public class ItemBlockBasic extends ItemBlock case 13: name = "TinBlock"; break; + case 14: + name = "SalinationController"; + break; + case 15: + name = "SalinationValve"; + break; default: name = "Unknown"; break; diff --git a/common/mekanism/common/tile/TileEntitySalinationController.java b/common/mekanism/common/tile/TileEntitySalinationController.java new file mode 100644 index 000000000..a3740bd3e --- /dev/null +++ b/common/mekanism/common/tile/TileEntitySalinationController.java @@ -0,0 +1,97 @@ +package mekanism.common.tile; + +import java.rmi.registry.Registry; +import java.util.Set; + +import mekanism.api.Coord4D; +import mekanism.common.util.MekanismUtils; +import mekanism.generators.common.tile.TileEntityAdvancedSolarGenerator; + +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidTank; + +public class TileEntitySalinationController extends TileEntityContainerBlock +{ + public static int MAX_WATER = 100000; + public static int MAX_BRINE = 1000; + + public FluidTank waterTank = new FluidTank(MAX_WATER); + + public FluidTank brineTank = new FluidTank(MAX_BRINE); + + public boolean temperatureSet = false; + public double partialWater = 0; + public double partialBrine = 0; + public float temperature = 0; + + public TileEntitySalinationController() + { + super("SalinationController"); + } + + @Override + public void onUpdate() + { + buildStructure(); + setTemperature(); + + if(canOperate()) + { + partialWater += temperature; + if(partialWater >= 1) + { + int waterInt = (int)Math.floor(partialWater); + waterTank.drain(waterInt, true); + partialWater %= 1; + partialBrine += ((double)waterInt)/100D; + } + if(partialBrine >= 1) + { + int brineInt = (int)Math.floor(partialBrine); + brineTank.fill(FluidRegistry.getFluidStack("brine", brineInt), true); + partialBrine %= 1; + } + } + } + + public boolean canOperate() + { + if(waterTank.getFluid() == null || !waterTank.getFluid().containsFluid(FluidRegistry.getFluidStack("water", 100))) + { + return false; + } + + TileEntity backTile = Coord4D.get(this).getFromSide(ForgeDirection.getOrientation(facing).getOpposite()).getTileEntity(worldObj); + if(backTile instanceof TileEntityAdvancedSolarGenerator) + { + TileEntityAdvancedSolarGenerator heater = (TileEntityAdvancedSolarGenerator)backTile; + return heater.seesSun; + } + return false; + } + + public void setTemperature() + { + if(!temperatureSet) + { + temperature = worldObj.getBiomeGenForCoordsBody(xCoord, zCoord).getFloatTemperature(); + temperatureSet = true; + } + } + + public void buildStructure() + { + TileEntity leftTile = Coord4D.get(this).getFromSide(MekanismUtils.getLeft(facing)).getTileEntity(worldObj); + TileEntity rightTile = Coord4D.get(this).getFromSide(MekanismUtils.getRight(facing)).getTileEntity(worldObj); + if(leftTile instanceof TileEntitySalinationValve) + { + ((TileEntitySalinationValve)leftTile).master = this; + } + if(rightTile instanceof TileEntitySalinationValve) + { + ((TileEntitySalinationValve)rightTile).master = this; + } + } +} diff --git a/common/mekanism/common/tile/TileEntitySalinationValve.java b/common/mekanism/common/tile/TileEntitySalinationValve.java new file mode 100644 index 000000000..cd63e9f7a --- /dev/null +++ b/common/mekanism/common/tile/TileEntitySalinationValve.java @@ -0,0 +1,67 @@ +package mekanism.common.tile; + +import net.minecraftforge.common.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; + +public class TileEntitySalinationValve extends TileEntityContainerBlock implements IFluidHandler +{ + public TileEntitySalinationController master; + + public TileEntitySalinationValve() + { + super("SalinationController"); + } + + @Override + public int fill(ForgeDirection from, FluidStack resource, boolean doFill) + { + return master == null ? 0 : master.waterTank.fill(resource, doFill); + } + + @Override + public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) + { + if(master != null && resource.getFluid() == FluidRegistry.getFluid("brine")) + return master.brineTank.drain(resource.amount, doDrain); + + return null; + } + + @Override + public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) + { + if(master != null) + return master.brineTank.drain(maxDrain, doDrain); + + return null; + } + + @Override + public boolean canFill(ForgeDirection from, Fluid fluid) + { + return master != null && fluid == FluidRegistry.getFluid("water"); + } + + @Override + public boolean canDrain(ForgeDirection from, Fluid fluid) + { + return master != null && fluid == FluidRegistry.getFluid("brine"); + } + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection from) + { + if(master == null) + { + return new FluidTankInfo[0]; + } + return new FluidTankInfo[] {new FluidTankInfo(master.waterTank), new FluidTankInfo(master.brineTank)}; + } + + @Override + public void onUpdate() {} +} diff --git a/resources/assets/mekanism/gui/GuiSalinationController.png b/resources/assets/mekanism/gui/GuiSalinationController.png new file mode 100644 index 0000000000000000000000000000000000000000..58ecf752f3410f1c454b6020576235e946445044 GIT binary patch literal 2200 zcmb`HcT^Kt7KdL#fEWi99g2X30fhwy2ULnu4J8z58e|lNp#+p@givLGFi01P6c-qz zNRuc6Lx=)G;!q=@DIkO*MH7?~ArP9thB>>lv+f@KXWu*Tyx+O!p8LLc?>#r(*4j)2 zA&me4h?t{{?E!%BB?Q2Q_?MI40}KEHiUeC8j=0OA@ zK~^^-SmU{im>SJUV22SBi?Y&ATah>3qZZTKXcZ*v-MqZW;D+aNme+MTsgVpe`c2R) z3C4|lQrbfQN>gEajZv1DBT~zU6gb9y@lK9F;?(K-&23mA#+bZx&KCDkDV-M6yVtNv zVxWq6QmEEvT^TkhQNi|}iY10fOxaKFO(oKy&Pz&a!1=75uBd-$kA;DU6OAm>C+)$C z%qcZ)$cdBR1^m+s71P}>rrVDyKV*?7U)&sNb=vAWHch#^qzUnf%DjW5IiU9YJczWA zjc_}kC{Ify*3QJPA}aRTN02csel$&#!HF`_TP7=u4;7^gaM0;P&iLP-_h?7_{;RaU zY+rE~WlKslOZpotNgSV9^Jcht#r@4kK{&$Y-qQHUQn>o#J9!YB*?d~R;Zuc-Ip+uFP-Gm z{FaP&{h_66{aT39!jVprgQseXQyIzaZxdn>mN->buU0Q98c7rFUdAh+O5i{5lgo`i3l z4>NM<#t|Evi*9>J#7D&{ptMoE>yW<_mDQ-@Jyv4}Y_oaRK|$AMR7&RBmSZ>~_}@xW zJ2q1`j)m&2U*=(X%dy4JCep~s#T*vjA`c760ukP?tO1-w#7^S54H;0=tjg8|< zdrS<)C6gz2%|A zSu&M!v=FlIpfg2V6pxfmNrpW+jX;&vy`)FuXbn`uIwt)LWh@c&Q-|qSXJbkXV(@jd zce4_=R!e(rc3W|n`@+gPqQdc)-_K#%eugg_I9^y|GhV*j=rX)W;LcHh1irz2=ahZ< zV?fBw(##laZSTDLl2pEB$92??cmQ_p-98YIl`X|L3j3R%F%cex>=cLYtc)vo0|4x> zxv|l?VCL+I&6T~rQmx~ha{oz-;VI_}!%xMBGY%9ILz~XVF|mR+M8onsG6PJ_jpbUD zyh*-m>r_)n4q9bJBHUM>VKrWjMyC{3Q`Vq29+Q}B(>%A#-hhHRw;? z24)UtE9#v2;IXvP8DigFXwBK|)Tmj_nsIv6K-IJSpiy(F_`?cSzkOt>nJNld92ud$ z4&3S*Z3xY3p26QXc;;_N{i(INi;~%ap$=E7VL13t^XZKtjQzAQ?&@%9w@)fvL0DM$ zAzYX0ZSME!eLxC6mRlDD)WUZILqIU13J|U?%ygt4baDA!S<&TLw*(M+ccrp+3TJaK z+KlhQAF430?aLRC>##$B000!g!T(GACDKQip#T`R>Y>RyUat-uMENfi$^P;=!#2!6 zasK4`Oc3-#KW+(X>*~&Y5-=^WD}Gg~!_vLcxw+Y(vg87D-GKP3A4ooS&$>gM-GgUw zYgGE=zx17LLRz=((_OB|r9E{I1Z~Q(GLQz<3TU+XLi>cEOeEudV|K0<^vsb|1$s}9 z9f?$POUqxlViVL>%(rAe#$#a%qF-W$(Zu*k74VQJ>eS~pvIgKD)*SW#d@*?r^dB^o z)Ev!t6>vMra1`=|#1nuvbT@D%U|||1%lLt8VJ)c9!9n<2u|FOrn1y^ioL5F;E&kNm zbun_)65<#EoCj|BSijb}WE~3ocZoks<-dwf1A_=GpQ=KK0<8+b3i9B8w7@rWyj%nK zC!`BLWtghW#%Q@w$T{@T&=6i4D{>TU-J)!Y7^aZ>U)-q>arz_!2S3pMS2_Q)$^M(* pE0(Wx!(SWtE0O*L`FhAT_Nl5cshW}~!7G5j%uTF~AD?#pbPfOj literal 0 HcmV?d00001 diff --git a/resources/assets/mekanism/textures/blocks/LiquidBrine.png b/resources/assets/mekanism/textures/blocks/LiquidBrine.png new file mode 100644 index 0000000000000000000000000000000000000000..ab0020188eb14bc99f1c3850cd73d8a6f045773b GIT binary patch literal 11862 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 literal 0 HcmV?d00001 diff --git a/resources/assets/mekanism/textures/blocks/LiquidBrine.png.mcmeta b/resources/assets/mekanism/textures/blocks/LiquidBrine.png.mcmeta new file mode 100644 index 000000000..4b721e09a --- /dev/null +++ b/resources/assets/mekanism/textures/blocks/LiquidBrine.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 2 + } +} diff --git a/resources/assets/mekanism/textures/blocks/SalinationController.png b/resources/assets/mekanism/textures/blocks/SalinationController.png new file mode 100644 index 0000000000000000000000000000000000000000..559c1dd3cf8cda4a77ef2ca4e52e2251562248f5 GIT binary patch literal 2860 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 B(OLii literal 0 HcmV?d00001 From a1cc44bb90ac77e70712cd0944f8191b2ed7e68c Mon Sep 17 00:00:00 2001 From: Ben Spiers Date: Sun, 12 Jan 2014 03:05:53 +0000 Subject: [PATCH 4/4] Iteration #2 of salination plants, they have a more defined shape now but the algorithm seems very costly so it only does it when configurated. Still work to do. --- common/mekanism/common/block/BlockBasic.java | 6 +- .../tile/TileEntitySalinationController.java | 232 ++++++++++++++++-- .../common/tile/TileEntitySalinationTank.java | 34 +++ .../tile/TileEntitySalinationValve.java | 12 +- .../mekanism/common/util/MekanismUtils.java | 10 + 5 files changed, 262 insertions(+), 32 deletions(-) create mode 100644 common/mekanism/common/tile/TileEntitySalinationTank.java diff --git a/common/mekanism/common/block/BlockBasic.java b/common/mekanism/common/block/BlockBasic.java index 0dd95e926..2be11e4e3 100644 --- a/common/mekanism/common/block/BlockBasic.java +++ b/common/mekanism/common/block/BlockBasic.java @@ -305,9 +305,9 @@ public class BlockBasic extends Block { entityplayer.openGui(Mekanism.instance, 33, world, x, y, z); TileEntitySalinationController controller = (TileEntitySalinationController)new Coord4D(x, y, z).getTileEntity(world); - entityplayer.sendChatToPlayer(ChatMessageComponent.createFromText("Water Level: " + controller.waterTank.getFluidAmount())); - entityplayer.sendChatToPlayer(ChatMessageComponent.createFromText("Brine Level: " + controller.brineTank.getFluidAmount())); - entityplayer.sendChatToPlayer(ChatMessageComponent.createFromText("Can operate: " + controller.canOperate())); + //entityplayer.sendChatToPlayer(ChatMessageComponent.createFromText("Water Level: " + controller.waterTank.getFluidAmount())); + //entityplayer.sendChatToPlayer(ChatMessageComponent.createFromText("Brine Level: " + controller.brineTank.getFluidAmount())); + //entityplayer.sendChatToPlayer(ChatMessageComponent.createFromText("Can operate: " + controller.canOperate())); return true; } diff --git a/common/mekanism/common/tile/TileEntitySalinationController.java b/common/mekanism/common/tile/TileEntitySalinationController.java index a3740bd3e..e2e9b2e47 100644 --- a/common/mekanism/common/tile/TileEntitySalinationController.java +++ b/common/mekanism/common/tile/TileEntitySalinationController.java @@ -1,30 +1,39 @@ package mekanism.common.tile; -import java.rmi.registry.Registry; +import java.util.HashSet; import java.util.Set; import mekanism.api.Coord4D; +import mekanism.common.IConfigurable; import mekanism.common.util.MekanismUtils; import mekanism.generators.common.tile.TileEntityAdvancedSolarGenerator; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatMessageComponent; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidTank; -public class TileEntitySalinationController extends TileEntityContainerBlock +public class TileEntitySalinationController extends TileEntitySalinationTank implements IConfigurable { public static int MAX_WATER = 100000; public static int MAX_BRINE = 1000; public FluidTank waterTank = new FluidTank(MAX_WATER); - public FluidTank brineTank = new FluidTank(MAX_BRINE); + public Set tankParts = new HashSet(); + public TileEntityAdvancedSolarGenerator[] solars = new TileEntityAdvancedSolarGenerator[4]; + public boolean temperatureSet = false; public double partialWater = 0; public double partialBrine = 0; public float temperature = 0; + public int height = 0; + public boolean structured = false; + + public boolean isLeftOnFace; public TileEntitySalinationController() { @@ -34,12 +43,11 @@ public class TileEntitySalinationController extends TileEntityContainerBlock @Override public void onUpdate() { - buildStructure(); setTemperature(); if(canOperate()) { - partialWater += temperature; + partialWater += temperature * (height + 7)/8; if(partialWater >= 1) { int waterInt = (int)Math.floor(partialWater); @@ -58,18 +66,23 @@ public class TileEntitySalinationController extends TileEntityContainerBlock public boolean canOperate() { - if(waterTank.getFluid() == null || !waterTank.getFluid().containsFluid(FluidRegistry.getFluidStack("water", 100))) + if(!structured || height < 1 || waterTank.getFluid() == null || !waterTank.getFluid().containsFluid(FluidRegistry.getFluidStack("water", 100))) { return false; } - TileEntity backTile = Coord4D.get(this).getFromSide(ForgeDirection.getOrientation(facing).getOpposite()).getTileEntity(worldObj); - if(backTile instanceof TileEntityAdvancedSolarGenerator) + boolean solarsActive = true; + + for(TileEntityAdvancedSolarGenerator solarPanel : solars) { - TileEntityAdvancedSolarGenerator heater = (TileEntityAdvancedSolarGenerator)backTile; - return heater.seesSun; + if(solarPanel == null || solarPanel.isInvalid()) + { + clearStructure(); + return false; + } + solarsActive &= solarPanel.seesSun; } - return false; + return solarsActive; } public void setTemperature() @@ -81,17 +94,200 @@ public class TileEntitySalinationController extends TileEntityContainerBlock } } - public void buildStructure() + public boolean buildStructure() { - TileEntity leftTile = Coord4D.get(this).getFromSide(MekanismUtils.getLeft(facing)).getTileEntity(worldObj); - TileEntity rightTile = Coord4D.get(this).getFromSide(MekanismUtils.getRight(facing)).getTileEntity(worldObj); - if(leftTile instanceof TileEntitySalinationValve) + ForgeDirection right = MekanismUtils.getRight(facing); + + height = 0; + if(!findBottomLayer()) { return false; } + Coord4D startPoint = Coord4D.get(this).getFromSide(right); + startPoint = isLeftOnFace ? startPoint : startPoint.getFromSide(right); + + while(findMiddleLayer(startPoint)) { - ((TileEntitySalinationValve)leftTile).master = this; + startPoint = startPoint.getFromSide(ForgeDirection.UP); + height++; } - if(rightTile instanceof TileEntitySalinationValve) + + structured = findTopLayer(startPoint); + height = structured ? height + 1 : 0; + return structured; + } + + public boolean findTopLayer(Coord4D current) + { + ForgeDirection left = MekanismUtils.getLeft(facing); + ForgeDirection right = MekanismUtils.getRight(facing); + ForgeDirection back = MekanismUtils.getBack(facing); + ForgeDirection front = ForgeDirection.getOrientation(facing); + + for(int i = 1; i <= 2; i++) { - ((TileEntitySalinationValve)rightTile).master = this; + current = current.getFromSide(back); + TileEntity tile = current.getTileEntity(worldObj); + if(!addTankPart(tile)) { return false; } + } + + current = current.getFromSide(back); + TileEntity solar = current.getTileEntity(worldObj); + if(!addSolarPanel(solar, 0)) { return false; } + + for(int i = 1; i <= 2; i++) + { + current = current.getFromSide(left); + TileEntity tile = current.getTileEntity(worldObj); + if(!addTankPart(tile)) { return false; } + } + + current = current.getFromSide(left); + solar = current.getTileEntity(worldObj); + if(!addSolarPanel(solar, 1)) { return false; } + + for(int i = 1; i <= 2; i++) + { + current = current.getFromSide(front); + TileEntity tile = current.getTileEntity(worldObj); + if(!addTankPart(tile)) { return false; } + } + + current = current.getFromSide(front); + solar = current.getTileEntity(worldObj); + if(!addSolarPanel(solar, 2)) { return false; } + + for(int i = 1; i <= 2; i++) + { + current = current.getFromSide(right); + TileEntity tile = current.getTileEntity(worldObj); + if(!addTankPart(tile)) { return false; } + } + + current = current.getFromSide(right); + solar = current.getTileEntity(worldObj); + if(!addSolarPanel(solar, 3)) { return false; } + + return true; + } + + public boolean findMiddleLayer(Coord4D current) + { + ForgeDirection left = MekanismUtils.getLeft(facing); + ForgeDirection right = MekanismUtils.getRight(facing); + ForgeDirection back = MekanismUtils.getBack(facing); + ForgeDirection front = ForgeDirection.getOrientation(facing); + + for(int i = 1; i <= 3; i++) + { + current = current.getFromSide(back); + TileEntity tile = current.getTileEntity(worldObj); + if(!addTankPart(tile)) { return false; } + } + + for(int i = 1; i <= 3; i++) + { + current = current.getFromSide(left); + TileEntity tile = current.getTileEntity(worldObj); + if(!addTankPart(tile)) { return false; } + } + + for(int i = 1; i <= 3; i++) + { + current = current.getFromSide(front); + TileEntity tile = current.getTileEntity(worldObj); + if(!addTankPart(tile)) { return false; } + } + + for(int i = 1; i <= 3; i++) + { + current = current.getFromSide(right); + TileEntity tile = current.getTileEntity(worldObj); + if(!addTankPart(tile)) { return false; } + } + + return true; + } + + public boolean findBottomLayer() + { + Coord4D baseBlock = Coord4D.get(this).getFromSide(ForgeDirection.DOWN); + + ForgeDirection left = MekanismUtils.getLeft(facing); + ForgeDirection right = MekanismUtils.getRight(facing); + + if(!findBottomRow(baseBlock)) { return false; }; + if(!findBottomRow(baseBlock.getFromSide(left))) { return false; }; + if(!findBottomRow(baseBlock.getFromSide(right))) { return false; }; + + boolean twoLeft = findBottomRow(baseBlock.getFromSide(left).getFromSide(left)); + boolean twoRight = findBottomRow(baseBlock.getFromSide(right).getFromSide(right)); + + if(twoLeft == twoRight) { return false; } + + isLeftOnFace = twoLeft; + return true; + } + + public boolean findBottomRow(Coord4D start) + { + ForgeDirection back = MekanismUtils.getBack(facing); + Coord4D current = start; + + for(int i = 1; i <= 4; i++) + { + TileEntity tile = current.getTileEntity(worldObj); + if(!addTankPart(tile)) { return false; } + current = current.getFromSide(back); + } + + return true; + } + + public boolean addTankPart(TileEntity tile) + { + if(tile instanceof TileEntitySalinationTank) + { + ((TileEntitySalinationTank)tile).addToStructure(this); + tankParts.add((TileEntitySalinationTank)tile); + return true; + } + else { + return false; } } + + public boolean addSolarPanel(TileEntity tile, int i) + { + if(tile instanceof TileEntityAdvancedSolarGenerator) + { + solars[i] = (TileEntityAdvancedSolarGenerator)tile; + return true; + } + else { + return false; + } + } + + @Override + public boolean onSneakRightClick(EntityPlayer player, int side) + { + return false; + } + + @Override + public boolean onRightClick(EntityPlayer player, int side) + { + structured = buildStructure(); + player.sendChatToPlayer(ChatMessageComponent.createFromText("Height: " + height + ", Structured: " + structured)); + System.out.println(solars[0] + " " + solars[1] + " " + solars[2] + " " + solars[3]); + return true; + } + + public void clearStructure() + { + for(TileEntitySalinationTank tankPart : tankParts) + { + tankPart.controllerGone(); + } + tankParts.clear(); + solars = new TileEntityAdvancedSolarGenerator[]{null, null, null, null}; + } } diff --git a/common/mekanism/common/tile/TileEntitySalinationTank.java b/common/mekanism/common/tile/TileEntitySalinationTank.java new file mode 100644 index 000000000..04f4af5b7 --- /dev/null +++ b/common/mekanism/common/tile/TileEntitySalinationTank.java @@ -0,0 +1,34 @@ +package mekanism.common.tile; + +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; + +public class TileEntitySalinationTank extends TileEntityContainerBlock +{ + TileEntitySalinationController master; + + public TileEntitySalinationTank() + { + super("SalinationTank"); + inventory = new ItemStack[0]; + + } + + public TileEntitySalinationTank(String fullName) + { + super(fullName); + inventory = new ItemStack[0]; + } + + public void onUpdate() {}; + + public void addToStructure(TileEntitySalinationController controller) + { + master = controller; + } + + public void controllerGone() + { + master = null; + } +} diff --git a/common/mekanism/common/tile/TileEntitySalinationValve.java b/common/mekanism/common/tile/TileEntitySalinationValve.java index cd63e9f7a..b8155332d 100644 --- a/common/mekanism/common/tile/TileEntitySalinationValve.java +++ b/common/mekanism/common/tile/TileEntitySalinationValve.java @@ -7,15 +7,8 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; -public class TileEntitySalinationValve extends TileEntityContainerBlock implements IFluidHandler +public class TileEntitySalinationValve extends TileEntitySalinationTank implements IFluidHandler { - public TileEntitySalinationController master; - - public TileEntitySalinationValve() - { - super("SalinationController"); - } - @Override public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { @@ -61,7 +54,4 @@ public class TileEntitySalinationValve extends TileEntityContainerBlock implemen } return new FluidTankInfo[] {new FluidTankInfo(master.waterTank), new FluidTankInfo(master.brineTank)}; } - - @Override - public void onUpdate() {} } diff --git a/common/mekanism/common/util/MekanismUtils.java b/common/mekanism/common/util/MekanismUtils.java index 02f8277db..84a69765f 100644 --- a/common/mekanism/common/util/MekanismUtils.java +++ b/common/mekanism/common/util/MekanismUtils.java @@ -444,6 +444,16 @@ public final class MekanismUtils { return getLeft(orientation).getOpposite(); } + + /** + * Gets the opposite side of a certain orientation. + * @param orientation + * @return opposite side + */ + public static ForgeDirection getBack(int orientation) + { + return ForgeDirection.getOrientation(orientation).getOpposite(); + } /** * Checks to see if a specified ItemStack is stored in the Ore Dictionary with the specified name.