public Vec3D k(double var1, double var3, double var5) { int var7 = MathHelper.floor(var1); int var8 = MathHelper.floor(var3); int var9 = MathHelper.floor(var5); if (BlockMinecartTrackAbstract.e(this.world, new BlockPosition(var7, var8 - 1, var9))) { --var8; } IBlockData var10 = this.world.getType(new BlockPosition(var7, var8, var9)); if (BlockMinecartTrackAbstract.d(var10)) { BlockMinecartTrackAbstract.EnumTrackPosition var11 = (BlockMinecartTrackAbstract.EnumTrackPosition) var10.get(((BlockMinecartTrackAbstract) var10.getBlock()).n()); int[][] var12 = matrix[var11.a()]; double var13 = 0.0D; double var15 = (double) var7 + 0.5D + (double) var12[0][0] * 0.5D; double var17 = (double) var8 + 0.0625D + (double) var12[0][1] * 0.5D; double var19 = (double) var9 + 0.5D + (double) var12[0][2] * 0.5D; double var21 = (double) var7 + 0.5D + (double) var12[1][0] * 0.5D; double var23 = (double) var8 + 0.0625D + (double) var12[1][1] * 0.5D; double var25 = (double) var9 + 0.5D + (double) var12[1][2] * 0.5D; double var27 = var21 - var15; double var29 = (var23 - var17) * 2.0D; double var31 = var25 - var19; if (var27 == 0.0D) { var1 = (double) var7 + 0.5D; var13 = var5 - (double) var9; } else if (var31 == 0.0D) { var5 = (double) var9 + 0.5D; var13 = var1 - (double) var7; } else { double var33 = var1 - var15; double var35 = var5 - var19; var13 = (var33 * var27 + var35 * var31) * 2.0D; } var1 = var15 + var27 * var13; var3 = var17 + var29 * var13; var5 = var19 + var31 * var13; if (var29 < 0.0D) { ++var3; } if (var29 > 0.0D) { var3 += 0.5D; } return new Vec3D(var1, var3, var5); } else { return null; } }
protected void a(BlockPosition var1, IBlockData var2) { this.fallDistance = 0.0F; Vec3D var3 = this.k(this.locX, this.locY, this.locZ); this.locY = (double) var1.getY(); boolean var4 = false; boolean var5 = false; BlockMinecartTrackAbstract var6 = (BlockMinecartTrackAbstract) var2.getBlock(); if (var6 == Blocks.GOLDEN_RAIL) { var4 = ((Boolean) var2.get(BlockPoweredRail.POWERED)).booleanValue(); var5 = !var4; } double var7 = 0.0078125D; BlockMinecartTrackAbstract.EnumTrackPosition var9 = (BlockMinecartTrackAbstract.EnumTrackPosition) var2.get(var6.n()); switch (EntityMinecartAbstract.SyntheticClass_1.b[var9.ordinal()]) { case 1: this.motX -= 0.0078125D; ++this.locY; break; case 2: this.motX += 0.0078125D; ++this.locY; break; case 3: this.motZ += 0.0078125D; ++this.locY; break; case 4: this.motZ -= 0.0078125D; ++this.locY; } int[][] var10 = matrix[var9.a()]; double var11 = (double) (var10[1][0] - var10[0][0]); double var13 = (double) (var10[1][2] - var10[0][2]); double var15 = Math.sqrt(var11 * var11 + var13 * var13); double var17 = this.motX * var11 + this.motZ * var13; if (var17 < 0.0D) { var11 = -var11; var13 = -var13; } double var19 = Math.sqrt(this.motX * this.motX + this.motZ * this.motZ); if (var19 > 2.0D) { var19 = 2.0D; } this.motX = var19 * var11 / var15; this.motZ = var19 * var13 / var15; double var21; double var23; double var25; double var27; if (this.passenger instanceof EntityLiving) { var21 = (double) ((EntityLiving) this.passenger).ba; if (var21 > 0.0D) { var23 = -Math.sin((double) (this.passenger.yaw * 3.1415927F / 180.0F)); var25 = Math.cos((double) (this.passenger.yaw * 3.1415927F / 180.0F)); var27 = this.motX * this.motX + this.motZ * this.motZ; if (var27 < 0.01D) { this.motX += var23 * 0.1D; this.motZ += var25 * 0.1D; var5 = false; } } } if (var5) { var21 = Math.sqrt(this.motX * this.motX + this.motZ * this.motZ); if (var21 < 0.03D) { this.motX *= 0.0D; this.motY *= 0.0D; this.motZ *= 0.0D; } else { this.motX *= 0.5D; this.motY *= 0.0D; this.motZ *= 0.5D; } } var21 = 0.0D; var23 = (double) var1.getX() + 0.5D + (double) var10[0][0] * 0.5D; var25 = (double) var1.getZ() + 0.5D + (double) var10[0][2] * 0.5D; var27 = (double) var1.getX() + 0.5D + (double) var10[1][0] * 0.5D; double var29 = (double) var1.getZ() + 0.5D + (double) var10[1][2] * 0.5D; var11 = var27 - var23; var13 = var29 - var25; double var31; double var33; if (var11 == 0.0D) { this.locX = (double) var1.getX() + 0.5D; var21 = this.locZ - (double) var1.getZ(); } else if (var13 == 0.0D) { this.locZ = (double) var1.getZ() + 0.5D; var21 = this.locX - (double) var1.getX(); } else { var31 = this.locX - var23; var33 = this.locZ - var25; var21 = (var31 * var11 + var33 * var13) * 2.0D; } this.locX = var23 + var11 * var21; this.locZ = var25 + var13 * var21; this.setPosition(this.locX, this.locY, this.locZ); var31 = this.motX; var33 = this.motZ; if (this.passenger != null) { var31 *= 0.75D; var33 *= 0.75D; } double var35 = this.m(); var31 = MathHelper.a(var31, -var35, var35); var33 = MathHelper.a(var33, -var35, var35); this.move(var31, 0.0D, var33); if (var10[0][1] != 0 && MathHelper.floor(this.locX) - var1.getX() == var10[0][0] && MathHelper.floor(this.locZ) - var1.getZ() == var10[0][2]) { this.setPosition(this.locX, this.locY + (double) var10[0][1], this.locZ); } else if (var10[1][1] != 0 && MathHelper.floor(this.locX) - var1.getX() == var10[1][0] && MathHelper.floor(this.locZ) - var1.getZ() == var10[1][2]) { this.setPosition(this.locX, this.locY + (double) var10[1][1], this.locZ); } this.o(); Vec3D var37 = this.k(this.locX, this.locY, this.locZ); if (var37 != null && var3 != null) { double var38 = (var3.b - var37.b) * 0.05D; var19 = Math.sqrt(this.motX * this.motX + this.motZ * this.motZ); if (var19 > 0.0D) { this.motX = this.motX / var19 * (var19 + var38); this.motZ = this.motZ / var19 * (var19 + var38); } this.setPosition(this.locX, var37.b, this.locZ); } int var44 = MathHelper.floor(this.locX); int var39 = MathHelper.floor(this.locZ); if (var44 != var1.getX() || var39 != var1.getZ()) { var19 = Math.sqrt(this.motX * this.motX + this.motZ * this.motZ); this.motX = var19 * (double) (var44 - var1.getX()); this.motZ = var19 * (double) (var39 - var1.getZ()); } if (var4) { double var40 = Math.sqrt(this.motX * this.motX + this.motZ * this.motZ); if (var40 > 0.01D) { double var42 = 0.06D; this.motX += this.motX / var40 * var42; this.motZ += this.motZ / var40 * var42; } else if (var9 == BlockMinecartTrackAbstract.EnumTrackPosition.EAST_WEST) { if (this.world.getType(var1.west()).getBlock().isOccluding()) { this.motX = 0.02D; } else if (this.world.getType(var1.east()).getBlock().isOccluding()) { this.motX = -0.02D; } } else if (var9 == BlockMinecartTrackAbstract.EnumTrackPosition.NORTH_SOUTH) { if (this.world.getType(var1.north()).getBlock().isOccluding()) { this.motZ = 0.02D; } else if (this.world.getType(var1.south()).getBlock().isOccluding()) { this.motZ = -0.02D; } } } }
public void t_() { if (this.getType() > 0) { this.j(this.getType() - 1); } if (this.getDamage() > 0.0F) { this.setDamage(this.getDamage() - 1.0F); } if (this.locY < -64.0D) { this.O(); } int var2; if (!this.world.isClientSide && this.world instanceof WorldServer) { this.world.methodProfiler.a("portal"); MinecraftServer var1 = ((WorldServer) this.world).getMinecraftServer(); var2 = this.L(); if (this.ak) { if (var1.getAllowNether()) { if (this.vehicle == null && this.al++ >= var2) { this.al = var2; this.portalCooldown = this.aq(); byte var3; if (this.world.worldProvider.getDimension() == -1) { var3 = 0; } else { var3 = -1; } this.c(var3); } this.ak = false; } } else { if (this.al > 0) { this.al -= 4; } if (this.al < 0) { this.al = 0; } } if (this.portalCooldown > 0) { --this.portalCooldown; } this.world.methodProfiler.b(); } if (this.world.isClientSide) { if (this.d > 0) { double var15 = this.locX + (this.e - this.locX) / (double) this.d; double var17 = this.locY + (this.f - this.locY) / (double) this.d; double var18 = this.locZ + (this.g - this.locZ) / (double) this.d; double var7 = MathHelper.g(this.h - (double) this.yaw); this.yaw = (float) ((double) this.yaw + var7 / (double) this.d); this.pitch = (float) ((double) this.pitch + (this.i - (double) this.pitch) / (double) this.d); --this.d; this.setPosition(var15, var17, var18); this.setYawPitch(this.yaw, this.pitch); } else { this.setPosition(this.locX, this.locY, this.locZ); this.setYawPitch(this.yaw, this.pitch); } } else { this.lastX = this.locX; this.lastY = this.locY; this.lastZ = this.locZ; this.motY -= 0.03999999910593033D; int var14 = MathHelper.floor(this.locX); var2 = MathHelper.floor(this.locY); int var16 = MathHelper.floor(this.locZ); if (BlockMinecartTrackAbstract.e(this.world, new BlockPosition(var14, var2 - 1, var16))) { --var2; } BlockPosition var4 = new BlockPosition(var14, var2, var16); IBlockData var5 = this.world.getType(var4); if (BlockMinecartTrackAbstract.d(var5)) { this.a(var4, var5); if (var5.getBlock() == Blocks.ACTIVATOR_RAIL) { this.a(var14, var2, var16, ((Boolean) var5.get(BlockPoweredRail.POWERED)).booleanValue()); } } else { this.n(); } this.checkBlockCollisions(); this.pitch = 0.0F; double var6 = this.lastX - this.locX; double var8 = this.lastZ - this.locZ; if (var6 * var6 + var8 * var8 > 0.001D) { this.yaw = (float) (MathHelper.b(var8, var6) * 180.0D / 3.141592653589793D); if (this.a) { this.yaw += 180.0F; } } double var10 = (double) MathHelper.g(this.yaw - this.lastYaw); if (var10 < -170.0D || var10 >= 170.0D) { this.yaw += 180.0F; this.a = !this.a; } this.setYawPitch(this.yaw, this.pitch); Iterator var12 = this.world .getEntities( this, this.getBoundingBox().grow(0.20000000298023224D, 0.0D, 0.20000000298023224D)) .iterator(); while (var12.hasNext()) { Entity var13 = (Entity) var12.next(); if (var13 != this.passenger && var13.ae() && var13 instanceof EntityMinecartAbstract) { var13.collide(this); } } if (this.passenger != null && this.passenger.dead) { if (this.passenger.vehicle == this) { this.passenger.vehicle = null; } this.passenger = null; } this.W(); } }