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] };
}