public float[] mySilentStrafe(final float strafe, final float forward, final float yaw, final boolean advanced) { final Minecraft mc = Minecraft.getMinecraft(); final float diff = MathHelper.wrapAngleTo180_float(yaw - PlayerHandler.yaw); float newForward = 0.0f; float newStrafe = 0.0f; if (!advanced) { if (diff >= 22.5 && diff < 67.5) { newStrafe += strafe; newForward += forward; newStrafe -= forward; newForward += strafe; } else if (diff >= 67.5 && diff < 112.5) { newStrafe -= forward; newForward += strafe; } else if (diff >= 112.5 && diff < 157.5) { newStrafe -= strafe; newForward -= forward; newStrafe -= forward; newForward += strafe; } else if (diff >= 157.5 || diff <= -157.5) { newStrafe -= strafe; newForward -= forward; } else if (diff > -157.5 && diff <= -112.5) { newStrafe -= strafe; newForward -= forward; newStrafe += forward; newForward -= strafe; } else if (diff > -112.5 && diff <= -67.5) { newStrafe += forward; newForward -= strafe; } else if (diff > -67.5 && diff <= -22.5) { newStrafe += strafe; newForward += forward; newStrafe += forward; newForward -= strafe; } else { newStrafe += strafe; newForward += forward; } return new float[] { newStrafe, newForward }; } final double[] realMotion = MoveUtil.getMotion(0.22, strafe, forward, mc.thePlayer.rotationYaw); final double[] array; final double[] realPos = array = new double[] { mc.thePlayer.posX, mc.thePlayer.posZ }; final int n = 0; array[n] += realMotion[0]; final double[] array2 = realPos; final int n2 = 1; array2[n2] += realMotion[1]; final ArrayList possibleForwardStrafe = new ArrayList(); int i = 0; boolean b = false; while (!b) { newForward = 0.0f; newStrafe = 0.0f; if (i == 0) { newStrafe += strafe; newForward += forward; newStrafe -= forward; newForward += strafe; possibleForwardStrafe.add(new float[] { newForward, newStrafe }); } else if (i == 1) { newStrafe -= forward; newForward += strafe; possibleForwardStrafe.add(new float[] { newForward, newStrafe }); } else if (i == 2) { newStrafe -= strafe; newForward -= forward; newStrafe -= forward; newForward += strafe; possibleForwardStrafe.add(new float[] { newForward, newStrafe }); } else if (i == 3) { newStrafe -= strafe; newForward -= forward; possibleForwardStrafe.add(new float[] { newForward, newStrafe }); } else if (i == 4) { newStrafe -= strafe; newForward -= forward; newStrafe += forward; newForward -= strafe; possibleForwardStrafe.add(new float[] { newForward, newStrafe }); } else if (i == 5) { newStrafe += forward; newForward -= strafe; possibleForwardStrafe.add(new float[] { newForward, newStrafe }); } else if (i == 6) { newStrafe += strafe; newForward += forward; newStrafe += forward; newForward -= strafe; possibleForwardStrafe.add(new float[] { newForward, newStrafe }); } else { newStrafe += strafe; newForward += forward; possibleForwardStrafe.add(new float[] { newForward, newStrafe }); b = true; } ++i; } double distance = 5000.0; float[] floats = new float[2]; for (final float[] flo : possibleForwardStrafe) { if (flo[0] > 1.0f) { flo[0] = 1.0f; } else if (flo[0] < -1.0f) { flo[0] = -1.0f; } if (flo[1] > 1.0f) { flo[1] = 1.0f; } else if (flo[1] < -1.0f) { flo[1] = -1.0f; } final double[] motion2; final double[] motion = motion2 = MoveUtil.getMotion(0.22, flo[1], flo[0], PlayerHandler.yaw); final int n3 = 0; motion2[n3] += mc.thePlayer.posX; final double[] array3 = motion; final int n4 = 1; array3[n4] += mc.thePlayer.posZ; final double diffX = Math.abs(realPos[0] - motion[0]); final double diffZ = Math.abs(realPos[1] - motion[1]); final double d0 = diffX * diffX + diffZ * diffZ; if (d0 < distance) { distance = d0; floats = flo; } } return new float[] { floats[1], floats[0] }; }