From dd4aefb2fd58e7fcada7136208bc99000e87ad2e Mon Sep 17 00:00:00 2001 From: HbmMods Date: Sun, 29 Mar 2020 01:03:49 +0100 Subject: [PATCH] DFC emitter functionality (mostly), new shotgun shell textures --- assets/hbm/textures/gui/dfc/gui_emitter.png | Bin 1954 -> 1912 bytes assets/hbm/textures/items/ammo_12gauge.png | Bin 267 -> 298 bytes .../items/ammo_12gauge_incendiary.png | Bin 296 -> 310 bytes assets/hbm/textures/items/ammo_20gauge.png | Bin 245 -> 311 bytes .../textures/items/ammo_20gauge_caustic.png | Bin 294 -> 332 bytes .../textures/items/ammo_20gauge_explosive.png | Bin 327 -> 323 bytes .../textures/items/ammo_20gauge_flechette.png | Bin 284 -> 317 bytes .../items/ammo_20gauge_incendiary.png | Bin 283 -> 314 bytes .../hbm/textures/items/ammo_20gauge_shock.png | Bin 283 -> 286 bytes .../hbm/textures/items/ammo_20gauge_slug.png | Bin 284 -> 324 bytes .../textures/items/ammo_20gauge_wither.png | Bin 293 -> 342 bytes com/hbm/entity/projectile/EntityLaser.java | 12 +- .../container/ContainerCoreEmitter.java | 4 - com/hbm/inventory/gui/GUIAMSLimiter.java | 3 - com/hbm/inventory/gui/GUICoreEmitter.java | 81 ++++++++++- .../inventory/gui/GUIMachineReactorSmall.java | 2 - com/hbm/inventory/gui/GUIRadioRec.java | 1 - com/hbm/packet/AuxButtonPacket.java | 26 ++-- com/hbm/render/entity/RenderLaser.java | 7 +- com/hbm/render/tileentity/RenderAMSBase.java | 5 - .../render/tileentity/RenderAMSEmitter.java | 4 +- .../tileentity/RenderCoreComponent.java | 14 +- .../render/tileentity/RendererObjTester.java | 5 +- com/hbm/render/util/BeamPronter.java | 75 +++++++--- .../machine/TileEntityAMSLimiter.java | 2 - .../machine/TileEntityCoreEmitter.java | 133 ++++++++++++++++-- 26 files changed, 297 insertions(+), 77 deletions(-) diff --git a/assets/hbm/textures/gui/dfc/gui_emitter.png b/assets/hbm/textures/gui/dfc/gui_emitter.png index 1ab46d3ddb297757c694ed1051c6e2ddf91a65fc..d81b5d9b7e32d1cc1114732deea8b01d83bb9aa3 100644 GIT binary patch literal 1912 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 diff --git a/assets/hbm/textures/items/ammo_12gauge.png b/assets/hbm/textures/items/ammo_12gauge.png index f763a944f19d08aef8329256b1f2cccd195e1137..ec00ddf2179a4ba148649be0882ecd6566a53dca 100644 GIT binary patch delta 254 zcmVelYe%S0pZ$vP=hY=P2to4fJD`>sq zQAC}?EHnW715Y7IxB&}21{sn40s8(2y0_$aU?vh@K8dIZ_;>zHIQCrRTIh&qXZ z3B<3rSZgEXK5&D4ym+!KBTdr?Q2^e13C|F5?^}#948wp@ineXB*5aHK2uk$cOI_D@ zn|98LF@~<|$n%`4s%V<#@^*5A8>B2tIsZIs{uG{?6Yd&sPRPw1`~Uy|07*qoM6N<$ Ef*|pA6#xJL delta 223 zcmV<503iRW0*eBWG=IWLL_t(IjqQ^?3&JoIMNg$2gdjSk?t22(%&a4|SJKEO%mOtuY*~t%_ z-DTXp97<=e(CGq;dCX)4=W9%Hf!1@rP4J8U01sfsrsJ)~J6JzJDP=z^fUHu6#THqm zPGAe5wGNb0R%;yq7-Kp?m)Dx$2>}p7P?qIu8DkJaI04?zlq89bqKKwxsOy?6%e>iM Zx&!SSL}4uOE|CBL002ovPDHLkV1h$UXdVCn diff --git a/assets/hbm/textures/items/ammo_12gauge_incendiary.png b/assets/hbm/textures/items/ammo_12gauge_incendiary.png index dfd64bd818679d6d9949d51b88a165a5c7d4258e..0e43c87880d5d4441522ef710df188ec63409b7c 100644 GIT binary patch delta 267 zcmV+m0rdW;0=5E>G=J?$L_t(IjjhqWZi6ro!12EsI^qSC&X%{X>~@Aoya3&KOQbIF z799{XRajWFT!$p(!=?1=7E9;z&v!Qbck~X~s}ZJ}Xt8lZ4rzj%_K^VS9fD3kr=YhH z0pWE8^bR>Z+%n^N7YRCeY*23(U>v@U+}}aXlOLVvkY{zoS{opr0&B#dpUAR|IF17(0`T6;e4Qiy;xNWA3@}H R{{R3007*qoL7@Pi7?{3*nK0Ua!Es0UohX5T@X?C8S#`bpk_P~dJv;(Xpm;v_ zt_ixB8-TDDpHI~Itgf9T%PBWWf^r{Q&km3QFL1J-TDDA$xLm4wg)Ky0000G=J_%L_t(IjjfQeZo)7WMNcACM3$#Y5kvU|KA=09m{27~Sh976 zi4VxwF+ai5r6UW>h@Z$%(4Ad%lz> SEQkOA002ovP6b4+LSTaUCx0aX delta 201 zcmV;)05<=(0`&oqG=Ho~L_t(IjqQ^$3c^4XL|?=dSr7}g5rTHomikogD`LF7!lV9h@L~F|Q4;Djp!p`PlGQ@ej0srE|S456d#M^M5-t@ZU;vOoqtjQDilh&HKH$5Vr%5TpHBHGu#dOtUniUrg@u{j7KRZYu1Z%JedqBp8B?v o)l_!P!45)@wi~)uon#Ja3)WG0o!pz8qW}N^07*qoM6N<$f+n$xLjV8( delta 251 zcmV!|f99l)xo&6%=ZX002ovPDHLkV1hPM BaR~qb diff --git a/assets/hbm/textures/items/ammo_20gauge_explosive.png b/assets/hbm/textures/items/ammo_20gauge_explosive.png index ea4ea2557b0155a1eb402e8bca0756d5092339bc..e1c80fe3dee26880e86713d1c1aee018c8109a6c 100644 GIT binary patch delta 280 zcmV+z0q6e50>c83G=KU@L_t(IjjfO|i^4z@ghyM!D}q%jt*^)*xXLXA8$oPs(%EVs zY%DGFKTZ%t(ruSAy`7@42zrouELP(l*^M0Mz%uN{w@NUTjeAUBMRP@x%LY9J^ zwsvQDqH7N?05SnR4`?(1&#Qp6B49Ju{s71X{AlWWo&)`1;D3gwInax=o01855Ad)9 zFDLCbh`9qRslQB8?7-BQK<)YiWU0RA`E#-H)Gt9w026XPKOx_-kI|rO zg}nSuC_t(Oxt~$VF#Jz3XuC*DO@>$4N}!t esegrCx&aO#s1ZLOB=W7G=Kg{L_t(Ijir*kN&`U@g};$h3!1l<5}~SxAV1je)@`*J9jc;@(Y^Jusa4IdkUBoq?J#RSQ{)ESI}+f1qpC z$>{{~$E#1rH@9W|iDnRn<;~4AJ?Yj!#_`^%Q3TgL*Sc5w=6|h$3|-`c{{xqx9m8Yd z_y?^EFu@;PWQfQ(mLfrxBKZsvi-2pt3%i%Vj9hgK_L0vZOOIUvFn3AipEv~d88^?0 z@I^Ohczwb9Smp@`z*yMW;|av)w?$d_{&6^g@e^FO;dKtD0jw>ozo2uj8&no9e?Xc6 itgJKX+*fOB;T0R!YE84@*D^`~0000r0=)u|G=KC-L_t(IjjhnJYQjJq$MNq;psQF;hn5VPvv+X_n5mN#TwU@A z`T{N;JN6~Ibm=GreE^rt4&u=C5PSgP-yt9u&r4hDA8xw;?{hy6u0CNQmxrTL^n(ad z*@z@ba=dTZFKgZ9whdZ$`3b25VIc$>fZd)yAC_l$;vvxtAfLWoMqQbf$N$aX4bITjnS z8@Tc&R$0{J=`rSWwSb!rZ|`$P!vR@Z-xupRlcmVVOI$VCPUST0Z{R_i_8RA3Vc&cM YV>)>5eHPDY01E&B07*qoM6N<$f~stReEt!1N diff --git a/assets/hbm/textures/items/ammo_20gauge_incendiary.png b/assets/hbm/textures/items/ammo_20gauge_incendiary.png index c776b8843620600dbd468b979290ba624b6f85b8..51dd8acb118376f97f5831c933c9787bfb022e41 100644 GIT binary patch delta 271 zcmV+q0r38t0=fc_G=K3)L_t(IjjfO|PQySHMBh@7awTLdktn!8?%*PJLlq&Vr7<@k zXP~5nL!_ahLMajsK+6GAEOHvRG(+J))>+mD!ARTuKmTcF;lJfF)aMa<&rxeppkbPz zq8}0fT!yd-*c5CWA`q_!0GFZR@orLAy^tWmXoY!u2kPyQA%CC$VEo}%5}Pywn>Mg| zi+S361v0za7T`CKRs~;Ob?&ZDgE|2q2Dv{QFq=-kg+%2tqym*WQgtJ3=Bl1AD%PDHLkV1m%p|7zqS~eXdm@+;U0R>}%Y%o4#}fkI pZjf8teT{THh}Fj=Sk)`J6mNGfIS8)c+0Os~002ovPDHLkV1lm`YcK!+ diff --git a/assets/hbm/textures/items/ammo_20gauge_shock.png b/assets/hbm/textures/items/ammo_20gauge_shock.png index 3abe94704e4ee89d38f494c286e6b2dd73198809..e50f545b234ef024d78675b353acf2620e0a0b13 100644 GIT binary patch delta 242 zcmVDTY+H4@4zMi1w)IK!ynluQ_`ZR*1={vA#PC;(ZfWR=?&rm zl&nM{sfFThTm+lcCM~uPLMD^U%SV2IiHd?VQWCVb<1F*8oi!2X)Wkxxi?wdgdktJA zNxS$r*AeFgBD;f>1f@()DT0&)AqEJFB8b^1W58I1JpZ@WLukNQ_*MoDM#>tD*gZ%f zPiZH2IcHvjxf2tdmsuXySjNDsHmw{WAh*9gJXBA=!IvO%33glHdIuIUP}M;72GWh+ pAb4>409wUBSsRmd-}CXN=mU*OPf%+3eV70M002ovPDHLkV1lZ&Xw3is diff --git a/assets/hbm/textures/items/ammo_20gauge_slug.png b/assets/hbm/textures/items/ammo_20gauge_slug.png index d78e648f3f1f1857da1c80673db82623d98be0f6..12a7f47e34d2baed6f707b5da8003f0de176ba1b 100644 GIT binary patch delta 281 zcmV+!0p|Xk0>lE4G=KX^L_t(IjkS`oN&`UZ(W!A|-By^y=>PgcuCFJw%ns#aH+?e5LC zYumluSPp6ZgFYu$=bp=p86WSjaB|Ai=7rUAL0z@`EjtIQEA07U_U&Z5w(jtlgI>s3 f->CjHJftsxtP*>yqk>^-00000NkvXXu0mjf2JVJC delta 240 zcmVJL0C zJ&7LNqy%sAP%M#bD%yb%b~8K7W`K#vQV&{dZ;TmgB4W90Qz_-cnuwD8oD+~zM#D-e z*6EDx0;sAAWm%%@I#_EFuERR0>)Nx7FUZ5;e?$fcP17V38EFGMq_y@!i0BWvDA^Q# z0V{CWv{7%rC5HJKqermPaeaa;0OR^YZrp(n@5?PFws&6O?H~&sEEmA}3Wx%*4zN!^ q&v}7lbdMdpDthbI0eY3@PQnYD@Jz$3?D*yY00000BkG( diff --git a/assets/hbm/textures/items/ammo_20gauge_wither.png b/assets/hbm/textures/items/ammo_20gauge_wither.png index 0987ab1c54dc20dc8bd29019096567648ecf01ea..cc717431ae260b5ead9bc2cfdc602a78b5e75866 100644 GIT binary patch delta 300 zcmV+{0n`4a0@ebMGk*aMNklDZyj-Z%502v=@BQBQ9dK=hLBN;vlm3XL zWI+U0oACRjrVo@7Hb@ z0MBEIY-k7sf<;qv9aTysX_n z=;w3_`fD+OPSapm2~9>?*e!&4o+kiZt!XO7-Z}oxXXJ4L2Xi~;kolFU0emQh%r67r zVf`&YG5iiB`U;f+({UbXlTQ-`$j9}Fk2U++P}gv@w{@`39e9~nzhUEg8wV5)66v7d zf#n7=4aS0T&}+v5rMJHS#y9lMy0Oq3mG@SPE2_awQ-atfd;kCd07*qoM6N<$f}p5% A0ssI2 diff --git a/com/hbm/entity/projectile/EntityLaser.java b/com/hbm/entity/projectile/EntityLaser.java index 3b5efd1a1..abef03c16 100644 --- a/com/hbm/entity/projectile/EntityLaser.java +++ b/com/hbm/entity/projectile/EntityLaser.java @@ -1,5 +1,7 @@ package com.hbm.entity.projectile; +import java.util.List; + import com.hbm.lib.Library; import com.hbm.lib.ModDamageSource; @@ -8,6 +10,7 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.World; @@ -56,14 +59,15 @@ public class EntityLaser extends Entity { MovingObjectPosition pos = Library.rayTrace(player, range, 1); - if(pos.entityHit != null) { - pos.entityHit.attackEntityFrom(ModDamageSource.radiation, 2); - } - //worldObj.createExplosion(this, pos.hitVec.xCoord, pos.hitVec.yCoord, pos.hitVec.zCoord, 1, false); worldObj.spawnParticle("cloud", pos.hitVec.xCoord, pos.hitVec.yCoord, pos.hitVec.zCoord, 0, 0, 0); worldObj.playSound(pos.hitVec.xCoord, pos.hitVec.yCoord, pos.hitVec.zCoord, "random.fizz", 1, 1, true); + + List list = worldObj.getEntitiesWithinAABB(Entity.class, AxisAlignedBB.getBoundingBox(pos.hitVec.xCoord - 1, pos.hitVec.yCoord - 1, pos.hitVec.zCoord - 1, pos.hitVec.xCoord + 1, pos.hitVec.yCoord + 1, pos.hitVec.zCoord + 1)); + + for(Entity e : list) + e.attackEntityFrom(ModDamageSource.radiation, 5); } } diff --git a/com/hbm/inventory/container/ContainerCoreEmitter.java b/com/hbm/inventory/container/ContainerCoreEmitter.java index d382f6489..a884a381f 100644 --- a/com/hbm/inventory/container/ContainerCoreEmitter.java +++ b/com/hbm/inventory/container/ContainerCoreEmitter.java @@ -1,6 +1,5 @@ package com.hbm.inventory.container; -import com.hbm.inventory.SlotMachineOutput; import com.hbm.tileentity.machine.TileEntityCoreEmitter; import net.minecraft.entity.player.EntityPlayer; @@ -15,9 +14,6 @@ public class ContainerCoreEmitter extends Container { public ContainerCoreEmitter(InventoryPlayer invPlayer, TileEntityCoreEmitter tedf) { nukeBoy = tedf; - - this.addSlotToContainer(new Slot(tedf, 0, 8, 17)); - this.addSlotToContainer(new SlotMachineOutput(invPlayer.player, tedf, 1, 8, 53)); for(int i = 0; i < 3; i++) { diff --git a/com/hbm/inventory/gui/GUIAMSLimiter.java b/com/hbm/inventory/gui/GUIAMSLimiter.java index a2b77a307..69f8cffeb 100644 --- a/com/hbm/inventory/gui/GUIAMSLimiter.java +++ b/com/hbm/inventory/gui/GUIAMSLimiter.java @@ -4,13 +4,10 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.FluidTank; import com.hbm.inventory.container.ContainerAMSLimiter; -import com.hbm.inventory.container.ContainerMachinePress; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityAMSLimiter; -import com.hbm.tileentity.machine.TileEntityMachinePress; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.ResourceLocation; diff --git a/com/hbm/inventory/gui/GUICoreEmitter.java b/com/hbm/inventory/gui/GUICoreEmitter.java index 97e081fd4..7252a612b 100644 --- a/com/hbm/inventory/gui/GUICoreEmitter.java +++ b/com/hbm/inventory/gui/GUICoreEmitter.java @@ -1,41 +1,88 @@ package com.hbm.inventory.gui; +import org.apache.commons.lang3.math.NumberUtils; +import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; +import com.hbm.inventory.FluidTank; import com.hbm.inventory.container.ContainerCoreEmitter; +import com.hbm.lib.Library; import com.hbm.lib.RefStrings; +import com.hbm.packet.AuxButtonPacket; +import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.machine.TileEntityCoreEmitter; import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; public class GUICoreEmitter extends GuiInfoContainer { private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/dfc/gui_emitter.png"); - private TileEntityCoreEmitter press; + private TileEntityCoreEmitter emitter; + private GuiTextField field; public GUICoreEmitter(InventoryPlayer invPlayer, TileEntityCoreEmitter tedf) { super(new ContainerCoreEmitter(invPlayer, tedf)); - press = tedf; + emitter = tedf; this.xSize = 176; this.ySize = 166; } + public void initGui() { + + super.initGui(); + + Keyboard.enableRepeatEvents(true); + this.field = new GuiTextField(this.fontRendererObj, guiLeft + 57, guiTop + 57, 29, 12); + this.field.setTextColor(-1); + this.field.setDisabledTextColour(-1); + this.field.setEnableBackgroundDrawing(false); + this.field.setMaxStringLength(5); + this.field.setText(String.valueOf(emitter.watts)); + } + @Override public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); - - this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 26, guiTop + 69 - 52, 16, 52, press.power, press.maxPower); + this.field.drawTextBox(); + + emitter.tank.renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 17, 16, 52); + this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 26, guiTop + 17, 16, 52, emitter.power, emitter.maxPower); + } + + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + this.field.mouseClicked(x, y, i); + + if(guiLeft + 97 <= x && guiLeft + 97 + 18 > x && guiTop + 52 < y && guiTop + 52 + 18 >= y) { + + if(NumberUtils.isNumber(field.getText())) { + int j = MathHelper.clamp_int(Integer.parseInt(field.getText()), 1, 100); + field.setText(j + ""); + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + PacketDispatcher.wrapper.sendToServer(new AuxButtonPacket(emitter.xCoord, emitter.yCoord, emitter.zCoord, j, 0)); + } + } + + if(guiLeft + 133 <= x && guiLeft + 133 + 18 > x && guiTop + 52 < y && guiTop + 52 + 18 >= y) { + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + PacketDispatcher.wrapper.sendToServer(new AuxButtonPacket(emitter.xCoord, emitter.yCoord, emitter.zCoord, 0, 1)); + } } @Override protected void drawGuiContainerForegroundLayer( int i, int j) { - String name = this.press.hasCustomInventoryName() ? this.press.getInventoryName() : I18n.format(this.press.getInventoryName()); - + String name = this.emitter.hasCustomInventoryName() ? this.emitter.getInventoryName() : I18n.format(this.emitter.getInventoryName()); this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + + this.fontRendererObj.drawString("Output: " + Library.getShortNumber(emitter.joules) + "Spk", 50, 30, 0xFF7F7F); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } @@ -44,5 +91,27 @@ public class GUICoreEmitter extends GuiInfoContainer { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + if(field.isFocused()) + drawTexturedModalRect(guiLeft + 53, guiTop + 53, 210, 4, 34, 16); + + if(emitter.isOn) + drawTexturedModalRect(guiLeft + 133, guiTop + 52, 192, 0, 18, 18); + + drawTexturedModalRect(guiLeft + 53, guiTop + 45, 210, 0, emitter.watts * 34 / 100, 4); + + int i = (int) emitter.getPowerScaled(52); + drawTexturedModalRect(guiLeft + 26, guiTop + 69 - i, 176, 52 - i, 16, i); + + Minecraft.getMinecraft().getTextureManager().bindTexture(emitter.tank.getSheet()); + emitter.tank.renderTank(this, guiLeft + 8, guiTop + 69, emitter.tank.getTankType().textureX() * FluidTank.x, emitter.tank.getTankType().textureY() * FluidTank.y, 16, 52); } + + protected void keyTyped(char p_73869_1_, int p_73869_2_) + { + if (this.field.textboxKeyTyped(p_73869_1_, p_73869_2_)) { } + else { + super.keyTyped(p_73869_1_, p_73869_2_); + } + } } diff --git a/com/hbm/inventory/gui/GUIMachineReactorSmall.java b/com/hbm/inventory/gui/GUIMachineReactorSmall.java index 3dcbb1bef..620f70c98 100644 --- a/com/hbm/inventory/gui/GUIMachineReactorSmall.java +++ b/com/hbm/inventory/gui/GUIMachineReactorSmall.java @@ -138,8 +138,6 @@ public class GUIMachineReactorSmall extends GuiInfoContainer { if(diFurnace.tanks[2].getFill() > 0) { int i = diFurnace.getSteamScaled(88); - //i = (int) Math.min(i, 160); - int offset = 234; switch(diFurnace.tanks[2].getTankType()) { diff --git a/com/hbm/inventory/gui/GUIRadioRec.java b/com/hbm/inventory/gui/GUIRadioRec.java index 306f2eecc..5d0203496 100644 --- a/com/hbm/inventory/gui/GUIRadioRec.java +++ b/com/hbm/inventory/gui/GUIRadioRec.java @@ -10,7 +10,6 @@ import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerRadioRec; -import com.hbm.inventory.gui.GUIRadioRec.RadioButton; import com.hbm.lib.RefStrings; import com.hbm.packet.AuxButtonPacket; import com.hbm.packet.PacketDispatcher; diff --git a/com/hbm/packet/AuxButtonPacket.java b/com/hbm/packet/AuxButtonPacket.java index 04e2e8955..c81f9ab0a 100644 --- a/com/hbm/packet/AuxButtonPacket.java +++ b/com/hbm/packet/AuxButtonPacket.java @@ -1,34 +1,21 @@ package com.hbm.packet; -import com.hbm.explosion.ExplosionLarge; import com.hbm.handler.FluidTypeHandler.FluidType; import com.hbm.items.weapon.ItemMissile.PartSize; -import com.hbm.saveddata.SatelliteSaveStructure; -import com.hbm.saveddata.SatelliteSavedData; import com.hbm.tileentity.bomb.TileEntityLaunchTable; -import com.hbm.tileentity.bomb.TileEntityTurretCIWS; -import com.hbm.tileentity.bomb.TileEntityTurretCheapo; -import com.hbm.tileentity.machine.TileEntityAMSBase; -import com.hbm.tileentity.machine.TileEntityAMSEmitter; -import com.hbm.tileentity.machine.TileEntityAMSLimiter; +import com.hbm.tileentity.machine.TileEntityCoreEmitter; import com.hbm.tileentity.machine.TileEntityForceField; -import com.hbm.tileentity.machine.TileEntityMachineDiesel; import com.hbm.tileentity.machine.TileEntityMachineMissileAssembly; import com.hbm.tileentity.machine.TileEntityMachineReactorLarge; import com.hbm.tileentity.machine.TileEntityMachineReactorSmall; -import com.hbm.tileentity.machine.TileEntityMachineSeleniumEngine; import com.hbm.tileentity.machine.TileEntityRadioRec; import com.hbm.tileentity.machine.TileEntityReactorControl; 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 cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; import net.minecraft.tileentity.TileEntity; public class AuxButtonPacket implements IMessage { @@ -219,6 +206,17 @@ public class AuxButtonPacket implements IMessage { launcher.padSize = PartSize.values()[m.value]; } + if (te instanceof TileEntityCoreEmitter) { + TileEntityCoreEmitter core = (TileEntityCoreEmitter)te; + + if(m.id == 0) { + core.watts = m.value; + } + if(m.id == 1) { + core.isOn = !core.isOn; + } + } + //} catch (Exception x) { } return null; diff --git a/com/hbm/render/entity/RenderLaser.java b/com/hbm/render/entity/RenderLaser.java index fac5a6703..2676a2d0f 100644 --- a/com/hbm/render/entity/RenderLaser.java +++ b/com/hbm/render/entity/RenderLaser.java @@ -41,8 +41,11 @@ public class RenderLaser extends Render { MovingObjectPosition pos = Library.rayTrace(player, 100, 1); Vec3 skeleton = Vec3.createVectorHelper(pos.hitVec.xCoord - player.posX, pos.hitVec.yCoord - player.posY - player.getEyeHeight(), pos.hitVec.zCoord - player.posZ); - - BeamPronter.prontHelix(skeleton, 0, 0, 0, EnumWaveType.SPIRAL, EnumBeamType.LINE, 0x0000ff, 0x8080ff, 0, (int)(skeleton.lengthVector() * 5), 0.2F); + int init = (int) -(System.currentTimeMillis() % 360); + + //BeamPronter.prontHelix(skeleton, 0, 0, 0, EnumWaveType.SPIRAL, EnumBeamType.LINE, 0x0000ff, 0x8080ff, 0, (int)(skeleton.lengthVector() * 5), 0.2F); + BeamPronter.prontHelix(skeleton, EnumWaveType.SPIRAL, EnumBeamType.SOLID, 0xff5000, 0xff5000, init, (int) skeleton.lengthVector() + 1, 0.1F, 4, 0.05F); + BeamPronter.prontHelix(skeleton, EnumWaveType.SPIRAL, EnumBeamType.SOLID, 0xff3000, 0xff3000, init, 1, 0F, 4, 0.05F); } GL11.glPopMatrix(); diff --git a/com/hbm/render/tileentity/RenderAMSBase.java b/com/hbm/render/tileentity/RenderAMSBase.java index fe9a032f5..f98abf111 100644 --- a/com/hbm/render/tileentity/RenderAMSBase.java +++ b/com/hbm/render/tileentity/RenderAMSBase.java @@ -1,17 +1,12 @@ package com.hbm.render.tileentity; -import java.util.Random; - import org.lwjgl.opengl.GL11; -import com.hbm.lib.RefStrings; import com.hbm.main.ResourceManager; import com.hbm.tileentity.machine.TileEntityAMSBase; -import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; public class RenderAMSBase extends TileEntitySpecialRenderer { diff --git a/com/hbm/render/tileentity/RenderAMSEmitter.java b/com/hbm/render/tileentity/RenderAMSEmitter.java index f0e992943..78b90d954 100644 --- a/com/hbm/render/tileentity/RenderAMSEmitter.java +++ b/com/hbm/render/tileentity/RenderAMSEmitter.java @@ -62,9 +62,9 @@ public class RenderAMSEmitter extends TileEntitySpecialRenderer { TileEntityAMSEmitter emitter = (TileEntityAMSEmitter)tileEntity; - if(emitter.getWorldObj().getTileEntity(emitter.xCoord, emitter.yCoord - 9, emitter.zCoord) instanceof TileEntityAMSBase && !emitter.locked) { + if(emitter.getWorldObj().getTileEntity(emitter.xCoord, emitter.yCoord - 9, emitter.zCoord) instanceof TileEntityAMSBase && !emitter.locked || true) { - if(emitter.efficiency > 0) { + if(emitter.efficiency > 0 || true) { double lastPosX = 0; double lastPosZ = 0; diff --git a/com/hbm/render/tileentity/RenderCoreComponent.java b/com/hbm/render/tileentity/RenderCoreComponent.java index 0d5e92e98..27567eea1 100644 --- a/com/hbm/render/tileentity/RenderCoreComponent.java +++ b/com/hbm/render/tileentity/RenderCoreComponent.java @@ -2,7 +2,6 @@ package com.hbm.render.tileentity; import org.lwjgl.opengl.GL11; -import com.hbm.lib.RefStrings; import com.hbm.main.ResourceManager; import com.hbm.render.util.BeamPronter; import com.hbm.render.util.BeamPronter.EnumBeamType; @@ -13,10 +12,7 @@ import com.hbm.tileentity.machine.TileEntityCoreReceiver; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; import net.minecraft.util.Vec3; -import net.minecraftforge.client.model.AdvancedModelLoader; -import net.minecraftforge.client.model.IModelCustom; public class RenderCoreComponent extends TileEntitySpecialRenderer { @@ -54,8 +50,14 @@ public class RenderCoreComponent extends TileEntitySpecialRenderer { if(tileEntity instanceof TileEntityCoreEmitter) { bindTexture(ResourceManager.dfc_emitter_tex); ResourceManager.dfc_emitter.renderAll(); - BeamPronter.prontHelix(Vec3.createVectorHelper(0, 0, 6), 0, 0.5, 0.5, EnumWaveType.SPIRAL, EnumBeamType.LINE, 0xFF0000, 0xFF8000, (int)tileEntity.getWorldObj().getTotalWorldTime() % 360 * -50, 100, 0.25F); - + GL11.glTranslated(0, 0.5, 0); + int range = ((TileEntityCoreEmitter)tileEntity).beam; + + if(range > 0) { + BeamPronter.prontHelix(Vec3.createVectorHelper(0, 0, range), EnumWaveType.SPIRAL, EnumBeamType.SOLID, 0xFFFF00, 0xFFFF00, 0, 1, 0F, 2, 0.0625F); + BeamPronter.prontHelix(Vec3.createVectorHelper(0, 0, range), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0xFF6000, 0xFF6000, (int)tileEntity.getWorldObj().getTotalWorldTime() % 100, range * 2, 0.125F, 4, 0.0625F); + BeamPronter.prontHelix(Vec3.createVectorHelper(0, 0, range), EnumWaveType.RANDOM, EnumBeamType.SOLID, 0xFF6000, 0xFF6000, (int)tileEntity.getWorldObj().getTotalWorldTime() % 100 + 1, range * 2, 0.125F, 4, 0.0625F); + } } if(tileEntity instanceof TileEntityCoreReceiver) { diff --git a/com/hbm/render/tileentity/RendererObjTester.java b/com/hbm/render/tileentity/RendererObjTester.java index 6c0275f50..bfee1c9dc 100644 --- a/com/hbm/render/tileentity/RendererObjTester.java +++ b/com/hbm/render/tileentity/RendererObjTester.java @@ -115,9 +115,10 @@ public class RendererObjTester extends TileEntitySpecialRenderer { bindTexture(new ResourceLocation(RefStrings.MODID, "textures/models/ModelCalStock.png"));*/ //stock.renderAll(1F/16F); - SoyuzPronter.prontSoyuz(); + //SoyuzPronter.prontSoyuz(); //TomPronter.prontTom(); - //BeamPronter.prontHelix(Vec3.createVectorHelper(0, 5, 0), 0.5, 0.5, 0.5, EnumWaveType.SPIRAL, EnumBeamType.LINE, 0x0000ff, 0xffff00, (int)tileEntity.getWorldObj().getTotalWorldTime() % 360 * 25, 25, 0.25F); + BeamPronter.prontHelix(Vec3.createVectorHelper(5, 5, 5), EnumWaveType.SPIRAL, EnumBeamType.SOLID, 0xff8000, 0xff8000, (int)tileEntity.getWorldObj().getTotalWorldTime() % 360 * 25, 25, 0.1F, 4, 0.05F); + BeamPronter.prontHelix(Vec3.createVectorHelper(5, 5, 5), EnumWaveType.SPIRAL, EnumBeamType.SOLID, 0xffff00, 0xffff00, (int)tileEntity.getWorldObj().getTotalWorldTime() % 360 * 25, 1, 0F, 4, 0.05F); //BeamPronter.prontHelix(Vec3.createVectorHelper(0, 5, 0), 0.5, 0.5, 0.5, EnumWaveType.SPIRAL, EnumBeamType.LINE, 0x0000ff, 0xffff00, (int)tileEntity.getWorldObj().getTotalWorldTime() % 360 * 25 + 180, 25, 0.25F); GL11.glPopMatrix(); diff --git a/com/hbm/render/util/BeamPronter.java b/com/hbm/render/util/BeamPronter.java index 73467536b..3a3a8d96f 100644 --- a/com/hbm/render/util/BeamPronter.java +++ b/com/hbm/render/util/BeamPronter.java @@ -20,9 +20,19 @@ public class BeamPronter { LINE } - public static void prontHelix(Vec3 skeleton, double x, double y, double z, EnumWaveType wave, EnumBeamType beam, int outerColor, int innerColor, int start, int segments, float size) { + public static void prontHelix(Vec3 skeleton, EnumWaveType wave, EnumBeamType beam, int outerColor, int innerColor, int start, int segments, float size, int layers, float thickness) { GL11.glPushMatrix(); + + float sYaw = (float)(Math.atan2(skeleton.xCoord, skeleton.zCoord) * 180F / Math.PI); + float sqrt = MathHelper.sqrt_double(skeleton.xCoord * skeleton.xCoord + skeleton.zCoord * skeleton.zCoord); + float sPitch = (float)(Math.atan2(skeleton.yCoord, (double)sqrt) * 180F / Math.PI); + + GL11.glRotatef(180, 0, 1F, 0); + GL11.glRotatef(sYaw, 0, 1F, 0); + GL11.glRotatef(sPitch - 90, 1F, 0, 0); + + GL11.glPushMatrix(); GL11.glDisable(GL11.GL_TEXTURE_2D); GL11.glDisable(GL11.GL_LIGHTING); @@ -34,18 +44,13 @@ public class BeamPronter { Tessellator tessellator = Tessellator.instance; - Vec3 unit = skeleton.normalize(); + Vec3 unit = Vec3.createVectorHelper(0, 1, 0); Random rand = new Random(start); double length = skeleton.lengthVector(); double segLength = length / segments; - - float sYaw = (float)(Math.atan2(skeleton.xCoord, skeleton.zCoord)); - float sqrt = MathHelper.sqrt_double(skeleton.xCoord * skeleton.xCoord + skeleton.zCoord * skeleton.zCoord); - float sPitch = (float)(Math.atan2(skeleton.yCoord, (double)sqrt)); - - double lastX = x; - double lastY = y; - double lastZ = z; + double lastX = 0; + double lastY = 0; + double lastZ = 0; for(int i = 0; i <= segments; i++) { @@ -58,8 +63,8 @@ public class BeamPronter { spinner.rotateAroundY((float)Math.PI * 2 * rand.nextFloat()); } - spinner.rotateAroundX(sPitch + (float)Math.PI * 0.5F); - spinner.rotateAroundY(sYaw); + //spinner.rotateAroundX(sPitch + (float)Math.PI * 0.5F); + //spinner.rotateAroundY(sYaw); double pX = unit.xCoord * segLength * i + spinner.xCoord; double pY = unit.yCoord * segLength * i + spinner.yCoord; @@ -69,13 +74,49 @@ public class BeamPronter { tessellator.startDrawing(3); tessellator.setColorOpaque_I(outerColor); - tessellator.addVertex(pX + x, pY + y, pZ + z); - tessellator.addVertex(lastX + x, lastY + y, lastZ + z); + tessellator.addVertex(pX, pY, pZ); + tessellator.addVertex(lastX, lastY, lastZ); tessellator.draw(); } if(beam == EnumBeamType.SOLID && i > 0) { + float radius = thickness / layers; + + for(int j = 1; j <= layers; j++) { + + float inter = (float)(j - 1) / (float)(layers - 1); + int color = (int) (outerColor + (innerColor - outerColor) * inter); + + tessellator.startDrawingQuads(); + tessellator.setColorOpaque_I(color); + tessellator.addVertex(lastX + (radius * j), lastY, lastZ + (radius * j)); + tessellator.addVertex(lastX + (radius * j), lastY, lastZ - (radius * j)); + tessellator.addVertex(pX + (radius * j), pY, pZ - (radius * j)); + tessellator.addVertex(pX + (radius * j), pY, pZ + (radius * j)); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setColorOpaque_I(color); + tessellator.addVertex(lastX - (radius * j), lastY, lastZ + (radius * j)); + tessellator.addVertex(lastX - (radius * j), lastY, lastZ - (radius * j)); + tessellator.addVertex(pX - (radius * j), pY, pZ - (radius * j)); + tessellator.addVertex(pX - (radius * j), pY, pZ + (radius * j)); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setColorOpaque_I(color); + tessellator.addVertex(lastX + (radius * j), lastY, lastZ + (radius * j)); + tessellator.addVertex(lastX - (radius * j), lastY, lastZ + (radius * j)); + tessellator.addVertex(pX - (radius * j), pY, pZ + (radius * j)); + tessellator.addVertex(pX + (radius * j), pY, pZ + (radius * j)); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setColorOpaque_I(color); + tessellator.addVertex(lastX + (radius * j), lastY, lastZ - (radius * j)); + tessellator.addVertex(lastX - (radius * j), lastY, lastZ - (radius * j)); + tessellator.addVertex(pX - (radius * j), pY, pZ - (radius * j)); + tessellator.addVertex(pX + (radius * j), pY, pZ - (radius * j)); + tessellator.draw(); + } } lastX = pX; @@ -87,8 +128,8 @@ public class BeamPronter { tessellator.startDrawing(3); tessellator.setColorOpaque_I(innerColor); - tessellator.addVertex(x, y, z); - tessellator.addVertex(x + skeleton.xCoord, y + skeleton.yCoord, z + skeleton.zCoord); + tessellator.addVertex(0, 0, 0); + tessellator.addVertex(0, skeleton.lengthVector(), 0); tessellator.draw(); } @@ -100,6 +141,8 @@ public class BeamPronter { GL11.glEnable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glPopMatrix(); + + GL11.glPopMatrix(); } } diff --git a/com/hbm/tileentity/machine/TileEntityAMSLimiter.java b/com/hbm/tileentity/machine/TileEntityAMSLimiter.java index c2d7c88ff..8e848868d 100644 --- a/com/hbm/tileentity/machine/TileEntityAMSLimiter.java +++ b/com/hbm/tileentity/machine/TileEntityAMSLimiter.java @@ -9,10 +9,8 @@ import com.hbm.handler.FluidTypeHandler.FluidType; import com.hbm.interfaces.IConsumer; import com.hbm.interfaces.IFluidAcceptor; import com.hbm.interfaces.IFluidContainer; -import com.hbm.interfaces.IFluidSource; import com.hbm.inventory.FluidTank; import com.hbm.items.ModItems; -import com.hbm.items.special.ItemBattery; import com.hbm.lib.Library; import com.hbm.packet.AuxElectricityPacket; import com.hbm.packet.AuxGaugePacket; diff --git a/com/hbm/tileentity/machine/TileEntityCoreEmitter.java b/com/hbm/tileentity/machine/TileEntityCoreEmitter.java index 3bd5b392e..a4bc3b131 100644 --- a/com/hbm/tileentity/machine/TileEntityCoreEmitter.java +++ b/com/hbm/tileentity/machine/TileEntityCoreEmitter.java @@ -8,21 +8,35 @@ import com.hbm.interfaces.IConsumer; import com.hbm.interfaces.IFluidAcceptor; import com.hbm.interfaces.ILaserable; import com.hbm.inventory.FluidTank; +import com.hbm.lib.ModDamageSource; import com.hbm.tileentity.TileEntityMachineBase; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MathHelper; import net.minecraftforge.common.util.ForgeDirection; public class TileEntityCoreEmitter extends TileEntityMachineBase implements IConsumer, IFluidAcceptor, ILaserable { public long power; public static final long maxPower = 1000000000L; + public int watts; + public int beam; public long joules; public boolean isOn; public FluidTank tank; + public long prev; + + public static final int range = 50; public TileEntityCoreEmitter() { - super(2); + super(0); + tank = new FluidTank(FluidType.CRYOGEL, 64000, 0); } @Override @@ -34,19 +48,110 @@ public class TileEntityCoreEmitter extends TileEntityMachineBase implements ICon public void updateEntity() { if (!worldObj.isRemote) { + + watts = MathHelper.clamp_int(watts, 1, 100); + long demand = maxPower * watts / 2000; - //tank.setType(0, 1, slots); - //tank.updateTank(xCoord, yCoord, zCoord); + tank.updateTank(xCoord, yCoord, zCoord); - ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); - int range = 50; + beam = 0; - for(int i = 1; i <= range; i++) { - - Block b = worldObj.getBlock(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ); + if(joules > 0 || prev > 0) { + + if(tank.getFill() >= 20) { + tank.setFill(tank.getFill() - 20); + } else { + worldObj.setBlock(xCoord, yCoord, zCoord, Blocks.flowing_lava); + return; + } } + + if(isOn) { + + if(power >= demand) { + power -= demand; + long add = watts; + joules += add; + } + prev = joules; + + if(joules > 0) { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); + for(int i = 1; i <= range; i++) { + + beam = i; + + int x = xCoord + dir.offsetX * i; + int y = yCoord + dir.offsetY * i; + int z = zCoord + dir.offsetZ * i; + + TileEntity te = worldObj.getTileEntity(x, y, z); + + if(te instanceof ILaserable) { + + ((ILaserable)te).addEnergy(joules * 98 / 100); + break; + } + + Block b = worldObj.getBlock(x, y, z); + + if(b != Blocks.air) { + + float hardness = b.getExplosionResistance(null); + if(hardness < 6000 && worldObj.rand.nextInt(20) == 0) { + worldObj.func_147480_a(x, y, z, false); + } + + break; + } + } + + + joules = 0; + + double blx = Math.min(xCoord, xCoord + dir.offsetX * beam) + 0.2; + double bux = Math.max(xCoord, xCoord + dir.offsetX * beam) + 0.8; + double bly = Math.min(yCoord, yCoord + dir.offsetY * beam) + 0.2; + double buy = Math.max(yCoord, yCoord + dir.offsetY * beam) + 0.8; + double blz = Math.min(zCoord, zCoord + dir.offsetZ * beam) + 0.2; + double buz = Math.max(zCoord, zCoord + dir.offsetZ * beam) + 0.8; + + List list = worldObj.getEntitiesWithinAABB(Entity.class, AxisAlignedBB.getBoundingBox(blx, bly, blz, bux, buy, buz)); + + for(Entity e : list) { + e.attackEntityFrom(ModDamageSource.amsCore, 5); + e.setFire(10); + } + } + } else { + joules = 0; + prev = 0; + } + + this.updateGauge((int) power, 0, 50); + this.updateGauge(watts, 1, 50); + this.updateGauge((int) prev, 2, 50); + this.updateGauge(beam, 3, 50); + this.updateGauge(isOn ? 1 : 0, 4, 250); } } + + public void processGauge(int val, int id) { + + if(id == 0) power = val; + if(id == 1) watts = val; + if(id == 2) joules = val; + if(id == 3) beam = val; + if(id == 4) isOn = val == 1; + } + + public long getPowerScaled(long i) { + return (power * i) / maxPower; + } + + public int getWattsScaled(int i) { + return (watts * i) / 100; + } @Override public void setFluidFill(int i, FluidType type) { @@ -107,5 +212,17 @@ public class TileEntityCoreEmitter extends TileEntityMachineBase implements ICon public void addEnergy(long energy) { joules += energy; } + + @Override + public AxisAlignedBB getRenderBoundingBox() { + return TileEntity.INFINITE_EXTENT_AABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() + { + return 65536.0D; + } }