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 0000000..a710490 Binary files /dev/null and b/resources/resources/assets/minecraft/textures/blocks/end_rod.png differ 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 c8d53a6..afad1af 100644 Binary files a/resources/resources/assets/minecraft/textures/gui/container/creative_inventory/tab_inventory.png and b/resources/resources/assets/minecraft/textures/gui/container/creative_inventory/tab_inventory.png differ diff --git a/resources/resources/assets/minecraft/textures/gui/container/inventory.png b/resources/resources/assets/minecraft/textures/gui/container/inventory.png index 726bf96..74462dd 100644 Binary files a/resources/resources/assets/minecraft/textures/gui/container/inventory.png and b/resources/resources/assets/minecraft/textures/gui/container/inventory.png differ 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 0000000..53d5333 Binary files /dev/null and b/resources/resources/assets/minecraft/textures/items/empty_armor_slot_shield.png differ diff --git a/resources/resources/assets/minecraft/textures/particle/particles.png b/resources/resources/assets/minecraft/textures/particle/particles.png index eec1f89..5641c71 100644 Binary files a/resources/resources/assets/minecraft/textures/particle/particles.png and b/resources/resources/assets/minecraft/textures/particle/particles.png differ 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();