From d6847afd578208b6fb1f2ea4dcf74db987a4b1ec Mon Sep 17 00:00:00 2001 From: HoosierTransfer <97118529+HoosierTransfer@users.noreply.github.com> Date: Mon, 27 May 2024 10:28:25 -0400 Subject: [PATCH] end rods and offhand shit --- .../minecraft/models/block/end_rod.json | 45 ++ .../assets/minecraft/models/item/end_rod.json | 6 + .../minecraft/textures/blocks/end_rod.png | Bin 0 -> 178 bytes .../creative_inventory/tab_inventory.png | Bin 1188 -> 16018 bytes .../textures/gui/container/inventory.png | Bin 20186 -> 8536 bytes .../items/empty_armor_slot_shield.png | Bin 0 -> 14615 bytes .../minecraft/textures/particle/particles.png | Bin 3613 -> 3262 bytes src/main/java/net/hoosiertransfer/Config.java | 4 +- .../v1_8/opengl/GlStateManager.java | 66 +- .../v1_8/profile/RenderHighPoly.java | 321 ++++---- .../java/net/minecraft/block/BlockEndRod.java | 138 ++++ .../java/net/minecraft/client/Minecraft.java | 7 +- .../minecraft/client/audio/SoundHandler.java | 9 +- .../client/entity/EntityOtherPlayerMP.java | 2 + .../client/entity/EntityPlayerSP.java | 28 + .../net/minecraft/client/gui/GuiIngame.java | 8 + .../net/minecraft/client/gui/GuiScreen.java | 8 + .../client/gui/inventory/GuiContainer.java | 58 +- .../gui/inventory/GuiContainerCreative.java | 33 +- .../client/gui/inventory/GuiInventory.java | 2 +- .../client/model/ModelArmorStand.java | 4 +- .../minecraft/client/model/ModelBiped.java | 329 ++++---- .../minecraft/client/model/ModelPlayer.java | 16 + .../minecraft/client/model/ModelSkeleton.java | 23 +- .../client/network/NetHandlerPlayClient.java | 6 +- .../client/particle/EffectRenderer.java | 5 + .../client/particle/EntityCrit2FX.java | 11 + .../minecraft/client/particle/EntityFX.java | 42 + .../client/particle/ParticleDragonBreath.java | 79 ++ .../client/particle/ParticleEndRod.java | 28 + .../client/particle/ParticleSweepAttack.java | 100 +++ .../client/renderer/ItemRenderer.java | 739 ++++++++++-------- .../block/model/ItemCameraTransforms.java | 189 +++-- .../renderer/block/model/ModelBlock.java | 30 +- .../client/renderer/entity/RenderItem.java | 48 ++ .../client/renderer/entity/RenderPlayer.java | 111 ++- .../renderer/entity/layers/LayerHeldItem.java | 55 +- .../entity/layers/LayerHeldItemWitch.java | 3 +- .../client/resources/model/ModelBakery.java | 3 +- .../net/minecraft/entity/EntityLiving.java | 11 +- .../minecraft/entity/EntityLivingBase.java | 230 +++++- .../entity/item/EntityArmorStand.java | 5 + .../minecraft/entity/monster/EntityMob.java | 46 +- .../minecraft/entity/passive/EntityBat.java | 14 +- .../minecraft/entity/passive/EntityHorse.java | 10 +- .../minecraft/entity/passive/EntityWolf.java | 4 +- .../minecraft/entity/player/EntityPlayer.java | 305 ++++++-- .../entity/player/InventoryPlayer.java | 142 ++-- .../minecraft/inventory/ContainerPlayer.java | 29 +- .../minecraft/inventory/ItemStackHelper.java | 32 + src/main/java/net/minecraft/item/Item.java | 8 + .../java/net/minecraft/item/ItemStack.java | 10 + .../play/server/S30PacketWindowItems.java | 2 - .../java/net/minecraft/util/DamageSource.java | 7 + .../minecraft/util/EntityDamageSource.java | 7 + .../net/minecraft/util/EnumParticleTypes.java | 5 +- .../java/net/minecraft/util/MathHelper.java | 87 ++- .../gen/structure/StructureComponent.java | 4 +- 58 files changed, 2473 insertions(+), 1041 deletions(-) create mode 100644 resources/resources/assets/minecraft/models/block/end_rod.json create mode 100644 resources/resources/assets/minecraft/models/item/end_rod.json create mode 100644 resources/resources/assets/minecraft/textures/blocks/end_rod.png create mode 100644 resources/resources/assets/minecraft/textures/items/empty_armor_slot_shield.png create mode 100644 src/main/java/net/minecraft/block/BlockEndRod.java create mode 100644 src/main/java/net/minecraft/client/particle/ParticleDragonBreath.java create mode 100644 src/main/java/net/minecraft/client/particle/ParticleEndRod.java create mode 100644 src/main/java/net/minecraft/client/particle/ParticleSweepAttack.java create mode 100644 src/main/java/net/minecraft/inventory/ItemStackHelper.java diff --git a/resources/resources/assets/minecraft/models/block/end_rod.json b/resources/resources/assets/minecraft/models/block/end_rod.json new file mode 100644 index 0000000..2996b74 --- /dev/null +++ b/resources/resources/assets/minecraft/models/block/end_rod.json @@ -0,0 +1,45 @@ +{ + "display": { + "head": { + "rotation": [ -60, 0, 0 ], + "translation": [ 0, 5, -9], + "scale":[ 1, 1, 1] + }, + "thirdperson_righthand": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, 0, 0], + "scale": [ 0.375, 0.375, 0.375 ] + } + }, + "ambientocclusion": false, + "textures": { + "end_rod": "blocks/end_rod", + "particle": "blocks/end_rod" + }, + "elements": [ + { + "from": [ 6, 0, 6 ], + "to": [ 10, 1, 10 ], + "faces": { + "down": { "uv": [ 6, 6, 2, 2 ], "texture": "#end_rod" }, + "up": { "uv": [ 2, 2, 6, 6 ], "texture": "#end_rod" }, + "north": { "uv": [ 2, 6, 6, 7 ], "texture": "#end_rod" }, + "south": { "uv": [ 2, 6, 6, 7 ], "texture": "#end_rod" }, + "west": { "uv": [ 2, 6, 6, 7 ], "texture": "#end_rod" }, + "east": { "uv": [ 2, 6, 6, 7 ], "texture": "#end_rod" } + } + }, + { + "from": [ 7, 1, 7 ], + "to": [ 9, 16, 9 ], + "faces": { + "down": { "uv": [ 4, 2, 2, 0 ], "texture": "#end_rod" }, + "up": { "uv": [ 2, 0, 4, 2 ], "texture": "#end_rod" }, + "north": { "uv": [ 0, 0, 2, 15 ], "texture": "#end_rod" }, + "south": { "uv": [ 0, 0, 2, 15 ], "texture": "#end_rod" }, + "west": { "uv": [ 0, 0, 2, 15 ], "texture": "#end_rod" }, + "east": { "uv": [ 0, 0, 2, 15 ], "texture": "#end_rod" } + } + } + ] +} \ No newline at end of file diff --git a/resources/resources/assets/minecraft/models/item/end_rod.json b/resources/resources/assets/minecraft/models/item/end_rod.json new file mode 100644 index 0000000..58a35d5 --- /dev/null +++ b/resources/resources/assets/minecraft/models/item/end_rod.json @@ -0,0 +1,6 @@ +{ + "parent": "block/end_rod", + "textures": { + "layer0": "blocks/end_rod" + } +} \ No newline at end of file diff --git a/resources/resources/assets/minecraft/textures/blocks/end_rod.png b/resources/resources/assets/minecraft/textures/blocks/end_rod.png new file mode 100644 index 0000000000000000000000000000000000000000..a710490cc80c25002acff34cd27c4503f8ffbe71 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`m7Xq+Ar_~Te|&rKramQR&MdBD zJP`-#6&O}J3jX=Vwc?}bp$6aAVUJ80RQQ=zG|iva$jgxVDr+5UatvDn>;L_>zxfX- z^eWtTlsKYxmO(+`K7)ot1#`m1c73VBmV@SJRw%L_NJ?zr{ZTTNiTR%6q)!JV8BV+K bFtai&Ot~rPm6V?kbOeK^tDnm{r-UW|qnJLS literal 0 HcmV?d00001 diff --git a/resources/resources/assets/minecraft/textures/gui/container/creative_inventory/tab_inventory.png b/resources/resources/assets/minecraft/textures/gui/container/creative_inventory/tab_inventory.png index c8d53a676f5c5c93d961075715972939b91eaea3..afad1afa31a50e4a9e7d5e8ff6cb030e7f2faa7d 100644 GIT binary patch literal 16018 zcmeI3e@q+a8OL8!Ae4@lZV64-(%sCuB}>fR**;@mZ9|IbAd3klw1K279OpA!uzjw5 zfMIJ!!<22Jk(yN9G8Lw%>ef|RlWrPKmuMxGHnL?Zk=7qn%L@BZscTu2ETmeq{Mvi| zdAzn?v8~hoc`bqOd7tW;a){mqPG(w6 zuS9}^>Xw5-k3@$EWfLDMvt#pGjdM5|y-$a~V@Dmp;VOXOtEb?_6FGwbRTkY7HUz zob-~>%(l{z$uK!Pfy<+u(AS0MUt_RW3gH?mAr+sMUnHvd)j=U5ZRmkDv7BB{s4fjd z<(;&4`Um9yK_a5Uz<-y9<@M2jkcNC`(*G|FnJN~0g;0;=bJM8;P7N$CbBTN|?X1*+ zkll$+?dOPxT?{Kqh<6X`q_f5{D<|f+Yuy;=kI#2-4hv_eSq6TRp?WtO+JO(%yV1~0 zT?Kd-Vpl^YXcaq!2aTa(uqQhuJiyV^z?H(DPyix5uF>|(L5bDVp z*^xI==SfB;lBIhTi+5pS6h7#|XG}W%keSt>>2vJkyvW?r$Ek{Fkwp+7c$475^Fh1> z7Xk!t5?pvbh?n3(fZ$Dn3(p7f5?lxnyh(83`5<0`3ju;R2`)Sz#7l4?K=3BPh3A8K z2`&T(-Xys2d=M|eg#f{u1Q(tU;w88cAb6AD!t+7A1Q!AXZxUR1K8Tm#LV(~+f(y?F z@e*7J5WGon;rSq5f(rqHHwi90AH+*=AwcjZ!G-68cnK~92;L;P@O%(2!G!?9n*!*JDv#KJhvvam%W^D0T4vCR_w!J^vaMyu*!OQYQSynf*Vr+VHda7ga^rf-cqOtfux+gP!p^(K-q`u1_43s@ z{>`Rs-@Iq8!2aAc-&}a%_N+~z+gvOid1B{}|Kd4#!VqrV+dp2i@=C>tChpCLjgOzs z$y2|P16#p(n^^gUf})%2I%gZ^|M45Ka^aazgbeXSd~_Kk^4D>aZ(4Zg+R!^Iwu0tE zlQZMZMRP9K5BAQle+k~{$ch)g`pCrRXJ>B&&d0AVF1}klHF=4isxVNEg@IiLs#o_v z9KSwzBxEQD1;J~7|N6CaR|bHg>(QsKA39yAjqSR%9PC!K{}pF1?5aHpRkgfq8h@~F z!ZA_moVfM;h5gnmRB9swr(W0|ubhz`JI_1_=AQjp&D*!_RlddEzh`k(-Os;rsB86}KX-2w3uZ1Zo~y6RU3q#^IZ7)}y#mAeiaZ5{ t<}O#!<({J<$XTPgr!Qx69?4r4KC^1-v6x|UcpreDriNzE;d{Gw{|f{%M+^V} delta 806 zcmbPKyM%Ls3O`$tx4R3&e-K=-clqRrzT)*PE}kxqAr-gY-o2gsC_td$p`~D`BeUiK z)(cFNPItI)@0o42Bjjmq#LNwXoH=KXeyh2E+v{SEPf=Z>yOdW=7V{^~<;)kJSu<@u zpI!dXv*MR`=6U4_XJ;SwPuqQ0@9XaSpG+Bk|Gk&bnz`os>yD0$S!%bo`F{6%@b-^9 zpZ${>Hlq(~uV!8SZNGArmRR@E*fidk)i2WyrZ8XlyXbr1^{+4Q9{pHR^O9Abul@4( zqVuntF5YLFTxcyi`GGCBSIzmXUC(##;$N_8)r!|uMdEf>UrTKc>Jm@PV2scan;cVR zc=a{Yc7_H91||j$1_cO%iQ&nYEB$QJLh`(9`ad!@D1N+{uw(K8YsJun1@nGgOb87< z`mjLaNbBzmgANVBi)HesGIp}wM0WhcmORD-#ta9H8@S(XwJF|xcUJPb_0J>r{aVCO zV&7o*YFFRevg|&~{qr9GoDw~`(N;!7fWd*GA!Xh+kt;IA67yDjJLa+&rE?U^Z57n` z9TXtlct-N5jC7+7^W=rLvT6)03?9ea6pGyp+mCM$JTWKm%tpZ%uJ0Lk$veoK-J5Z_ zysy_`9wRgm*y_Q)Q%P2yV7Yk4;pCXR94x`pYLzEMGkoA-5MWT4x|*Lcm(>ht+pe_- zzW=JNxianHN!A6`2Y+q&dTq|W;&bu=*WbVY%am|>Lp0Ep5*w>FcUEoQdHXsiL(hrh zMU_?$>}CIbUhm4_A;j1o&)^}2M9Ki!^$Z>_F6lBbIV?K-e`CzOFV`7a8aUz@BWg+Y@A)@%l)N;T-hEpZC*bjmZ^4=8#p~HLO?`zwes8R>ir3%u^|iyb;tPLG zbvUlJrtiska32)VHj^jVicCIaEkF6ZwGb2wVDLX#iHJ+=w72z)%)FKMGl&5QJYD@< J);T3K0RT!eYykiO diff --git a/resources/resources/assets/minecraft/textures/gui/container/inventory.png b/resources/resources/assets/minecraft/textures/gui/container/inventory.png index 726bf96684e6b3bba0bd42328b21128a42720866..74462ddbe46c0575f4a6b4fbb07ef0c59e1de1fc 100644 GIT binary patch literal 8536 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 Ksa7dlJ^Oz&`ip`9 literal 20186 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%0Ds+Z^XLeX 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 diff --git a/resources/resources/assets/minecraft/textures/items/empty_armor_slot_shield.png b/resources/resources/assets/minecraft/textures/items/empty_armor_slot_shield.png new file mode 100644 index 0000000000000000000000000000000000000000..53d5333b080217911bcc5152a65d612d9954648a GIT binary patch literal 14615 zcmeI3PiP}m9LHZNO6^+g?jBY}*V$QxT{M|LX_974(yd8%TiDdvMm9a!>C8(zbTTtL zGilO#5fwoM1s6fo>w0npFD@wP3ihI2WW|f1h$6ZOvgpNAeKV6LzobduuI%vzlKk@C z_xJm~`TTzGWiIpT!u+|h(FaEnLSu8Y#YOTx9=u2HCZCV|y{nQhPMcjUA+-G%LNC08 z(7(In`wxWbB0@J-5K`Vo=$QTHb312=_8w<;*+b~i(cnFV-g)nSgeD&~$`!v-Iv zxO65iB~$54`Uy@ZzXfqpkj0poQIZKol)2W6&yNx->*`fyv3RzXj{M5;>%Q+Og3xF* z;*CVycGm)ts*WJVMWLUQuC;xfx@(3@(=`E`xP~p?BYsj}KWE+cZExKkkg`2J zFfpk~snpKhcfGY*-_)Kzvq=!NkoNWT%3BT=7O`j7T@BA{l1n++@9KS{+9^&~q+n*? z+Hunu;1O^Hod3 zbHzLvh#Q8kOo+IeQuSm^msBYxWhV64>Z&NkG(DZ3tcod|mh})~sRZ5kg)Z7!J=iU+ z(E4qL2JZVpKkXXiq*G0x308l*Df)!jmulAVNPljDz9rooo@Gn;V)y9YglU9llB2pF z4t89Q-`jHSL#%y91wP@M5EpH+3VQ-^~?r`nnHSktV<1R zAZ3MpW1Y;Az7o{btcUuvERvTX1)nWfINj^Ie6TB=?se^WK5H3%UT$UU83ta#$r~LD zOXMa2=TpgKBAFF>hkHF1j3zcKMT6{LFX&1s)$-|`=8Ps5ZkzMFa&57oQ4v7_ z!v$$jZH9}A2nrZ3NP}uKTvS9*z;HntRGZj3(}z43>Os<6fj(n2GwS`sED9| z;es@%Hp4|l1O*Hiq(QYAE-E4@V7MR+s?Bgw5kUdN1!+)ihKq^_3K%X(gK9HeR76m~ za6uYWo8h7&f&zvM(xBQ0;u`Hd`iCv@ykCPn*f(_b6Y@|Ys?8Or%adPUx%AADGlxfJ zet2a{+kO6%c9lD9m#sAs)Z0Pr$pU`Rj%j=2!U4Op*(eTUTA6!Ad-FL0IG;;0c%+E)hOAl{; Xb>jOk##csy#}Vgd=8GRbwesSBsWQ)2 literal 0 HcmV?d00001 diff --git a/resources/resources/assets/minecraft/textures/particle/particles.png b/resources/resources/assets/minecraft/textures/particle/particles.png index eec1f89ed95d97e722d664a294f6d4667888fd71..5641c71f60256cc49b3a48364114273f0b962a5b 100644 GIT binary patch literal 3262 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 delta 3592 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 O0000g+ diff --git a/src/main/java/net/hoosiertransfer/Config.java b/src/main/java/net/hoosiertransfer/Config.java index fee1a76..c65058c 100644 --- a/src/main/java/net/hoosiertransfer/Config.java +++ b/src/main/java/net/hoosiertransfer/Config.java @@ -19,6 +19,8 @@ public class Config { public static int protocolVersion = 110; + public static boolean developmentBuild = true; + public static boolean disableAlpha() { return Minecraft.getMinecraft().gameSettings.disableAlpha && !Minecraft.getMinecraft().gameSettings.shaders; } @@ -36,6 +38,6 @@ public class Config { } public static boolean renderParticles() { - return false; + return true; } } diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GlStateManager.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GlStateManager.java index 9555376..531518b 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GlStateManager.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/opengl/GlStateManager.java @@ -4,10 +4,14 @@ import net.lax1dude.eaglercraft.v1_8.internal.buffer.FloatBuffer; import net.lax1dude.eaglercraft.v1_8.log4j.LogManager; import net.lax1dude.eaglercraft.v1_8.log4j.Logger; import net.lax1dude.eaglercraft.v1_8.vector.Matrix4f; +import net.lax1dude.eaglercraft.v1_8.vector.Quaternion; import net.lax1dude.eaglercraft.v1_8.vector.Vector3f; import net.lax1dude.eaglercraft.v1_8.vector.Vector4f; import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*; + +import net.lax1dude.eaglercraft.v1_8.EagRuntime; + import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL.*; /** @@ -34,7 +38,7 @@ import static net.lax1dude.eaglercraft.v1_8.internal.PlatformOpenGL.*; * */ public class GlStateManager { - + private static final FloatBuffer BUF_FLOAT_16 = EagRuntime.allocateFloatBuffer(16); static final Logger logger = LogManager.getLogger("GlStateManager"); static boolean stateDepthTest = false; @@ -854,6 +858,41 @@ public class GlStateManager { private static final Vector3f paramVector = new Vector3f(); private static final float toRad = 0.0174532925f; + public static FloatBuffer quatToGlMatrix(FloatBuffer p_187418_0_, Quaternion p_187418_1_) { + p_187418_0_.clear(); + float f = p_187418_1_.x * p_187418_1_.x; + float f1 = p_187418_1_.x * p_187418_1_.y; + float f2 = p_187418_1_.x * p_187418_1_.z; + float f3 = p_187418_1_.x * p_187418_1_.w; + float f4 = p_187418_1_.y * p_187418_1_.y; + float f5 = p_187418_1_.y * p_187418_1_.z; + float f6 = p_187418_1_.y * p_187418_1_.w; + float f7 = p_187418_1_.z * p_187418_1_.z; + float f8 = p_187418_1_.z * p_187418_1_.w; + p_187418_0_.put(1.0F - 2.0F * (f4 + f7)); + p_187418_0_.put(2.0F * (f1 + f8)); + p_187418_0_.put(2.0F * (f2 - f6)); + p_187418_0_.put(0.0F); + p_187418_0_.put(2.0F * (f1 - f8)); + p_187418_0_.put(1.0F - 2.0F * (f + f7)); + p_187418_0_.put(2.0F * (f5 + f3)); + p_187418_0_.put(0.0F); + p_187418_0_.put(2.0F * (f2 + f6)); + p_187418_0_.put(2.0F * (f5 - f3)); + p_187418_0_.put(1.0F - 2.0F * (f + f4)); + p_187418_0_.put(0.0F); + p_187418_0_.put(0.0F); + p_187418_0_.put(0.0F); + p_187418_0_.put(0.0F); + p_187418_0_.put(1.0F); + p_187418_0_.rewind(); + return p_187418_0_; + } + + public static final void rotate(Quaternion quaternion) { + multMatrix(quatToGlMatrix(BUF_FLOAT_16, quaternion)); + } + public static final void rotate(float angle, float x, float y, float z) { paramVector.x = x; paramVector.y = y; @@ -966,6 +1005,31 @@ public class GlStateManager { private static final Matrix4f paramMatrix = new Matrix4f(); + public static final void multMatrix(FloatBuffer matrix) { + Matrix4f modeMatrix; + + switch (stateMatrixMode) { + case GL_MODELVIEW: + default: + modeMatrix = modelMatrixStack[modelMatrixStackPointer]; + modelMatrixStackAccessSerial[modelMatrixStackPointer] = ++modelMatrixAccessSerial; + break; + case GL_PROJECTION: + modeMatrix = projectionMatrixStack[projectionMatrixStackPointer]; + projectionMatrixStackAccessSerial[projectionMatrixStackPointer] = ++projectionMatrixAccessSerial; + break; + case GL_TEXTURE: + int ptr = textureMatrixStackPointer[activeTexture]; + modeMatrix = textureMatrixStack[activeTexture][ptr]; + textureMatrixStackAccessSerial[activeTexture][textureMatrixStackPointer[activeTexture]] = ++textureMatrixAccessSerial[activeTexture]; + break; + } + + paramMatrix.load(matrix); + + Matrix4f.mul(modeMatrix, paramMatrix, modeMatrix); + } + public static final void multMatrix(float[] matrix) { Matrix4f modeMatrix; diff --git a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/RenderHighPoly.java b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/RenderHighPoly.java index a166472..8997834 100644 --- a/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/RenderHighPoly.java +++ b/src/main/java/net/lax1dude/eaglercraft/v1_8/profile/RenderHighPoly.java @@ -27,14 +27,21 @@ import net.minecraft.util.MathHelper; /** * Copyright (c) 2022-2024 lax1dude. All Rights Reserved. * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * @@ -54,40 +61,43 @@ public class RenderHighPoly extends RenderPlayer { if (!abstractclientplayer.isUser() || this.renderManager.livingPlayer == abstractclientplayer) { double nameY = d1; HighPolySkin highPolySkin = abstractclientplayer.getEaglerSkinModel().highPoly; - - if(highPolySkin == null) { + + if (highPolySkin == null) { super.doRender(abstractclientplayer, d0, d1, d2, f, f1); return; - }else if(highPolySkin == HighPolySkin.LAXATIVE_DUDE) { + } else if (highPolySkin == HighPolySkin.LAXATIVE_DUDE) { nameY += 0.1; - }else if(highPolySkin == HighPolySkin.BABY_WINSTON) { + } else if (highPolySkin == HighPolySkin.BABY_WINSTON) { nameY -= 1.0; } - + GlStateManager.pushMatrix(); GlStateManager.disableCull(); - + try { Minecraft mc = Minecraft.getMinecraft(); - float f2 = this.interpolateRotation(abstractclientplayer.prevRenderYawOffset, abstractclientplayer.renderYawOffset, + float f2 = this.interpolateRotation(abstractclientplayer.prevRenderYawOffset, + abstractclientplayer.renderYawOffset, f1); - float f3 = this.interpolateRotation(abstractclientplayer.prevRotationYawHead, abstractclientplayer.rotationYawHead, + float f3 = this.interpolateRotation(abstractclientplayer.prevRotationYawHead, + abstractclientplayer.rotationYawHead, f1); float f4 = f3 - f2; if (abstractclientplayer.isRiding() && abstractclientplayer.ridingEntity instanceof EntityLivingBase) { EntityLivingBase entitylivingbase1 = (EntityLivingBase) abstractclientplayer.ridingEntity; - f2 = this.interpolateRotation(entitylivingbase1.prevRenderYawOffset, entitylivingbase1.renderYawOffset, + f2 = this.interpolateRotation(entitylivingbase1.prevRenderYawOffset, + entitylivingbase1.renderYawOffset, f1); f4 = f3 - f2; float f5 = MathHelper.wrapAngleTo180_float(f4); if (f5 < -85.0F) { f5 = -85.0F; } - + if (f5 >= 85.0F) { f5 = 85.0F; } - + f2 = f3 - f5; if (f5 * f5 > 2500.0F) { f2 += f5 * 0.2F; @@ -100,301 +110,326 @@ public class RenderHighPoly extends RenderPlayer { GlStateManager.enableRescaleNormal(); this.preRenderCallback(abstractclientplayer, f1); float f6 = 0.0625F; - GlStateManager.scale(HighPolySkin.highPolyScale, HighPolySkin.highPolyScale, HighPolySkin.highPolyScale); + GlStateManager.scale(HighPolySkin.highPolyScale, HighPolySkin.highPolyScale, + HighPolySkin.highPolyScale); mc.getTextureManager().bindTexture(highPolySkin.texture); - - if(abstractclientplayer.isPlayerSleeping()) { - if(highPolySkin == HighPolySkin.LAXATIVE_DUDE || highPolySkin == HighPolySkin.WEIRD_CLIMBER_DUDE) { + + if (abstractclientplayer.isPlayerSleeping()) { + if (highPolySkin == HighPolySkin.LAXATIVE_DUDE || highPolySkin == HighPolySkin.WEIRD_CLIMBER_DUDE) { GlStateManager.translate(0.0f, -3.7f, 0.0f); - }else if(highPolySkin == HighPolySkin.BABY_WINSTON) { + } else if (highPolySkin == HighPolySkin.BABY_WINSTON) { GlStateManager.translate(0.0f, -2.4f, 0.0f); - }else { + } else { GlStateManager.translate(0.0f, -3.0f, 0.0f); } } - - float var15 = abstractclientplayer.prevLimbSwingAmount + (abstractclientplayer.limbSwingAmount - abstractclientplayer.prevLimbSwingAmount) * f1; + + float var15 = abstractclientplayer.prevLimbSwingAmount + + (abstractclientplayer.limbSwingAmount - abstractclientplayer.prevLimbSwingAmount) * f1; float var16 = abstractclientplayer.limbSwing - abstractclientplayer.limbSwingAmount * (1.0F - f1); - - if(highPolySkin == HighPolySkin.LONG_ARMS) { + + if (highPolySkin == HighPolySkin.LONG_ARMS) { GlStateManager.rotate(MathHelper.sin(var16) * 20f * var15, 0.0f, 1.0f, 0.0f); GlStateManager.rotate(MathHelper.cos(var16) * 7f * var15, 0.0f, 0.0f, 1.0f); - }else if(highPolySkin == HighPolySkin.WEIRD_CLIMBER_DUDE) { + } else if (highPolySkin == HighPolySkin.WEIRD_CLIMBER_DUDE) { GlStateManager.rotate(MathHelper.sin(var16) * 7f * var15, 0.0f, 1.0f, 0.0f); GlStateManager.rotate(MathHelper.cos(var16) * 3f * var15, 0.0f, 0.0f, 1.0f); GlStateManager.rotate(-f3, 0.0f, 1.0f, 0.0f); - float xd = (float)(abstractclientplayer.posX - abstractclientplayer.prevPosX); + float xd = (float) (abstractclientplayer.posX - abstractclientplayer.prevPosX); GlStateManager.rotate(xd * 70.0f * var15, 0.0f, 0.0f, 1.0f); - float zd = (float)(abstractclientplayer.posZ - abstractclientplayer.prevPosZ); + float zd = (float) (abstractclientplayer.posZ - abstractclientplayer.prevPosZ); GlStateManager.rotate(zd * 70.0f * var15, 1.0f, 0.0f, 0.0f); GlStateManager.rotate(f3, 0.0f, 1.0f, 0.0f); - }else if(highPolySkin == HighPolySkin.LAXATIVE_DUDE) { + } else if (highPolySkin == HighPolySkin.LAXATIVE_DUDE) { GlStateManager.rotate(-f3, 0.0f, 1.0f, 0.0f); - float xd = (float)(abstractclientplayer.posX - abstractclientplayer.prevPosX); + float xd = (float) (abstractclientplayer.posX - abstractclientplayer.prevPosX); GlStateManager.rotate(-xd * 40.0f * var15, 0.0f, 0.0f, 1.0f); - float zd = (float)(abstractclientplayer.posZ - abstractclientplayer.prevPosZ); + float zd = (float) (abstractclientplayer.posZ - abstractclientplayer.prevPosZ); GlStateManager.rotate(-zd * 40.0f * var15, 1.0f, 0.0f, 0.0f); GlStateManager.rotate(f3, 0.0f, 1.0f, 0.0f); - }else if(highPolySkin == HighPolySkin.BABY_WINSTON) { + } else if (highPolySkin == HighPolySkin.BABY_WINSTON) { GlStateManager.translate(0.0f, (MathHelper.cos(f10 % 100000.0f) + 1.0f) * var15 * 0.2f, 0.0f); GlStateManager.rotate(MathHelper.sin(var16) * 5f * var15, 0.0f, 1.0f, 0.0f); GlStateManager.rotate(MathHelper.cos(var16) * 5f * var15, 0.0f, 0.0f, 1.0f); } - + if (abstractclientplayer.hurtTime > 0 || abstractclientplayer.deathTime > 0) { GlStateManager.color(1.2f, 0.8F, 0.8F, 1.0F); } - - if(DeferredStateManager.isInDeferredPass()) { + + if (DeferredStateManager.isInDeferredPass()) { DeferredStateManager.setDefaultMaterialConstants(); DeferredStateManager.setRoughnessConstant(0.5f); DeferredStateManager.setMetalnessConstant(0.05f); } - - if(highPolySkin.bodyModel != null) { + + if (highPolySkin.bodyModel != null) { EaglercraftGPU.drawHighPoly(EaglerMeshLoader.getEaglerMesh(highPolySkin.bodyModel)); } float jumpFactor = 0.0f; - - if(highPolySkin.headModel != null) { - if(highPolySkin == HighPolySkin.BABY_CHARLES) { + + if (highPolySkin.headModel != null) { + if (highPolySkin == HighPolySkin.BABY_CHARLES) { long millis = System.currentTimeMillis(); - float partialTicks = (float) ((millis - abstractclientplayer.eaglerHighPolyAnimationTick) * 0.02); - //long l50 = millis / 50l * 50l; - //boolean runTick = par1EntityPlayer.eaglerHighPolyAnimationTick < l50 && millis >= l50; + float partialTicks = (float) ((millis - abstractclientplayer.eaglerHighPolyAnimationTick) + * 0.02); + // long l50 = millis / 50l * 50l; + // boolean runTick = par1EntityPlayer.eaglerHighPolyAnimationTick < l50 && + // millis >= l50; abstractclientplayer.eaglerHighPolyAnimationTick = millis; - - if(partialTicks < 0.0f) { + + if (partialTicks < 0.0f) { partialTicks = 0.0f; } - if(partialTicks > 1.0f) { + if (partialTicks > 1.0f) { partialTicks = 1.0f; } - - float jumpFac = (float)(abstractclientplayer.posY - abstractclientplayer.prevPosY); - if(jumpFac < 0.0f && !abstractclientplayer.isCollidedVertically) { + + float jumpFac = (float) (abstractclientplayer.posY - abstractclientplayer.prevPosY); + if (jumpFac < 0.0f && !abstractclientplayer.isCollidedVertically) { jumpFac = -jumpFac; jumpFac *= 0.1f; } jumpFac -= 0.05f; - if(jumpFac > 0.1f && !abstractclientplayer.isCollidedVertically) { + if (jumpFac > 0.1f && !abstractclientplayer.isCollidedVertically) { jumpFac = 0.1f; - }else if(jumpFac < 0.0f) { + } else if (jumpFac < 0.0f) { jumpFac = 0.0f; - }else if(jumpFac > 0.1f && abstractclientplayer.isCollidedVertically) { + } else if (jumpFac > 0.1f && abstractclientplayer.isCollidedVertically) { jumpFac = 0.1f; - }else if(jumpFac > 0.4f) { + } else if (jumpFac > 0.4f) { jumpFac = 0.4f; } jumpFac *= 10.0f; - - abstractclientplayer.eaglerHighPolyAnimationFloat3 += (jumpFac / (jumpFac + 1.0f)) * 6.0f * partialTicks; - - if(Float.isInfinite(abstractclientplayer.eaglerHighPolyAnimationFloat3)) { + + abstractclientplayer.eaglerHighPolyAnimationFloat3 += (jumpFac / (jumpFac + 1.0f)) * 6.0f + * partialTicks; + + if (Float.isInfinite(abstractclientplayer.eaglerHighPolyAnimationFloat3)) { abstractclientplayer.eaglerHighPolyAnimationFloat3 = 1.0f; - }else if(abstractclientplayer.eaglerHighPolyAnimationFloat3 > 1.0f) { + } else if (abstractclientplayer.eaglerHighPolyAnimationFloat3 > 1.0f) { abstractclientplayer.eaglerHighPolyAnimationFloat3 = 1.0f; - }else if(abstractclientplayer.eaglerHighPolyAnimationFloat3 < -1.0f) { + } else if (abstractclientplayer.eaglerHighPolyAnimationFloat3 < -1.0f) { abstractclientplayer.eaglerHighPolyAnimationFloat3 = -1.0f; } - - abstractclientplayer.eaglerHighPolyAnimationFloat2 += abstractclientplayer.eaglerHighPolyAnimationFloat3 * partialTicks; - + + abstractclientplayer.eaglerHighPolyAnimationFloat2 += abstractclientplayer.eaglerHighPolyAnimationFloat3 + * partialTicks; + abstractclientplayer.eaglerHighPolyAnimationFloat5 += partialTicks; - while(abstractclientplayer.eaglerHighPolyAnimationFloat5 > 0.05f) { + while (abstractclientplayer.eaglerHighPolyAnimationFloat5 > 0.05f) { abstractclientplayer.eaglerHighPolyAnimationFloat5 -= 0.05f; abstractclientplayer.eaglerHighPolyAnimationFloat3 *= 0.99f; abstractclientplayer.eaglerHighPolyAnimationFloat2 *= 0.9f; } - - jumpFactor = abstractclientplayer.eaglerHighPolyAnimationFloat2; //(abstractclientplayer.eaglerHighPolyAnimationFloat1 - abstractclientplayer.eaglerHighPolyAnimationFloat2) * partialTicks + abstractclientplayer.eaglerHighPolyAnimationFloat2; + + jumpFactor = abstractclientplayer.eaglerHighPolyAnimationFloat2; // (abstractclientplayer.eaglerHighPolyAnimationFloat1 + // - + // abstractclientplayer.eaglerHighPolyAnimationFloat2) + // * partialTicks + + // abstractclientplayer.eaglerHighPolyAnimationFloat2; jumpFactor -= 0.12f; - if(jumpFactor < 0.0f) { + if (jumpFactor < 0.0f) { jumpFactor = 0.0f; } jumpFactor = jumpFactor / (jumpFactor + 2.0f); - if(jumpFactor > 1.0f) { + if (jumpFactor > 1.0f) { jumpFactor = 1.0f; } } - if(jumpFactor > 0.0f) { + if (jumpFactor > 0.0f) { GlStateManager.pushMatrix(); GlStateManager.translate(0.0f, jumpFactor * 3.0f, 0.0f); } - + EaglercraftGPU.drawHighPoly(EaglerMeshLoader.getEaglerMesh(highPolySkin.headModel)); - - if(jumpFactor > 0.0f) { + + if (jumpFactor > 0.0f) { GlStateManager.popMatrix(); } } - - if(highPolySkin.limbsModel != null && highPolySkin.limbsModel.length > 0) { - for(int i = 0; i < highPolySkin.limbsModel.length; ++i) { + + if (highPolySkin.limbsModel != null && highPolySkin.limbsModel.length > 0) { + for (int i = 0; i < highPolySkin.limbsModel.length; ++i) { DeferredStateManager.setRoughnessConstant(0.023f); DeferredStateManager.setMetalnessConstant(0.902f); float offset = 0.0f; - if(highPolySkin.limbsOffset != null) { - if(highPolySkin.limbsOffset.length == 1) { + if (highPolySkin.limbsOffset != null) { + if (highPolySkin.limbsOffset.length == 1) { offset = highPolySkin.limbsOffset[0]; - }else { + } else { offset = highPolySkin.limbsOffset[i]; } } - + GlStateManager.pushMatrix(); - - if(offset != 0.0f || highPolySkin.limbsInitialRotation != 0.0f) { - if(offset != 0.0f) { + + if (offset != 0.0f || highPolySkin.limbsInitialRotation != 0.0f) { + if (offset != 0.0f) { GlStateManager.translate(0.0f, offset, 0.0f); } - if(highPolySkin.limbsInitialRotation != 0.0f) { + if (highPolySkin.limbsInitialRotation != 0.0f) { GlStateManager.rotate(highPolySkin.limbsInitialRotation, 1.0f, 0.0f, 0.0f); } } - - if(highPolySkin == HighPolySkin.LONG_ARMS) { - if(abstractclientplayer.isSwingInProgress) { - float var17 = MathHelper.cos(-abstractclientplayer.getSwingProgress(f1) * (float)Math.PI * 2.0f - 1.2f) - 0.362f; + + if (highPolySkin == HighPolySkin.LONG_ARMS) { + if (abstractclientplayer.isSwingInProgress) { + float var17 = MathHelper + .cos(-abstractclientplayer.getSwingProgress(f1) * (float) Math.PI * 2.0f - 1.2f) + - 0.362f; var17 *= var17; GlStateManager.rotate(-var17 * 20.0f, 1.0f, 0.0f, 0.0f); } - }else if(highPolySkin == HighPolySkin.WEIRD_CLIMBER_DUDE) { - if(abstractclientplayer.isSwingInProgress) { - float var17 = MathHelper.cos(-abstractclientplayer.getSwingProgress(f1) * (float)Math.PI * 2.0f - 1.2f) - 0.362f; + } else if (highPolySkin == HighPolySkin.WEIRD_CLIMBER_DUDE) { + if (abstractclientplayer.isSwingInProgress) { + float var17 = MathHelper + .cos(-abstractclientplayer.getSwingProgress(f1) * (float) Math.PI * 2.0f - 1.2f) + - 0.362f; var17 *= var17; GlStateManager.rotate(var17 * 60.0f, 1.0f, 0.0f, 0.0f); } GlStateManager.rotate(40.0f * var15, 1.0f, 0.0f, 0.0f); - }else if(highPolySkin == HighPolySkin.LAXATIVE_DUDE) { + } else if (highPolySkin == HighPolySkin.LAXATIVE_DUDE) { float fff = (i == 0) ? 1.0f : -1.0f; float swing = (MathHelper.cos(f10 % 100000.0f) * fff + 0.2f) * var15; float swing2 = (MathHelper.cos(f10 % 100000.0f) * fff * 0.5f + 0.0f) * var15; GlStateManager.rotate(swing * 25.0f, 1.0f, 0.0f, 0.0f); - if(abstractclientplayer.isSwingInProgress) { - float var17 = MathHelper.cos(-abstractclientplayer.getSwingProgress(f1) * (float)Math.PI * 2.0f - 1.2f) - 0.362f; + if (abstractclientplayer.isSwingInProgress) { + float var17 = MathHelper + .cos(-abstractclientplayer.getSwingProgress(f1) * (float) Math.PI * 2.0f - 1.2f) + - 0.362f; var17 *= var17; GlStateManager.rotate(-var17 * 25.0f, 1.0f, 0.0f, 0.0f); } - + // shear matrix tmpMatrix.setIdentity(); tmpMatrix.m21 = swing2; tmpMatrix.m23 = swing2 * -0.2f; GlStateManager.multMatrix(tmpMatrix); } - - if(i != 0) { + + if (i != 0) { mc.getTextureManager().bindTexture(highPolySkin.texture); if (abstractclientplayer.hurtTime > 0 || abstractclientplayer.deathTime > 0) { GlStateManager.color(1.2f, 0.8F, 0.8F, 1.0F); - }else { + } else { GlStateManager.color(1.0f, 1.0F, 1.0F, 1.0F); } } EaglercraftGPU.drawHighPoly(EaglerMeshLoader.getEaglerMesh(highPolySkin.limbsModel[i])); - - if(i == 0) { + + if (i == 0) { GlStateManager.pushMatrix(); - + GlStateManager.translate(-0.287f, 0.05f, 0.0f); - - if(highPolySkin == HighPolySkin.LONG_ARMS) { + + if (highPolySkin == HighPolySkin.LONG_ARMS) { GlStateManager.translate(1.72f, 2.05f, -0.24f); ItemStack stk = abstractclientplayer.getHeldItem(); - if(stk != null) { + if (stk != null) { Item itm = stk.getItem(); - if(itm != null) { - if(itm == Items.bow) { + if (itm != null) { + if (itm == Items.bow) { GlStateManager.translate(-0.22f, 0.8f, 0.6f); GlStateManager.rotate(-90.0f, 1.0f, 0.0f, 0.0f); - }else if(itm instanceof ItemBlock && !((ItemBlock)itm).getBlock().isNormalCube()) { + } else if (itm instanceof ItemBlock + && !((ItemBlock) itm).getBlock().isNormalCube()) { GlStateManager.translate(0.0f, -0.1f, 0.13f); - }else if(!itm.isFull3D()) { + } else if (!itm.isFull3D()) { GlStateManager.translate(-0.08f, -0.1f, 0.16f); } } } - }else if(highPolySkin == HighPolySkin.WEIRD_CLIMBER_DUDE) { + } else if (highPolySkin == HighPolySkin.WEIRD_CLIMBER_DUDE) { GlStateManager.translate(-0.029f, 1.2f, -3f); GlStateManager.rotate(-5.0f, 0.0f, 1.0f, 0.0f); float var17 = -1.2f * var15; - if(abstractclientplayer.isSwingInProgress) { - float vvar17 = MathHelper.cos(-abstractclientplayer.getSwingProgress(f1) * (float)Math.PI * 2.0f - 1.2f) - 0.362f; + if (abstractclientplayer.isSwingInProgress) { + float vvar17 = MathHelper.cos( + -abstractclientplayer.getSwingProgress(f1) * (float) Math.PI * 2.0f - 1.2f) + - 0.362f; var17 = vvar17 < var17 ? vvar17 : var17; } GlStateManager.translate(-0.02f * var17, 0.42f * var17, var17 * 0.35f); GlStateManager.rotate(var17 * 30.0f, 1.0f, 0.0f, 0.0f); GlStateManager.rotate(110.0f, 1.0f, 0.0f, 0.0f); ItemStack stk = abstractclientplayer.getHeldItem(); - if(stk != null) { + if (stk != null) { Item itm = stk.getItem(); - if(itm != null) { - if(itm == Items.bow) { + if (itm != null) { + if (itm == Items.bow) { GlStateManager.translate(-0.18f, 1.0f, 0.4f); GlStateManager.rotate(-95.0f, 1.0f, 0.0f, 0.0f); - }else if(itm instanceof ItemBlock && !((ItemBlock)itm).getBlock().isNormalCube()) { + } else if (itm instanceof ItemBlock + && !((ItemBlock) itm).getBlock().isNormalCube()) { GlStateManager.translate(0.0f, -0.1f, 0.13f); - }else if(!itm.isFull3D()) { + } else if (!itm.isFull3D()) { GlStateManager.translate(-0.08f, -0.1f, 0.16f); } } } - }else if(highPolySkin == HighPolySkin.LAXATIVE_DUDE) { + } else if (highPolySkin == HighPolySkin.LAXATIVE_DUDE) { GlStateManager.translate(1.291f, 2.44f, -2.18f); GlStateManager.rotate(95.0f, 1.0f, 0.0f, 0.0f); ItemStack stk = abstractclientplayer.getHeldItem(); - if(stk != null) { + if (stk != null) { Item itm = stk.getItem(); - if(itm != null) { - if(itm == Items.bow) { + if (itm != null) { + if (itm == Items.bow) { GlStateManager.translate(-0.65f, 1.3f, -0.1f); GlStateManager.rotate(180.0f, 0.0f, 0.0f, 1.0f); GlStateManager.rotate(20.0f, 1.0f, 0.0f, 0.0f); - }else if(itm instanceof ItemBlock && !((ItemBlock)itm).getBlock().isNormalCube()) { + } else if (itm instanceof ItemBlock + && !((ItemBlock) itm).getBlock().isNormalCube()) { GlStateManager.translate(0.0f, -0.35f, 0.4f); - }else if(!itm.isFull3D()) { + } else if (!itm.isFull3D()) { GlStateManager.translate(-0.1f, -0.1f, 0.16f); } } } } - + DeferredStateManager.setDefaultMaterialConstants(); renderHeldItem(abstractclientplayer, f1); GlStateManager.popMatrix(); } - + GlStateManager.popMatrix(); } } - - if(highPolySkin.eyesModel != null && !DeferredStateManager.isEnableShadowRender()) { + + if (highPolySkin.eyesModel != null && !DeferredStateManager.isEnableShadowRender()) { float ff = 0.00416f; int brightness = abstractclientplayer.getBrightnessForRender(0.0f); float blockLight = (brightness % 65536) * ff; float skyLight = (brightness / 65536) * ff; - float sunCurve = (float)((abstractclientplayer.worldObj.getWorldTime() + 4000l) % 24000) / 24000.0f; - sunCurve = MathHelper.clamp_float(9.8f - MathHelper.abs(sunCurve * 5.0f + sunCurve * sunCurve * 45.0f - 14.3f) * 0.7f, 0.0f, 1.0f); + float sunCurve = (float) ((abstractclientplayer.worldObj.getWorldTime() + 4000l) % 24000) + / 24000.0f; + sunCurve = MathHelper.clamp_float( + 9.8f - MathHelper.abs(sunCurve * 5.0f + sunCurve * sunCurve * 45.0f - 14.3f) * 0.7f, 0.0f, + 1.0f); skyLight = skyLight * (sunCurve * 0.85f + 0.15f); blockLight = blockLight * (sunCurve * 0.3f + 0.7f); float eyeBrightness = blockLight; - if(skyLight > eyeBrightness) { + if (skyLight > eyeBrightness) { eyeBrightness = skyLight; } eyeBrightness += blockLight * 0.2f; eyeBrightness = 1.0f - eyeBrightness; eyeBrightness = MathHelper.clamp_float(eyeBrightness * 1.9f - 1.0f, 0.0f, 1.0f); - if(eyeBrightness > 0.1f) { - if(DeferredStateManager.isInDeferredPass()) { + if (eyeBrightness > 0.1f) { + if (DeferredStateManager.isInDeferredPass()) { GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); DeferredStateManager.setDefaultMaterialConstants(); DeferredStateManager.setEmissionConstant(eyeBrightness); - }else { + } else { GlStateManager.enableBlend(); GlStateManager.blendFunc(GL_ONE, GL_ONE); - GlStateManager.color(eyeBrightness * 7.0f, eyeBrightness * 7.0f, eyeBrightness * 7.0f, 1.0f); - if(jumpFactor > 0.0f) { + GlStateManager.color(eyeBrightness * 7.0f, eyeBrightness * 7.0f, eyeBrightness * 7.0f, + 1.0f); + if (jumpFactor > 0.0f) { GlStateManager.pushMatrix(); GlStateManager.translate(0.0f, jumpFactor * 3.0f, 0.0f); } @@ -402,22 +437,22 @@ public class RenderHighPoly extends RenderPlayer { GlStateManager.disableTexture2D(); GlStateManager.disableLighting(); GlStateManager.enableCull(); - + EaglercraftGPU.drawHighPoly(EaglerMeshLoader.getEaglerMesh(highPolySkin.eyesModel)); - + GlStateManager.enableTexture2D(); GlStateManager.enableLighting(); GlStateManager.disableCull(); - if(jumpFactor > 0.0f) { + if (jumpFactor > 0.0f) { GlStateManager.popMatrix(); } GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f); - if(!DeferredStateManager.isInDeferredPass()) { + if (!DeferredStateManager.isInDeferredPass()) { GlStateManager.disableBlend(); } } } - }catch(Throwable t) { + } catch (Throwable t) { logger.error("Couldn\'t render entity"); logger.error(t); } @@ -433,11 +468,11 @@ public class RenderHighPoly extends RenderPlayer { } public void renderRightArm(AbstractClientPlayer clientPlayer) { - + } public void renderLeftArm(AbstractClientPlayer clientPlayer) { - + } protected void renderHeldItem(AbstractClientPlayer clientPlayer, float partialTicks) { @@ -464,7 +499,7 @@ public class RenderHighPoly extends RenderPlayer { } minecraft.getItemRenderer().renderItem(clientPlayer, itemstack, - ItemCameraTransforms.TransformType.THIRD_PERSON); + ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND); GlStateManager.popMatrix(); } } diff --git a/src/main/java/net/minecraft/block/BlockEndRod.java b/src/main/java/net/minecraft/block/BlockEndRod.java new file mode 100644 index 0000000..95ad829 --- /dev/null +++ b/src/main/java/net/minecraft/block/BlockEndRod.java @@ -0,0 +1,138 @@ +package net.minecraft.block; + +import net.hoosiertransfer.EaglerItems; +import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; +import net.minecraft.block.material.Material; +import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyDirection; +import net.minecraft.block.state.BlockState; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumParticleTypes; +import net.minecraft.util.EnumWorldBlockLayer; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockEndRod extends Block { + public static final PropertyDirection FACING = PropertyDirection.create("facing"); + + protected static final AxisAlignedBB END_ROD_VERTICAL_AABB = new AxisAlignedBB(0.375D, 0.0D, 0.375D, 0.625D, 1.0D, + 0.625D); + protected static final AxisAlignedBB END_ROD_NS_AABB = new AxisAlignedBB(0.375D, 0.375D, 0.0D, 0.625D, 0.625D, + 1.0D); + protected static final AxisAlignedBB END_ROD_EW_AABB = new AxisAlignedBB(0.0D, 0.375D, 0.375D, 1.0D, 0.625D, + 0.625D); + + protected BlockEndRod() { + super(Material.circuits); + this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.UP)); + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + public AxisAlignedBB getCollisionBoundingBox(World world, BlockPos blockpos, IBlockState iblockstate) { + this.setBlockBoundsBasedOnState(world, blockpos); + return super.getCollisionBoundingBox(world, blockpos, iblockstate); + } + + public AxisAlignedBB getSelectedBoundingBox(World world, BlockPos blockpos) { + this.setBlockBoundsBasedOnState(world, blockpos); + return super.getSelectedBoundingBox(world, blockpos); + } + + public void setBlockBoundsBasedOnState(IBlockAccess iblockaccess, BlockPos blockpos) { + IBlockState iblockstate = iblockaccess.getBlockState(blockpos); + EnumFacing enumfacing = (EnumFacing) iblockstate.getValue(FACING); + switch (enumfacing.getAxis()) { + case X: + default: + this.setBlockBounds(0.375F, 0.375F, 0.0F, 0.625F, 0.625F, 1.0F); + break; + + case Z: + this.setBlockBounds(0.375F, 0.375F, 0.0F, 0.625F, 0.625F, + 1.0F); + break; + + case Y: + this.setBlockBounds(0.0F, 0.375F, 0.375F, 1.0F, 0.625F, + 0.625F); + } + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean isFullCube() { + return false; + } + + public boolean canPlaceBlockAt(World worldIn, BlockPos pos) { + return true; + } + + public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, + int meta, EntityLivingBase placer) { + IBlockState iblockstate = worldIn.getBlockState(pos.offset(facing.getOpposite())); + + if (iblockstate.getBlock() == EaglerItems.getEaglerBlock("end_rod")) { + EnumFacing enumfacing = (EnumFacing) iblockstate.getValue(FACING); + + if (enumfacing == facing) { + return this.getDefaultState().withProperty(FACING, facing.getOpposite()); + } + } + + return this.getDefaultState().withProperty(FACING, facing); + } + + public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) { + } + + public void randomDisplayTick(IBlockState stateIn, World worldIn, BlockPos pos, EaglercraftRandom rand) { + EnumFacing enumfacing = (EnumFacing) stateIn.getValue(FACING); + double d0 = (double) pos.getX() + 0.55D - (double) (rand.nextFloat() * 0.1F); + double d1 = (double) pos.getY() + 0.55D - (double) (rand.nextFloat() * 0.1F); + double d2 = (double) pos.getZ() + 0.55D - (double) (rand.nextFloat() * 0.1F); + double d3 = (double) (0.4F - (rand.nextFloat() + rand.nextFloat()) * 0.4F); + + if (rand.nextInt(5) == 0) { + worldIn.spawnParticle(EnumParticleTypes.END_ROD, d0 + (double) enumfacing.getFrontOffsetX() * d3, + d1 + (double) enumfacing.getFrontOffsetY() * d3, d2 + (double) enumfacing.getFrontOffsetZ() * d3, + rand.nextGaussian() * 0.005D, rand.nextGaussian() * 0.005D, rand.nextGaussian() * 0.005D, + new int[0]); + } + } + + public EnumWorldBlockLayer getBlockLayer() { + return EnumWorldBlockLayer.CUTOUT; + } + + /** + * Convert the given metadata into a BlockState for this Block + */ + public IBlockState getStateFromMeta(int meta) { + IBlockState iblockstate = this.getDefaultState(); + iblockstate = iblockstate.withProperty(FACING, EnumFacing.getFront(meta)); + return iblockstate; + } + + /** + * Convert the BlockState into the correct metadata value + */ + public int getMetaFromState(IBlockState state) { + return ((EnumFacing) state.getValue(FACING)).getIndex(); + } + + protected BlockState createBlockState() { + return new BlockState(this, new IProperty[] { FACING }); + } + + public int getMobilityFlag(IBlockState state) { + return 0; + } +} \ No newline at end of file diff --git a/src/main/java/net/minecraft/client/Minecraft.java b/src/main/java/net/minecraft/client/Minecraft.java index 6703ee7..23ece79 100644 --- a/src/main/java/net/minecraft/client/Minecraft.java +++ b/src/main/java/net/minecraft/client/Minecraft.java @@ -167,6 +167,7 @@ import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.ChatStyle; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.EnumHand; import net.minecraft.util.FrameTimer; import net.minecraft.util.IThreadListener; import net.minecraft.util.MathHelper; @@ -1240,7 +1241,8 @@ public class Minecraft implements IThreadListener { if (itemstack.stackSize == 0) { this.thePlayer.inventory.mainInventory[this.thePlayer.inventory.currentItem] = null; } else if (itemstack.stackSize != i || this.playerController.isInCreativeMode()) { - this.entityRenderer.itemRenderer.resetEquippedProgress(); + // TODO: implement offhand + this.entityRenderer.itemRenderer.resetEquippedProgress(EnumHand.MAIN_HAND); } } } @@ -1250,7 +1252,8 @@ public class Minecraft implements IThreadListener { ItemStack itemstack1 = this.thePlayer.inventory.getCurrentItem(); if (itemstack1 != null && this.playerController.sendUseItem(this.thePlayer, this.theWorld, itemstack1)) { - this.entityRenderer.itemRenderer.resetEquippedProgress2(); + // TODO: implement offhand + this.entityRenderer.itemRenderer.resetEquippedProgress(EnumHand.MAIN_HAND); } } diff --git a/src/main/java/net/minecraft/client/audio/SoundHandler.java b/src/main/java/net/minecraft/client/audio/SoundHandler.java index 45539db..67d58b6 100644 --- a/src/main/java/net/minecraft/client/audio/SoundHandler.java +++ b/src/main/java/net/minecraft/client/audio/SoundHandler.java @@ -137,7 +137,7 @@ public class SoundHandler implements IResourceManagerReloadListener, ITickable { sounds.getSoundCategory()); this.sndRegistry.registerSound(soundeventaccessorcomposite); } - + int currentSoundList = 0; for (final SoundList.SoundEntry soundlist$soundentry : sounds.getSoundList()) { String s = soundlist$soundentry.getSoundEntryName(); ResourceLocation resourcelocation = new ResourceLocation(s); @@ -152,8 +152,10 @@ public class SoundHandler implements IResourceManagerReloadListener, ITickable { try { inputstream = this.mcResourceManager.getResource(resourcelocation1).getInputStream(); } catch (FileNotFoundException var18) { - logger.warn("File {} does not exist, cannot add it to event {}", - new Object[] { resourcelocation1, location }); + if (currentSoundList == 1) { + logger.warn("File {} does not exist, cannot add it to event {}", + new Object[] { resourcelocation1, location }); + } continue; } catch (IOException ioexception) { logger.warn( @@ -194,6 +196,7 @@ public class SoundHandler implements IResourceManagerReloadListener, ITickable { } soundeventaccessorcomposite.addSoundToEventPool((ISoundEventAccessor) object); + ++currentSoundList; } } diff --git a/src/main/java/net/minecraft/client/entity/EntityOtherPlayerMP.java b/src/main/java/net/minecraft/client/entity/EntityOtherPlayerMP.java index 9d36fee..72fea45 100644 --- a/src/main/java/net/minecraft/client/entity/EntityOtherPlayerMP.java +++ b/src/main/java/net/minecraft/client/entity/EntityOtherPlayerMP.java @@ -148,6 +148,8 @@ public class EntityOtherPlayerMP extends AbstractClientPlayer { public void setCurrentItemOrArmor(int slotIn, ItemStack stack) { if (slotIn == 0) { this.inventory.mainInventory[this.inventory.currentItem] = stack; + } else if (slotIn == 5) { + this.inventory.offHandInventory[0] = stack; } else { this.inventory.armorInventory[slotIn - 1] = stack; } diff --git a/src/main/java/net/minecraft/client/entity/EntityPlayerSP.java b/src/main/java/net/minecraft/client/entity/EntityPlayerSP.java index 9041b89..0602308 100644 --- a/src/main/java/net/minecraft/client/entity/EntityPlayerSP.java +++ b/src/main/java/net/minecraft/client/entity/EntityPlayerSP.java @@ -26,6 +26,7 @@ import net.minecraft.client.network.NetHandlerPlayClient; import net.minecraft.command.server.CommandBlockLogic; import net.minecraft.entity.Entity; import net.minecraft.entity.IMerchant; +import net.minecraft.entity.item.EntityBoat; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.item.EntityMinecart; import net.minecraft.entity.passive.EntityHorse; @@ -113,6 +114,8 @@ public class EntityPlayerSP extends AbstractClientPlayer { public float prevTimeInPortal; private StatFileWriter statWriter; + private boolean rowingBoat; + public EntityPlayerSP(Minecraft mcIn, World worldIn, NetHandlerPlayClient netHandler, StatFileWriter statWriter) { super(worldIn, netHandler.getGameProfile()); this.sendQueue = netHandler; @@ -149,6 +152,31 @@ public class EntityPlayerSP extends AbstractClientPlayer { } + public void dismountEntity(Entity parEntity) { + super.dismountEntity(parEntity); + this.rowingBoat = false; + } + + public void updateRidden() { + super.updateRidden(); + this.rowingBoat = false; + + if (this.ridingEntity instanceof EntityBoat) { + EntityBoat entityboat = (EntityBoat) this.ridingEntity; + // TODO: fix boats + // entityboat.updateInputs(this.movementInput.leftKeyDown, + // this.movementInput.rightKeyDown, + // this.movementInput.forwardKeyDown, this.movementInput.backKeyDown); + // this.rowingBoat |= this.movementInput.leftKeyDown || + // this.movementInput.rightKeyDown + // || this.movementInput.forwardKeyDown || this.movementInput.backKeyDown; + } + } + + public boolean isRowingBoat() { + return this.rowingBoat; + } + /** * + * Called to update the entity's position/logic. diff --git a/src/main/java/net/minecraft/client/gui/GuiIngame.java b/src/main/java/net/minecraft/client/gui/GuiIngame.java index cc703d8..7d39494 100644 --- a/src/main/java/net/minecraft/client/gui/GuiIngame.java +++ b/src/main/java/net/minecraft/client/gui/GuiIngame.java @@ -4,6 +4,8 @@ import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*; import java.util.ArrayList; import java.util.Collection; + +import net.hoosiertransfer.Config; import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; import net.lax1dude.eaglercraft.v1_8.minecraft.EaglerTextureAtlasSprite; @@ -148,6 +150,12 @@ public class GuiIngame extends Gui { GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, 1, 0); GlStateManager.enableDepth(); GlStateManager.disableLighting(); + if (Config.developmentBuild) { + // draw a yellow transparent rectangle on the top of the screen + drawRect(0, 0, i, 10, 0x80FFFF00); + // draw text in the middle of the rectangle + drawCenteredString(this.mc.fontRendererObj, "Development Build. Issues WILL arise.", i / 2, 1, 0xFFFFFF); + } ItemStack itemstack = this.mc.thePlayer.inventory.armorItemInSlot(3); if (this.mc.gameSettings.thirdPersonView == 0 && itemstack != null diff --git a/src/main/java/net/minecraft/client/gui/GuiScreen.java b/src/main/java/net/minecraft/client/gui/GuiScreen.java index 860d858..f67d267 100644 --- a/src/main/java/net/minecraft/client/gui/GuiScreen.java +++ b/src/main/java/net/minecraft/client/gui/GuiScreen.java @@ -12,6 +12,7 @@ import com.google.common.base.Splitter; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import net.hoosiertransfer.Config; import net.lax1dude.eaglercraft.v1_8.EagRuntime; import net.lax1dude.eaglercraft.v1_8.EaglerXBungeeVersion; import net.lax1dude.eaglercraft.v1_8.Keyboard; @@ -104,6 +105,13 @@ public abstract class GuiScreen extends Gui implements GuiYesNoCallback { * mouseY, renderPartialTicks */ public void drawScreen(int i, int j, float var3) { + if (Config.developmentBuild) { + // draw a yellow transparent rectangle on the top of the screen + drawRect(0, 0, width, 10, 0x80FFFF00); + // draw text in the middle of the rectangle + drawCenteredString(fontRendererObj, "Development Build. Issues WILL arise.", width / 2, 1, 0xFFFFFF); + } + for (int k = 0, l = this.buttonList.size(); k < l; ++k) { ((GuiButton) this.buttonList.get(k)).drawButton(this.mc, i, j); } diff --git a/src/main/java/net/minecraft/client/gui/inventory/GuiContainer.java b/src/main/java/net/minecraft/client/gui/inventory/GuiContainer.java index 660151a..34360a0 100644 --- a/src/main/java/net/minecraft/client/gui/inventory/GuiContainer.java +++ b/src/main/java/net/minecraft/client/gui/inventory/GuiContainer.java @@ -116,32 +116,32 @@ public abstract class GuiContainer extends GuiScreen { * Draws the screen and all the components in it. Args : mouseX, * mouseY, renderPartialTicks */ - public void drawScreen(int i, int j, float f) { + public void drawScreen(int mouseX, int mouseY, float partialTicks) { this.drawDefaultBackground(); - int k = this.guiLeft; - int l = this.guiTop; - this.drawGuiContainerBackgroundLayer(f, i, j); + int i = this.guiLeft; + int j = this.guiTop; + this.drawGuiContainerBackgroundLayer(partialTicks, mouseX, mouseY); GlStateManager.disableRescaleNormal(); RenderHelper.disableStandardItemLighting(); GlStateManager.disableLighting(); GlStateManager.disableDepth(); - super.drawScreen(i, j, f); + super.drawScreen(mouseX, mouseY, partialTicks); RenderHelper.enableGUIStandardItemLighting(); GlStateManager.pushMatrix(); - GlStateManager.translate((float) k, (float) l, 0.0F); + GlStateManager.translate((float) i, (float) j, 0.0F); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); GlStateManager.enableRescaleNormal(); this.theSlot = null; - short short1 = 240; - short short2 = 240; - OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) short1 / 1.0F, - (float) short2 / 1.0F); + int k = 240; + int l = 240; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) k, (float) l); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); for (int i1 = 0; i1 < this.inventorySlots.inventorySlots.size(); ++i1) { Slot slot = (Slot) this.inventorySlots.inventorySlots.get(i1); this.drawSlot(slot); - if (this.isMouseOverSlot(slot, i, j) && slot.canBeHovered()) { + + if (this.isMouseOverSlot(slot, mouseX, mouseY) && slot.canBeHovered()) { this.theSlot = slot; GlStateManager.disableLighting(); GlStateManager.disableDepth(); @@ -153,50 +153,54 @@ public abstract class GuiContainer extends GuiScreen { GlStateManager.enableLighting(); GlStateManager.enableDepth(); } - GlStateManager.enableAlpha(); } RenderHelper.disableStandardItemLighting(); - this.drawGuiContainerForegroundLayer(i, j); + this.drawGuiContainerForegroundLayer(mouseX, mouseY); RenderHelper.enableGUIStandardItemLighting(); InventoryPlayer inventoryplayer = this.mc.thePlayer.inventory; ItemStack itemstack = this.draggedStack == null ? inventoryplayer.getItemStack() : this.draggedStack; + if (itemstack != null) { - byte b0 = 8; - int j2 = this.draggedStack == null ? 8 : 16; + int j2 = 8; + int k2 = this.draggedStack == null ? 8 : 16; String s = null; + if (this.draggedStack != null && this.isRightMouseClick) { itemstack = itemstack.copy(); itemstack.stackSize = MathHelper.ceiling_float_int((float) itemstack.stackSize / 2.0F); } else if (this.dragSplitting && this.dragSplittingSlots.size() > 1) { itemstack = itemstack.copy(); itemstack.stackSize = this.dragSplittingRemnant; + if (itemstack.stackSize == 0) { s = "" + EnumChatFormatting.YELLOW + "0"; } } - this.drawItemStack(itemstack, i - k - b0, j - l - j2, s); + this.drawItemStack(itemstack, mouseX - i - j2, mouseY - j - k2, s); } if (this.returningStack != null) { - float f1 = (float) (Minecraft.getSystemTime() - this.returningStackTime) / 100.0F; - if (f1 >= 1.0F) { - f1 = 1.0F; + float f = (float) (Minecraft.getSystemTime() - this.returningStackTime) / 100.0F; + + if (f >= 1.0F) { + f = 1.0F; this.returningStack = null; } - int k2 = this.returningStackDestSlot.xDisplayPosition - this.touchUpX; - int l2 = this.returningStackDestSlot.yDisplayPosition - this.touchUpY; - int l1 = this.touchUpX + (int) ((float) k2 * f1); - int i2 = this.touchUpY + (int) ((float) l2 * f1); + int l2 = this.returningStackDestSlot.xDisplayPosition - this.touchUpX; + int i3 = this.returningStackDestSlot.yDisplayPosition - this.touchUpY; + int l1 = this.touchUpX + (int) ((float) l2 * f); + int i2 = this.touchUpY + (int) ((float) i3 * f); this.drawItemStack(this.returningStack, l1, i2, (String) null); } GlStateManager.popMatrix(); + if (inventoryplayer.getItemStack() == null && this.theSlot != null && this.theSlot.getHasStack()) { ItemStack itemstack1 = this.theSlot.getStack(); - this.renderToolTip(itemstack1, i, j); + this.renderToolTip(itemstack1, mouseX, mouseY); } GlStateManager.enableLighting(); @@ -237,6 +241,7 @@ public abstract class GuiContainer extends GuiScreen { boolean flag1 = slotIn == this.clickedSlot && this.draggedStack != null && !this.isRightMouseClick; ItemStack itemstack1 = this.mc.thePlayer.inventory.getItemStack(); String s = null; + if (slotIn == this.clickedSlot && this.draggedStack != null && this.isRightMouseClick && itemstack != null) { itemstack = itemstack.copy(); itemstack.stackSize /= 2; @@ -250,6 +255,7 @@ public abstract class GuiContainer extends GuiScreen { flag = true; Container.computeStackSize(this.dragSplittingSlots, this.dragSplittingLimit, itemstack, slotIn.getStack() == null ? 0 : slotIn.getStack().stackSize); + if (itemstack.stackSize > itemstack.getMaxStackSize()) { s = EnumChatFormatting.YELLOW + "" + itemstack.getMaxStackSize(); itemstack.stackSize = itemstack.getMaxStackSize(); @@ -267,8 +273,10 @@ public abstract class GuiContainer extends GuiScreen { this.zLevel = 100.0F; this.itemRender.zLevel = 100.0F; - if (itemstack == null) { + + if (itemstack == null && slotIn.canBeHovered()) { String s1 = slotIn.getSlotTexture(); + if (s1 != null) { EaglerTextureAtlasSprite textureatlassprite = this.mc.getTextureMapBlocks().getAtlasSprite(s1); GlStateManager.disableLighting(); diff --git a/src/main/java/net/minecraft/client/gui/inventory/GuiContainerCreative.java b/src/main/java/net/minecraft/client/gui/inventory/GuiContainerCreative.java index a65faab..4b205ea 100644 --- a/src/main/java/net/minecraft/client/gui/inventory/GuiContainerCreative.java +++ b/src/main/java/net/minecraft/client/gui/inventory/GuiContainerCreative.java @@ -260,7 +260,6 @@ public class GuiContainerCreative extends InventoryEffectRenderer { } else { this.mc.displayGuiScreen(new GuiInventory(this.mc.thePlayer)); } - } /** @@ -434,34 +433,39 @@ public class GuiContainerCreative extends InventoryEffectRenderer { parCreativeTabs.displayAllReleventItems(guicontainercreative$containercreative.itemList); if (parCreativeTabs == CreativeTabs.tabInventory) { Container container = this.mc.thePlayer.inventoryContainer; + if (this.field_147063_B == null) { this.field_147063_B = guicontainercreative$containercreative.inventorySlots; } - guicontainercreative$containercreative.inventorySlots = Lists.newArrayList(); + guicontainercreative$containercreative.inventorySlots = Lists.newArrayList(); for (int j = 0; j < container.inventorySlots.size(); ++j) { - GuiContainerCreative.CreativeSlot guicontainercreative$creativeslot = new GuiContainerCreative.CreativeSlot( - (Slot) container.inventorySlots.get(j), j); - guicontainercreative$containercreative.inventorySlots.add(guicontainercreative$creativeslot); + Slot slot = new GuiContainerCreative.CreativeSlot((Slot) container.inventorySlots.get(j), j); + guicontainercreative$containercreative.inventorySlots.add(slot); + if (j >= 5 && j < 9) { int j1 = j - 5; int k1 = j1 / 2; int l1 = j1 % 2; - guicontainercreative$creativeslot.xDisplayPosition = 9 + k1 * 54; - guicontainercreative$creativeslot.yDisplayPosition = 6 + l1 * 27; + slot.xDisplayPosition = 54 + k1 * 54; + slot.yDisplayPosition = 6 + l1 * 27; } else if (j >= 0 && j < 5) { - guicontainercreative$creativeslot.yDisplayPosition = -2000; - guicontainercreative$creativeslot.xDisplayPosition = -2000; + slot.xDisplayPosition = -2000; + slot.yDisplayPosition = -2000; + } else if (j == 45) { + slot.xDisplayPosition = 35; + slot.yDisplayPosition = 20; } else if (j < container.inventorySlots.size()) { int k = j - 9; int l = k % 9; int i1 = k / 9; - guicontainercreative$creativeslot.xDisplayPosition = 9 + l * 18; + slot.xDisplayPosition = 9 + l * 18; + if (j >= 36) { - guicontainercreative$creativeslot.yDisplayPosition = 112; + slot.yDisplayPosition = 112; } else { - guicontainercreative$creativeslot.yDisplayPosition = 54 + i1 * 18; + slot.yDisplayPosition = 54 + i1 * 18; } } } @@ -635,8 +639,9 @@ public class GuiContainerCreative extends InventoryEffectRenderer { this.func_147051_a(creativetabs); if (creativetabs == CreativeTabs.tabInventory) { - GuiInventory.drawEntityOnScreen(this.guiLeft + 43, this.guiTop + 45, 20, (float) (this.guiLeft + 43 - i), - (float) (this.guiTop + 45 - 30 - j), this.mc.thePlayer); + GuiInventory.drawEntityOnScreen(this.guiLeft + 88, this.guiTop + 45, 20, + (float) (this.guiLeft + 88 - i), (float) (this.guiTop + 45 - 30 - j), this.mc.thePlayer); + } } diff --git a/src/main/java/net/minecraft/client/gui/inventory/GuiInventory.java b/src/main/java/net/minecraft/client/gui/inventory/GuiInventory.java index fcfc69f..8cb9aeb 100644 --- a/src/main/java/net/minecraft/client/gui/inventory/GuiInventory.java +++ b/src/main/java/net/minecraft/client/gui/inventory/GuiInventory.java @@ -85,7 +85,7 @@ public class GuiInventory extends InventoryEffectRenderer { * front of the items). Args : mouseX, mouseY */ protected void drawGuiContainerForegroundLayer(int var1, int var2) { - this.fontRendererObj.drawString(I18n.format("container.crafting", new Object[0]), 86, 16, 4210752); + this.fontRendererObj.drawString(I18n.format("container.crafting", new Object[0]), 97, 8, 4210752); } /** diff --git a/src/main/java/net/minecraft/client/model/ModelArmorStand.java b/src/main/java/net/minecraft/client/model/ModelArmorStand.java index 756fe61..7888fb1 100644 --- a/src/main/java/net/minecraft/client/model/ModelArmorStand.java +++ b/src/main/java/net/minecraft/client/model/ModelArmorStand.java @@ -3,6 +3,7 @@ package net.minecraft.client.model; import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityArmorStand; +import net.minecraft.util.EnumHandSide; /** * + @@ -150,9 +151,10 @@ public class ModelArmorStand extends ModelArmorStandArmor { } public void postRenderArm(float scale) { + // TODO: implement offhand boolean flag = this.bipedRightArm.showModel; this.bipedRightArm.showModel = true; - super.postRenderArm(scale); + super.postRenderArm(scale, EnumHandSide.RIGHT); this.bipedRightArm.showModel = flag; } } \ No newline at end of file diff --git a/src/main/java/net/minecraft/client/model/ModelBiped.java b/src/main/java/net/minecraft/client/model/ModelBiped.java index 8b9eb30..aa1c2cd 100644 --- a/src/main/java/net/minecraft/client/model/ModelBiped.java +++ b/src/main/java/net/minecraft/client/model/ModelBiped.java @@ -3,50 +3,30 @@ package net.minecraft.client.model; import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.EnumHandSide; import net.minecraft.util.MathHelper; -/** - * + - * This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source code. - * - * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" - * Mod Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * - * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, hoosiertransfer, - * ayunami2000. All Rights - * Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ public class ModelBiped extends ModelBase { public ModelRenderer bipedHead; + + /** The Biped's Headwear. Used for the outer layer of player skins. */ public ModelRenderer bipedHeadwear; public ModelRenderer bipedBody; + + /** The Biped's Right Arm */ public ModelRenderer bipedRightArm; + + /** The Biped's Left Arm */ public ModelRenderer bipedLeftArm; + + /** The Biped's Right Leg */ public ModelRenderer bipedRightLeg; + + /** The Biped's Left Leg */ public ModelRenderer bipedLeftLeg; - public int heldItemLeft; - public int heldItemRight; + public ModelBiped.ArmPose leftArmPose; + public ModelBiped.ArmPose rightArmPose; public boolean isSneak; - public boolean aimedBow; public ModelBiped() { this(0.0F); @@ -56,147 +36,184 @@ public class ModelBiped extends ModelBase { this(modelSize, 0.0F, 64, 32); } - public ModelBiped(float modelSize, float parFloat1, int textureWidthIn, int textureHeightIn) { + public ModelBiped(float modelSize, float p_i1149_2_, int textureWidthIn, int textureHeightIn) { + this.leftArmPose = ModelBiped.ArmPose.EMPTY; + this.rightArmPose = ModelBiped.ArmPose.EMPTY; this.textureWidth = textureWidthIn; this.textureHeight = textureHeightIn; this.bipedHead = new ModelRenderer(this, 0, 0); this.bipedHead.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, modelSize); - this.bipedHead.setRotationPoint(0.0F, 0.0F + parFloat1, 0.0F); + this.bipedHead.setRotationPoint(0.0F, 0.0F + p_i1149_2_, 0.0F); this.bipedHeadwear = new ModelRenderer(this, 32, 0); this.bipedHeadwear.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, modelSize + 0.5F); - this.bipedHeadwear.setRotationPoint(0.0F, 0.0F + parFloat1, 0.0F); + this.bipedHeadwear.setRotationPoint(0.0F, 0.0F + p_i1149_2_, 0.0F); this.bipedBody = new ModelRenderer(this, 16, 16); this.bipedBody.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, modelSize); - this.bipedBody.setRotationPoint(0.0F, 0.0F + parFloat1, 0.0F); + this.bipedBody.setRotationPoint(0.0F, 0.0F + p_i1149_2_, 0.0F); this.bipedRightArm = new ModelRenderer(this, 40, 16); this.bipedRightArm.addBox(-3.0F, -2.0F, -2.0F, 4, 12, 4, modelSize); - this.bipedRightArm.setRotationPoint(-5.0F, 2.0F + parFloat1, 0.0F); + this.bipedRightArm.setRotationPoint(-5.0F, 2.0F + p_i1149_2_, 0.0F); this.bipedLeftArm = new ModelRenderer(this, 40, 16); this.bipedLeftArm.mirror = true; this.bipedLeftArm.addBox(-1.0F, -2.0F, -2.0F, 4, 12, 4, modelSize); - this.bipedLeftArm.setRotationPoint(5.0F, 2.0F + parFloat1, 0.0F); + this.bipedLeftArm.setRotationPoint(5.0F, 2.0F + p_i1149_2_, 0.0F); this.bipedRightLeg = new ModelRenderer(this, 0, 16); this.bipedRightLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, modelSize); - this.bipedRightLeg.setRotationPoint(-1.9F, 12.0F + parFloat1, 0.0F); + this.bipedRightLeg.setRotationPoint(-1.9F, 12.0F + p_i1149_2_, 0.0F); this.bipedLeftLeg = new ModelRenderer(this, 0, 16); this.bipedLeftLeg.mirror = true; this.bipedLeftLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, modelSize); - this.bipedLeftLeg.setRotationPoint(1.9F, 12.0F + parFloat1, 0.0F); + this.bipedLeftLeg.setRotationPoint(1.9F, 12.0F + p_i1149_2_, 0.0F); } /** - * + - * Sets the models various rotation angles then renders the - * model. + * Sets the models various rotation angles then renders the model. */ - public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { - this.setRotationAngles(f, f1, f2, f3, f4, f5, entity); + public void render(Entity entityIn, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, + float headPitch, float scale) { + this.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scale, entityIn); GlStateManager.pushMatrix(); + if (this.isChild) { - float f6 = 2.0F; - GlStateManager.scale(1.5F / f6, 1.5F / f6, 1.5F / f6); - GlStateManager.translate(0.0F, 16.0F * f5, 0.0F); - this.bipedHead.render(f5); + float f = 2.0F; + GlStateManager.scale(1.5F / f, 1.5F / f, 1.5F / f); + GlStateManager.translate(0.0F, 16.0F * scale, 0.0F); + this.bipedHead.render(scale); GlStateManager.popMatrix(); GlStateManager.pushMatrix(); - GlStateManager.scale(1.0F / f6, 1.0F / f6, 1.0F / f6); - GlStateManager.translate(0.0F, 24.0F * f5, 0.0F); - this.bipedBody.render(f5); - this.bipedRightArm.render(f5); - this.bipedLeftArm.render(f5); - this.bipedRightLeg.render(f5); - this.bipedLeftLeg.render(f5); - this.bipedHeadwear.render(f5); + GlStateManager.scale(1.0F / f, 1.0F / f, 1.0F / f); + GlStateManager.translate(0.0F, 24.0F * scale, 0.0F); + this.bipedBody.render(scale); + this.bipedRightArm.render(scale); + this.bipedLeftArm.render(scale); + this.bipedRightLeg.render(scale); + this.bipedLeftLeg.render(scale); + this.bipedHeadwear.render(scale); } else { - if (entity != null && entity.isSneaking()) { - GlStateManager.translate(0.0F, 0.2F, 0.0F); + if (entityIn != null) { + if (entityIn.isSneaking()) { + GlStateManager.translate(0.0F, 0.2F, 0.0F); + } } - this.bipedHead.render(f5); - this.bipedBody.render(f5); - this.bipedRightArm.render(f5); - this.bipedLeftArm.render(f5); - this.bipedRightLeg.render(f5); - this.bipedLeftLeg.render(f5); - this.bipedHeadwear.render(f5); + this.bipedHead.render(scale); + this.bipedBody.render(scale); + this.bipedRightArm.render(scale); + this.bipedLeftArm.render(scale); + this.bipedRightLeg.render(scale); + this.bipedLeftLeg.render(scale); + this.bipedHeadwear.render(scale); } GlStateManager.popMatrix(); } + @SuppressWarnings("incomplete-switch") + /** - * + - * Sets the model's various rotation angles. For bipeds, par1 - * and par2 are used for animating the movement of arms and - * legs, where par1 represents the time(so that arms and legs - * swing back and forth) and par2 represents how "far" arms and - * legs can swing at most. + * Sets the model's various rotation angles. For bipeds, par1 and par2 are used + * for animating the movement of arms + * and legs, where par1 represents the time(so that arms and legs swing back and + * forth) and par2 represents how + * "far" arms and legs can swing at most. */ - public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float var6, Entity var7) { - boolean flag = var7 instanceof EntityLivingBase && ((EntityLivingBase) var7).getTicksElytraFlying() > 4; - this.bipedHead.rotateAngleY = f3 / 57.295776F; + public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, + float headPitch, float scaleFactor, Entity entityIn) { + boolean flag = entityIn instanceof EntityLivingBase && ((EntityLivingBase) entityIn).getTicksElytraFlying() > 4; + this.bipedHead.rotateAngleY = netHeadYaw * 0.017453292F; + if (flag) { this.bipedHead.rotateAngleX = -((float) Math.PI / 4F); } else { - this.bipedHead.rotateAngleX = f4 * 0.017453292F; + this.bipedHead.rotateAngleX = headPitch * 0.017453292F; } - float d = 1.0F; + this.bipedBody.rotateAngleY = 0.0F; + this.bipedRightArm.rotationPointZ = 0.0F; + this.bipedRightArm.rotationPointX = -5.0F; + this.bipedLeftArm.rotationPointZ = 0.0F; + this.bipedLeftArm.rotationPointX = 5.0F; + float f = 1.0F; if (flag) { - d = (float) (var7.motionX * var7.motionX + var7.motionY * var7.motionY - + var7.motionZ * var7.motionZ); - d = d / 0.2F; - d = d * d * d; + f = (float) (entityIn.motionX * entityIn.motionX + entityIn.motionY * entityIn.motionY + + entityIn.motionZ * entityIn.motionZ); + f = f / 0.2F; + f = f * f * f; } - if (d < 1.0F) { - d = 1.0F; + if (f < 1.0F) { + f = 1.0F; } - this.bipedRightArm.rotateAngleX = MathHelper.cos(f * 0.6662F + 3.1415927F) * 2.0F * f1 * 0.5F / d; - this.bipedLeftArm.rotateAngleX = MathHelper.cos(f * 0.6662F) * 2.0F * f1 * 0.5F / d; + this.bipedRightArm.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float) Math.PI) * 2.0F * limbSwingAmount + * 0.5F / f; + this.bipedLeftArm.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 2.0F * limbSwingAmount * 0.5F / f; this.bipedRightArm.rotateAngleZ = 0.0F; this.bipedLeftArm.rotateAngleZ = 0.0F; - this.bipedRightLeg.rotateAngleX = MathHelper.cos(f * 0.6662F) * 1.4F * f1 / d; - this.bipedLeftLeg.rotateAngleX = MathHelper.cos(f * 0.6662F + 3.1415927F) * 1.4F * f1 / d; + this.bipedRightLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount / f; + this.bipedLeftLeg.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float) Math.PI) * 1.4F * limbSwingAmount + / f; this.bipedRightLeg.rotateAngleY = 0.0F; this.bipedLeftLeg.rotateAngleY = 0.0F; - if (this.isRiding) { - this.bipedRightArm.rotateAngleX += -0.62831855F; - this.bipedLeftArm.rotateAngleX += -0.62831855F; - this.bipedRightLeg.rotateAngleX = -1.2566371F; - this.bipedLeftLeg.rotateAngleX = -1.2566371F; - this.bipedRightLeg.rotateAngleY = 0.31415927F; - this.bipedLeftLeg.rotateAngleY = -0.31415927F; - } + this.bipedRightLeg.rotateAngleZ = 0.0F; + this.bipedLeftLeg.rotateAngleZ = 0.0F; - if (this.heldItemLeft != 0) { - this.bipedLeftArm.rotateAngleX = this.bipedLeftArm.rotateAngleX * 0.5F - - 0.31415927F * (float) this.heldItemLeft; + if (this.isRiding) { + this.bipedRightArm.rotateAngleX += -((float) Math.PI / 5F); + this.bipedLeftArm.rotateAngleX += -((float) Math.PI / 5F); + this.bipedRightLeg.rotateAngleX = -1.4137167F; + this.bipedRightLeg.rotateAngleY = ((float) Math.PI / 10F); + this.bipedRightLeg.rotateAngleZ = 0.07853982F; + this.bipedLeftLeg.rotateAngleX = -1.4137167F; + this.bipedLeftLeg.rotateAngleY = -((float) Math.PI / 10F); + this.bipedLeftLeg.rotateAngleZ = -0.07853982F; } this.bipedRightArm.rotateAngleY = 0.0F; this.bipedRightArm.rotateAngleZ = 0.0F; - switch (this.heldItemRight) { - case 0: - case 2: - default: + + switch (this.leftArmPose) { + case EMPTY: + this.bipedLeftArm.rotateAngleY = 0.0F; break; - case 1: - this.bipedRightArm.rotateAngleX = this.bipedRightArm.rotateAngleX * 0.5F - - 0.31415927F * (float) this.heldItemRight; + + case BLOCK: + this.bipedLeftArm.rotateAngleX = this.bipedLeftArm.rotateAngleX * 0.5F - 0.9424779F; + this.bipedLeftArm.rotateAngleY = 0.5235988F; break; - case 3: - this.bipedRightArm.rotateAngleX = this.bipedRightArm.rotateAngleX * 0.5F - - 0.31415927F * (float) this.heldItemRight; - this.bipedRightArm.rotateAngleY = -0.5235988F; + + case ITEM: + this.bipedLeftArm.rotateAngleX = this.bipedLeftArm.rotateAngleX * 0.5F - ((float) Math.PI / 10F); + this.bipedLeftArm.rotateAngleY = 0.0F; } - this.bipedLeftArm.rotateAngleY = 0.0F; - if (this.swingProgress > -9990.0F) { - float f5 = this.swingProgress; - this.bipedBody.rotateAngleY = MathHelper.sin(MathHelper.sqrt_float(f5) * 3.1415927F * 2.0F) * 0.2F; + switch (this.rightArmPose) { + case EMPTY: + this.bipedRightArm.rotateAngleY = 0.0F; + break; + + case BLOCK: + this.bipedRightArm.rotateAngleX = this.bipedRightArm.rotateAngleX * 0.5F - 0.9424779F; + this.bipedRightArm.rotateAngleY = -0.5235988F; + break; + + case ITEM: + this.bipedRightArm.rotateAngleX = this.bipedRightArm.rotateAngleX * 0.5F - ((float) Math.PI / 10F); + this.bipedRightArm.rotateAngleY = 0.0F; + } + + if (this.swingProgress > 0.0F) { + EnumHandSide enumhandside = this.getMainHand(entityIn); + ModelRenderer modelrenderer = this.getArmForSide(enumhandside); + this.getArmForSide(enumhandside.opposite()); + float f1 = this.swingProgress; + this.bipedBody.rotateAngleY = MathHelper.sin(MathHelper.sqrt_float(f1) * ((float) Math.PI * 2F)) * 0.2F; + + if (enumhandside == EnumHandSide.LEFT) { + this.bipedBody.rotateAngleY *= -1.0F; + } + this.bipedRightArm.rotationPointZ = MathHelper.sin(this.bipedBody.rotateAngleY) * 5.0F; this.bipedRightArm.rotationPointX = -MathHelper.cos(this.bipedBody.rotateAngleY) * 5.0F; this.bipedLeftArm.rotationPointZ = -MathHelper.sin(this.bipedBody.rotateAngleY) * 5.0F; @@ -204,16 +221,17 @@ public class ModelBiped extends ModelBase { this.bipedRightArm.rotateAngleY += this.bipedBody.rotateAngleY; this.bipedLeftArm.rotateAngleY += this.bipedBody.rotateAngleY; this.bipedLeftArm.rotateAngleX += this.bipedBody.rotateAngleY; - f5 = 1.0F - this.swingProgress; - f5 = f5 * f5; - f5 = f5 * f5; - f5 = 1.0F - f5; - float f6 = MathHelper.sin(f5 * 3.1415927F); - float f7 = MathHelper.sin(this.swingProgress * 3.1415927F) * -(this.bipedHead.rotateAngleX - 0.7F) * 0.75F; - this.bipedRightArm.rotateAngleX = (float) ((double) this.bipedRightArm.rotateAngleX - - ((double) f6 * 1.2D + (double) f7)); - this.bipedRightArm.rotateAngleY += this.bipedBody.rotateAngleY * 2.0F; - this.bipedRightArm.rotateAngleZ += MathHelper.sin(this.swingProgress * 3.1415927F) * -0.4F; + f1 = 1.0F - this.swingProgress; + f1 = f1 * f1; + f1 = f1 * f1; + f1 = 1.0F - f1; + float f2 = MathHelper.sin(f1 * (float) Math.PI); + float f3 = MathHelper.sin(this.swingProgress * (float) Math.PI) * -(this.bipedHead.rotateAngleX - 0.7F) + * 0.75F; + modelrenderer.rotateAngleX = (float) ((double) modelrenderer.rotateAngleX + - ((double) f2 * 1.2D + (double) f3)); + modelrenderer.rotateAngleY += this.bipedBody.rotateAngleY * 2.0F; + modelrenderer.rotateAngleZ += MathHelper.sin(this.swingProgress * (float) Math.PI) * -0.4F; } if (this.isSneak) { @@ -234,25 +252,21 @@ public class ModelBiped extends ModelBase { this.bipedHead.rotationPointY = 0.0F; } - this.bipedRightArm.rotateAngleZ += MathHelper.cos(f2 * 0.09F) * 0.05F + 0.05F; - this.bipedLeftArm.rotateAngleZ -= MathHelper.cos(f2 * 0.09F) * 0.05F + 0.05F; - this.bipedRightArm.rotateAngleX += MathHelper.sin(f2 * 0.067F) * 0.05F; - this.bipedLeftArm.rotateAngleX -= MathHelper.sin(f2 * 0.067F) * 0.05F; - if (this.aimedBow) { - float f8 = 0.0F; - float f9 = 0.0F; - this.bipedRightArm.rotateAngleZ = 0.0F; - this.bipedLeftArm.rotateAngleZ = 0.0F; - this.bipedRightArm.rotateAngleY = -(0.1F - f8 * 0.6F) + this.bipedHead.rotateAngleY; - this.bipedLeftArm.rotateAngleY = 0.1F - f8 * 0.6F + this.bipedHead.rotateAngleY + 0.4F; - this.bipedRightArm.rotateAngleX = -1.5707964F + this.bipedHead.rotateAngleX; - this.bipedLeftArm.rotateAngleX = -1.5707964F + this.bipedHead.rotateAngleX; - this.bipedRightArm.rotateAngleX -= f8 * 1.2F - f9 * 0.4F; - this.bipedLeftArm.rotateAngleX -= f8 * 1.2F - f9 * 0.4F; - this.bipedRightArm.rotateAngleZ += MathHelper.cos(f2 * 0.09F) * 0.05F + 0.05F; - this.bipedLeftArm.rotateAngleZ -= MathHelper.cos(f2 * 0.09F) * 0.05F + 0.05F; - this.bipedRightArm.rotateAngleX += MathHelper.sin(f2 * 0.067F) * 0.05F; - this.bipedLeftArm.rotateAngleX -= MathHelper.sin(f2 * 0.067F) * 0.05F; + this.bipedRightArm.rotateAngleZ += MathHelper.cos(ageInTicks * 0.09F) * 0.05F + 0.05F; + this.bipedLeftArm.rotateAngleZ -= MathHelper.cos(ageInTicks * 0.09F) * 0.05F + 0.05F; + this.bipedRightArm.rotateAngleX += MathHelper.sin(ageInTicks * 0.067F) * 0.05F; + this.bipedLeftArm.rotateAngleX -= MathHelper.sin(ageInTicks * 0.067F) * 0.05F; + + if (this.rightArmPose == ModelBiped.ArmPose.BOW_AND_ARROW) { + this.bipedRightArm.rotateAngleY = -0.1F + this.bipedHead.rotateAngleY; + this.bipedLeftArm.rotateAngleY = 0.1F + this.bipedHead.rotateAngleY + 0.4F; + this.bipedRightArm.rotateAngleX = -((float) Math.PI / 2F) + this.bipedHead.rotateAngleX; + this.bipedLeftArm.rotateAngleX = -((float) Math.PI / 2F) + this.bipedHead.rotateAngleX; + } else if (this.leftArmPose == ModelBiped.ArmPose.BOW_AND_ARROW) { + this.bipedRightArm.rotateAngleY = -0.1F + this.bipedHead.rotateAngleY - 0.4F; + this.bipedLeftArm.rotateAngleY = 0.1F + this.bipedHead.rotateAngleY; + this.bipedRightArm.rotateAngleX = -((float) Math.PI / 2F) + this.bipedHead.rotateAngleX; + this.bipedLeftArm.rotateAngleX = -((float) Math.PI / 2F) + this.bipedHead.rotateAngleX; } copyModelAngles(this.bipedHead, this.bipedHeadwear); @@ -260,14 +274,13 @@ public class ModelBiped extends ModelBase { public void setModelAttributes(ModelBase model) { super.setModelAttributes(model); + if (model instanceof ModelBiped) { ModelBiped modelbiped = (ModelBiped) model; - this.heldItemLeft = modelbiped.heldItemLeft; - this.heldItemRight = modelbiped.heldItemRight; + this.leftArmPose = modelbiped.leftArmPose; + this.rightArmPose = modelbiped.rightArmPose; this.isSneak = modelbiped.isSneak; - this.aimedBow = modelbiped.aimedBow; } - } public void setInvisible(boolean invisible) { @@ -280,7 +293,23 @@ public class ModelBiped extends ModelBase { this.bipedLeftLeg.showModel = invisible; } - public void postRenderArm(float f) { - this.bipedRightArm.postRender(f); + public void postRenderArm(float scale, EnumHandSide side) { + this.getArmForSide(side).postRender(scale); } -} \ No newline at end of file + + protected ModelRenderer getArmForSide(EnumHandSide side) { + return side == EnumHandSide.LEFT ? this.bipedLeftArm : this.bipedRightArm; + } + + protected EnumHandSide getMainHand(Entity entityIn) { + return entityIn instanceof EntityLivingBase ? ((EntityLivingBase) entityIn).getPrimaryHand() + : EnumHandSide.RIGHT; + } + + public static enum ArmPose { + EMPTY, + ITEM, + BLOCK, + BOW_AND_ARROW; + } +} diff --git a/src/main/java/net/minecraft/client/model/ModelPlayer.java b/src/main/java/net/minecraft/client/model/ModelPlayer.java index 0bb0502..ce03443 100644 --- a/src/main/java/net/minecraft/client/model/ModelPlayer.java +++ b/src/main/java/net/minecraft/client/model/ModelPlayer.java @@ -4,6 +4,7 @@ import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*; import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; import net.minecraft.entity.Entity; +import net.minecraft.util.EnumHandSide; /** * + @@ -179,6 +180,7 @@ public class ModelPlayer extends ModelBiped { this.bipedDeadmau5Head.showModel = flag; } + @Deprecated public void postRenderArm(float f) { if (this.smallArms) { ++this.bipedRightArm.rotationPointX; @@ -189,4 +191,18 @@ public class ModelPlayer extends ModelBiped { } } + + public void postRenderArm(float scale, EnumHandSide side) { + ModelRenderer modelrenderer = this.getArmForSide(side); + + if (this.smallArms) { + float f = 0.5F * (float) (side == EnumHandSide.RIGHT ? 1 : -1); + modelrenderer.rotationPointX += f; + modelrenderer.postRender(scale); + modelrenderer.rotationPointX -= f; + } else { + modelrenderer.postRender(scale); + } + } + } \ No newline at end of file diff --git a/src/main/java/net/minecraft/client/model/ModelSkeleton.java b/src/main/java/net/minecraft/client/model/ModelSkeleton.java index 911c746..f325ddd 100644 --- a/src/main/java/net/minecraft/client/model/ModelSkeleton.java +++ b/src/main/java/net/minecraft/client/model/ModelSkeleton.java @@ -3,6 +3,10 @@ package net.minecraft.client.model; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumHandSide; /** * + @@ -65,9 +69,22 @@ public class ModelSkeleton extends ModelZombie { * second and third float params here are the same second and * third as in the setRotationAngles method. */ - public void setLivingAnimations(EntityLivingBase entitylivingbase, float f, float f1, float f2) { - this.aimedBow = ((EntitySkeleton) entitylivingbase).getSkeletonType() == 1; - super.setLivingAnimations(entitylivingbase, f, f1, f2); + public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float p_78086_2_, float p_78086_3_, + float partialTickTime) { + this.rightArmPose = ModelBiped.ArmPose.EMPTY; + this.leftArmPose = ModelBiped.ArmPose.EMPTY; + ItemStack itemstack = entitylivingbaseIn.getHeldItem(); + + if (itemstack != null && itemstack.getItem() == Items.bow + && ((EntitySkeleton) entitylivingbaseIn).isSwingingArms()) { + if (entitylivingbaseIn.getPrimaryHand() == EnumHandSide.RIGHT) { + this.rightArmPose = ModelBiped.ArmPose.BOW_AND_ARROW; + } else { + this.leftArmPose = ModelBiped.ArmPose.BOW_AND_ARROW; + } + } + + super.setLivingAnimations(entitylivingbaseIn, p_78086_2_, p_78086_3_, partialTickTime); } /** diff --git a/src/main/java/net/minecraft/client/network/NetHandlerPlayClient.java b/src/main/java/net/minecraft/client/network/NetHandlerPlayClient.java index a6a8b5c..7133f49 100644 --- a/src/main/java/net/minecraft/client/network/NetHandlerPlayClient.java +++ b/src/main/java/net/minecraft/client/network/NetHandlerPlayClient.java @@ -211,6 +211,7 @@ import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.IChatComponent; import net.minecraft.util.MathHelper; @@ -1564,7 +1565,10 @@ public class NetHandlerPlayClient implements INetHandlerPlayClient { } else if ("MC|Brand".equals(packetIn.getChannelName())) { this.gameController.thePlayer.setClientBrand(packetIn.getBufferData().readStringFromBuffer(32767)); } else if ("MC|BOpen".equals(packetIn.getChannelName())) { - ItemStack itemstack = this.gameController.thePlayer.getCurrentEquippedItem(); + EnumHand enumhand = (EnumHand) packetIn.getBufferData().readEnumValue(EnumHand.class); + ItemStack itemstack = enumhand == EnumHand.OFF_HAND ? this.gameController.thePlayer.getHeldItemOffhand() + : this.gameController.thePlayer.getHeldItem(); + if (itemstack != null && itemstack.getItem() == Items.written_book) { this.gameController .displayGuiScreen(new GuiScreenBook(this.gameController.thePlayer, itemstack, false)); diff --git a/src/main/java/net/minecraft/client/particle/EffectRenderer.java b/src/main/java/net/minecraft/client/particle/EffectRenderer.java index 97a4c69..0154755 100644 --- a/src/main/java/net/minecraft/client/particle/EffectRenderer.java +++ b/src/main/java/net/minecraft/client/particle/EffectRenderer.java @@ -149,6 +149,11 @@ public class EffectRenderer { this.registerParticle(EnumParticleTypes.EXPLOSION_LARGE.getParticleID(), new EntityLargeExplodeFX.Factory()); this.registerParticle(EnumParticleTypes.FIREWORKS_SPARK.getParticleID(), new EntityFirework.Factory()); this.registerParticle(EnumParticleTypes.MOB_APPEARANCE.getParticleID(), new MobAppearance.Factory()); + this.registerParticle(EnumParticleTypes.DRAGON_BREATH.getParticleID(), new ParticleDragonBreath.Factory()); + this.registerParticle(EnumParticleTypes.END_ROD.getParticleID(), new ParticleEndRod.Factory()); + this.registerParticle(EnumParticleTypes.DAMAGE_INDICATOR.getParticleID(), + new EntityCrit2FX.DamageIndicatorFactory()); + this.registerParticle(EnumParticleTypes.SWEEP_ATTACK.getParticleID(), new ParticleSweepAttack.Factory()); } public void registerParticle(int id, IParticleFactory particleFactory) { diff --git a/src/main/java/net/minecraft/client/particle/EntityCrit2FX.java b/src/main/java/net/minecraft/client/particle/EntityCrit2FX.java index 649539a..8854f51 100644 --- a/src/main/java/net/minecraft/client/particle/EntityCrit2FX.java +++ b/src/main/java/net/minecraft/client/particle/EntityCrit2FX.java @@ -108,6 +108,17 @@ public class EntityCrit2FX extends EntityFX { } } + public static class DamageIndicatorFactory implements IParticleFactory { + public EntityFX getEntityFX(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, + double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) { + EntityFX particle = new EntityCrit2FX(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn + 1.0D, + zSpeedIn, 1.0F); + particle.setMaxAge(20); + particle.setParticleTextureIndex(67); + return particle; + } + } + public static class MagicFactory implements IParticleFactory { public EntityFX getEntityFX(int var1, World world, double d0, double d1, double d2, double d3, double d4, double d5, int... var15) { diff --git a/src/main/java/net/minecraft/client/particle/EntityFX.java b/src/main/java/net/minecraft/client/particle/EntityFX.java index 975c8f7..fa187af 100644 --- a/src/main/java/net/minecraft/client/particle/EntityFX.java +++ b/src/main/java/net/minecraft/client/particle/EntityFX.java @@ -6,6 +6,7 @@ import net.lax1dude.eaglercraft.v1_8.opengl.WorldRenderer; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; import net.minecraft.world.World; @@ -56,6 +57,18 @@ public class EntityFX extends Entity { public static double interpPosY; public static double interpPosZ; + /** The red value to drift toward */ + private float fadeTargetRed; + + /** The green value to drift toward */ + private float fadeTargetGreen; + + /** The blue value to drift toward */ + private float fadeTargetBlue; + + /** True if setColorFade has been called */ + private boolean fadingColor; + protected EntityFX(World worldIn, double posXIn, double posYIn, double posZIn) { super(worldIn); this.particleAlpha = 1.0F; @@ -135,6 +148,17 @@ public class EntityFX extends Entity { return this.particleAlpha; } + public void setMaxAge(int age) { + this.particleMaxAge = age; + } + + public void setColorFade(int rgb) { + this.fadeTargetRed = (float) ((rgb & 16711680) >> 16) / 255.0F; + this.fadeTargetGreen = (float) ((rgb & 65280) >> 8) / 255.0F; + this.fadeTargetBlue = (float) ((rgb & 255) >> 0) / 255.0F; + this.fadingColor = true; + } + /** * + * returns if this entity triggers Block.onEntityWalking on the @@ -160,6 +184,17 @@ public class EntityFX extends Entity { this.setDead(); } + if (this.particleAge > this.particleMaxAge / 2) { + this.setAlphaF(1.0F + - ((float) this.particleAge - (float) (this.particleMaxAge / 2)) / (float) this.particleMaxAge); + + if (this.fadingColor) { + this.particleRed += (this.fadeTargetRed - this.particleRed) * 0.2F; + this.particleGreen += (this.fadeTargetGreen - this.particleGreen) * 0.2F; + this.particleBlue += (this.fadeTargetBlue - this.particleBlue) * 0.2F; + } + } + this.motionY -= 0.04D * (double) this.particleGravity; this.moveEntity(this.motionX, this.motionY, this.motionZ); this.motionX *= 0.9800000190734863D; @@ -234,6 +269,13 @@ public class EntityFX extends Entity { } } + protected void resetPositionToBB() { + AxisAlignedBB axisalignedbb = this.getEntityBoundingBox(); + this.posX = (axisalignedbb.minX + axisalignedbb.maxX) / 2.0D; + this.posY = axisalignedbb.minY; + this.posZ = (axisalignedbb.minZ + axisalignedbb.maxZ) / 2.0D; + } + public int getFXLayer() { return 0; } diff --git a/src/main/java/net/minecraft/client/particle/ParticleDragonBreath.java b/src/main/java/net/minecraft/client/particle/ParticleDragonBreath.java new file mode 100644 index 0000000..a48097d --- /dev/null +++ b/src/main/java/net/minecraft/client/particle/ParticleDragonBreath.java @@ -0,0 +1,79 @@ +package net.minecraft.client.particle; + +import net.lax1dude.eaglercraft.v1_8.opengl.WorldRenderer; +import net.minecraft.entity.Entity; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +public class ParticleDragonBreath extends EntityFX { + private final float oSize; + private boolean hasHitGround; + + protected ParticleDragonBreath(World worldIn, double x, double y, double z, double xSpeed, double ySpeed, + double zSpeed) { + super(worldIn, x, y, z, xSpeed, ySpeed, zSpeed); + this.motionX = xSpeed; + this.motionY = ySpeed; + this.motionZ = zSpeed; + this.particleRed = MathHelper.randomFloatClamp(this.rand, 0.7176471F, 0.8745098F); + this.particleGreen = MathHelper.randomFloatClamp(this.rand, 0.0F, 0.0F); + this.particleBlue = MathHelper.randomFloatClamp(this.rand, 0.8235294F, 0.9764706F); + this.particleScale *= 0.75F; + this.oSize = this.particleScale; + this.particleMaxAge = (int) (20.0D / ((double) this.rand.nextFloat() * 0.8D + 0.2D)); + this.hasHitGround = false; + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) { + this.setDead(); + } else { + this.setParticleTextureIndex(3 * this.particleAge / this.particleMaxAge + 5); + + if (this.isCollided) { + this.motionY = 0.0D; + this.hasHitGround = true; + } + + if (this.hasHitGround) { + this.motionY += 0.002D; + } + + this.moveEntity(this.motionX, this.motionY, this.motionZ); + + if (this.posY == this.prevPosY) { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.motionX *= 0.9599999785423279D; + this.motionZ *= 0.9599999785423279D; + + if (this.hasHitGround) { + this.motionY *= 0.9599999785423279D; + } + } + } + + /** + * Renders the particle + */ + public void renderParticle(WorldRenderer worldRendererIn, Entity entityIn, float partialTicks, float rotationX, + float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) { + this.particleScale = this.oSize * MathHelper.clamp_float( + ((float) this.particleAge + partialTicks) / (float) this.particleMaxAge * 32.0F, 0.0F, 1.0F); + super.renderParticle(worldRendererIn, entityIn, partialTicks, rotationX, rotationZ, rotationYZ, rotationXY, + rotationXZ); + } + + public static class Factory implements IParticleFactory { + public EntityFX getEntityFX(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, + double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) { + return new ParticleDragonBreath(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/src/main/java/net/minecraft/client/particle/ParticleEndRod.java b/src/main/java/net/minecraft/client/particle/ParticleEndRod.java new file mode 100644 index 0000000..d96f01d --- /dev/null +++ b/src/main/java/net/minecraft/client/particle/ParticleEndRod.java @@ -0,0 +1,28 @@ +package net.minecraft.client.particle; + +import net.minecraft.world.World; + +public class ParticleEndRod extends EntityFX { + public ParticleEndRod(World p_i46580_1_, double p_i46580_2_, double p_i46580_4_, double p_i46580_6_, + double p_i46580_8_, double p_i46580_10_, double p_i46580_12_) { + super(p_i46580_1_, p_i46580_2_, p_i46580_4_, p_i46580_6_, 176, 8, -5.0E-4F); + this.motionX = p_i46580_8_; + this.motionY = p_i46580_10_; + this.motionZ = p_i46580_12_; + this.particleScale *= 0.75F; + this.particleMaxAge = 60 + this.rand.nextInt(12); + this.setColorFade(15916745); + } + + public void moveEntity(double x, double y, double z) { + this.setEntityBoundingBox(this.getEntityBoundingBox().offset(x, y, z)); + this.resetPositionToBB(); + } + + public static class Factory implements IParticleFactory { + public EntityFX getEntityFX(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, + double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) { + return new ParticleEndRod(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/src/main/java/net/minecraft/client/particle/ParticleSweepAttack.java b/src/main/java/net/minecraft/client/particle/ParticleSweepAttack.java new file mode 100644 index 0000000..19a8874 --- /dev/null +++ b/src/main/java/net/minecraft/client/particle/ParticleSweepAttack.java @@ -0,0 +1,100 @@ +package net.minecraft.client.particle; + +import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; +import net.lax1dude.eaglercraft.v1_8.opengl.VertexFormat; +import net.lax1dude.eaglercraft.v1_8.opengl.WorldRenderer; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; + +public class ParticleSweepAttack extends EntityFX { + private static final ResourceLocation SWEEP_TEXTURE = new ResourceLocation("textures/entity/sweep.png"); + private int life; + private int lifeTime; + private TextureManager textureManager; + private float size; + + protected ParticleSweepAttack(TextureManager textureManagerIn, World worldIn, double x, double y, double z, + double p_i46582_9_, double p_i46582_11_, double p_i46582_13_) { + super(worldIn, x, y, z, 0.0D, 0.0D, 0.0D); + this.textureManager = textureManagerIn; + this.lifeTime = 4; + this.particleRed = this.particleGreen = this.particleBlue = this.rand.nextFloat() * 0.6F + 0.4F; + this.size = 1.0F - (float) p_i46582_9_ * 0.5F; + } + + public void renderParticle(WorldRenderer worldRendererIn, Entity entityIn, float partialTicks, float rotationX, + float rotationZ, float rotationYZ, float rotationXY, float rotationXZ) { + int i = (int) (((float) this.life + partialTicks) * 3.0F / (float) this.lifeTime); + + if (i <= 7) { + this.textureManager.bindTexture(SWEEP_TEXTURE); + float f = (float) (i % 4) / 4.0F; + float f1 = f + 0.24975F; + float f2 = (float) (i / 2) / 2.0F; + float f3 = f2 + 0.4995F; + float f4 = 1.0F * this.size; + float f5 = (float) (this.prevPosX + (this.posX - this.prevPosX) * (double) partialTicks - interpPosX); + float f6 = (float) (this.prevPosY + (this.posY - this.prevPosY) * (double) partialTicks - interpPosY); + float f7 = (float) (this.prevPosZ + (this.posZ - this.prevPosZ) * (double) partialTicks - interpPosZ); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.disableLighting(); + RenderHelper.disableStandardItemLighting(); + worldRendererIn.begin(7, DefaultVertexFormats.PARTICLE_POSITION_TEX_COLOR_LMAP); + worldRendererIn + .pos((double) (f5 - rotationX * f4 - rotationXY * f4), (double) (f6 - rotationZ * f4 * 0.5F), + (double) (f7 - rotationYZ * f4 - rotationXZ * f4)) + .tex((double) f1, (double) f3).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F) + .lightmap(0, 240).normal(0.0F, 1.0F, 0.0F).endVertex(); + worldRendererIn + .pos((double) (f5 - rotationX * f4 + rotationXY * f4), (double) (f6 + rotationZ * f4 * 0.5F), + (double) (f7 - rotationYZ * f4 + rotationXZ * f4)) + .tex((double) f1, (double) f2).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F) + .lightmap(0, 240).normal(0.0F, 1.0F, 0.0F).endVertex(); + worldRendererIn + .pos((double) (f5 + rotationX * f4 + rotationXY * f4), (double) (f6 + rotationZ * f4 * 0.5F), + (double) (f7 + rotationYZ * f4 + rotationXZ * f4)) + .tex((double) f, (double) f2).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F) + .lightmap(0, 240).normal(0.0F, 1.0F, 0.0F).endVertex(); + worldRendererIn + .pos((double) (f5 + rotationX * f4 - rotationXY * f4), (double) (f6 - rotationZ * f4 * 0.5F), + (double) (f7 + rotationYZ * f4 - rotationXZ * f4)) + .tex((double) f, (double) f3).color(this.particleRed, this.particleGreen, this.particleBlue, 1.0F) + .lightmap(0, 240).normal(0.0F, 1.0F, 0.0F).endVertex(); + Tessellator.getInstance().draw(); + GlStateManager.enableLighting(); + } + } + + public int getBrightnessForRender(float p_189214_1_) { + return 61680; + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + ++this.life; + + if (this.life == this.lifeTime) { + this.setDead(); + } + } + + public int getFXLayer() { + return 3; + } + + public static class Factory implements IParticleFactory { + public EntityFX getEntityFX(int particleID, World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, + double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) { + return new ParticleSweepAttack(Minecraft.getMinecraft().getTextureManager(), worldIn, xCoordIn, yCoordIn, + zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn); + } + } +} \ No newline at end of file diff --git a/src/main/java/net/minecraft/client/renderer/ItemRenderer.java b/src/main/java/net/minecraft/client/renderer/ItemRenderer.java index 6071cbb..241d215 100644 --- a/src/main/java/net/minecraft/client/renderer/ItemRenderer.java +++ b/src/main/java/net/minecraft/client/renderer/ItemRenderer.java @@ -1,12 +1,10 @@ package net.minecraft.client.renderer; +import com.google.common.base.Objects; + import static net.lax1dude.eaglercraft.v1_8.opengl.RealOpenGLEnums.*; -import net.lax1dude.eaglercraft.v1_8.minecraft.EaglerTextureAtlasSprite; -import net.lax1dude.eaglercraft.v1_8.opengl.EaglercraftGPU; -import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; -import net.lax1dude.eaglercraft.v1_8.opengl.OpenGlHelper; -import net.lax1dude.eaglercraft.v1_8.opengl.WorldRenderer; +import javax.annotation.Nullable; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -18,63 +16,40 @@ import net.minecraft.client.renderer.entity.Render; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.entity.RenderPlayer; +import net.lax1dude.eaglercraft.v1_8.minecraft.EaglerTextureAtlasSprite; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; -import net.minecraft.item.EnumAction; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.util.BlockPos; import net.minecraft.util.EnumWorldBlockLayer; -import net.minecraft.util.MathHelper; +import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumHandSide; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.BlockPos; +import net.minecraft.util.MathHelper; import net.minecraft.world.storage.MapData; -/** - * + - * This portion of EaglercraftX contains deobfuscated Minecraft 1.8 source code. - * - * Minecraft 1.8.8 bytecode is (c) 2015 Mojang AB. "Do not distribute!" - * Mod Coder Pack v9.18 deobfuscation configs are (c) Copyright by the MCP Team - * - * EaglercraftX 1.8 patch files (c) 2022-2024 lax1dude, hoosiertransfer, - * ayunami2000. All Rights Reserved. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - */ +import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; +import net.lax1dude.eaglercraft.v1_8.opengl.WorldRenderer; +import net.lax1dude.eaglercraft.v1_8.opengl.OpenGlHelper; + public class ItemRenderer { private static final ResourceLocation RES_MAP_BACKGROUND = new ResourceLocation("textures/map/map_background.png"); private static final ResourceLocation RES_UNDERWATER_OVERLAY = new ResourceLocation("textures/misc/underwater.png"); + + /** A reference to the Minecraft object. */ private final Minecraft mc; - private ItemStack itemToRender; - private float equippedProgress; - private float prevEquippedProgress; + private ItemStack itemStackMainHand; + private ItemStack itemStackOffHand; + private float equippedProgressMainHand; + private float prevEquippedProgressMainHand; + private float equippedProgressOffHand; + private float prevEquippedProgressOffHand; private final RenderManager renderManager; private final RenderItem itemRenderer; - /** - * + - * The index of the currently held item (0-8, or -1 if not yet - * updated) - */ - private int equippedItemSlot = -1; public ItemRenderer(Minecraft mcIn) { this.mc = mcIn; @@ -84,320 +59,398 @@ public class ItemRenderer { public void renderItem(EntityLivingBase entityIn, ItemStack heldStack, ItemCameraTransforms.TransformType transform) { + this.renderItemSide(entityIn, heldStack, transform, false); + } + + public void renderItemSide(EntityLivingBase entitylivingbaseIn, ItemStack heldStack, + ItemCameraTransforms.TransformType transform, boolean p_187462_4_) { if (heldStack != null) { Item item = heldStack.getItem(); Block block = Block.getBlockFromItem(item); GlStateManager.pushMatrix(); - if (this.itemRenderer.shouldRenderItemIn3D(heldStack)) { - GlStateManager.scale(2.0F, 2.0F, 2.0F); - // if (this.isBlockTranslucent(block)) { //TODO: figure out why this code - // exists, it breaks slime blocks - // GlStateManager.depthMask(false); - // } + boolean flag = this.itemRenderer.shouldRenderItemIn3D(heldStack) && this.isBlockTranslucent(block); + + if (flag) { + GlStateManager.depthMask(false); } - this.itemRenderer.renderItemModelForEntity(heldStack, entityIn, transform); - // if (this.isBlockTranslucent(block)) { - // GlStateManager.depthMask(true); - // } + this.itemRenderer.renderItem(heldStack, entitylivingbaseIn, transform, p_187462_4_); + + if (flag) { + GlStateManager.depthMask(true); + } GlStateManager.popMatrix(); } } /** - * + * Returns true if given block is translucent */ - private boolean isBlockTranslucent(Block blockIn) { + private boolean isBlockTranslucent(@Nullable Block blockIn) { return blockIn != null && blockIn.getBlockLayer() == EnumWorldBlockLayer.TRANSLUCENT; } - private void func_178101_a(float angle, float parFloat2) { + /** + * Rotate the render around X and Y + */ + private void rotateArroundXAndY(float angle, float angleY) { GlStateManager.pushMatrix(); GlStateManager.rotate(angle, 1.0F, 0.0F, 0.0F); - GlStateManager.rotate(parFloat2, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(angleY, 0.0F, 1.0F, 0.0F); RenderHelper.enableStandardItemLighting(); GlStateManager.popMatrix(); } - private void func_178109_a(AbstractClientPlayer clientPlayer) { - int i = this.mc.theWorld.getCombinedLight(new BlockPos(clientPlayer.posX, - clientPlayer.posY + (double) clientPlayer.getEyeHeight(), clientPlayer.posZ), 0); - float f = (float) (i & '\uffff'); + private void setLightmap() { + AbstractClientPlayer abstractclientplayer = this.mc.thePlayer; + int i = this.mc.theWorld.getCombinedLight(new BlockPos(abstractclientplayer.posX, + abstractclientplayer.posY + (double) abstractclientplayer.getEyeHeight(), abstractclientplayer.posZ), + 0); + float f = (float) (i & 65535); float f1 = (float) (i >> 16); OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, f, f1); } - private void func_178110_a(EntityPlayerSP entityplayerspIn, float partialTicks) { - float f = entityplayerspIn.prevRenderArmPitch - + (entityplayerspIn.renderArmPitch - entityplayerspIn.prevRenderArmPitch) * partialTicks; - float f1 = entityplayerspIn.prevRenderArmYaw - + (entityplayerspIn.renderArmYaw - entityplayerspIn.prevRenderArmYaw) * partialTicks; - GlStateManager.rotate((entityplayerspIn.rotationPitch - f) * 0.1F, 1.0F, 0.0F, 0.0F); - GlStateManager.rotate((entityplayerspIn.rotationYaw - f1) * 0.1F, 0.0F, 1.0F, 0.0F); + private void rotateArm(float p_187458_1_) { + EntityPlayerSP entityplayersp = this.mc.thePlayer; + float f = entityplayersp.prevRenderArmPitch + + (entityplayersp.renderArmPitch - entityplayersp.prevRenderArmPitch) * p_187458_1_; + float f1 = entityplayersp.prevRenderArmYaw + + (entityplayersp.renderArmYaw - entityplayersp.prevRenderArmYaw) * p_187458_1_; + GlStateManager.rotate((entityplayersp.rotationPitch - f) * 0.1F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate((entityplayersp.rotationYaw - f1) * 0.1F, 0.0F, 1.0F, 0.0F); } - private float func_178100_c(float parFloat1) { - float f = 1.0F - parFloat1 / 45.0F + 0.1F; + /** + * Return the angle to render the Map + */ + private float getMapAngleFromPitch(float pitch) { + float f = 1.0F - pitch / 45.0F + 0.1F; f = MathHelper.clamp_float(f, 0.0F, 1.0F); - f = -MathHelper.cos(f * 3.1415927F) * 0.5F + 0.5F; + f = -MathHelper.cos(f * (float) Math.PI) * 0.5F + 0.5F; return f; } - private void renderRightArm(RenderPlayer renderPlayerIn) { - GlStateManager.pushMatrix(); - GlStateManager.rotate(54.0F, 0.0F, 1.0F, 0.0F); - GlStateManager.rotate(64.0F, 1.0F, 0.0F, 0.0F); - GlStateManager.rotate(-62.0F, 0.0F, 0.0F, 1.0F); - GlStateManager.translate(0.25F, -0.85F, 0.75F); - renderPlayerIn.renderRightArm(this.mc.thePlayer); - GlStateManager.popMatrix(); - } - - private void renderLeftArm(RenderPlayer renderPlayerIn) { - GlStateManager.pushMatrix(); - GlStateManager.rotate(92.0F, 0.0F, 1.0F, 0.0F); - GlStateManager.rotate(45.0F, 1.0F, 0.0F, 0.0F); - GlStateManager.rotate(41.0F, 0.0F, 0.0F, 1.0F); - GlStateManager.translate(-0.3F, -1.1F, 0.45F); - renderPlayerIn.renderLeftArm(this.mc.thePlayer); - GlStateManager.popMatrix(); - } - - private void renderPlayerArms(AbstractClientPlayer clientPlayer) { - this.mc.getTextureManager().bindTexture(clientPlayer.getLocationSkin()); - Render render = this.renderManager.getEntityRenderObject(this.mc.thePlayer); - RenderPlayer renderplayer = (RenderPlayer) render; - if (!clientPlayer.isInvisible()) { + private void renderArms() { + if (!this.mc.thePlayer.isInvisible()) { GlStateManager.disableCull(); - this.renderRightArm(renderplayer); - this.renderLeftArm(renderplayer); + GlStateManager.pushMatrix(); + GlStateManager.rotate(90.0F, 0.0F, 1.0F, 0.0F); + this.renderArm(EnumHandSide.RIGHT); + this.renderArm(EnumHandSide.LEFT); + GlStateManager.popMatrix(); GlStateManager.enableCull(); } - } - private void renderItemMap(AbstractClientPlayer clientPlayer, float parFloat1, float parFloat2, float parFloat3) { - float f = -0.4F * MathHelper.sin(MathHelper.sqrt_float(parFloat3) * 3.1415927F); - float f1 = 0.2F * MathHelper.sin(MathHelper.sqrt_float(parFloat3) * 3.1415927F * 2.0F); - float f2 = -0.2F * MathHelper.sin(parFloat3 * 3.1415927F); - GlStateManager.translate(f, f1, f2); - float f3 = this.func_178100_c(parFloat1); - GlStateManager.translate(0.0F, 0.04F, -0.72F); - GlStateManager.translate(0.0F, parFloat2 * -1.2F, 0.0F); - GlStateManager.translate(0.0F, f3 * -0.5F, 0.0F); - GlStateManager.rotate(90.0F, 0.0F, 1.0F, 0.0F); - GlStateManager.rotate(f3 * -85.0F, 0.0F, 0.0F, 1.0F); - GlStateManager.rotate(0.0F, 1.0F, 0.0F, 0.0F); - this.renderPlayerArms(clientPlayer); - float f4 = MathHelper.sin(parFloat3 * parFloat3 * 3.1415927F); - float f5 = MathHelper.sin(MathHelper.sqrt_float(parFloat3) * 3.1415927F); - GlStateManager.rotate(f4 * -20.0F, 0.0F, 1.0F, 0.0F); - GlStateManager.rotate(f5 * -20.0F, 0.0F, 0.0F, 1.0F); - GlStateManager.rotate(f5 * -80.0F, 1.0F, 0.0F, 0.0F); - GlStateManager.scale(0.38F, 0.38F, 0.38F); - GlStateManager.rotate(90.0F, 0.0F, 1.0F, 0.0F); + private void renderArm(EnumHandSide p_187455_1_) { + this.mc.getTextureManager().bindTexture(this.mc.thePlayer.getLocationSkin()); + Render render = this.renderManager + .getEntityRenderObject(this.mc.thePlayer); + RenderPlayer renderplayer = (RenderPlayer) render; + GlStateManager.pushMatrix(); + float f = p_187455_1_ == EnumHandSide.RIGHT ? 1.0F : -1.0F; + GlStateManager.rotate(92.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(45.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(f * -41.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.translate(f * 0.3F, -1.1F, 0.45F); + + if (p_187455_1_ == EnumHandSide.RIGHT) { + renderplayer.renderRightArm(this.mc.thePlayer); + } else { + renderplayer.renderLeftArm(this.mc.thePlayer); + } + + GlStateManager.popMatrix(); + } + + private void renderMapFirstPersonSide(float p_187465_1_, EnumHandSide p_187465_2_, float p_187465_3_, + ItemStack p_187465_4_) { + float f = p_187465_2_ == EnumHandSide.RIGHT ? 1.0F : -1.0F; + GlStateManager.translate(f * 0.125F, -0.125F, 0.0F); + + if (!this.mc.thePlayer.isInvisible()) { + GlStateManager.pushMatrix(); + GlStateManager.rotate(f * 10.0F, 0.0F, 0.0F, 1.0F); + this.renderArmFirstPerson(p_187465_1_, p_187465_3_, p_187465_2_); + GlStateManager.popMatrix(); + } + + GlStateManager.pushMatrix(); + GlStateManager.translate(f * 0.51F, -0.08F + p_187465_1_ * -1.2F, -0.75F); + float f1 = MathHelper.sqrt_float(p_187465_3_); + float f2 = MathHelper.sin(f1 * (float) Math.PI); + float f3 = -0.5F * f2; + float f4 = 0.4F * MathHelper.sin(f1 * ((float) Math.PI * 2F)); + float f5 = -0.3F * MathHelper.sin(p_187465_3_ * (float) Math.PI); + GlStateManager.translate(f * f3, f4 - 0.3F * f2, f5); + GlStateManager.rotate(f2 * -45.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(f * f2 * -30.0F, 0.0F, 1.0F, 0.0F); + this.renderMapFirstPerson(p_187465_4_); + GlStateManager.popMatrix(); + } + + private void renderMapFirstPerson(float p_187463_1_, float p_187463_2_, float p_187463_3_) { + float f = MathHelper.sqrt_float(p_187463_3_); + float f1 = -0.2F * MathHelper.sin(p_187463_3_ * (float) Math.PI); + float f2 = -0.4F * MathHelper.sin(f * (float) Math.PI); + GlStateManager.translate(0.0F, -f1 / 2.0F, f2); + float f3 = this.getMapAngleFromPitch(p_187463_1_); + GlStateManager.translate(0.0F, 0.04F + p_187463_2_ * -1.2F + f3 * -0.5F, -0.72F); + GlStateManager.rotate(f3 * -85.0F, 1.0F, 0.0F, 0.0F); + this.renderArms(); + float f4 = MathHelper.sin(f * (float) Math.PI); + GlStateManager.rotate(f4 * 20.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.scale(2.0F, 2.0F, 2.0F); + this.renderMapFirstPerson(this.itemStackMainHand); + } + + private void renderMapFirstPerson(ItemStack stack) { + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); - GlStateManager.rotate(0.0F, 1.0F, 0.0F, 0.0F); - GlStateManager.translate(-1.0F, -1.0F, 0.0F); - GlStateManager.scale(0.015625F, 0.015625F, 0.015625F); + GlStateManager.scale(0.38F, 0.38F, 0.38F); + GlStateManager.disableLighting(); this.mc.getTextureManager().bindTexture(RES_MAP_BACKGROUND); Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); - EaglercraftGPU.glNormal3f(0.0F, 0.0F, -1.0F); - worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); - worldrenderer.pos(-7.0D, 135.0D, 0.0D).tex(0.0D, 1.0D).endVertex(); - worldrenderer.pos(135.0D, 135.0D, 0.0D).tex(1.0D, 1.0D).endVertex(); - worldrenderer.pos(135.0D, -7.0D, 0.0D).tex(1.0D, 0.0D).endVertex(); - worldrenderer.pos(-7.0D, -7.0D, 0.0D).tex(0.0D, 0.0D).endVertex(); + WorldRenderer worldRenderer = tessellator.getWorldRenderer(); + GlStateManager.translate(-0.5F, -0.5F, 0.0F); + GlStateManager.scale(0.0078125F, 0.0078125F, 0.0078125F); + worldRenderer.begin(7, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-7.0D, 135.0D, 0.0D).tex(0.0D, 1.0D).endVertex(); + worldRenderer.pos(135.0D, 135.0D, 0.0D).tex(1.0D, 1.0D).endVertex(); + worldRenderer.pos(135.0D, -7.0D, 0.0D).tex(1.0D, 0.0D).endVertex(); + worldRenderer.pos(-7.0D, -7.0D, 0.0D).tex(0.0D, 0.0D).endVertex(); tessellator.draw(); - MapData mapdata = Items.filled_map.getMapData(this.itemToRender, this.mc.theWorld); + MapData mapdata = Items.filled_map.getMapData(stack, this.mc.theWorld); + if (mapdata != null) { this.mc.entityRenderer.getMapItemRenderer().renderMap(mapdata, false); } + GlStateManager.enableLighting(); } - private void func_178095_a(AbstractClientPlayer clientPlayer, float parFloat1, float parFloat2) { - float f = -0.3F * MathHelper.sin(MathHelper.sqrt_float(parFloat2) * 3.1415927F); - float f1 = 0.4F * MathHelper.sin(MathHelper.sqrt_float(parFloat2) * 3.1415927F * 2.0F); - float f2 = -0.4F * MathHelper.sin(parFloat2 * 3.1415927F); - GlStateManager.translate(f, f1, f2); - GlStateManager.translate(0.64000005F, -0.6F, -0.71999997F); - GlStateManager.translate(0.0F, parFloat1 * -0.6F, 0.0F); - GlStateManager.rotate(45.0F, 0.0F, 1.0F, 0.0F); - float f3 = MathHelper.sin(parFloat2 * parFloat2 * 3.1415927F); - float f4 = MathHelper.sin(MathHelper.sqrt_float(parFloat2) * 3.1415927F); - GlStateManager.rotate(f4 * 70.0F, 0.0F, 1.0F, 0.0F); - GlStateManager.rotate(f3 * -20.0F, 0.0F, 0.0F, 1.0F); - this.mc.getTextureManager().bindTexture(clientPlayer.getLocationSkin()); - GlStateManager.translate(-1.0F, 3.6F, 3.5F); - GlStateManager.rotate(120.0F, 0.0F, 0.0F, 1.0F); + private void renderArmFirstPerson(float p_187456_1_, float p_187456_2_, EnumHandSide p_187456_3_) { + boolean flag = p_187456_3_ != EnumHandSide.LEFT; + float f = flag ? 1.0F : -1.0F; + float f1 = MathHelper.sqrt_float(p_187456_2_); + float f2 = -0.3F * MathHelper.sin(f1 * (float) Math.PI); + float f3 = 0.4F * MathHelper.sin(f1 * ((float) Math.PI * 2F)); + float f4 = -0.4F * MathHelper.sin(p_187456_2_ * (float) Math.PI); + GlStateManager.translate(f * (f2 + 0.64000005F), f3 + -0.6F + p_187456_1_ * -0.6F, f4 + -0.71999997F); + GlStateManager.rotate(f * 45.0F, 0.0F, 1.0F, 0.0F); + float f5 = MathHelper.sin(p_187456_2_ * p_187456_2_ * (float) Math.PI); + float f6 = MathHelper.sin(f1 * (float) Math.PI); + GlStateManager.rotate(f * f6 * 70.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(f * f5 * -20.0F, 0.0F, 0.0F, 1.0F); + AbstractClientPlayer abstractclientplayer = this.mc.thePlayer; + this.mc.getTextureManager().bindTexture(abstractclientplayer.getLocationSkin()); + GlStateManager.translate(f * -1.0F, 3.6F, 3.5F); + GlStateManager.rotate(f * 120.0F, 0.0F, 0.0F, 1.0F); GlStateManager.rotate(200.0F, 1.0F, 0.0F, 0.0F); - GlStateManager.rotate(-135.0F, 0.0F, 1.0F, 0.0F); - GlStateManager.scale(1.0F, 1.0F, 1.0F); - GlStateManager.translate(5.6F, 0.0F, 0.0F); - Render render = this.renderManager.getEntityRenderObject(this.mc.thePlayer); + GlStateManager.rotate(f * -135.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.translate(f * 5.6F, 0.0F, 0.0F); + RenderPlayer renderplayer = (RenderPlayer) this.renderManager.getEntityRenderObject(abstractclientplayer); GlStateManager.disableCull(); - RenderPlayer renderplayer = (RenderPlayer) render; - renderplayer.renderRightArm(this.mc.thePlayer); + + if (flag) { + renderplayer.renderRightArm(abstractclientplayer); + } else { + renderplayer.renderLeftArm(abstractclientplayer); + } + GlStateManager.enableCull(); } - private void func_178105_d(float parFloat1) { - float f = -0.4F * MathHelper.sin(MathHelper.sqrt_float(parFloat1) * 3.1415927F); - float f1 = 0.2F * MathHelper.sin(MathHelper.sqrt_float(parFloat1) * 3.1415927F * 2.0F); - float f2 = -0.2F * MathHelper.sin(parFloat1 * 3.1415927F); - GlStateManager.translate(f, f1, f2); - } + private void transformEatFirstPerson(float p_187454_1_, EnumHandSide p_187454_2_, ItemStack p_187454_3_) { + float f = (float) this.mc.thePlayer.getItemInUseCount() - p_187454_1_ + 1.0F; + float f1 = f / (float) p_187454_3_.getMaxItemUseDuration(); - private void func_178104_a(AbstractClientPlayer clientPlayer, float parFloat1) { - float f = (float) clientPlayer.getItemInUseCount() - parFloat1 + 1.0F; - float f1 = f / (float) this.itemToRender.getMaxItemUseDuration(); - float f2 = MathHelper.abs(MathHelper.cos(f / 4.0F * 3.1415927F) * 0.1F); - if (f1 >= 0.8F) { - f2 = 0.0F; + if (f1 < 0.8F) { + float f2 = MathHelper.abs(MathHelper.cos(f / 4.0F * (float) Math.PI) * 0.1F); + GlStateManager.translate(0.0F, f2, 0.0F); } - GlStateManager.translate(0.0F, f2, 0.0F); float f3 = 1.0F - (float) Math.pow((double) f1, 27.0D); - GlStateManager.translate(f3 * 0.6F, f3 * -0.5F, f3 * 0.0F); - GlStateManager.rotate(f3 * 90.0F, 0.0F, 1.0F, 0.0F); + int i = p_187454_2_ == EnumHandSide.RIGHT ? 1 : -1; + GlStateManager.translate(f3 * 0.6F * (float) i, f3 * -0.5F, f3 * 0.0F); + GlStateManager.rotate((float) i * f3 * 90.0F, 0.0F, 1.0F, 0.0F); GlStateManager.rotate(f3 * 10.0F, 1.0F, 0.0F, 0.0F); - GlStateManager.rotate(f3 * 30.0F, 0.0F, 0.0F, 1.0F); + GlStateManager.rotate((float) i * f3 * 30.0F, 0.0F, 0.0F, 1.0F); } - /** - * + - * Performs transformations prior to the rendering of a held - * item in first person. - */ - private void transformFirstPersonItem(float equipProgress, float swingProgress) { - GlStateManager.translate(0.56F, -0.52F, -0.71999997F); - GlStateManager.translate(0.0F, equipProgress * -0.6F, 0.0F); - GlStateManager.rotate(45.0F, 0.0F, 1.0F, 0.0F); - float f = MathHelper.sin(swingProgress * swingProgress * 3.1415927F); - float f1 = MathHelper.sin(MathHelper.sqrt_float(swingProgress) * 3.1415927F); - GlStateManager.rotate(f * -20.0F, 0.0F, 1.0F, 0.0F); - GlStateManager.rotate(f1 * -20.0F, 0.0F, 0.0F, 1.0F); + private void transformFirstPerson(EnumHandSide p_187453_1_, float p_187453_2_) { + int i = p_187453_1_ == EnumHandSide.RIGHT ? 1 : -1; + float f = MathHelper.sin(p_187453_2_ * p_187453_2_ * (float) Math.PI); + GlStateManager.rotate((float) i * (45.0F + f * -20.0F), 0.0F, 1.0F, 0.0F); + float f1 = MathHelper.sin(MathHelper.sqrt_float(p_187453_2_) * (float) Math.PI); + GlStateManager.rotate((float) i * f1 * -20.0F, 0.0F, 0.0F, 1.0F); GlStateManager.rotate(f1 * -80.0F, 1.0F, 0.0F, 0.0F); - GlStateManager.scale(0.4F, 0.4F, 0.4F); + GlStateManager.rotate((float) i * -45.0F, 0.0F, 1.0F, 0.0F); } - private void func_178098_a(float clientPlayer, AbstractClientPlayer parAbstractClientPlayer) { - GlStateManager.rotate(-18.0F, 0.0F, 0.0F, 1.0F); - GlStateManager.rotate(-12.0F, 0.0F, 1.0F, 0.0F); - GlStateManager.rotate(-8.0F, 1.0F, 0.0F, 0.0F); - GlStateManager.translate(-0.9F, 0.2F, 0.0F); - float f = (float) this.itemToRender.getMaxItemUseDuration() - - ((float) parAbstractClientPlayer.getItemInUseCount() - clientPlayer + 1.0F); - float f1 = f / 20.0F; - f1 = (f1 * f1 + f1 * 2.0F) / 3.0F; - if (f1 > 1.0F) { - f1 = 1.0F; - } - - if (f1 > 0.1F) { - float f2 = MathHelper.sin((f - 0.1F) * 1.3F); - float f3 = f1 - 0.1F; - float f4 = f2 * f3; - GlStateManager.translate(f4 * 0.0F, f4 * 0.01F, f4 * 0.0F); - } - - GlStateManager.translate(f1 * 0.0F, f1 * 0.0F, f1 * 0.1F); - GlStateManager.scale(1.0F, 1.0F, 1.0F + f1 * 0.2F); - } - - private void func_178103_d() { - GlStateManager.translate(-0.5F, 0.2F, 0.0F); - GlStateManager.rotate(30.0F, 0.0F, 1.0F, 0.0F); - GlStateManager.rotate(-80.0F, 1.0F, 0.0F, 0.0F); - GlStateManager.rotate(60.0F, 0.0F, 1.0F, 0.0F); + private void transformSideFirstPerson(EnumHandSide p_187459_1_, float p_187459_2_) { + int i = p_187459_1_ == EnumHandSide.RIGHT ? 1 : -1; + GlStateManager.translate((float) i * 0.56F, -0.52F + p_187459_2_ * -0.6F, -0.72F); } /** - * + - * Renders the active item in the player's hand when in first - * person mode. Args: partialTickTime + * Renders the active item in the player's hand when in first person mode. */ public void renderItemInFirstPerson(float partialTicks) { - float f = 1.0F - - (this.prevEquippedProgress + (this.equippedProgress - this.prevEquippedProgress) * partialTicks); - EntityPlayerSP entityplayersp = this.mc.thePlayer; - float f1 = entityplayersp.getSwingProgress(partialTicks); - float f2 = entityplayersp.prevRotationPitch - + (entityplayersp.rotationPitch - entityplayersp.prevRotationPitch) * partialTicks; - float f3 = entityplayersp.prevRotationYaw - + (entityplayersp.rotationYaw - entityplayersp.prevRotationYaw) * partialTicks; - this.func_178101_a(f2, f3); - this.func_178109_a(entityplayersp); - this.func_178110_a((EntityPlayerSP) entityplayersp, partialTicks); - GlStateManager.enableRescaleNormal(); - GlStateManager.pushMatrix(); - if (this.itemToRender != null) { - if (this.itemToRender.getItem() == Items.filled_map) { - this.renderItemMap(entityplayersp, f2, f, f1); - } else if (entityplayersp.getItemInUseCount() > 0) { - EnumAction enumaction = this.itemToRender.getItemUseAction(); - switch (enumaction) { - case NONE: - this.transformFirstPersonItem(f, 0.0F); - break; - case EAT: - case DRINK: - this.func_178104_a(entityplayersp, partialTicks); - this.transformFirstPersonItem(f, 0.0F); - break; - case BLOCK: - this.transformFirstPersonItem(f, 0.0F); - this.func_178103_d(); - break; - case BOW: - this.transformFirstPersonItem(f, 0.0F); - this.func_178098_a(partialTicks, entityplayersp); - } - } else { - this.func_178105_d(f1); - this.transformFirstPersonItem(f, f1); - } + AbstractClientPlayer abstractclientplayer = this.mc.thePlayer; + float f = abstractclientplayer.getSwingProgress(partialTicks); + EnumHand enumhand = (EnumHand) Objects.firstNonNull(abstractclientplayer.swingingHand, EnumHand.MAIN_HAND); + float f1 = abstractclientplayer.prevRotationPitch + + (abstractclientplayer.rotationPitch - abstractclientplayer.prevRotationPitch) * partialTicks; + float f2 = abstractclientplayer.prevRotationYaw + + (abstractclientplayer.rotationYaw - abstractclientplayer.prevRotationYaw) * partialTicks; + boolean flag = true; + boolean flag1 = true; - this.renderItem(entityplayersp, this.itemToRender, ItemCameraTransforms.TransformType.FIRST_PERSON); - } else if (!entityplayersp.isInvisible()) { - this.func_178095_a(entityplayersp, f, f1); + if (abstractclientplayer.isHandActive()) { + ItemStack itemstack = abstractclientplayer.getActiveItemStack(); + + if (itemstack.getItem() == Items.bow) { + EnumHand enumhand1 = abstractclientplayer.getActiveHand(); + flag = enumhand1 == EnumHand.MAIN_HAND; + flag1 = !flag; + } + } + + this.rotateArroundXAndY(f1, f2); + this.setLightmap(); + this.rotateArm(partialTicks); + GlStateManager.enableRescaleNormal(); + + if (flag) { + float f3 = enumhand == EnumHand.MAIN_HAND ? f : 0.0F; + float f5 = 1.0F - (this.prevEquippedProgressMainHand + + (this.equippedProgressMainHand - this.prevEquippedProgressMainHand) * partialTicks); + this.renderItemInFirstPerson(abstractclientplayer, partialTicks, f1, EnumHand.MAIN_HAND, f3, + this.itemStackMainHand, f5); + } + + if (flag1) { + float f4 = enumhand == EnumHand.OFF_HAND ? f : 0.0F; + float f6 = 1.0F - (this.prevEquippedProgressOffHand + + (this.equippedProgressOffHand - this.prevEquippedProgressOffHand) * partialTicks); + this.renderItemInFirstPerson(abstractclientplayer, partialTicks, f1, EnumHand.OFF_HAND, f4, + this.itemStackOffHand, f6); } - GlStateManager.popMatrix(); GlStateManager.disableRescaleNormal(); RenderHelper.disableStandardItemLighting(); } + public void renderItemInFirstPerson(AbstractClientPlayer p_187457_1_, float p_187457_2_, float p_187457_3_, + EnumHand p_187457_4_, float p_187457_5_, @Nullable ItemStack p_187457_6_, float p_187457_7_) { + boolean flag = p_187457_4_ == EnumHand.MAIN_HAND; + EnumHandSide enumhandside = flag ? p_187457_1_.getPrimaryHand() : p_187457_1_.getPrimaryHand().opposite(); + GlStateManager.pushMatrix(); + + if (p_187457_6_ == null) { + if (flag && !p_187457_1_.isInvisible()) { + this.renderArmFirstPerson(p_187457_7_, p_187457_5_, enumhandside); + } + } else if (p_187457_6_.getItem() == Items.filled_map) { + if (flag && this.itemStackOffHand == null) { + this.renderMapFirstPerson(p_187457_3_, p_187457_7_, p_187457_5_); + } else { + this.renderMapFirstPersonSide(p_187457_7_, enumhandside, p_187457_5_, p_187457_6_); + } + } else { + boolean flag1 = enumhandside == EnumHandSide.RIGHT; + + if (p_187457_1_.isHandActive() && p_187457_1_.getItemInUseCount() > 0 + && p_187457_1_.getActiveHand() == p_187457_4_) { + int j = flag1 ? 1 : -1; + + switch (p_187457_6_.getItemUseAction()) { + case NONE: + this.transformSideFirstPerson(enumhandside, p_187457_7_); + break; + + case EAT: + case DRINK: + this.transformEatFirstPerson(p_187457_2_, enumhandside, p_187457_6_); + this.transformSideFirstPerson(enumhandside, p_187457_7_); + break; + + case BLOCK: + this.transformSideFirstPerson(enumhandside, p_187457_7_); + break; + + case BOW: + this.transformSideFirstPerson(enumhandside, p_187457_7_); + GlStateManager.translate((float) j * -0.2785682F, 0.18344387F, 0.15731531F); + GlStateManager.rotate(-13.935F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate((float) j * 35.3F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate((float) j * -9.785F, 0.0F, 0.0F, 1.0F); + float f5 = (float) p_187457_6_.getMaxItemUseDuration() + - ((float) this.mc.thePlayer.getItemInUseCount() - p_187457_2_ + 1.0F); + float f6 = f5 / 20.0F; + f6 = (f6 * f6 + f6 * 2.0F) / 3.0F; + + if (f6 > 1.0F) { + f6 = 1.0F; + } + + if (f6 > 0.1F) { + float f7 = MathHelper.sin((f5 - 0.1F) * 1.3F); + float f3 = f6 - 0.1F; + float f4 = f7 * f3; + GlStateManager.translate(f4 * 0.0F, f4 * 0.004F, f4 * 0.0F); + } + + GlStateManager.translate(f6 * 0.0F, f6 * 0.0F, f6 * 0.04F); + GlStateManager.scale(1.0F, 1.0F, 1.0F + f6 * 0.2F); + GlStateManager.rotate((float) j * 45.0F, 0.0F, -1.0F, 0.0F); + } + } else { + float f = -0.4F * MathHelper.sin(MathHelper.sqrt_float(p_187457_5_) * (float) Math.PI); + float f1 = 0.2F * MathHelper.sin(MathHelper.sqrt_float(p_187457_5_) * ((float) Math.PI * 2F)); + float f2 = -0.2F * MathHelper.sin(p_187457_5_ * (float) Math.PI); + int i = flag1 ? 1 : -1; + GlStateManager.translate((float) i * f, f1, f2); + this.transformSideFirstPerson(enumhandside, p_187457_7_); + this.transformFirstPerson(enumhandside, p_187457_5_); + } + + this.renderItemSide(p_187457_1_, p_187457_6_, + flag1 ? ItemCameraTransforms.TransformType.FIRST_PERSON_RIGHT_HAND + : ItemCameraTransforms.TransformType.FIRST_PERSON_LEFT_HAND, + !flag1); + } + + GlStateManager.popMatrix(); + } + /** - * + - * Renders all the overlays that are in first person mode. Args: - * partialTickTime + * Renders the overlays. */ public void renderOverlays(float partialTicks) { GlStateManager.disableAlpha(); + if (this.mc.thePlayer.isEntityInsideOpaqueBlock()) { IBlockState iblockstate = this.mc.theWorld.getBlockState(new BlockPos(this.mc.thePlayer)); - EntityPlayerSP entityplayersp = this.mc.thePlayer; + EntityPlayer entityplayer = this.mc.thePlayer; for (int i = 0; i < 8; ++i) { - double d0 = entityplayersp.posX - + (double) (((float) ((i >> 0) % 2) - 0.5F) * entityplayersp.width * 0.8F); - double d1 = entityplayersp.posY + (double) (((float) ((i >> 1) % 2) - 0.5F) * 0.1F); - double d2 = entityplayersp.posZ - + (double) (((float) ((i >> 2) % 2) - 0.5F) * entityplayersp.width * 0.8F); - BlockPos blockpos = new BlockPos(d0, d1 + (double) entityplayersp.getEyeHeight(), d2); + double d0 = entityplayer.posX + (double) (((float) ((i >> 0) % 2) - 0.5F) * entityplayer.width * 0.8F); + double d1 = entityplayer.posY + (double) (((float) ((i >> 1) % 2) - 0.5F) * 0.1F); + double d2 = entityplayer.posZ + (double) (((float) ((i >> 2) % 2) - 0.5F) * entityplayer.width * 0.8F); + BlockPos blockpos = new BlockPos(d0, d1 + (double) entityplayer.getEyeHeight(), d2); IBlockState iblockstate1 = this.mc.theWorld.getBlockState(blockpos); + if (iblockstate1.getBlock().isVisuallyOpaque()) { iblockstate = iblockstate1; } } if (iblockstate.getBlock().getRenderType() != -1) { - this.func_178108_a(partialTicks, + this.renderBlockInHand(partialTicks, this.mc.getBlockRendererDispatcher().getBlockModelShapes().getTexture(iblockstate)); } } @@ -415,10 +468,13 @@ public class ItemRenderer { GlStateManager.enableAlpha(); } - private void func_178108_a(float parFloat1, EaglerTextureAtlasSprite parTextureAtlasSprite) { + /** + * Render the block in the player's hand + */ + private void renderBlockInHand(float partialTicks, EaglerTextureAtlasSprite atlas) { this.mc.getTextureManager().bindTexture(TextureMap.locationBlocksTexture); Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + WorldRenderer worldRenderer = tessellator.getWorldRenderer(); float f = 0.1F; GlStateManager.color(0.1F, 0.1F, 0.1F, 0.5F); GlStateManager.pushMatrix(); @@ -427,34 +483,34 @@ public class ItemRenderer { float f3 = -1.0F; float f4 = 1.0F; float f5 = -0.5F; - float f6 = parTextureAtlasSprite.getMinU(); - float f7 = parTextureAtlasSprite.getMaxU(); - float f8 = parTextureAtlasSprite.getMinV(); - float f9 = parTextureAtlasSprite.getMaxV(); - worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); - worldrenderer.pos(-1.0D, -1.0D, -0.5D).tex((double) f7, (double) f9).endVertex(); - worldrenderer.pos(1.0D, -1.0D, -0.5D).tex((double) f6, (double) f9).endVertex(); - worldrenderer.pos(1.0D, 1.0D, -0.5D).tex((double) f6, (double) f8).endVertex(); - worldrenderer.pos(-1.0D, 1.0D, -0.5D).tex((double) f7, (double) f8).endVertex(); + float f6 = atlas.getMinU(); + float f7 = atlas.getMaxU(); + float f8 = atlas.getMinV(); + float f9 = atlas.getMaxV(); + worldRenderer.begin(7, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-1.0D, -1.0D, -0.5D).tex((double) f7, (double) f9).endVertex(); + worldRenderer.pos(1.0D, -1.0D, -0.5D).tex((double) f6, (double) f9).endVertex(); + worldRenderer.pos(1.0D, 1.0D, -0.5D).tex((double) f6, (double) f8).endVertex(); + worldRenderer.pos(-1.0D, 1.0D, -0.5D).tex((double) f7, (double) f8).endVertex(); tessellator.draw(); GlStateManager.popMatrix(); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); } /** - * + - * Renders a texture that warps around based on the direction - * the player is looking. Texture needs to be bound before being - * called. Used for the water overlay. Args: parialTickTime + * Renders a texture that warps around based on the direction the player is + * looking. Texture needs to be bound + * before being called. Used for the water overlay. */ - private void renderWaterOverlayTexture(float parFloat1) { + private void renderWaterOverlayTexture(float partialTicks) { this.mc.getTextureManager().bindTexture(RES_UNDERWATER_OVERLAY); Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); - float f = this.mc.thePlayer.getBrightness(parFloat1); + WorldRenderer worldRenderer = tessellator.getWorldRenderer(); + float f = this.mc.thePlayer.getBrightness(partialTicks); GlStateManager.color(f, f, f, 0.5F); GlStateManager.enableBlend(); - GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, 1, 0); + GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, + GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE); GlStateManager.pushMatrix(); float f1 = 4.0F; float f2 = -1.0F; @@ -464,11 +520,11 @@ public class ItemRenderer { float f6 = -0.5F; float f7 = -this.mc.thePlayer.rotationYaw / 64.0F; float f8 = this.mc.thePlayer.rotationPitch / 64.0F; - worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); - worldrenderer.pos(-1.0D, -1.0D, -0.5D).tex((double) (4.0F + f7), (double) (4.0F + f8)).endVertex(); - worldrenderer.pos(1.0D, -1.0D, -0.5D).tex((double) (0.0F + f7), (double) (4.0F + f8)).endVertex(); - worldrenderer.pos(1.0D, 1.0D, -0.5D).tex((double) (0.0F + f7), (double) (0.0F + f8)).endVertex(); - worldrenderer.pos(-1.0D, 1.0D, -0.5D).tex((double) (4.0F + f7), (double) (0.0F + f8)).endVertex(); + worldRenderer.begin(7, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-1.0D, -1.0D, -0.5D).tex((double) (4.0F + f7), (double) (4.0F + f8)).endVertex(); + worldRenderer.pos(1.0D, -1.0D, -0.5D).tex((double) (0.0F + f7), (double) (4.0F + f8)).endVertex(); + worldRenderer.pos(1.0D, 1.0D, -0.5D).tex((double) (0.0F + f7), (double) (0.0F + f8)).endVertex(); + worldRenderer.pos(-1.0D, 1.0D, -0.5D).tex((double) (4.0F + f7), (double) (0.0F + f8)).endVertex(); tessellator.draw(); GlStateManager.popMatrix(); GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); @@ -476,18 +532,18 @@ public class ItemRenderer { } /** - * + - * Renders the fire on the screen for first person mode. Arg: - * partialTickTime + * Renders the fire on the screen for first person mode. Arg: partialTickTime */ - private void renderFireInFirstPerson(float parFloat1) { + private void renderFireInFirstPerson(float partialTicks) { Tessellator tessellator = Tessellator.getInstance(); - WorldRenderer worldrenderer = tessellator.getWorldRenderer(); + WorldRenderer worldRenderer = tessellator.getWorldRenderer(); GlStateManager.color(1.0F, 1.0F, 1.0F, 0.9F); - GlStateManager.depthFunc(GL_ALWAYS); + GlStateManager.depthFunc(519); GlStateManager.depthMask(false); GlStateManager.enableBlend(); - GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, 1, 0); + GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, + GL_ONE_MINUS_SRC_ALPHA, GL_ONE, + GL_ZERO); float f = 1.0F; for (int i = 0; i < 2; ++i) { @@ -499,18 +555,18 @@ public class ItemRenderer { float f2 = textureatlassprite.getMaxU(); float f3 = textureatlassprite.getMinV(); float f4 = textureatlassprite.getMaxV(); - float f5 = (0.0F - f) / 2.0F; - float f6 = f5 + f; - float f7 = 0.0F - f / 2.0F; - float f8 = f7 + f; + float f5 = -0.5F; + float f6 = 0.5F; + float f7 = -0.5F; + float f8 = 0.5F; float f9 = -0.5F; GlStateManager.translate((float) (-(i * 2 - 1)) * 0.24F, -0.3F, 0.0F); GlStateManager.rotate((float) (i * 2 - 1) * 10.0F, 0.0F, 1.0F, 0.0F); - worldrenderer.begin(7, DefaultVertexFormats.POSITION_TEX); - worldrenderer.pos((double) f5, (double) f7, (double) f9).tex((double) f2, (double) f4).endVertex(); - worldrenderer.pos((double) f6, (double) f7, (double) f9).tex((double) f1, (double) f4).endVertex(); - worldrenderer.pos((double) f6, (double) f8, (double) f9).tex((double) f1, (double) f3).endVertex(); - worldrenderer.pos((double) f5, (double) f8, (double) f9).tex((double) f2, (double) f3).endVertex(); + worldRenderer.begin(7, DefaultVertexFormats.POSITION_TEX); + worldRenderer.pos(-0.5D, -0.5D, -0.5D).tex((double) f2, (double) f4).endVertex(); + worldRenderer.pos(0.5D, -0.5D, -0.5D).tex((double) f1, (double) f4).endVertex(); + worldRenderer.pos(0.5D, 0.5D, -0.5D).tex((double) f1, (double) f3).endVertex(); + worldRenderer.pos(-0.5D, 0.5D, -0.5D).tex((double) f2, (double) f3).endVertex(); tessellator.draw(); GlStateManager.popMatrix(); } @@ -518,48 +574,45 @@ public class ItemRenderer { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); GlStateManager.disableBlend(); GlStateManager.depthMask(true); - GlStateManager.depthFunc(GL_LEQUAL); + GlStateManager.depthFunc(515); } public void updateEquippedItem() { - this.prevEquippedProgress = this.equippedProgress; + this.prevEquippedProgressMainHand = this.equippedProgressMainHand; + this.prevEquippedProgressOffHand = this.equippedProgressOffHand; EntityPlayerSP entityplayersp = this.mc.thePlayer; - ItemStack itemstack = entityplayersp.inventory.getCurrentItem(); - boolean flag = false; - if (this.itemToRender != null && itemstack != null) { - if (!this.itemToRender.getIsItemStackEqual(itemstack)) { - flag = true; - } - } else if (this.itemToRender == null && itemstack == null) { - flag = false; + ItemStack itemstack = entityplayersp.getHeldItem(); + ItemStack itemstack1 = entityplayersp.getHeldItemOffhand(); + + if (entityplayersp.isRowingBoat()) { + this.equippedProgressMainHand = MathHelper.clamp_float(this.equippedProgressMainHand - 0.4F, 0.0F, 1.0F); + this.equippedProgressOffHand = MathHelper.clamp_float(this.equippedProgressOffHand - 0.4F, 0.0F, 1.0F); } else { - flag = true; + // TODO: implement attack cooldown (new combat system) + float f = 0.0F; + // float f = entityplayersp.getCooledAttackStrength(1.0F); + this.equippedProgressMainHand += MathHelper + .clamp_float((Objects.equal(this.itemStackMainHand, itemstack) ? f * f * f : 0.0F) + - this.equippedProgressMainHand, -0.4F, 0.4F); + this.equippedProgressOffHand += MathHelper.clamp_float( + (float) (Objects.equal(this.itemStackOffHand, itemstack1) ? 1 : 0) - this.equippedProgressOffHand, + -0.4F, 0.4F); } - float f = 0.4F; - float f1 = flag ? 0.0F : 1.0F; - float f2 = MathHelper.clamp_float(f1 - this.equippedProgress, -f, f); - this.equippedProgress += f2; - if (this.equippedProgress < 0.1F) { - this.itemToRender = itemstack; - this.equippedItemSlot = entityplayersp.inventory.currentItem; + if (this.equippedProgressMainHand < 0.1F) { + this.itemStackMainHand = itemstack; } + if (this.equippedProgressOffHand < 0.1F) { + this.itemStackOffHand = itemstack1; + } } - /** - * + - * Resets equippedProgress - */ - public void resetEquippedProgress() { - this.equippedProgress = 0.0F; + public void resetEquippedProgress(EnumHand hand) { + if (hand == EnumHand.MAIN_HAND) { + this.equippedProgressMainHand = 0.0F; + } else { + this.equippedProgressOffHand = 0.0F; + } } - - /** - * + - * Resets equippedProgress - */ - public void resetEquippedProgress2() { - this.equippedProgress = 0.0F; - } -} \ No newline at end of file +} diff --git a/src/main/java/net/minecraft/client/renderer/block/model/ItemCameraTransforms.java b/src/main/java/net/minecraft/client/renderer/block/model/ItemCameraTransforms.java index 996894f..e612650 100644 --- a/src/main/java/net/minecraft/client/renderer/block/model/ItemCameraTransforms.java +++ b/src/main/java/net/minecraft/client/renderer/block/model/ItemCameraTransforms.java @@ -6,6 +6,8 @@ import org.json.JSONObject; import net.lax1dude.eaglercraft.v1_8.json.JSONTypeDeserializer; import net.lax1dude.eaglercraft.v1_8.json.JSONTypeProvider; import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; +import net.lax1dude.eaglercraft.v1_8.vector.Quaternion; +import net.minecraft.util.MathHelper; /** * + @@ -38,17 +40,19 @@ import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; */ public class ItemCameraTransforms { public static final ItemCameraTransforms DEFAULT = new ItemCameraTransforms(); - public static float field_181690_b = 0.0F; - public static float field_181691_c = 0.0F; - public static float field_181692_d = 0.0F; - public static float field_181693_e = 0.0F; - public static float field_181694_f = 0.0F; - public static float field_181695_g = 0.0F; - public static float field_181696_h = 0.0F; - public static float field_181697_i = 0.0F; - public static float field_181698_j = 0.0F; - public final ItemTransformVec3f thirdPerson; - public final ItemTransformVec3f firstPerson; + public static float offsetTranslateX = 0.0F; + public static float offsetTranslateY = 0.0F; + public static float offsetTranslateZ = 0.0F; + public static float offsetRotationX = 0.0F; + public static float offsetRotationY = 0.0F; + public static float offsetRotationZ = 0.0F; + public static float offsetScaleX = 0.0F; + public static float offsetScaleY = 0.0F; + public static float offsetScaleZ = 0.0F; + public final ItemTransformVec3f thirdperson_left; + public final ItemTransformVec3f thirdperson_right; + public final ItemTransformVec3f firstperson_left; + public final ItemTransformVec3f firstperson_right; public final ItemTransformVec3f head; public final ItemTransformVec3f gui; public final ItemTransformVec3f ground; @@ -56,87 +60,152 @@ public class ItemCameraTransforms { private ItemCameraTransforms() { this(ItemTransformVec3f.DEFAULT, ItemTransformVec3f.DEFAULT, ItemTransformVec3f.DEFAULT, - ItemTransformVec3f.DEFAULT, ItemTransformVec3f.DEFAULT, ItemTransformVec3f.DEFAULT); + ItemTransformVec3f.DEFAULT, ItemTransformVec3f.DEFAULT, ItemTransformVec3f.DEFAULT, + ItemTransformVec3f.DEFAULT, ItemTransformVec3f.DEFAULT); } - public ItemCameraTransforms(ItemCameraTransforms parItemCameraTransforms) { - this.thirdPerson = parItemCameraTransforms.thirdPerson; - this.firstPerson = parItemCameraTransforms.firstPerson; - this.head = parItemCameraTransforms.head; - this.gui = parItemCameraTransforms.gui; - this.ground = parItemCameraTransforms.ground; - this.fixed = parItemCameraTransforms.fixed; + public ItemCameraTransforms(ItemCameraTransforms transforms) { + this.thirdperson_left = transforms.thirdperson_left; + this.thirdperson_right = transforms.thirdperson_right; + this.firstperson_left = transforms.firstperson_left; + this.firstperson_right = transforms.firstperson_right; + this.head = transforms.head; + this.gui = transforms.gui; + this.ground = transforms.ground; + this.fixed = transforms.fixed; } - public ItemCameraTransforms(ItemTransformVec3f parItemTransformVec3f, ItemTransformVec3f parItemTransformVec3f_2, - ItemTransformVec3f parItemTransformVec3f_3, ItemTransformVec3f parItemTransformVec3f_4, - ItemTransformVec3f parItemTransformVec3f_5, ItemTransformVec3f parItemTransformVec3f_6) { - this.thirdPerson = parItemTransformVec3f; - this.firstPerson = parItemTransformVec3f_2; - this.head = parItemTransformVec3f_3; - this.gui = parItemTransformVec3f_4; - this.ground = parItemTransformVec3f_5; - this.fixed = parItemTransformVec3f_6; + public ItemCameraTransforms(ItemTransformVec3f p_i46569_1_, ItemTransformVec3f p_i46569_2_, + ItemTransformVec3f p_i46569_3_, ItemTransformVec3f p_i46569_4_, ItemTransformVec3f p_i46569_5_, + ItemTransformVec3f p_i46569_6_, ItemTransformVec3f p_i46569_7_, ItemTransformVec3f p_i46569_8_) { + this.thirdperson_left = p_i46569_1_; + this.thirdperson_right = p_i46569_2_; + this.firstperson_left = p_i46569_3_; + this.firstperson_right = p_i46569_4_; + this.head = p_i46569_5_; + this.gui = p_i46569_6_; + this.ground = p_i46569_7_; + this.fixed = p_i46569_8_; } - public void applyTransform(ItemCameraTransforms.TransformType parTransformType) { - ItemTransformVec3f itemtransformvec3f = this.getTransform(parTransformType); - if (itemtransformvec3f != ItemTransformVec3f.DEFAULT) { - GlStateManager.translate(itemtransformvec3f.translation.x + field_181690_b, - itemtransformvec3f.translation.y + field_181691_c, - itemtransformvec3f.translation.z + field_181692_d); - GlStateManager.rotate(itemtransformvec3f.rotation.y + field_181694_f, 0.0F, 1.0F, 0.0F); - GlStateManager.rotate(itemtransformvec3f.rotation.x + field_181693_e, 1.0F, 0.0F, 0.0F); - GlStateManager.rotate(itemtransformvec3f.rotation.z + field_181695_g, 0.0F, 0.0F, 1.0F); - GlStateManager.scale(itemtransformvec3f.scale.x + field_181696_h, - itemtransformvec3f.scale.y + field_181697_i, itemtransformvec3f.scale.z + field_181698_j); + public void applyTransform(ItemCameraTransforms.TransformType type) { + applyTransformSide(this.getTransform(type), false); + } + + public static void applyTransformSide(ItemTransformVec3f vec, boolean leftHand) { + if (vec != ItemTransformVec3f.DEFAULT) { + int i = leftHand ? -1 : 1; + GlStateManager.translate((float) i * (offsetTranslateX + vec.translation.x), + offsetTranslateY + vec.translation.y, offsetTranslateZ + vec.translation.z); + float f = offsetRotationX + vec.rotation.x; + float f1 = offsetRotationY + vec.rotation.y; + float f2 = offsetRotationZ + vec.rotation.z; + + if (leftHand) { + f1 = -f1; + f2 = -f2; + } + + GlStateManager.rotate(makeQuaternion(f, f1, f2)); + GlStateManager.scale(offsetScaleX + vec.scale.x, offsetScaleY + vec.scale.y, offsetScaleZ + vec.scale.z); } - } - public ItemTransformVec3f getTransform(ItemCameraTransforms.TransformType parTransformType) { - switch (parTransformType) { - case THIRD_PERSON: - return this.thirdPerson; - case FIRST_PERSON: - return this.firstPerson; + private static Quaternion makeQuaternion(float p_188035_0_, float p_188035_1_, float p_188035_2_) { + float f = p_188035_0_ * 0.017453292F; + float f1 = p_188035_1_ * 0.017453292F; + float f2 = p_188035_2_ * 0.017453292F; + float f3 = MathHelper.sin(0.5F * f); + float f4 = MathHelper.cos(0.5F * f); + float f5 = MathHelper.sin(0.5F * f1); + float f6 = MathHelper.cos(0.5F * f1); + float f7 = MathHelper.sin(0.5F * f2); + float f8 = MathHelper.cos(0.5F * f2); + return new Quaternion(f3 * f6 * f8 + f4 * f5 * f7, f4 * f5 * f8 - f3 * f6 * f7, f3 * f5 * f8 + f4 * f6 * f7, + f4 * f6 * f8 - f3 * f5 * f7); + } + + public ItemTransformVec3f getTransform(ItemCameraTransforms.TransformType type) { + switch (type) { + case THIRD_PERSON_LEFT_HAND: + return this.thirdperson_left; + + case THIRD_PERSON_RIGHT_HAND: + return this.thirdperson_right; + + case FIRST_PERSON_LEFT_HAND: + return this.firstperson_left; + + case FIRST_PERSON_RIGHT_HAND: + return this.firstperson_right; + case HEAD: return this.head; + case GUI: return this.gui; + case GROUND: return this.ground; + case FIXED: return this.fixed; + default: return ItemTransformVec3f.DEFAULT; } } - public boolean func_181687_c(ItemCameraTransforms.TransformType parTransformType) { - return !this.getTransform(parTransformType).equals(ItemTransformVec3f.DEFAULT); + public boolean hasCustomTransform(ItemCameraTransforms.TransformType type) { + return this.getTransform(type) != ItemTransformVec3f.DEFAULT; } public static class Deserializer implements JSONTypeDeserializer { public ItemCameraTransforms deserialize(JSONObject jsonobject) throws JSONException { - ItemTransformVec3f itemtransformvec3f = this.func_181683_a(jsonobject, "thirdperson"); - ItemTransformVec3f itemtransformvec3f1 = this.func_181683_a(jsonobject, "firstperson"); - ItemTransformVec3f itemtransformvec3f2 = this.func_181683_a(jsonobject, "head"); - ItemTransformVec3f itemtransformvec3f3 = this.func_181683_a(jsonobject, "gui"); - ItemTransformVec3f itemtransformvec3f4 = this.func_181683_a(jsonobject, "ground"); - ItemTransformVec3f itemtransformvec3f5 = this.func_181683_a(jsonobject, "fixed"); - return new ItemCameraTransforms(itemtransformvec3f, itemtransformvec3f1, itemtransformvec3f2, - itemtransformvec3f3, itemtransformvec3f4, itemtransformvec3f5); + ItemTransformVec3f itemtransformvec3f = this.getTransform(jsonobject, + "thirdperson_righthand"); + ItemTransformVec3f itemtransformvec3f1 = this.getTransform(jsonobject, + "thirdperson_lefthand"); + + if (itemtransformvec3f1 == ItemTransformVec3f.DEFAULT) { + itemtransformvec3f1 = itemtransformvec3f; + } + + ItemTransformVec3f itemtransformvec3f2 = this.getTransform(jsonobject, + "firstperson_righthand"); + ItemTransformVec3f itemtransformvec3f3 = this.getTransform(jsonobject, + "firstperson_lefthand"); + + if (itemtransformvec3f3 == ItemTransformVec3f.DEFAULT) { + itemtransformvec3f3 = itemtransformvec3f2; + } + + ItemTransformVec3f itemtransformvec3f4 = this.getTransform(jsonobject, "head"); + ItemTransformVec3f itemtransformvec3f5 = this.getTransform(jsonobject, "gui"); + ItemTransformVec3f itemtransformvec3f6 = this.getTransform(jsonobject, "ground"); + ItemTransformVec3f itemtransformvec3f7 = this.getTransform(jsonobject, "fixed"); + return new ItemCameraTransforms(itemtransformvec3f1, itemtransformvec3f, itemtransformvec3f3, + itemtransformvec3f2, itemtransformvec3f4, itemtransformvec3f5, itemtransformvec3f6, + itemtransformvec3f7); } - private ItemTransformVec3f func_181683_a(JSONObject parJsonObject, String parString1) { - return parJsonObject.has(parString1) - ? JSONTypeProvider.deserialize(parJsonObject.get(parString1), ItemTransformVec3f.class) + private ItemTransformVec3f getTransform(JSONObject p_181683_2_, + String p_181683_3_) { + return p_181683_2_.has(p_181683_3_) + ? JSONTypeProvider.deserialize(p_181683_2_.get(p_181683_3_), ItemTransformVec3f.class) : ItemTransformVec3f.DEFAULT; } } public static enum TransformType { - NONE, THIRD_PERSON, FIRST_PERSON, HEAD, GUI, GROUND, FIXED; + NONE, + THIRD_PERSON_LEFT_HAND, + THIRD_PERSON_RIGHT_HAND, + FIRST_PERSON_LEFT_HAND, + FIRST_PERSON_RIGHT_HAND, + HEAD, + GUI, + GROUND, + FIXED; } } \ No newline at end of file diff --git a/src/main/java/net/minecraft/client/renderer/block/model/ModelBlock.java b/src/main/java/net/minecraft/client/renderer/block/model/ModelBlock.java index c853e36..5d4c328 100644 --- a/src/main/java/net/minecraft/client/renderer/block/model/ModelBlock.java +++ b/src/main/java/net/minecraft/client/renderer/block/model/ModelBlock.java @@ -159,20 +159,28 @@ public class ModelBlock { } public ItemCameraTransforms func_181682_g() { - ItemTransformVec3f itemtransformvec3f = this.func_181681_a(ItemCameraTransforms.TransformType.THIRD_PERSON); - ItemTransformVec3f itemtransformvec3f1 = this.func_181681_a(ItemCameraTransforms.TransformType.FIRST_PERSON); - ItemTransformVec3f itemtransformvec3f2 = this.func_181681_a(ItemCameraTransforms.TransformType.HEAD); - ItemTransformVec3f itemtransformvec3f3 = this.func_181681_a(ItemCameraTransforms.TransformType.GUI); - ItemTransformVec3f itemtransformvec3f4 = this.func_181681_a(ItemCameraTransforms.TransformType.GROUND); - ItemTransformVec3f itemtransformvec3f5 = this.func_181681_a(ItemCameraTransforms.TransformType.FIXED); + ItemTransformVec3f itemtransformvec3f = this + .func_181681_a(ItemCameraTransforms.TransformType.THIRD_PERSON_LEFT_HAND); + ItemTransformVec3f itemtransformvec3f1 = this + .func_181681_a(ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND); + ItemTransformVec3f itemtransformvec3f2 = this + .func_181681_a(ItemCameraTransforms.TransformType.FIRST_PERSON_LEFT_HAND); + ItemTransformVec3f itemtransformvec3f3 = this + .func_181681_a(ItemCameraTransforms.TransformType.FIRST_PERSON_RIGHT_HAND); + ItemTransformVec3f itemtransformvec3f4 = this.func_181681_a(ItemCameraTransforms.TransformType.HEAD); + ItemTransformVec3f itemtransformvec3f5 = this.func_181681_a(ItemCameraTransforms.TransformType.GUI); + ItemTransformVec3f itemtransformvec3f6 = this.func_181681_a(ItemCameraTransforms.TransformType.GROUND); + ItemTransformVec3f itemtransformvec3f7 = this.func_181681_a(ItemCameraTransforms.TransformType.FIXED); return new ItemCameraTransforms(itemtransformvec3f, itemtransformvec3f1, itemtransformvec3f2, - itemtransformvec3f3, itemtransformvec3f4, itemtransformvec3f5); + itemtransformvec3f3, itemtransformvec3f4, itemtransformvec3f5, itemtransformvec3f6, + itemtransformvec3f7); + } - private ItemTransformVec3f func_181681_a(ItemCameraTransforms.TransformType parTransformType) { - return this.parent != null && !this.cameraTransforms.func_181687_c(parTransformType) - ? this.parent.func_181681_a(parTransformType) - : this.cameraTransforms.getTransform(parTransformType); + private ItemTransformVec3f func_181681_a(ItemCameraTransforms.TransformType type) { + return this.parent != null && !this.cameraTransforms.hasCustomTransform(type) ? this.parent.func_181681_a(type) + : this.cameraTransforms.getTransform(type); + } public static void checkModelHierarchy(Map parMap) { diff --git a/src/main/java/net/minecraft/client/renderer/entity/RenderItem.java b/src/main/java/net/minecraft/client/renderer/entity/RenderItem.java index 09051d8..bc83dc1 100644 --- a/src/main/java/net/minecraft/client/renderer/entity/RenderItem.java +++ b/src/main/java/net/minecraft/client/renderer/entity/RenderItem.java @@ -6,6 +6,8 @@ import java.util.List; import java.util.Map; import java.util.concurrent.Callable; +import javax.annotation.Nullable; + import net.hoosiertransfer.EaglerCustomBlock; import net.hoosiertransfer.EaglerItems; import net.lax1dude.eaglercraft.v1_8.opengl.GlStateManager; @@ -70,6 +72,7 @@ import net.minecraft.util.EnumWorldBlockLayer; import net.minecraft.util.ReportedException; import net.minecraft.util.ResourceLocation; import net.minecraft.util.Vec3i; +import net.minecraft.world.World; /** * + @@ -255,6 +258,51 @@ public class RenderItem implements IResourceManagerReloadListener { } } + public void renderItem(ItemStack stack, EntityLivingBase entitylivingbaseIn, + ItemCameraTransforms.TransformType transform, boolean leftHanded) { + if (stack != null && entitylivingbaseIn != null && stack.getItem() != null) { + IBakedModel ibakedmodel = this.itemModelMesher.getItemModel(stack); + this.renderItemModel(stack, ibakedmodel, transform, leftHanded); + } + } + + protected void renderItemModel(ItemStack stack, IBakedModel bakedmodel, + ItemCameraTransforms.TransformType transform, boolean leftHanded) { + if (stack.getItem() != null) { + this.textureManager.bindTexture(TextureMap.locationBlocksTexture); + this.textureManager.getTexture(TextureMap.locationBlocksTexture).setBlurMipmap(false, false); + GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); + GlStateManager.enableRescaleNormal(); + GlStateManager.alphaFunc(516, 0.1F); + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(GL_SRC_ALPHA, + GL_ONE_MINUS_SRC_ALPHA, GL_ONE, + GL_ZERO); + GlStateManager.pushMatrix(); + ItemCameraTransforms itemcameratransforms = bakedmodel.getItemCameraTransforms(); + ItemCameraTransforms.applyTransformSide(itemcameratransforms.getTransform(transform), leftHanded); + + if (this.isThereOneNegativeScale(itemcameratransforms.getTransform(transform))) { + GlStateManager.cullFace(GL_FRONT); + } + + this.renderItem(stack, bakedmodel); + GlStateManager.cullFace(GL_BACK); + GlStateManager.popMatrix(); + GlStateManager.disableRescaleNormal(); + GlStateManager.disableBlend(); + this.textureManager.bindTexture(TextureMap.locationBlocksTexture); + this.textureManager.getTexture(TextureMap.locationBlocksTexture).restoreLastBlurMipmap(); + } + } + + /** + * Return true if only one scale is negative + */ + private boolean isThereOneNegativeScale(ItemTransformVec3f itemTranformVec) { + return itemTranformVec.scale.x < 0.0F ^ itemTranformVec.scale.y < 0.0F ^ itemTranformVec.scale.z < 0.0F; + } + private static boolean isTransparentItem(ItemStack stack) { Item itm = stack.getItem(); return itm instanceof ItemBlock diff --git a/src/main/java/net/minecraft/client/renderer/entity/RenderPlayer.java b/src/main/java/net/minecraft/client/renderer/entity/RenderPlayer.java index b74cd9b..0cc6fe4 100644 --- a/src/main/java/net/minecraft/client/renderer/entity/RenderPlayer.java +++ b/src/main/java/net/minecraft/client/renderer/entity/RenderPlayer.java @@ -6,6 +6,7 @@ import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelBiped; import net.minecraft.client.model.ModelPlayer; +import net.minecraft.client.model.ModelRenderer; import net.minecraft.client.model.ModelZombie; import net.minecraft.client.renderer.entity.layers.LayerArrow; import net.minecraft.client.renderer.entity.layers.LayerBipedArmor; @@ -20,6 +21,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.scoreboard.Score; import net.minecraft.scoreboard.ScoreObjective; import net.minecraft.scoreboard.Scoreboard; +import net.minecraft.util.EnumHandSide; import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; import net.minecraft.util.Vec3; @@ -79,8 +81,8 @@ public class RenderPlayer extends RendererLivingEntity { super(renderManager, modelBase, size); } - public ModelBiped getMainModel() { - return (ModelBiped) super.getMainModel(); + public ModelPlayer getMainModel() { + return (ModelPlayer) super.getMainModel(); } /** @@ -107,41 +109,60 @@ public class RenderPlayer extends RendererLivingEntity { } private void setModelVisibilities(AbstractClientPlayer clientPlayer) { - ModelBiped modelplayer = this.getMainModel(); + ModelPlayer modelplayer = this.getMainModel(); + if (clientPlayer.isSpectator()) { modelplayer.setInvisible(false); modelplayer.bipedHead.showModel = true; modelplayer.bipedHeadwear.showModel = true; } else { - ItemStack itemstack = clientPlayer.inventory.getCurrentItem(); + ItemStack itemstack = clientPlayer.getHeldItem(); + ItemStack itemstack1 = clientPlayer.getHeldItemOffhand(); modelplayer.setInvisible(true); modelplayer.bipedHeadwear.showModel = clientPlayer.isWearing(EnumPlayerModelParts.HAT); - if (!zombieModel) { - ModelPlayer modelplayer_ = (ModelPlayer) modelplayer; - modelplayer_.bipedBodyWear.showModel = clientPlayer.isWearing(EnumPlayerModelParts.JACKET); - modelplayer_.bipedLeftLegwear.showModel = clientPlayer.isWearing(EnumPlayerModelParts.LEFT_PANTS_LEG); - modelplayer_.bipedRightLegwear.showModel = clientPlayer.isWearing(EnumPlayerModelParts.RIGHT_PANTS_LEG); - modelplayer_.bipedLeftArmwear.showModel = clientPlayer.isWearing(EnumPlayerModelParts.LEFT_SLEEVE); - modelplayer_.bipedRightArmwear.showModel = clientPlayer.isWearing(EnumPlayerModelParts.RIGHT_SLEEVE); - } - modelplayer.heldItemLeft = 0; - modelplayer.aimedBow = false; + modelplayer.bipedBodyWear.showModel = clientPlayer.isWearing(EnumPlayerModelParts.JACKET); + modelplayer.bipedLeftLegwear.showModel = clientPlayer.isWearing(EnumPlayerModelParts.LEFT_PANTS_LEG); + modelplayer.bipedRightLegwear.showModel = clientPlayer.isWearing(EnumPlayerModelParts.RIGHT_PANTS_LEG); + modelplayer.bipedLeftArmwear.showModel = clientPlayer.isWearing(EnumPlayerModelParts.LEFT_SLEEVE); + modelplayer.bipedRightArmwear.showModel = clientPlayer.isWearing(EnumPlayerModelParts.RIGHT_SLEEVE); modelplayer.isSneak = clientPlayer.isSneaking(); - if (itemstack == null) { - modelplayer.heldItemRight = 0; - } else { - modelplayer.heldItemRight = 1; + ModelBiped.ArmPose modelbiped$armpose = ModelBiped.ArmPose.EMPTY; + ModelBiped.ArmPose modelbiped$armpose1 = ModelBiped.ArmPose.EMPTY; + + if (itemstack != null) { + modelbiped$armpose = ModelBiped.ArmPose.ITEM; + if (clientPlayer.getItemInUseCount() > 0) { EnumAction enumaction = itemstack.getItemUseAction(); + if (enumaction == EnumAction.BLOCK) { - modelplayer.heldItemRight = 3; + modelbiped$armpose = ModelBiped.ArmPose.BLOCK; } else if (enumaction == EnumAction.BOW) { - modelplayer.aimedBow = true; + modelbiped$armpose = ModelBiped.ArmPose.BOW_AND_ARROW; } } } - } + if (itemstack1 != null) { + modelbiped$armpose1 = ModelBiped.ArmPose.ITEM; + + if (clientPlayer.getItemInUseCount() > 0) { + EnumAction enumaction1 = itemstack1.getItemUseAction(); + + if (enumaction1 == EnumAction.BLOCK) { + modelbiped$armpose1 = ModelBiped.ArmPose.BLOCK; + } + } + } + + if (clientPlayer.getPrimaryHand() == EnumHandSide.RIGHT) { + modelplayer.rightArmPose = modelbiped$armpose; + modelplayer.leftArmPose = modelbiped$armpose1; + } else { + modelplayer.rightArmPose = modelbiped$armpose1; + modelplayer.leftArmPose = modelbiped$armpose; + } + } } /** @@ -185,29 +206,37 @@ public class RenderPlayer extends RendererLivingEntity { } public void renderRightArm(AbstractClientPlayer clientPlayer) { - if (!zombieModel) { - float f = 1.0F; - GlStateManager.color(f, f, f); - ModelBiped modelplayer = this.getMainModel(); - this.setModelVisibilities(clientPlayer); - modelplayer.swingProgress = 0.0F; - modelplayer.isSneak = false; - modelplayer.setRotationAngles(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, clientPlayer); - ((ModelPlayer) modelplayer).renderRightArm(); - } + float f = 1.0F; + GlStateManager.color(f, f, f); + float f1 = 0.0625F; + ModelPlayer modelplayer = this.getMainModel(); + this.setModelVisibilities(clientPlayer); + GlStateManager.enableBlend(); + modelplayer.swingProgress = 0.0F; + modelplayer.isSneak = false; + modelplayer.setRotationAngles(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, clientPlayer); + modelplayer.bipedRightArm.rotateAngleX = 0.0F; + modelplayer.bipedRightArm.render(0.0625F); + modelplayer.bipedRightArmwear.rotateAngleX = 0.0F; + modelplayer.bipedRightArmwear.render(0.0625F); + GlStateManager.disableBlend(); } public void renderLeftArm(AbstractClientPlayer clientPlayer) { - if (!zombieModel) { - float f = 1.0F; - GlStateManager.color(f, f, f); - ModelBiped modelplayer = this.getMainModel(); - this.setModelVisibilities(clientPlayer); - modelplayer.isSneak = false; - modelplayer.swingProgress = 0.0F; - modelplayer.setRotationAngles(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, clientPlayer); - ((ModelPlayer) modelplayer).renderLeftArm(); - } + float f = 1.0F; + GlStateManager.color(f, f, f); + float f1 = 0.0625F; + ModelPlayer modelplayer = this.getMainModel(); + this.setModelVisibilities(clientPlayer); + GlStateManager.enableBlend(); + modelplayer.isSneak = false; + modelplayer.swingProgress = 0.0F; + modelplayer.setRotationAngles(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F, clientPlayer); + modelplayer.bipedLeftArm.rotateAngleX = 0.0F; + modelplayer.bipedLeftArm.render(0.0625F); + modelplayer.bipedLeftArmwear.rotateAngleX = 0.0F; + modelplayer.bipedLeftArmwear.render(0.0625F); + GlStateManager.disableBlend(); } /** diff --git a/src/main/java/net/minecraft/client/renderer/entity/layers/LayerHeldItem.java b/src/main/java/net/minecraft/client/renderer/entity/layers/LayerHeldItem.java index 9393783..6fb7ec5 100644 --- a/src/main/java/net/minecraft/client/renderer/entity/layers/LayerHeldItem.java +++ b/src/main/java/net/minecraft/client/renderer/entity/layers/LayerHeldItem.java @@ -12,6 +12,7 @@ import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHandSide; /** * + @@ -49,11 +50,16 @@ public class LayerHeldItem implements LayerRenderer { this.livingEntityRenderer = livingEntityRendererIn; } - public void doRenderLayer(EntityLivingBase entitylivingbase, float var2, float var3, float var4, float var5, - float var6, float var7, float var8) { - ItemStack itemstack = entitylivingbase.getHeldItem(); - if (itemstack != null) { + public void doRenderLayer(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, + float partialTicks, float ageInTicks, float netHeadYaw, float headPitch, float scale) { + boolean flag = entitylivingbaseIn.getPrimaryHand() == EnumHandSide.RIGHT; + ItemStack itemstack = flag ? entitylivingbaseIn.getHeldItemOffhand() : entitylivingbaseIn.getHeldItem(); + ItemStack itemstack1 = flag ? entitylivingbaseIn.getHeldItem() + : entitylivingbaseIn.getHeldItemOffhand(); + + if (itemstack != null || itemstack1 != null) { GlStateManager.pushMatrix(); + if (this.livingEntityRenderer.getMainModel().isChild) { float f = 0.5F; GlStateManager.translate(0.0F, 0.625F, 0.0F); @@ -61,28 +67,29 @@ public class LayerHeldItem implements LayerRenderer { GlStateManager.scale(f, f, f); } - ((ModelBiped) this.livingEntityRenderer.getMainModel()).postRenderArm(0.0625F); - GlStateManager.translate(-0.0625F, 0.4375F, 0.0625F); - if (entitylivingbase instanceof EntityPlayer && ((EntityPlayer) entitylivingbase).fishEntity != null) { - itemstack = new ItemStack(Items.fishing_rod, 0); + this.renderHeldItem(entitylivingbaseIn, itemstack1, + ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND, EnumHandSide.RIGHT); + this.renderHeldItem(entitylivingbaseIn, itemstack, + ItemCameraTransforms.TransformType.THIRD_PERSON_LEFT_HAND, EnumHandSide.LEFT); + GlStateManager.popMatrix(); + } + } + + private void renderHeldItem(EntityLivingBase p_188358_1_, ItemStack p_188358_2_, + ItemCameraTransforms.TransformType p_188358_3_, EnumHandSide handSide) { + if (p_188358_2_ != null) { + GlStateManager.pushMatrix(); + ((ModelBiped) this.livingEntityRenderer.getMainModel()).postRenderArm(0.0625F, handSide); + + if (p_188358_1_.isSneaking()) { + GlStateManager.translate(0.0F, 0.2F, 0.0F); } - Item item = itemstack.getItem(); - Minecraft minecraft = Minecraft.getMinecraft(); - if (item instanceof ItemBlock && Block.getBlockFromItem(item).getRenderType() == 2) { - GlStateManager.translate(0.0F, 0.1875F, -0.3125F); - GlStateManager.rotate(20.0F, 1.0F, 0.0F, 0.0F); - GlStateManager.rotate(45.0F, 0.0F, 1.0F, 0.0F); - float f1 = 0.375F; - GlStateManager.scale(-f1, -f1, f1); - } - - if (entitylivingbase.isSneaking()) { - GlStateManager.translate(0.0F, 0.203125F, 0.0F); - } - - minecraft.getItemRenderer().renderItem(entitylivingbase, itemstack, - ItemCameraTransforms.TransformType.THIRD_PERSON); + GlStateManager.rotate(-90.0F, 1.0F, 0.0F, 0.0F); + GlStateManager.rotate(180.0F, 0.0F, 1.0F, 0.0F); + boolean flag = handSide == EnumHandSide.LEFT; + GlStateManager.translate(flag ? -0.0625F : 0.0625F, 0.125F, -0.625F); + Minecraft.getMinecraft().getItemRenderer().renderItemSide(p_188358_1_, p_188358_2_, p_188358_3_, flag); GlStateManager.popMatrix(); } } diff --git a/src/main/java/net/minecraft/client/renderer/entity/layers/LayerHeldItemWitch.java b/src/main/java/net/minecraft/client/renderer/entity/layers/LayerHeldItemWitch.java index dd5ef90..5bb0046 100644 --- a/src/main/java/net/minecraft/client/renderer/entity/layers/LayerHeldItemWitch.java +++ b/src/main/java/net/minecraft/client/renderer/entity/layers/LayerHeldItemWitch.java @@ -102,8 +102,9 @@ public class LayerHeldItemWitch implements LayerRenderer { GlStateManager.rotate(-15.0F, 1.0F, 0.0F, 0.0F); GlStateManager.rotate(40.0F, 0.0F, 0.0F, 1.0F); + // TODO: implement offhand minecraft.getItemRenderer().renderItem(entitywitch, itemstack, - ItemCameraTransforms.TransformType.THIRD_PERSON); + ItemCameraTransforms.TransformType.THIRD_PERSON_RIGHT_HAND); GlStateManager.popMatrix(); } } diff --git a/src/main/java/net/minecraft/client/resources/model/ModelBakery.java b/src/main/java/net/minecraft/client/resources/model/ModelBakery.java index 38ab909..f4a5b95 100644 --- a/src/main/java/net/minecraft/client/resources/model/ModelBakery.java +++ b/src/main/java/net/minecraft/client/resources/model/ModelBakery.java @@ -95,7 +95,8 @@ public class ModelBakery { new ResourceLocation("items/empty_armor_slot_helmet"), new ResourceLocation("items/empty_armor_slot_chestplate"), new ResourceLocation("items/empty_armor_slot_leggings"), - new ResourceLocation("items/empty_armor_slot_boots") }); + new ResourceLocation("items/empty_armor_slot_boots"), + new ResourceLocation("items/empty_armor_slot_shield") }); private static final Logger LOGGER = LogManager.getLogger(); protected static final ModelResourceLocation MODEL_MISSING = new ModelResourceLocation("builtin/missing", "missing"); diff --git a/src/main/java/net/minecraft/entity/EntityLiving.java b/src/main/java/net/minecraft/entity/EntityLiving.java index 834358d..ee30753 100644 --- a/src/main/java/net/minecraft/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/entity/EntityLiving.java @@ -2,6 +2,8 @@ package net.minecraft.entity; import java.util.List; +import javax.annotation.Nullable; + import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.ai.EntityAITasks; @@ -33,6 +35,7 @@ import net.minecraft.pathfinding.PathNavigate; import net.minecraft.pathfinding.PathNavigateGround; import net.minecraft.stats.AchievementList; import net.minecraft.util.BlockPos; +import net.minecraft.util.EnumHandSide; import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.MathHelper; import net.minecraft.world.DifficultyInstance; @@ -86,7 +89,7 @@ public abstract class EntityLiving extends EntityLivingBase { * + * Equipment (armor and held item) for this entity. */ - private ItemStack[] equipment = new ItemStack[5]; + private ItemStack[] equipment = new ItemStack[6]; /** * + * Chances for each equipment piece from dropping when this @@ -750,6 +753,7 @@ public abstract class EntityLiving extends EntityLivingBase { * + * Returns the item that this EntityLiving is holding, if any. */ + @Nullable public ItemStack getHeldItem() { return this.equipment[0]; } @@ -772,6 +776,7 @@ public abstract class EntityLiving extends EntityLivingBase { * Slot 1-4 is armor. Params: Item, slot */ public void setCurrentItemOrArmor(int i, ItemStack itemstack) { + // TODO: implement offhand this.equipment[i] = itemstack; } @@ -1201,6 +1206,10 @@ public abstract class EntityLiving extends EntityLivingBase { return (this.dataWatcher.getWatchableObjectByte(10) & 2) != 0; } + public EnumHandSide getPrimaryHand() { + return this.isLeftHanded() ? EnumHandSide.LEFT : EnumHandSide.RIGHT; + } + public static enum SpawnPlacementType { ON_GROUND, IN_AIR, IN_WATER; } diff --git a/src/main/java/net/minecraft/entity/EntityLivingBase.java b/src/main/java/net/minecraft/entity/EntityLivingBase.java index 8fb3174..559f885 100644 --- a/src/main/java/net/minecraft/entity/EntityLivingBase.java +++ b/src/main/java/net/minecraft/entity/EntityLivingBase.java @@ -3,13 +3,14 @@ package net.minecraft.entity; import com.google.common.base.Predicate; import com.google.common.base.Predicates; import com.google.common.collect.Maps; -import com.logisticscraft.occlusionculling.util.Vec3d; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; +import javax.annotation.Nullable; + import net.hoosiertransfer.EaglerItems; import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; @@ -31,6 +32,7 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.projectile.EntityArrow; import net.minecraft.init.Blocks; import net.minecraft.init.Items; +import net.minecraft.item.EnumAction; import net.minecraft.item.Item; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemElytra; @@ -51,10 +53,13 @@ import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.BlockPos; import net.minecraft.util.CombatTracker; import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSource; import net.minecraft.util.EntitySelectors; import net.minecraft.util.EnumHand; +import net.minecraft.util.EnumHandSide; import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.MathHelper; +import net.minecraft.util.SoundEvent; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraft.world.WorldServer; @@ -167,6 +172,11 @@ public abstract class EntityLivingBase extends Entity { private int jumpTicks; private float absorptionAmount; + public EnumHand swingingHand; + + protected ItemStack itemInUse; + protected int itemInUseCount; + /** * + * Called by the /kill command. @@ -758,43 +768,67 @@ public abstract class EntityLivingBase extends Entity { * + * Called when the entity is attacked. */ - public boolean attackEntityFrom(DamageSource damagesource, float f) { - if (this.isEntityInvulnerable(damagesource)) { + public boolean attackEntityFrom(DamageSource source, float amount) { + if (this.isEntityInvulnerable(source)) { return false; } else if (this.worldObj.isRemote) { return false; } else { this.entityAge = 0; + if (this.getHealth() <= 0.0F) { return false; - } else if (damagesource.isFireDamage() && this.isPotionActive(Potion.fireResistance)) { + } else if (source.isFireDamage() && this.isPotionActive(Potion.fireResistance)) { return false; } else { - if ((damagesource == DamageSource.anvil || damagesource == DamageSource.fallingBlock) + if ((source == DamageSource.anvil || source == DamageSource.fallingBlock) && this.getEquipmentInSlot(4) != null) { - this.getEquipmentInSlot(4).damageItem((int) (f * 4.0F + this.rand.nextFloat() * f * 2.0F), this); - f *= 0.75F; + this.getEquipmentInSlot(4) + .damageItem((int) (amount * 4.0F + this.rand.nextFloat() * amount * 2.0F), this); + amount *= 0.75F; + } + + boolean flag = false; + + if (amount > 0.0F && this.canBlockDamageSource(source)) { + this.damageShield(amount); + + if (source.isProjectile()) { + amount = 0.0F; + } else { + amount *= 0.33F; + + if (source.getSourceOfDamage() instanceof EntityLivingBase) { + ((EntityLivingBase) source.getSourceOfDamage()).knockBack(this, 0.5F, + this.posX - source.getSourceOfDamage().posX, + this.posZ - source.getSourceOfDamage().posZ); + } + } + + flag = true; } this.limbSwingAmount = 1.5F; - boolean flag = true; + boolean flag1 = true; + if ((float) this.hurtResistantTime > (float) this.maxHurtResistantTime / 2.0F) { - if (f <= this.lastDamage) { + if (amount <= this.lastDamage) { return false; } - this.damageEntity(damagesource, f - this.lastDamage); - this.lastDamage = f; - flag = false; + this.damageEntity(source, amount - this.lastDamage); + this.lastDamage = amount; + flag1 = false; } else { - this.lastDamage = f; + this.lastDamage = amount; this.hurtResistantTime = this.maxHurtResistantTime; - this.damageEntity(damagesource, f); + this.damageEntity(source, amount); this.hurtTime = this.maxHurtTime = 10; } this.attackedAtYaw = 0.0F; - Entity entity = damagesource.getEntity(); + Entity entity = source.getEntity(); + if (entity != null) { if (entity instanceof EntityLivingBase) { this.setRevengeTarget((EntityLivingBase) entity); @@ -805,6 +839,7 @@ public abstract class EntityLivingBase extends Entity { this.attackingPlayer = (EntityPlayer) entity; } else if (entity instanceof EntityWolf) { EntityWolf entitywolf = (EntityWolf) entity; + if (entitywolf.isTamed()) { this.recentlyHit = 100; this.attackingPlayer = null; @@ -812,48 +847,85 @@ public abstract class EntityLivingBase extends Entity { } } - if (flag) { - this.worldObj.setEntityState(this, (byte) 2); - if (damagesource != DamageSource.drown) { + if (flag1) { + if (flag) { + this.worldObj.setEntityState(this, (byte) 29); + } else if (source instanceof EntityDamageSource + && ((EntityDamageSource) source).getIsThornsDamage()) { + this.worldObj.setEntityState(this, (byte) 33); + } else { + this.worldObj.setEntityState(this, (byte) 2); + } + + if (source != DamageSource.drown && (!flag || amount > 0.0F)) { this.setBeenAttacked(); } if (entity != null) { double d1 = entity.posX - this.posX; - double d0; + for (d0 = entity.posZ - this.posZ; d1 * d1 + d0 * d0 < 1.0E-4D; d0 = (Math.random() - Math.random()) * 0.01D) { d1 = (Math.random() - Math.random()) * 0.01D; } - this.attackedAtYaw = (float) (MathHelper.func_181159_b(d0, d1) * 180.0D / 3.1415927410125732D + this.attackedAtYaw = (float) (MathHelper.atan2(d0, d1) * (180D / Math.PI) - (double) this.rotationYaw); - this.knockBack(entity, f, d1, d0); + this.knockBack(entity, 0.4F, d1, d0); } else { this.attackedAtYaw = (float) ((int) (Math.random() * 2.0D) * 180); } } if (this.getHealth() <= 0.0F) { - String s = this.getDeathSound(); - if (flag && s != null) { - this.playSound(s, this.getSoundVolume(), this.getSoundPitch()); + String soundevent = this.getDeathSound(); + + if (flag1 && soundevent != null) { + this.playSound(soundevent, this.getSoundVolume(), this.getSoundPitch()); } - this.onDeath(damagesource); - } else { + this.onDeath(source); + } else if (flag1) { String s1 = this.getHurtSound(); - if (flag && s1 != null) { + if (s1 != null) { this.playSound(s1, this.getSoundVolume(), this.getSoundPitch()); } } - return true; + return !flag || amount > 0.0F; } } } + public boolean isActiveItemStackBlocking() { + if (this.isHandActive() && this.getActiveItemStack() != null) { + Item item = this.getActiveItemStack().getItem(); + return item.getItemUseAction(this.getActiveItemStack()) != EnumAction.BLOCK ? false + : item.getMaxItemUseDuration(this.getActiveItemStack()) - this.itemInUseCount >= 5; + } else { + return false; + } + } + + private boolean canBlockDamageSource(DamageSource damageSourceIn) { + if (!damageSourceIn.isUnblockable() && this.isActiveItemStackBlocking()) { + Vec3 vec3d = damageSourceIn.getDamageLocation(); + + if (vec3d != null) { + Vec3 vec3d1 = this.getLook(1.0F); + Vec3 vec3d2 = vec3d.subtractReverse(new Vec3(this.posX, this.posY, this.posZ)).normalize(); + vec3d2 = new Vec3(vec3d2.xCoord, 0.0D, vec3d2.zCoord); + + if (vec3d2.dotProduct(vec3d1) < 0.0D) { + return true; + } + } + } + + return false; + } + /** * + * Renders broken item particles using the given ItemStack @@ -1048,6 +1120,9 @@ public abstract class EntityLivingBase extends Entity { protected void damageArmor(float parFloat1) { } + protected void damageShield(float damage) { + } + /** * + * Reduces damage, depending on armor @@ -1150,6 +1225,11 @@ public abstract class EntityLivingBase extends Entity { public final void setArrowCountInEntity(int count) { this.dataWatcher.updateObject(9, Integer.valueOf(count)); } + + public boolean isHandActive() { + return this.itemInUse != null; + } + // TODO: implement hand states // public boolean isHandActive() { // return (((Byte) this.dataManager.get(HAND_STATES)).byteValue() & 1) > 0; @@ -1161,6 +1241,91 @@ public abstract class EntityLivingBase extends Entity { // : EnumHand.MAIN_HAND; // } + public EnumHand getActiveHand() { + return EnumHand.MAIN_HAND; + } + + /** + * Plays sounds and makes particles for item in use state + */ + protected void updateItemUse(@Nullable ItemStack stack, int eatingParticleCount) { + if (stack != null && this.isHandActive()) { + if (stack.getItemUseAction() == EnumAction.DRINK) { + this.playSound("entity.generic.drink", 0.5F, this.worldObj.rand.nextFloat() * 0.1F + 0.9F); + } + + if (stack.getItemUseAction() == EnumAction.EAT) { + for (int i = 0; i < eatingParticleCount; ++i) { + Vec3 vec3d = new Vec3(((double) this.rand.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, + 0.0D); + vec3d = vec3d.rotatePitch(-this.rotationPitch * 0.017453292F); + vec3d = vec3d.rotateYaw(-this.rotationYaw * 0.017453292F); + double d0 = (double) (-this.rand.nextFloat()) * 0.6D - 0.3D; + Vec3 vec3d1 = new Vec3(((double) this.rand.nextFloat() - 0.5D) * 0.3D, d0, 0.6D); + vec3d1 = vec3d1.rotatePitch(-this.rotationPitch * 0.017453292F); + vec3d1 = vec3d1.rotateYaw(-this.rotationYaw * 0.017453292F); + vec3d1 = vec3d1.addVector(this.posX, this.posY + (double) this.getEyeHeight(), this.posZ); + + if (stack.getHasSubtypes()) { + this.worldObj.spawnParticle(EnumParticleTypes.ITEM_CRACK, vec3d1.xCoord, vec3d1.yCoord, + vec3d1.zCoord, vec3d.xCoord, vec3d.yCoord + 0.05D, vec3d.zCoord, + new int[] { Item.getIdFromItem(stack.getItem()), stack.getMetadata() }); + } else { + this.worldObj.spawnParticle(EnumParticleTypes.ITEM_CRACK, vec3d1.xCoord, vec3d1.yCoord, + vec3d1.zCoord, vec3d.xCoord, vec3d.yCoord + 0.05D, vec3d.zCoord, + new int[] { Item.getIdFromItem(stack.getItem()) }); + } + } + + this.playSound("entity.generic.eat", 0.5F + 0.5F * (float) this.rand.nextInt(2), + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + } + } + + protected void onItemUseFinish() { + // TODO: implement offhand + if (this.itemInUse != null && this.isHandActive()) { + this.updateItemUse(this.itemInUse, 16); + ItemStack itemstack = this.itemInUse.onItemUseFinish(this.worldObj, this); + + if (itemstack != null && itemstack.stackSize == 0) { + itemstack = null; + } + + // this.setHeldItem(this.getActiveHand(), itemstack); + this.setCurrentItemOrArmor(0, itemstack); + // this.resetActiveHand(); + this.clearItemInUse(); + } + } + + public void setHeldItem(EnumHand hand, @Nullable ItemStack stack) { + if (hand == EnumHand.MAIN_HAND) { + this.setCurrentItemOrArmor(0, stack); + } else { + if (hand != EnumHand.OFF_HAND) { + throw new IllegalArgumentException("Invalid hand " + hand); + } + + this.setCurrentItemOrArmor(5, stack); + } + } + + public void clearItemInUse() { + this.itemInUse = null; + this.itemInUseCount = 0; + if (!this.worldObj.isRemote) { + this.setEating(false); + } + + } + + @Nullable + public ItemStack getActiveItemStack() { + return this.itemInUse; + } + /** * + * Returns an integer indicating the end point of the swing @@ -1185,6 +1350,8 @@ public abstract class EntityLivingBase extends Entity { || this.swingProgressInt < 0) { this.swingProgressInt = -1; this.isSwingInProgress = true; + // TODO: implement offhand + this.swingingHand = EnumHand.MAIN_HAND; if (this.worldObj instanceof WorldServer) { ((WorldServer) this.worldObj).getEntityTracker().sendToAllTrackingEntity(this, new S0BPacketAnimation(this, 0)); @@ -1194,6 +1361,7 @@ public abstract class EntityLivingBase extends Entity { } public void handleStatusUpdate(byte b0) { + // TODO: play shield sound if (b0 == 2) { this.limbSwingAmount = 1.5F; this.hurtResistantTime = this.maxHurtResistantTime; @@ -1289,6 +1457,10 @@ public abstract class EntityLivingBase extends Entity { public abstract ItemStack getHeldItem(); + public ItemStack getHeldItemOffhand() { + return this.getEquipmentInSlot(5); + } + public abstract ItemStack getEquipmentInSlot(int var1); public abstract ItemStack getCurrentArmor(int var1); @@ -2119,6 +2291,8 @@ public abstract class EntityLivingBase extends Entity { this.potionsNeedUpdate = true; } + public abstract EnumHandSide getPrimaryHand(); + protected void renderDynamicLightsEaglerAt(double entityX, double entityY, double entityZ, double renderX, double renderY, double renderZ, float partialTicks, boolean isInFrustum) { super.renderDynamicLightsEaglerAt(entityX, entityY, entityZ, renderX, renderY, renderZ, partialTicks, diff --git a/src/main/java/net/minecraft/entity/item/EntityArmorStand.java b/src/main/java/net/minecraft/entity/item/EntityArmorStand.java index 828ff19..fa743cd 100644 --- a/src/main/java/net/minecraft/entity/item/EntityArmorStand.java +++ b/src/main/java/net/minecraft/entity/item/EntityArmorStand.java @@ -21,6 +21,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.BlockPos; import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumHandSide; import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.Rotations; import net.minecraft.util.Vec3; @@ -823,4 +824,8 @@ public class EntityArmorStand extends EntityLivingBase { public boolean canBeCollidedWith() { return super.canBeCollidedWith() && !this.func_181026_s(); } + + public EnumHandSide getPrimaryHand() { + return EnumHandSide.RIGHT; + } } \ No newline at end of file diff --git a/src/main/java/net/minecraft/entity/monster/EntityMob.java b/src/main/java/net/minecraft/entity/monster/EntityMob.java index 088290f..7cdea05 100644 --- a/src/main/java/net/minecraft/entity/monster/EntityMob.java +++ b/src/main/java/net/minecraft/entity/monster/EntityMob.java @@ -1,10 +1,14 @@ package net.minecraft.entity.monster; +import net.hoosiertransfer.EaglerItems; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityCreature; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemAxe; +import net.minecraft.item.ItemStack; import net.minecraft.util.BlockPos; import net.minecraft.util.DamageSource; import net.minecraft.util.MathHelper; @@ -118,31 +122,53 @@ public abstract class EntityMob extends EntityCreature implements IMob { return i > 4 ? "game.hostile.hurt.fall.big" : "game.hostile.hurt.fall.small"; } - public boolean attackEntityAsMob(Entity entity) { + public boolean attackEntityAsMob(Entity entityIn) { float f = (float) this.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue(); int i = 0; - if (entity instanceof EntityLivingBase) { + + if (entityIn instanceof EntityLivingBase) { f += EnchantmentHelper.func_152377_a(this.getHeldItem(), - ((EntityLivingBase) entity).getCreatureAttribute()); + ((EntityLivingBase) entityIn).getCreatureAttribute()); i += EnchantmentHelper.getKnockbackModifier(this); } - boolean flag = entity.attackEntityFrom(DamageSource.causeMobDamage(this), f); + boolean flag = entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), f); + if (flag) { - if (i > 0) { - entity.addVelocity( - (double) (-MathHelper.sin(this.rotationYaw * 3.1415927F / 180.0F) * (float) i * 0.5F), 0.1D, - (double) (MathHelper.cos(this.rotationYaw * 3.1415927F / 180.0F) * (float) i * 0.5F)); + if (i > 0 && entityIn instanceof EntityLivingBase) { + ((EntityLivingBase) entityIn).knockBack(this, (float) i * 0.5F, + (double) MathHelper.sin(this.rotationYaw * 0.017453292F), + (double) (-MathHelper.cos(this.rotationYaw * 0.017453292F))); this.motionX *= 0.6D; this.motionZ *= 0.6D; } int j = EnchantmentHelper.getFireAspectModifier(this); + if (j > 0) { - entity.setFire(j * 4); + entityIn.setFire(j * 4); } - this.applyEnchantments(this, entity); + if (entityIn instanceof EntityPlayer) { + EntityPlayer entityplayer = (EntityPlayer) entityIn; + ItemStack itemstack = this.getHeldItem(); + ItemStack itemstack1 = entityplayer.isHandActive() ? entityplayer.getActiveItemStack() : null; + + // if (itemstack != null && itemstack1 != null && itemstack.getItem() instanceof + // ItemAxe + // && itemstack1.getItem() == EaglerItems.getEaglerItem("shield")) { + // float f1 = 0.25F + (float) EnchantmentHelper.getEfficiencyModifier(this) * + // 0.05F; + + // if (this.rand.nextFloat() < f1) { + // // TODO: implement cooldown + // // entityplayer.getCooldownTracker().setCooldown(Items.SHIELD, 100); + // this.worldObj.setEntityState(entityplayer, (byte) 30); + // } + // } + } + + this.applyEnchantments(this, entityIn); } return flag; diff --git a/src/main/java/net/minecraft/entity/passive/EntityBat.java b/src/main/java/net/minecraft/entity/passive/EntityBat.java index 419cc53..37ec568 100644 --- a/src/main/java/net/minecraft/entity/passive/EntityBat.java +++ b/src/main/java/net/minecraft/entity/passive/EntityBat.java @@ -52,7 +52,7 @@ public class EntityBat extends EntityAmbientCreature { protected void entityInit() { super.entityInit(); - this.dataWatcher.addObject(10, Byte.valueOf((byte) 0), DataWatcher.Types.BYTE); + this.dataWatcher.addObject(11, Byte.valueOf((byte) 0), DataWatcher.Types.BYTE); } /** @@ -116,15 +116,15 @@ public class EntityBat extends EntityAmbientCreature { } public boolean getIsBatHanging() { - return (this.dataWatcher.getWatchableObjectByte(10) & 1) != 0; + return (this.dataWatcher.getWatchableObjectByte(11) & 1) != 0; } public void setIsBatHanging(boolean isHanging) { - byte b0 = this.dataWatcher.getWatchableObjectByte(10); + byte b0 = this.dataWatcher.getWatchableObjectByte(11); if (isHanging) { - this.dataWatcher.updateObject(10, Byte.valueOf((byte) (b0 | 1))); + this.dataWatcher.updateObject(11, Byte.valueOf((byte) (b0 | 1))); } else { - this.dataWatcher.updateObject(10, Byte.valueOf((byte) (b0 & -2))); + this.dataWatcher.updateObject(11, Byte.valueOf((byte) (b0 & -2))); } } @@ -242,7 +242,7 @@ public class EntityBat extends EntityAmbientCreature { */ public void readEntityFromNBT(NBTTagCompound nbttagcompound) { super.readEntityFromNBT(nbttagcompound); - this.dataWatcher.updateObject(10, Byte.valueOf(nbttagcompound.getByte("BatFlags"))); + this.dataWatcher.updateObject(11, Byte.valueOf(nbttagcompound.getByte("BatFlags"))); } /** @@ -252,7 +252,7 @@ public class EntityBat extends EntityAmbientCreature { */ public void writeEntityToNBT(NBTTagCompound nbttagcompound) { super.writeEntityToNBT(nbttagcompound); - nbttagcompound.setByte("BatFlags", this.dataWatcher.getWatchableObjectByte(10)); + nbttagcompound.setByte("BatFlags", this.dataWatcher.getWatchableObjectByte(11)); } /** diff --git a/src/main/java/net/minecraft/entity/passive/EntityHorse.java b/src/main/java/net/minecraft/entity/passive/EntityHorse.java index 9cc533c..393c881 100644 --- a/src/main/java/net/minecraft/entity/passive/EntityHorse.java +++ b/src/main/java/net/minecraft/entity/passive/EntityHorse.java @@ -1239,10 +1239,12 @@ public class EntityHorse extends EntityAnimal implements IInvBasic { nbttagcompound.setInteger("Variant", this.getHorseVariant()); nbttagcompound.setInteger("Temper", this.getTemper()); nbttagcompound.setBoolean("Tame", this.isTame()); - if (worldObj.isRemote && !SingleplayerServerController.isClientInEaglerSingleplayerOrLAN()) { - nbttagcompound.setString("OwnerUUID", this.getOwnerId().toString()); - } else { - nbttagcompound.setString("Owner", this.getOwnerId().toString()); + if (this.getOwnerId() != null) { + if (worldObj.isRemote && !SingleplayerServerController.isClientInEaglerSingleplayerOrLAN()) { + nbttagcompound.setString("OwnerUUID", this.getOwnerId().toString()); + } else { + nbttagcompound.setString("Owner", this.getOwnerId().toString()); + } } if (this.isChested()) { NBTTagList nbttaglist = new NBTTagList(); diff --git a/src/main/java/net/minecraft/entity/passive/EntityWolf.java b/src/main/java/net/minecraft/entity/passive/EntityWolf.java index d7edde7..1496b74 100644 --- a/src/main/java/net/minecraft/entity/passive/EntityWolf.java +++ b/src/main/java/net/minecraft/entity/passive/EntityWolf.java @@ -133,7 +133,7 @@ public class EntityWolf extends EntityTameable { } protected void updateAITasks() { - this.dataWatcher.updateObject(18, Float.valueOf(this.getHealth())); + this.dataWatcher.updateObject(14, Float.valueOf(this.getHealth())); } protected void entityInit() { @@ -510,7 +510,7 @@ public class EntityWolf extends EntityTameable { } public void setCollarColor(EnumDyeColor collarcolor) { - this.dataWatcher.updateObject(20, Byte.valueOf((byte) (collarcolor.getDyeDamage() & 15))); + this.dataWatcher.updateObject(16, Byte.valueOf((byte) (collarcolor.getDyeDamage() & 15))); } public EntityWolf createChild(EntityAgeable var1) { diff --git a/src/main/java/net/minecraft/entity/player/EntityPlayer.java b/src/main/java/net/minecraft/entity/player/EntityPlayer.java index eb6919e..53ece78 100644 --- a/src/main/java/net/minecraft/entity/player/EntityPlayer.java +++ b/src/main/java/net/minecraft/entity/player/EntityPlayer.java @@ -9,6 +9,7 @@ import java.util.List; import javax.annotation.Nullable; +import net.hoosiertransfer.EaglerItems; import net.lax1dude.eaglercraft.v1_8.EaglercraftUUID; import net.minecraft.block.Block; import net.minecraft.block.BlockBed; @@ -47,9 +48,11 @@ import net.minecraft.inventory.InventoryEnderChest; import net.minecraft.item.EnumAction; import net.minecraft.item.Item; import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemAxe; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemElytra; import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemSword; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.network.play.server.S12PacketEntityVelocity; @@ -70,6 +73,7 @@ import net.minecraft.util.BlockPos; import net.minecraft.util.ChatComponentText; import net.minecraft.util.DamageSource; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; import net.minecraft.util.EnumHandSide; import net.minecraft.util.EnumParticleTypes; import net.minecraft.util.FoodStats; @@ -80,6 +84,7 @@ import net.minecraft.world.EnumDifficulty; import net.minecraft.world.IInteractionObject; import net.minecraft.world.LockCode; import net.minecraft.world.World; +import net.minecraft.world.WorldServer; import net.minecraft.world.WorldSettings; import net.minecraft.entity.DataWatcher; @@ -155,8 +160,6 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS public int experienceTotal; public float experience; private int xpSeed; - private ItemStack itemInUse; - private int itemInUseCount; protected float speedOnGround = 0.1F; protected float speedInAir = 0.02F; private int lastXPSound; @@ -182,7 +185,7 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS this.getAttributeMap().registerAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(1.0D); this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.10000000149011612D); this.getAttributeMap().registerAttribute(SharedMonsterAttributes.ATTACK_SPEED); - this.getAttributeMap().registerAttribute(SharedMonsterAttributes.LUCK); + this.getAttributeMap().registerAttribute(SharedMonsterAttributes.LUCK); } protected void entityInit() { @@ -466,11 +469,6 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS } - public boolean isHandActive() { - // TODO: implement offhand - return this.itemInUse != null; - } - /** * + * Used for when item use count runs out, ie: eating completed @@ -1021,6 +1019,41 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS this.inventory.damageArmor(f); } + protected void damageShield(float damage) { + // if (damage >= 3.0F && this.getActiveItemStack() != null + // && this.getActiveItemStack().getItem() == + // EaglerItems.getEaglerItem("shield")) { + // int i = 1 + MathHelper.floor_float(damage); + // this.getActiveItemStack().damageItem(i, this); + + // if (this.getActiveItemStack().stackSize <= 0) { + // EnumHand enumhand = this.getActiveHand(); + + // if (enumhand == EnumHand.MAIN_HAND) { + // this.setItemStackToSlot(0, (ItemStack) null); + // } else { + // this.setItemStackToSlot(5, (ItemStack) null); + // } + + // this.getActiveItemStack().stackSize = 0; + // // TODO: Implement sound + // // this.playSound(SoundEvents.ITEM_SHIELD_BREAK, 0.8F, 0.8F + + // // this.worldObj.rand.nextFloat() * 0.4F); + // } + // } + } + + public void setItemStackToSlot(int slotIn, @Nullable ItemStack stack) { + // TODO: Implement sound + if (slotIn == 0) { + this.inventory.mainInventory[this.inventory.currentItem] = stack; + } else if (slotIn == 5) { + this.inventory.offHandInventory[0] = stack; + } else if (slotIn > 0 && slotIn < 5) { + this.inventory.armorInventory[slotIn] = stack; + } + } + /** * + * Returns the current armor value as determined by a call to @@ -1189,118 +1222,235 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS return -0.35D; } - /** - * + - * Attacks for the player the targeted entity with the currently - * equipped item. The equipped item has hitEntity called on it. - * Args: targetEntity - */ - public void attackTargetEntityWithCurrentItem(Entity entity) { - if (entity.canAttackWithItem()) { - if (!entity.hitByEntity(this)) { + public void attackTargetEntityWithCurrentItem(Entity targetEntity) { + if (targetEntity.canAttackWithItem()) { + if (!targetEntity.hitByEntity(this)) { float f = (float) this.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue(); - int i = 0; float f1 = 0.0F; - if (entity instanceof EntityLivingBase) { + + if (targetEntity instanceof EntityLivingBase) { f1 = EnchantmentHelper.func_152377_a(this.getHeldItem(), - ((EntityLivingBase) entity).getCreatureAttribute()); + ((EntityLivingBase) targetEntity).getCreatureAttribute()); } else { - f1 = EnchantmentHelper.func_152377_a(this.getHeldItem(), EnumCreatureAttribute.UNDEFINED); + f1 = EnchantmentHelper.func_152377_a(this.getHeldItem(), + EnumCreatureAttribute.UNDEFINED); } - i = i + EnchantmentHelper.getKnockbackModifier(this); - if (this.isSprinting()) { - ++i; - } + // float f2 = this.getCooledAttackStrength(0.5F); + // f = f * (0.2F + f2 * f2 * 0.8F); + // f1 = f1 * f2; + // this.resetCooldown(); + f1 = f; if (f > 0.0F || f1 > 0.0F) { - boolean flag = this.fallDistance > 0.0F && !this.onGround && !this.isOnLadder() && !this.isInWater() - && !this.isPotionActive(Potion.blindness) && this.ridingEntity == null - && entity instanceof EntityLivingBase; - if (flag && f > 0.0F) { + // boolean flag = f2 > 0.9F; + boolean flag = false; + boolean flag1 = false; + boolean flag2 = false; + boolean flag3 = false; + int i = 0; + i = i + EnchantmentHelper.getKnockbackModifier(this); + + if (this.isSprinting() && flag) { + // TODO: implement sound + // this.worldObj.playSound((EntityPlayer) null, this.posX, this.posY, this.posZ, + // SoundEvents.ENTITY_PLAYER_ATTACK_KNOCKBACK, this.getSoundCategory(), 1.0F, + // 1.0F); + ++i; + flag1 = true; + } + + flag2 = flag && this.fallDistance > 0.0F && !this.onGround && !this.isOnLadder() + && !this.isInWater() && !this.isPotionActive(Potion.blindness) && !this.isRiding() + && targetEntity instanceof EntityLivingBase; + flag2 = flag2 && !this.isSprinting(); + + if (flag2) { f *= 1.5F; } f = f + f1; - boolean flag1 = false; - int j = EnchantmentHelper.getFireAspectModifier(this); - if (entity instanceof EntityLivingBase && j > 0 && !entity.isBurning()) { - flag1 = true; - entity.setFire(1); + double d0 = (double) (this.distanceWalkedModified - this.prevDistanceWalkedModified); + + if (flag && !flag2 && !flag1 && this.onGround && d0 < (double) this.getAIMoveSpeed()) { + // ItemStack itemstack = this.getHeldItem(EnumHand.MAIN_HAND); + ItemStack itemstack = this.getHeldItem(); + + if (itemstack != null && itemstack.getItem() instanceof ItemSword) { + flag3 = true; + } } - double d0 = entity.motionX; - double d1 = entity.motionY; - double d2 = entity.motionZ; - boolean flag2 = entity.attackEntityFrom(DamageSource.causePlayerDamage(this), f); - if (flag2) { + float f4 = 0.0F; + boolean flag4 = false; + int j = EnchantmentHelper.getFireAspectModifier(this); + + if (targetEntity instanceof EntityLivingBase) { + f4 = ((EntityLivingBase) targetEntity).getHealth(); + + if (j > 0 && !targetEntity.isBurning()) { + flag4 = true; + targetEntity.setFire(1); + } + } + + double d1 = targetEntity.motionX; + double d2 = targetEntity.motionY; + double d3 = targetEntity.motionZ; + boolean flag5 = targetEntity.attackEntityFrom(DamageSource.causePlayerDamage(this), f); + + if (flag5) { if (i > 0) { - entity.addVelocity( - (double) (-MathHelper.sin(this.rotationYaw * 3.1415927F / 180.0F) * (float) i - * 0.5F), - 0.1D, (double) (MathHelper.cos(this.rotationYaw * 3.1415927F / 180.0F) * (float) i - * 0.5F)); + if (targetEntity instanceof EntityLivingBase) { + ((EntityLivingBase) targetEntity).knockBack(this, (float) i * 0.5F, + (double) MathHelper.sin(this.rotationYaw * 0.017453292F), + (double) (-MathHelper.cos(this.rotationYaw * 0.017453292F))); + } else { + targetEntity.addVelocity( + (double) (-MathHelper.sin(this.rotationYaw * 0.017453292F) * (float) i * 0.5F), + 0.1D, + (double) (MathHelper.cos(this.rotationYaw * 0.017453292F) * (float) i * 0.5F)); + } + this.motionX *= 0.6D; this.motionZ *= 0.6D; this.setSprinting(false); } - if (entity instanceof EntityPlayerMP && entity.velocityChanged) { - ((EntityPlayerMP) entity).playerNetServerHandler - .sendPacket(new S12PacketEntityVelocity(entity)); - entity.velocityChanged = false; - entity.motionX = d0; - entity.motionY = d1; - entity.motionZ = d2; + if (flag3) { + for (EntityLivingBase entitylivingbase : this.worldObj.getEntitiesWithinAABB( + EntityLivingBase.class, + targetEntity.getEntityBoundingBox().expand(1.0D, 0.25D, 1.0D))) { + if (entitylivingbase != this && entitylivingbase != targetEntity + && !this.isOnSameTeam(entitylivingbase) + && this.getDistanceSqToEntity(entitylivingbase) < 9.0D) { + entitylivingbase.knockBack(this, 0.4F, + (double) MathHelper.sin(this.rotationYaw * 0.017453292F), + (double) (-MathHelper.cos(this.rotationYaw * 0.017453292F))); + entitylivingbase.attackEntityFrom(DamageSource.causePlayerDamage(this), 1.0F); + } + } + // TODO: Implement sound and particles + // this.worldObj.playSound((EntityPlayer) null, this.posX, this.posY, this.posZ, + // SoundEvents.ENTITY_PLAYER_ATTACK_SWEEP, this.getSoundCategory(), 1.0F, 1.0F); + // this.spawnSweepParticles(); } - if (flag) { - this.onCriticalHit(entity); + if (targetEntity instanceof EntityPlayerMP && targetEntity.velocityChanged) { + ((EntityPlayerMP) targetEntity).playerNetServerHandler + .sendPacket(new S12PacketEntityVelocity(targetEntity)); + targetEntity.velocityChanged = false; + targetEntity.motionX = d1; + targetEntity.motionY = d2; + targetEntity.motionZ = d3; + } + + if (flag2) { + // this.worldObj.playSound((EntityPlayer) null, this.posX, this.posY, this.posZ, + // SoundEvents.ENTITY_PLAYER_ATTACK_CRIT, this.getSoundCategory(), 1.0F, 1.0F); + this.onCriticalHit(targetEntity); + } + + if (!flag2 && !flag3) { + if (flag) { + // this.worldObj.playSound((EntityPlayer) null, this.posX, this.posY, this.posZ, + // SoundEvents.ENTITY_PLAYER_ATTACK_STRONG, this.getSoundCategory(), 1.0F, + // 1.0F); + } else { + // this.worldObj.playSound((EntityPlayer) null, this.posX, this.posY, this.posZ, + // SoundEvents.ENTITY_PLAYER_ATTACK_WEAK, this.getSoundCategory(), 1.0F, 1.0F); + } } if (f1 > 0.0F) { - this.onEnchantmentCritical(entity); + this.onEnchantmentCritical(targetEntity); + } + + if (!this.worldObj.isRemote && targetEntity instanceof EntityPlayer) { + EntityPlayer entityplayer = (EntityPlayer) targetEntity; + ItemStack itemstack2 = this.getHeldItem(); + ItemStack itemstack3 = entityplayer.isHandActive() ? entityplayer.getActiveItemStack() + : null; + + // if (itemstack2 != null && itemstack3 != null && itemstack2.getItem() + // instanceof ItemAxe + // && itemstack3.getItem() == EaglerItems.getEaglerItem("shield")) { + // float f3 = 0.25F + (float) EnchantmentHelper.getEfficiencyModifier(this) * + // 0.05F; + + // if (flag1) { + // f3 += 0.75F; + // } + + // if (this.rand.nextFloat() < f3) { + // // TODO: Implement cooldown + // // + // entityplayer.getCooldownTracker().setCooldown(EaglerItems.getEaglerItem("shield"), + // // 100); + // this.worldObj.setEntityState(entityplayer, (byte) 30); + // } + // } } if (f >= 18.0F) { this.triggerAchievement(AchievementList.overkill); } - this.setLastAttacker(entity); - if (entity instanceof EntityLivingBase) { - EnchantmentHelper.applyThornEnchantments((EntityLivingBase) entity, this); + this.setLastAttacker(targetEntity); + + if (targetEntity instanceof EntityLivingBase) { + EnchantmentHelper.applyThornEnchantments((EntityLivingBase) targetEntity, this); } - EnchantmentHelper.applyArthropodEnchantments(this, entity); - ItemStack itemstack = this.getCurrentEquippedItem(); - Object object = entity; - if (entity instanceof EntityDragonPart) { - IEntityMultiPart ientitymultipart = ((EntityDragonPart) entity).entityDragonObj; + EnchantmentHelper.applyArthropodEnchantments(this, targetEntity); + ItemStack itemstack1 = this.getHeldItem(); + Entity entity = targetEntity; + + if (targetEntity instanceof EntityDragonPart) { + IEntityMultiPart ientitymultipart = ((EntityDragonPart) targetEntity).entityDragonObj; + if (ientitymultipart instanceof EntityLivingBase) { - object = (EntityLivingBase) ientitymultipart; + entity = (EntityLivingBase) ientitymultipart; } } - if (itemstack != null && object instanceof EntityLivingBase) { - itemstack.hitEntity((EntityLivingBase) object, this); - if (itemstack.stackSize <= 0) { - this.destroyCurrentEquippedItem(); + if (itemstack1 != null && entity instanceof EntityLivingBase) { + itemstack1.hitEntity((EntityLivingBase) entity, this); + + if (itemstack1.stackSize <= 0) { + this.setHeldItem(EnumHand.MAIN_HAND, (ItemStack) null); } } - if (entity instanceof EntityLivingBase) { - this.addStat(StatList.damageDealtStat, Math.round(f * 10.0F)); + if (targetEntity instanceof EntityLivingBase) { + float f5 = f4 - ((EntityLivingBase) targetEntity).getHealth(); + this.addStat(StatList.damageDealtStat, Math.round(f5 * 10.0F)); + if (j > 0) { - entity.setFire(j * 4); + targetEntity.setFire(j * 4); + } + + if (this.worldObj instanceof WorldServer && f5 > 2.0F) { + int k = (int) ((double) f5 * 0.5D); + // TODO: Implement particles + // ((WorldServer) + // this.worldObj).spawnParticle(EnumParticleTypes.DAMAGE_INDICATOR, + // targetEntity.posX, targetEntity.posY + (double) (targetEntity.height * 0.5F), + // targetEntity.posZ, k, 0.1D, 0.0D, 0.1D, 0.2D, new int[0]); } } this.addExhaustion(0.3F); - } else if (flag1) { - entity.extinguish(); + } else { + // this.worldObj.playSound((EntityPlayer) null, this.posX, this.posY, this.posZ, + // SoundEvents.ENTITY_PLAYER_ATTACK_NODAMAGE, this.getSoundCategory(), 1.0F, + // 1.0F); + + if (flag4) { + targetEntity.extinguish(); + } } } - } } } @@ -2010,6 +2160,10 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS * 0: Tool in Hand; 1-4: Armor */ public ItemStack getEquipmentInSlot(int i) { + // ! offhand might break this + if (i == 5) { + return this.inventory.offHandInventory[0]; + } return i == 0 ? this.inventory.getCurrentItem() : this.inventory.armorInventory[i - 1]; } @@ -2021,6 +2175,11 @@ public abstract class EntityPlayer extends EntityLivingBase implements ICommandS return this.inventory.getCurrentItem(); } + @Nullable + public ItemStack getHeldItemOffhand() { + return this.inventory.offHandInventory[0]; + } + /** * + * Sets the held item, or an armor slot. Slot 0 is held item. diff --git a/src/main/java/net/minecraft/entity/player/InventoryPlayer.java b/src/main/java/net/minecraft/entity/player/InventoryPlayer.java index 4c77e5d..1301f37 100644 --- a/src/main/java/net/minecraft/entity/player/InventoryPlayer.java +++ b/src/main/java/net/minecraft/entity/player/InventoryPlayer.java @@ -8,6 +8,7 @@ import net.minecraft.block.Block; import net.minecraft.crash.CrashReport; import net.minecraft.crash.CrashReportCategory; import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ItemStackHelper; import net.minecraft.item.Item; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; @@ -333,9 +334,13 @@ public class InventoryPlayer implements IInventory { * receiving a block. */ public void decrementAnimations() { - for (int i = 0; i < this.mainInventory.length; ++i) { - if (this.mainInventory[i] != null) { - this.mainInventory[i].updateAnimation(this.player.worldObj, this.player, i, this.currentItem == i); + for (int i = 0; i < this.allInventories.length; ++i) { + ItemStack[] aitemstack = this.allInventories[i]; + + for (int j = 0; j < aitemstack.length; ++j) { + if (aitemstack[j] != null) { + aitemstack[j].updateAnimation(this.player.worldObj, this.player, j, this.currentItem == j); + } } } @@ -429,45 +434,41 @@ public class InventoryPlayer implements IInventory { * Removes up to a specified number of items from an inventory * slot and returns them in a new stack. */ - public ItemStack decrStackSize(int i, int j) { - ItemStack[] aitemstack = this.mainInventory; - if (i >= this.mainInventory.length) { - aitemstack = this.armorInventory; - i -= this.mainInventory.length; - } + public ItemStack decrStackSize(int index, int count) { + ItemStack[] aitemstack = null; - if (aitemstack[i] != null) { - if (aitemstack[i].stackSize <= j) { - ItemStack itemstack1 = aitemstack[i]; - aitemstack[i] = null; - return itemstack1; - } else { - ItemStack itemstack = aitemstack[i].splitStack(j); - if (aitemstack[i].stackSize == 0) { - aitemstack[i] = null; - } - - return itemstack; + for (ItemStack[] aitemstack1 : this.allInventories) { + if (index < aitemstack1.length) { + aitemstack = aitemstack1; + break; } - } else { - return null; + + index -= aitemstack1.length; } + + return aitemstack != null && aitemstack[index] != null ? ItemStackHelper.getAndSplit(aitemstack, index, count) + : null; } /** * + * Removes a stack from the given slot and returns it. */ - public ItemStack removeStackFromSlot(int i) { - ItemStack[] aitemstack = this.mainInventory; - if (i >= this.mainInventory.length) { - aitemstack = this.armorInventory; - i -= this.mainInventory.length; + public ItemStack removeStackFromSlot(int index) { + ItemStack[] aitemstack = null; + + for (ItemStack[] aitemstack1 : this.allInventories) { + if (index < aitemstack1.length) { + aitemstack = aitemstack1; + break; + } + + index -= aitemstack1.length; } - if (aitemstack[i] != null) { - ItemStack itemstack = aitemstack[i]; - aitemstack[i] = null; + if (aitemstack != null && aitemstack[index] != null) { + ItemStack itemstack = aitemstack[index]; + aitemstack[index] = null; return itemstack; } else { return null; @@ -479,14 +480,21 @@ public class InventoryPlayer implements IInventory { * Sets the given item stack to the specified slot in the * inventory (can be crafting or armor sections). */ - public void setInventorySlotContents(int i, ItemStack itemstack) { - ItemStack[] aitemstack = this.mainInventory; - if (i >= aitemstack.length) { - i -= aitemstack.length; - aitemstack = this.armorInventory; + public void setInventorySlotContents(int index, @Nullable ItemStack stack) { + ItemStack[] aitemstack = null; + + for (ItemStack[] aitemstack1 : this.allInventories) { + if (index < aitemstack1.length) { + aitemstack = aitemstack1; + break; + } + + index -= aitemstack1.length; } - aitemstack[i] = itemstack; + if (aitemstack != null) { + aitemstack[index] = stack; + } } public float getStrVsBlock(Block blockIn) { @@ -574,14 +582,19 @@ public class InventoryPlayer implements IInventory { * + * Returns the stack in the given slot. */ - public ItemStack getStackInSlot(int i) { - ItemStack[] aitemstack = this.mainInventory; - if (i >= aitemstack.length) { - i -= aitemstack.length; - aitemstack = this.armorInventory; + public ItemStack getStackInSlot(int index) { + ItemStack[] aitemstack = null; + + for (ItemStack[] aitemstack1 : this.allInventories) { + if (index < aitemstack1.length) { + aitemstack = aitemstack1; + break; + } + + index -= aitemstack1.length; } - return aitemstack[i]; + return aitemstack == null ? null : aitemstack[index]; } /** @@ -682,20 +695,14 @@ public class InventoryPlayer implements IInventory { * Drop all armor and main inventory items. */ public void dropAllItems() { - for (int i = 0; i < this.mainInventory.length; ++i) { - if (this.mainInventory[i] != null) { - this.player.dropItem(this.mainInventory[i], true, false); - this.mainInventory[i] = null; + for (ItemStack[] aitemstack : this.allInventories) { + for (int i = 0; i < aitemstack.length; ++i) { + if (aitemstack[i] != null) { + this.player.dropItem(aitemstack[i], true, false); + aitemstack[i] = null; + } } } - - for (int j = 0; j < this.armorInventory.length; ++j) { - if (this.armorInventory[j] != null) { - this.player.dropItem(this.armorInventory[j], true, false); - this.armorInventory[j] = null; - } - } - } /** @@ -739,15 +746,11 @@ public class InventoryPlayer implements IInventory { * inventory. */ public boolean hasItemStack(ItemStack itemStackIn) { - for (int i = 0; i < this.armorInventory.length; ++i) { - if (this.armorInventory[i] != null && this.armorInventory[i].isItemEqual(itemStackIn)) { - return true; - } - } - - for (int j = 0; j < this.mainInventory.length; ++j) { - if (this.mainInventory[j] != null && this.mainInventory[j].isItemEqual(itemStackIn)) { - return true; + for (ItemStack[] aitemstack : this.allInventories) { + for (int i = 0; i < aitemstack.length; ++i) { + if (aitemstack[i] != null && aitemstack[i].isItemEqual(itemStackIn)) { + return true; + } } } @@ -798,13 +801,10 @@ public class InventoryPlayer implements IInventory { } public void clear() { - for (int i = 0; i < this.mainInventory.length; ++i) { - this.mainInventory[i] = null; + for (ItemStack[] aitemstack : this.allInventories) { + for (int i = 0; i < aitemstack.length; ++i) { + aitemstack[i] = null; + } } - - for (int j = 0; j < this.armorInventory.length; ++j) { - this.armorInventory[j] = null; - } - } } \ No newline at end of file diff --git a/src/main/java/net/minecraft/inventory/ContainerPlayer.java b/src/main/java/net/minecraft/inventory/ContainerPlayer.java index 9ed40f9..6730b6e 100644 --- a/src/main/java/net/minecraft/inventory/ContainerPlayer.java +++ b/src/main/java/net/minecraft/inventory/ContainerPlayer.java @@ -1,5 +1,7 @@ package net.minecraft.inventory; +import javax.annotation.Nullable; + import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.init.Blocks; @@ -54,18 +56,18 @@ public class ContainerPlayer extends Container { this.isLocalWorld = localWorld; this.thePlayer = player; this.addSlotToContainer( - new SlotCrafting(playerInventory.player, this.craftMatrix, this.craftResult, 0, 144, 36)); + new SlotCrafting(playerInventory.player, this.craftMatrix, this.craftResult, 0, 154, 28)); for (int i = 0; i < 2; ++i) { for (int j = 0; j < 2; ++j) { - this.addSlotToContainer(new Slot(this.craftMatrix, j + i * 2, 88 + j * 18, 26 + i * 18)); + this.addSlotToContainer(new Slot(this.craftMatrix, j + i * 2, 98 + j * 18, 18 + i * 18)); } } for (int k = 0; k < 4; ++k) { final int k2 = k; this.addSlotToContainer( - new Slot(playerInventory, playerInventory.getSizeInventory() - 1 - k, 8, 8 + k * 18) { + new Slot(playerInventory, 36 + (3 - k), 8, 8 + k * 18) { public int getSlotStackLimit() { return 1; } @@ -97,6 +99,17 @@ public class ContainerPlayer extends Container { this.addSlotToContainer(new Slot(playerInventory, i1, 8 + i1 * 18, 142)); } + this.addSlotToContainer(new Slot(playerInventory, 40, 77, 62) { + public boolean isItemValid(@Nullable ItemStack stack) { + return super.isItemValid(stack); + } + + @Nullable + public String getSlotTexture() { + return "minecraft:items/empty_armor_slot_shield"; + } + }); + this.onCraftMatrixChanged(this.craftMatrix); } @@ -183,6 +196,16 @@ public class ContainerPlayer extends Container { return null; } + if (itemstack1.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + + if (itemstack1.stackSize == itemstack.stackSize) { + return null; + } + slot.onPickupFromSlot(entityplayer, itemstack1); } diff --git a/src/main/java/net/minecraft/inventory/ItemStackHelper.java b/src/main/java/net/minecraft/inventory/ItemStackHelper.java new file mode 100644 index 0000000..5127091 --- /dev/null +++ b/src/main/java/net/minecraft/inventory/ItemStackHelper.java @@ -0,0 +1,32 @@ +package net.minecraft.inventory; + +import javax.annotation.Nullable; +import net.minecraft.item.ItemStack; + +public class ItemStackHelper { + @Nullable + public static ItemStack getAndSplit(ItemStack[] stacks, int index, int amount) { + if (index >= 0 && index < stacks.length && stacks[index] != null && amount > 0) { + ItemStack itemstack = stacks[index].splitStack(amount); + + if (stacks[index].stackSize == 0) { + stacks[index] = null; + } + + return itemstack; + } else { + return null; + } + } + + @Nullable + public static ItemStack getAndRemove(ItemStack[] stacks, int index) { + if (index >= 0 && index < stacks.length) { + ItemStack itemstack = stacks[index]; + stacks[index] = null; + return itemstack; + } else { + return null; + } + } +} \ No newline at end of file diff --git a/src/main/java/net/minecraft/item/Item.java b/src/main/java/net/minecraft/item/Item.java index e917570..853f87e 100644 --- a/src/main/java/net/minecraft/item/Item.java +++ b/src/main/java/net/minecraft/item/Item.java @@ -170,6 +170,10 @@ public class Item { return itemstack; } + public ItemStack onItemRightClick(ItemStack itemstack, World var2, EntityLivingBase var3) { + return this.onItemRightClick(itemstack, var2, var3 instanceof EntityPlayer ? (EntityPlayer) var3 : null); + } + /** * + * Called when the player finishes using this Item (E.g. @@ -180,6 +184,10 @@ public class Item { return itemstack; } + public ItemStack onItemUseFinish(ItemStack itemstack, World var2, EntityLivingBase var3) { + return this.onItemUseFinish(itemstack, var2, var3 instanceof EntityPlayer ? (EntityPlayer) var3 : null); + } + /** * + * Returns the maximum size of the stack for a specific item. diff --git a/src/main/java/net/minecraft/item/ItemStack.java b/src/main/java/net/minecraft/item/ItemStack.java index 90d81b1..b89d610 100644 --- a/src/main/java/net/minecraft/item/ItemStack.java +++ b/src/main/java/net/minecraft/item/ItemStack.java @@ -182,6 +182,11 @@ public final class ItemStack { return this.getItem().onItemRightClick(this, worldIn, playerIn); } + public ItemStack useItemRightClick(World worldIn, EntityLivingBase entityIn) { + return this.getItem().onItemRightClick(this, worldIn, + entityIn instanceof EntityPlayer ? (EntityPlayer) entityIn : null); + } + /** * + * Called when the item in use count reach 0, e.g. item food @@ -191,6 +196,11 @@ public final class ItemStack { return this.getItem().onItemUseFinish(this, worldIn, playerIn); } + public ItemStack onItemUseFinish(World worldIn, EntityLivingBase entityLiving) { + return this.getItem().onItemUseFinish(this, worldIn, + entityLiving instanceof EntityPlayer ? (EntityPlayer) entityLiving : null); + } + /** * + * Write the stack fields to a NBT object. Return the new NBT diff --git a/src/main/java/net/minecraft/network/play/server/S30PacketWindowItems.java b/src/main/java/net/minecraft/network/play/server/S30PacketWindowItems.java index 938c7da..b4a81c6 100644 --- a/src/main/java/net/minecraft/network/play/server/S30PacketWindowItems.java +++ b/src/main/java/net/minecraft/network/play/server/S30PacketWindowItems.java @@ -62,8 +62,6 @@ public class S30PacketWindowItems implements Packet { public void readPacketData(PacketBuffer parPacketBuffer) throws IOException { this.windowId = parPacketBuffer.readUnsignedByte(); short short1 = parPacketBuffer.readShort(); - if (short1 == 45) - short1 = 44; // TODO: implement offhand this.itemStacks = new ItemStack[short1]; for (int i = 0; i < short1; ++i) { diff --git a/src/main/java/net/minecraft/util/DamageSource.java b/src/main/java/net/minecraft/util/DamageSource.java index 0227ec9..677f03d 100644 --- a/src/main/java/net/minecraft/util/DamageSource.java +++ b/src/main/java/net/minecraft/util/DamageSource.java @@ -286,4 +286,11 @@ public class DamageSource { Entity entity = this.getEntity(); return entity instanceof EntityPlayer && ((EntityPlayer) entity).capabilities.isCreativeMode; } + + /** + * Gets the location from which the damage originates. + */ + public Vec3 getDamageLocation() { + return null; + } } \ No newline at end of file diff --git a/src/main/java/net/minecraft/util/EntityDamageSource.java b/src/main/java/net/minecraft/util/EntityDamageSource.java index 749b18f..f8b8dc0 100644 --- a/src/main/java/net/minecraft/util/EntityDamageSource.java +++ b/src/main/java/net/minecraft/util/EntityDamageSource.java @@ -92,4 +92,11 @@ public class EntityDamageSource extends DamageSource { return this.damageSourceEntity != null && this.damageSourceEntity instanceof EntityLivingBase && !(this.damageSourceEntity instanceof EntityPlayer); } + + /** + * Gets the location from which the damage originates. + */ + public Vec3 getDamageLocation() { + return new Vec3(this.damageSourceEntity.posX, this.damageSourceEntity.posY, this.damageSourceEntity.posZ); + } } \ No newline at end of file diff --git a/src/main/java/net/minecraft/util/EnumParticleTypes.java b/src/main/java/net/minecraft/util/EnumParticleTypes.java index d2706f8..1ecef57 100644 --- a/src/main/java/net/minecraft/util/EnumParticleTypes.java +++ b/src/main/java/net/minecraft/util/EnumParticleTypes.java @@ -50,7 +50,10 @@ public enum EnumParticleTypes { SNOWBALL("snowballpoof", 31, false), SNOW_SHOVEL("snowshovel", 32, false), SLIME("slime", 33, false), HEART("heart", 34, false), BARRIER("barrier", 35, false), ITEM_CRACK("iconcrack_", 36, false, 2), BLOCK_CRACK("blockcrack_", 37, false, 1), BLOCK_DUST("blockdust_", 38, false, 1), WATER_DROP("droplet", 39, false), - ITEM_TAKE("take", 40, false), MOB_APPEARANCE("mobappearance", 41, true); + ITEM_TAKE("take", 40, false), MOB_APPEARANCE("mobappearance", 41, true), DRAGON_BREATH("dragonbreath", 42, false), + END_ROD("endRod", 43, false), + DAMAGE_INDICATOR("damageIndicator", 44, true), + SWEEP_ATTACK("sweepAttack", 45, true); public static final EnumParticleTypes[] _VALUES = values(); diff --git a/src/main/java/net/minecraft/util/MathHelper.java b/src/main/java/net/minecraft/util/MathHelper.java index 9be3462..76b9863 100644 --- a/src/main/java/net/minecraft/util/MathHelper.java +++ b/src/main/java/net/minecraft/util/MathHelper.java @@ -45,9 +45,9 @@ public class MathHelper { */ private static final float[] SIN_TABLE = new float[4096]; private static final int[] multiplyDeBruijnBitPosition; - private static final double field_181163_d; - private static final double[] field_181164_e; - private static final double[] field_181165_f; + private static final double FRAC_BIAS; + private static final double[] ASINE_TAB; + private static final double[] COS_TAB; /** * + @@ -84,6 +84,15 @@ public class MathHelper { return y; } + public static double fastInvSqrt(double p_181161_0_) { + double d0 = 0.5D * p_181161_0_; + long i = Double.doubleToRawLongBits(p_181161_0_); + i = 6910469410427058090L - (i >> 1); + p_181161_0_ = Double.longBitsToDouble(i); + p_181161_0_ = p_181161_0_ * (1.5D - d0 * p_181161_0_ * p_181161_0_); + return p_181161_0_; + } + public static int getHash(int p_188208_0_) { p_188208_0_ = p_188208_0_ ^ p_188208_0_ >>> 16; p_188208_0_ = p_188208_0_ * -2048144789; @@ -389,6 +398,60 @@ public class MathHelper { return calculateLogBaseTwoDeBruijn(value) - (isPowerOfTwo(value) ? 0 : 1); } + public static double atan2(double p_181159_0_, double p_181159_2_) { + double d0 = p_181159_2_ * p_181159_2_ + p_181159_0_ * p_181159_0_; + + if (Double.isNaN(d0)) { + return Double.NaN; + } else { + boolean flag = p_181159_0_ < 0.0D; + + if (flag) { + p_181159_0_ = -p_181159_0_; + } + + boolean flag1 = p_181159_2_ < 0.0D; + + if (flag1) { + p_181159_2_ = -p_181159_2_; + } + + boolean flag2 = p_181159_0_ > p_181159_2_; + + if (flag2) { + double d1 = p_181159_2_; + p_181159_2_ = p_181159_0_; + p_181159_0_ = d1; + } + + double d9 = fastInvSqrt(d0); + p_181159_2_ = p_181159_2_ * d9; + p_181159_0_ = p_181159_0_ * d9; + double d2 = FRAC_BIAS + p_181159_0_; + int i = (int) Double.doubleToRawLongBits(d2); + double d3 = ASINE_TAB[i]; + double d4 = COS_TAB[i]; + double d5 = d2 - FRAC_BIAS; + double d6 = p_181159_0_ * d4 - p_181159_2_ * d5; + double d7 = (6.0D + d6 * d6) * d6 * 0.16666666666666666D; + double d8 = d3 + d7; + + if (flag2) { + d8 = (Math.PI / 2D) - d8; + } + + if (flag1) { + d8 = Math.PI - d8; + } + + if (flag) { + d8 = -d8; + } + + return d8; + } + } + public static int func_154354_b(int parInt1, int parInt2) { if (parInt2 == 0) { return 0; @@ -477,11 +540,11 @@ public class MathHelper { double d9 = func_181161_i(d0); parDouble2 = parDouble2 * d9; parDouble1 = parDouble1 * d9; - double d2 = field_181163_d + parDouble1; + double d2 = FRAC_BIAS + parDouble1; int i = (int) Double.doubleToRawLongBits(d2); - double d3 = field_181164_e[i]; - double d4 = field_181165_f[i]; - double d5 = d2 - field_181163_d; + double d3 = ASINE_TAB[i]; + double d4 = COS_TAB[i]; + double d5 = d2 - FRAC_BIAS; double d6 = parDouble1 * d4 - parDouble2 * d5; double d7 = (6.0D + d6 * d6) * d6 * 0.16666666666666666D; double d8 = d3 + d7; @@ -573,15 +636,15 @@ public class MathHelper { multiplyDeBruijnBitPosition = new int[] { 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9 }; - field_181163_d = Double.longBitsToDouble(4805340802404319232L); - field_181164_e = new double[257]; - field_181165_f = new double[257]; + FRAC_BIAS = Double.longBitsToDouble(4805340802404319232L); + ASINE_TAB = new double[257]; + COS_TAB = new double[257]; for (int j = 0; j < 257; ++j) { double d0 = (double) j / 256.0D; double d1 = Math.asin(d0); - field_181165_f[j] = Math.cos(d1); - field_181164_e[j] = d1; + COS_TAB[j] = Math.cos(d1); + ASINE_TAB[j] = d1; } } } \ No newline at end of file diff --git a/src/main/java/net/minecraft/world/gen/structure/StructureComponent.java b/src/main/java/net/minecraft/world/gen/structure/StructureComponent.java index e0942f5..aa186a8 100644 --- a/src/main/java/net/minecraft/world/gen/structure/StructureComponent.java +++ b/src/main/java/net/minecraft/world/gen/structure/StructureComponent.java @@ -1,6 +1,8 @@ package net.minecraft.world.gen.structure; import java.util.List; + +import net.hoosiertransfer.EaglerItems; import net.lax1dude.eaglercraft.v1_8.EaglercraftRandom; import net.minecraft.block.Block; import net.minecraft.block.BlockDirectional; @@ -362,7 +364,7 @@ public abstract class StructureComponent { } } else if (blockIn != Blocks.tripwire_hook && !(blockIn instanceof BlockDirectional)) { if (blockIn == Blocks.piston || blockIn == Blocks.sticky_piston || blockIn == Blocks.lever - || blockIn == Blocks.dispenser) { + || blockIn == Blocks.dispenser || blockIn == EaglerItems.getEaglerBlock("end_rod")) { if (this.coordBaseMode == EnumFacing.SOUTH) { if (meta == EnumFacing.NORTH.getIndex() || meta == EnumFacing.SOUTH.getIndex()) { return EnumFacing.getFront(meta).getOpposite().getIndex();