import java.util.List; public class OEntityBoat extends OEntity { public int a = 0; public int b = 0; public int c = 1; private int d; private double e; private double f; private double g; private double h; private double i; // hMod Start Boat boat = new Boat(this); // hMod end public OEntityBoat(OWorld paramOWorld) { super(paramOWorld); aD = true; b(1.5F, 0.6F); bc = (be / 2.0F); } @Override protected boolean l() { return false; } @Override protected void a() { } @Override public OAxisAlignedBB a_(OEntity paramOEntity) { return paramOEntity.aU; } @Override public OAxisAlignedBB d() { return aU; } @Override public boolean e_() { return true; } public OEntityBoat(OWorld paramOWorld, double paramDouble1, double paramDouble2, double paramDouble3) { this(paramOWorld); a(paramDouble1, paramDouble2 + bc, paramDouble3); aN = 0.0D; aO = 0.0D; aP = 0.0D; aH = paramDouble1; aI = paramDouble2; aJ = paramDouble3; } @Override public double k() { return be * 0.0D - 0.300000011920929D; } @Override public boolean a(OEntity paramOEntity, int paramInt) { // hMod: Attack of the boat if ((Boolean) manager.callHook(PluginLoader.Hook.VEHICLE_DAMAGE, boat, paramOEntity == null ? null : paramOEntity.entity, paramInt)) return true; if ((aG.t) || (bb)) return true; c = (-c); b = 10; a += paramInt * 10; W(); if (a > 40) { for (int j = 0; j < 3; j++) a(OBlock.x.bl, 1, 0.0F); for (int j = 0; j < 2; j++) a(OItem.B.bd, 1, 0.0F); D(); } return true; } @Override public boolean d_() { return !bb; } @Override public void f_() { super.f_(); // hMod: Update of the boat manager.callHook(PluginLoader.Hook.VEHICLE_UPDATE, boat); double prevX = aK; double prevY = aL; double prevZ = aM; if (b > 0) b -= 1; if (a > 0) a -= 1; aH = aK; aI = aL; aJ = aM; int j = 5; double d1 = 0.0D; for (int k = 0; k < j; k++) { double d2 = aU.b + (aU.e - aU.b) * (k + 0) / j - 0.125D; double d3 = aU.b + (aU.e - aU.b) * (k + 1) / j - 0.125D; OAxisAlignedBB localOAxisAlignedBB = OAxisAlignedBB.b(aU.a, d2, aU.c, aU.d, d3, aU.f); if (aG.b(localOAxisAlignedBB, OMaterial.f)) d1 += 1.0D / j; } if (aG.t) { if (d > 0) { double d4 = aK + (e - aK) / d; double d5 = aL + (f - aL) / d; double d6 = aM + (g - aM) / d; double d7 = h - aQ; while (d7 < -180.0D) d7 += 360.0D; while (d7 >= 180.0D) d7 -= 360.0D; aQ = (float) (aQ + d7 / d); aR = (float) (aR + (i - aR) / d); d -= 1; a(d4, d5, d6); c(aQ, aR); } else { double d4 = aK + aN; double d5 = aL + aO; double d6 = aM + aP; a(d4, d5, d6); if (aV) { aN *= 0.5D; aO *= 0.5D; aP *= 0.5D; } aN *= 0.9900000095367432D; aO *= 0.949999988079071D; aP *= 0.9900000095367432D; } return; } double d4 = d1 * 2.0D - 1.0D; aO += 0.03999999910593033D * d4; if (aE != null) { aN += aE.aN * 0.2D; aP += aE.aP * 0.2D; } double d5 = 0.4D; if (aN < -d5) aN = (-d5); if (aN > d5) aN = d5; if (aP < -d5) aP = (-d5); if (aP > d5) aP = d5; if (aV) { aN *= 0.5D; aO *= 0.5D; aP *= 0.5D; } c(aN, aO, aP); double d6 = Math.sqrt(aN * aN + aP * aP); if (d6 > 0.15D) { double d7 = Math.cos(aQ * 3.141592653589793D / 180.0D); double d8 = Math.sin(aQ * 3.141592653589793D / 180.0D); for (int m = 0; m < 1.0D + d6 * 60.0D; m++) { double d9 = bq.nextFloat() * 2.0F - 1.0F; double d10 = (bq.nextInt(2) * 2 - 1) * 0.7D; double d11; double d12; if (bq.nextBoolean()) { d11 = aK - d7 * d9 * 0.8D + d8 * d10; d12 = aM - d8 * d9 * 0.8D - d7 * d10; aG.a("splash", d11, aL - 0.125D, d12, aN, aO, aP); } else { d11 = aK + d7 + d8 * d9 * 0.7D; d12 = aM + d8 - d7 * d9 * 0.7D; aG.a("splash", d11, aL - 0.125D, d12, aN, aO, aP); } } } if ((aW) && (d6 > 0.15D)) { if (!aG.t) { D(); for (int n = 0; n < 3; n++) a(OBlock.x.bl, 1, 0.0F); for (int n = 0; n < 2; n++) a(OItem.B.bd, 1, 0.0F); } } else { aN *= 0.9900000095367432D; aO *= 0.949999988079071D; aP *= 0.9900000095367432D; } aR = 0.0F; double d7 = aQ; double d8 = aH - aK; double d13 = aJ - aM; if (d8 * d8 + d13 * d13 > 0.001D) d7 = (float) (Math.atan2(d13, d8) * 180.0D / 3.141592653589793D); double d14 = d7 - aQ; while (d14 >= 180.0D) d14 -= 360.0D; while (d14 < -180.0D) d14 += 360.0D; if (d14 > 20.0D) d14 = 20.0D; if (d14 < -20.0D) d14 = -20.0D; aQ = (float) (aQ + d14); c(aQ, aR); // hMod: Change of the cart if (aK != prevX || aL != prevY || aM != prevZ) manager.callHook(PluginLoader.Hook.VEHICLE_POSITIONCHANGE, boat, (int) aK, (int) aL, (int) aM); List localList = aG.b(this, aU.b(0.2000000029802322D, 0.0D, 0.2000000029802322D)); if ((localList != null) && (localList.size() > 0)) for (int i1 = 0; i1 < localList.size(); i1++) { OEntity localOEntity = (OEntity) localList.get(i1); if ((localOEntity != aE) && (localOEntity.e_()) && ((localOEntity instanceof OEntityBoat))) localOEntity.h(this); } if ((aE != null) && (aE.bb)) aE = null; } @Override public void h_() { if (aE == null) return; double d1 = Math.cos(aQ * 3.141592653589793D / 180.0D) * 0.4D; double d2 = Math.sin(aQ * 3.141592653589793D / 180.0D) * 0.4D; aE.a(aK + d1, aL + k() + aE.C(), aM + d2); } @Override protected void a(ONBTTagCompound paramONBTTagCompound) { } @Override protected void b(ONBTTagCompound paramONBTTagCompound) { } @Override public boolean a(OEntityPlayer paramOEntityPlayer) { // hMod: Entering the boat manager.callHook(PluginLoader.Hook.VEHICLE_ENTERED, boat, paramOEntityPlayer.entity); if ((aE != null) && ((aE instanceof OEntityPlayer)) && (aE != paramOEntityPlayer)) return true; if (!aG.t) paramOEntityPlayer.b(this); return true; } }