Fix render offset and sync position to server.

remove-fringelands
mckuhei 2 years ago
parent 608a9cd87e
commit bf4fb58368

@ -52,7 +52,7 @@ public class CommandServerTp extends CommandBase
throw new PlayerNotFoundException();
}
var4.serverForThisPlayer.setPlayerLocation(var10.posX, var10.posY, var10.posZ, var10.rotationYaw, var10.rotationPitch);
var4.serverForThisPlayer.setPlayerLocation(var10.posXBig, var10.posY, var10.posZBig, var10.rotationYaw, var10.rotationPitch);
notifyAdmins(par1ICommandSender, "commands.tp.success", new Object[] {var4.getEntityName(), var10.getEntityName()});
}
}

@ -1,5 +1,7 @@
package net.minecraft.src;
import java.math.BigDecimal;
import org.mcmodule.math.BigInteger;
import net.minecraft.client.Minecraft;
@ -7,12 +9,12 @@ import net.minecraft.client.Minecraft;
public class EntityClientPlayerMP extends EntityPlayerSP
{
public NetClientHandler sendQueue;
private double oldPosX;
private BigDecimal oldPosX = BigDecimal.ZERO;
/** Old Minimum Y of the bounding box */
private double oldMinY;
private double oldPosY;
private double oldPosZ;
private BigDecimal oldPosZ = BigDecimal.ZERO;
private float oldRotationYaw;
private float oldRotationPitch;
@ -95,9 +97,11 @@ public class EntityClientPlayerMP extends EntityPlayerSP
this.shouldStopSneaking = var2;
}
double var3 = this.posX - this.oldPosX;
double var3 = this.posXBig.subtract(this.oldPosX).doubleValue();
double var5 = this.boundingBox.minY - this.oldMinY;
double var7 = this.posZ - this.oldPosZ;
double var7 = this.posZBig.subtract(this.oldPosZ).doubleValue();
double var9 = (double)(this.rotationYaw - this.oldRotationYaw);
double var11 = (double)(this.rotationPitch - this.oldRotationPitch);
boolean var13 = var3 * var3 + var5 * var5 + var7 * var7 > 9.0E-4D || this.field_71168_co >= 20;
@ -107,22 +111,22 @@ public class EntityClientPlayerMP extends EntityPlayerSP
{
if (var14)
{
this.sendQueue.addToSendQueue(new Packet11PlayerPosition(this.motionX, -999.0D, -999.0D, this.motionZ, this.onGround));
this.sendQueue.addToSendQueue(new Packet11PlayerPosition(BigDecimal.valueOf(this.motionX), -999.0D, -999.0D, BigDecimal.valueOf(this.motionZ), this.onGround));
}
else
{
this.sendQueue.addToSendQueue(new Packet13PlayerLookMove(this.motionX, -999.0D, -999.0D, this.motionZ, this.rotationYaw, this.rotationPitch, this.onGround));
this.sendQueue.addToSendQueue(new Packet13PlayerLookMove(BigDecimal.valueOf(this.motionX), -999.0D, -999.0D, BigDecimal.valueOf(this.motionZ), this.rotationYaw, this.rotationPitch, this.onGround));
}
var13 = false;
}
else if (var13 && var14)
{
this.sendQueue.addToSendQueue(new Packet13PlayerLookMove(this.posX, this.boundingBox.minY, this.posY, this.posZ, this.rotationYaw, this.rotationPitch, this.onGround));
this.sendQueue.addToSendQueue(new Packet13PlayerLookMove(this.posXBig, this.boundingBox.minY, this.posY, this.posZBig, this.rotationYaw, this.rotationPitch, this.onGround));
}
else if (var13)
{
this.sendQueue.addToSendQueue(new Packet11PlayerPosition(this.posX, this.boundingBox.minY, this.posY, this.posZ, this.onGround));
this.sendQueue.addToSendQueue(new Packet11PlayerPosition(this.posXBig, this.boundingBox.minY, this.posY, this.posZBig, this.onGround));
}
else if (var14)
{
@ -138,10 +142,10 @@ public class EntityClientPlayerMP extends EntityPlayerSP
if (var13)
{
this.oldPosX = this.posX;
this.oldPosX = this.posXBig;
this.oldMinY = this.boundingBox.minY;
this.oldPosY = this.posY;
this.oldPosZ = this.posZ;
this.oldPosZ = this.posZBig;
this.field_71168_co = 0;
}

@ -110,17 +110,18 @@ public abstract class EntityPlayer extends EntityLiving implements ICommandSende
protected float speedOnGround = 0.1F;
protected float speedInAir = 0.02F;
protected BigDecimalAABB boundingBox = BigDecimalAABB.getBoundingBox(0, 0, 0, 0, 0, 0);
protected BigDecimalAABB boundingBox;
/**
* An instance of a fishing rod's hook. If this isn't null, the icon image of the fishing rod is slightly different
*/
public EntityFishHook fishEntity = null;
public BigDecimal posXBig, posZBig;
public BigDecimal posXBig = BigDecimal.ZERO, posZBig = BigDecimal.ZERO;
public EntityPlayer(World par1World)
{
super(par1World);
boundingBox = BigDecimalAABB.getBoundingBox(0, 0, 0, 0, 0, 0);
this.inventorySlots = new ContainerPlayer(this.inventory, !par1World.isRemote);
this.craftingInventory = this.inventorySlots;
this.yOffset = 1.62F;
@ -207,6 +208,7 @@ public abstract class EntityPlayer extends EntityLiving implements ICommandSende
*/
public void onUpdate()
{
// if(!worldObj.isRemote) System.out.println(this.posX);
if (this.itemInUse != null)
{
ItemStack var1 = this.inventory.getCurrentItem();
@ -590,9 +592,29 @@ public abstract class EntityPlayer extends EntityLiving implements ICommandSende
this.boundingBox.setBounds(x - (double)var7, y - (double)this.yOffset + (double)this.ySize, z - (double)var7, x + (double)var7, y - (double)this.yOffset + (double)this.ySize + (double)var8, z + (double)var7);
}
public void setPosition(BigDecimal x, double y, BigDecimal z) {
super.setPosition(x.doubleValue(), y, z.doubleValue());
BigDecimal var7 = BigDecimal.valueOf(this.width / 2.0F);
float var8 = this.height;
if(this.boundingBox == null) this.boundingBox = BigDecimalAABB.getBoundingBox(0, 0, 0, 0, 0, 0);
this.boundingBox.setBounds(x.subtract(var7), y - (double)this.yOffset + (double)this.ySize, z.subtract(var7), x.add(var7), y - (double)this.yOffset + (double)this.ySize + (double)var8, z.add(var7));
}
public void setLocationAndAngles(BigDecimal posX, double posY, BigDecimal posZ, float rotationYaw,
float rotationPitch) {
super.setLocationAndAngles(posX.doubleValue(), posY, posZ.doubleValue(), rotationYaw, rotationPitch);
setPosition(posX, posY, posZ);
}
public void setPositionAndRotation(BigDecimal posX, double posY, BigDecimal posZ, float rotationYaw, float rotationPitch) {
super.setPositionAndRotation(posX.doubleValue(), posY, posZ.doubleValue(), rotationYaw, rotationPitch);
setPosition(posX, posY, posZ);
}
public void moveEntity(double par1, double par3, double par5)
{
super.moveEntity(par1, par3, par5);
super.boundingBox.setBounds(this.boundingBox.minX.doubleValue(), this.boundingBox.minY, this.boundingBox.minZ.doubleValue(), this.boundingBox.maxX.doubleValue(), this.boundingBox.maxY, this.boundingBox.maxZ.doubleValue());
if (this.noClip)
{
this.boundingBox.offset(par1, par3, par5);
@ -837,11 +859,9 @@ public abstract class EntityPlayer extends EntityLiving implements ICommandSende
}
}
// TODO: Fix offset
BigDecimal offset = BigDecimal.valueOf(0.5);
this.posXBig = (this.boundingBox.minX.add(this.boundingBox.maxX)).divide(BigDecimal.valueOf(2)).add(offset);
this.posZBig = (this.boundingBox.minZ.add(this.boundingBox.maxZ)).divide(BigDecimal.valueOf(2)).add(offset);
this.posXBig = (this.boundingBox.minX.add(this.boundingBox.maxX)).divide(BigDecimal.valueOf(2));
this.posZBig = (this.boundingBox.minZ.add(this.boundingBox.maxZ)).divide(BigDecimal.valueOf(2));
this.worldObj.theProfiler.endSection();
}
}

@ -3,6 +3,8 @@ package net.minecraft.src;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import org.mcmodule.math.BigInteger;
import java.util.ArrayList;
import java.util.Iterator;
@ -881,4 +883,5 @@ public class EntityPlayerMP extends EntityPlayer implements ICrafting
String var3 = par1Str + "\u0000" + par2;
this.serverForThisPlayer.sendPacketToPlayer(new Packet250CustomPayload("MC|TPack", var3.getBytes()));
}
}

@ -1,6 +1,8 @@
package net.minecraft.src;
import java.awt.Color;
import java.math.RoundingMode;
import org.mcmodule.math.BigInteger;
import java.util.List;
import java.util.Random;
@ -410,9 +412,9 @@ public class GuiIngame extends Gui
var8.drawStringWithShadow(this.mc.extraDebug, 2, 52, 16777215);
this.drawString(var8, var45, var6 - var8.getStringWidth(var45) - 2, 12, 14737632);
GL11.glTranslated(0, var8.FONT_HEIGHT, 0);
this.drawString(var8, String.format("x: %.5f", new Object[] {Double.valueOf(this.mc.thePlayer.posX)}), 2, 64, 14737632);
this.drawString(var8, String.format("x: %s", mc.thePlayer.posXBig.setScale(5, RoundingMode.CEILING).toPlainString()), 2, 64, 14737632);
this.drawString(var8, String.format("y: %.3f (feet pos, %.3f eyes pos)", new Object[] {Double.valueOf(this.mc.thePlayer.boundingBox.minY), Double.valueOf(this.mc.thePlayer.posY)}), 2, 72, 14737632);
this.drawString(var8, String.format("z: %.5f", new Object[] {Double.valueOf(this.mc.thePlayer.posZ)}), 2, 80, 14737632);
this.drawString(var8, String.format("z: %s", mc.thePlayer.posZBig.setScale(5, RoundingMode.CEILING).toPlainString()), 2, 80, 14737632);
this.drawString(var8, "f: " + (MathHelper.floor_double((double)(this.mc.thePlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3), 2, 88, 14737632);
BigInteger x = MathHelper.floor_double_BigInteger(this.mc.thePlayer.posX);
var22 = MathHelper.floor_double(this.mc.thePlayer.posY);
@ -428,7 +430,7 @@ public class GuiIngame extends Gui
}
this.drawString(var8, String.format("ws: %.3f, fs: %.3f, g: %b", new Object[] {Float.valueOf(this.mc.thePlayer.capabilities.getWalkSpeed()), Float.valueOf(this.mc.thePlayer.capabilities.getFlySpeed()), Boolean.valueOf(this.mc.thePlayer.onGround)}), 2, 104, 14737632);
int maxBit = x.max(z).bitLength();
int maxBit = mc.thePlayer.posXBig.max(mc.thePlayer.posZBig).toBigInteger().bitLength();
double doublePrecision = Math.pow(2, (maxBit - 53)),
floatPrecision = Math.pow(2, (maxBit - 24));

@ -5,6 +5,8 @@ import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import org.mcmodule.math.BigInteger;
import java.net.InetAddress;
import java.net.Socket;
@ -470,9 +472,9 @@ public class NetClientHandler extends NetHandler
public void handleFlying(Packet10Flying par1Packet10Flying)
{
EntityClientPlayerMP var2 = this.mc.thePlayer;
double var3 = var2.posX;
BigDecimal var3 = var2.posXBig;
double var5 = var2.posY;
double var7 = var2.posZ;
BigDecimal var7 = var2.posZBig;
float var9 = var2.rotationYaw;
float var10 = var2.rotationPitch;
@ -492,9 +494,9 @@ public class NetClientHandler extends NetHandler
var2.ySize = 0.0F;
var2.motionX = var2.motionY = var2.motionZ = 0.0D;
var2.setPositionAndRotation(var3, var5, var7, var9, var10);
par1Packet10Flying.xPosition = var2.posX;
par1Packet10Flying.xPosition = var2.posXBig;
par1Packet10Flying.yPosition = var2.boundingBox.minY;
par1Packet10Flying.zPosition = var2.posZ;
par1Packet10Flying.zPosition = var2.posZBig;
par1Packet10Flying.stance = var2.posY;
this.netManager.addToSendQueue(par1Packet10Flying);

@ -3,6 +3,8 @@ package net.minecraft.src;
import java.io.ByteArrayInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.math.BigDecimal;
import org.mcmodule.math.BigInteger;
import java.util.ArrayList;
import java.util.Iterator;
@ -39,13 +41,13 @@ public class NetServerHandler extends NetHandler
private int creativeItemCreationSpamThresholdTally = 0;
/** The last known x position for this connection. */
private double lastPosX;
private BigDecimal lastPosX = BigDecimal.ZERO;
/** The last known y position for this connection. */
private double lastPosY;
/** The last known z position for this connection. */
private double lastPosZ;
private BigDecimal lastPosZ = BigDecimal.ZERO;
private boolean field_72587_r = true;
private IntHashMap field_72586_s = new IntHashMap();
@ -128,7 +130,7 @@ public class NetServerHandler extends NetHandler
{
var3 = par1Packet10Flying.yPosition - this.lastPosY;
if (par1Packet10Flying.xPosition == this.lastPosX && var3 * var3 < 0.01D && par1Packet10Flying.zPosition == this.lastPosZ)
if (par1Packet10Flying.xPosition.compareTo(this.lastPosX) == 0 && var3 * var3 < 0.01D && par1Packet10Flying.zPosition.compareTo(this.lastPosZ) == 0)
{
this.field_72587_r = true;
}
@ -136,9 +138,9 @@ public class NetServerHandler extends NetHandler
if (this.field_72587_r)
{
double var5;
BigDecimal var5;
double var7;
double var9;
BigDecimal var9;
double var13;
if (this.playerEntity.ridingEntity != null)
@ -146,9 +148,9 @@ public class NetServerHandler extends NetHandler
float var34 = this.playerEntity.rotationYaw;
float var4 = this.playerEntity.rotationPitch;
this.playerEntity.ridingEntity.updateRiderPosition();
var5 = this.playerEntity.posX;
var5 = this.playerEntity.posXBig;
var7 = this.playerEntity.posY;
var9 = this.playerEntity.posZ;
var9 = this.playerEntity.posZBig;
double var35 = 0.0D;
var13 = 0.0D;
@ -160,15 +162,15 @@ public class NetServerHandler extends NetHandler
if (par1Packet10Flying.moving && par1Packet10Flying.yPosition == -999.0D && par1Packet10Flying.stance == -999.0D)
{
if (Math.abs(par1Packet10Flying.xPosition) > 1.0D || Math.abs(par1Packet10Flying.zPosition) > 1.0D)
if (par1Packet10Flying.xPosition.abs().compareTo(BigDecimal.ONE) > 0 || par1Packet10Flying.zPosition.abs().compareTo(BigDecimal.ONE) > 0)
{
System.err.println(this.playerEntity.username + " was caught trying to crash the server with an invalid position.");
this.kickPlayerFromServer("Nope!");
return;
}
var35 = par1Packet10Flying.xPosition;
var13 = par1Packet10Flying.zPosition;
var35 = par1Packet10Flying.xPosition.doubleValue();
var13 = par1Packet10Flying.zPosition.doubleValue();
}
this.playerEntity.onGround = par1Packet10Flying.onGround;
@ -189,9 +191,9 @@ public class NetServerHandler extends NetHandler
}
this.mcServer.getConfigurationManager().func_72358_d(this.playerEntity);
this.lastPosX = this.playerEntity.posX;
this.lastPosX = this.playerEntity.posXBig;
this.lastPosY = this.playerEntity.posY;
this.lastPosZ = this.playerEntity.posZ;
this.lastPosZ = this.playerEntity.posZBig;
var2.updateEntity(this.playerEntity);
return;
}
@ -205,12 +207,12 @@ public class NetServerHandler extends NetHandler
}
var3 = this.playerEntity.posY;
this.lastPosX = this.playerEntity.posX;
this.lastPosX = this.playerEntity.posXBig;
this.lastPosY = this.playerEntity.posY;
this.lastPosZ = this.playerEntity.posZ;
var5 = this.playerEntity.posX;
this.lastPosZ = this.playerEntity.posZBig;
var5 = this.playerEntity.posXBig;
var7 = this.playerEntity.posY;
var9 = this.playerEntity.posZ;
var9 = this.playerEntity.posZBig;
float var11 = this.playerEntity.rotationYaw;
float var12 = this.playerEntity.rotationPitch;
@ -255,9 +257,9 @@ public class NetServerHandler extends NetHandler
return;
}
var13 = var5 - this.playerEntity.posX;
var13 = var5.subtract(this.playerEntity.posXBig).doubleValue();
double var15 = var7 - this.playerEntity.posY;
double var17 = var9 - this.playerEntity.posZ;
double var17 = var9.subtract(this.playerEntity.posZBig).doubleValue();
double var19 = Math.min(Math.abs(var13), Math.abs(this.playerEntity.motionX));
double var21 = Math.min(Math.abs(var15), Math.abs(this.playerEntity.motionY));
double var23 = Math.min(Math.abs(var17), Math.abs(this.playerEntity.motionZ));
@ -282,7 +284,7 @@ public class NetServerHandler extends NetHandler
this.playerEntity.onGround = par1Packet10Flying.onGround;
this.playerEntity.addMovementStat(var13, var15, var17);
double var29 = var15;
var13 = var5 - this.playerEntity.posX;
var13 = var5.subtract(this.playerEntity.posXBig).doubleValue();
var15 = var7 - this.playerEntity.posY;
if (var15 > -0.5D || var15 < 0.5D)
@ -290,7 +292,7 @@ public class NetServerHandler extends NetHandler
var15 = 0.0D;
}
var17 = var9 - this.playerEntity.posZ;
var17 = var9.subtract(this.playerEntity.posZBig).doubleValue();
var25 = var13 * var13 + var15 * var15 + var17 * var17;
boolean var31 = false;
@ -337,7 +339,11 @@ public class NetServerHandler extends NetHandler
}
}
public void setPlayerLocation(double par1, double par3, double par5, float par7, float par8)
public void setPlayerLocation(double par1, double par3, double par5, float par7, float par8) {
this.setPlayerLocation(BigDecimal.valueOf(par1), par3, BigDecimal.valueOf(par5), par7, par8);
}
public void setPlayerLocation(BigDecimal par1, double par3, BigDecimal par5, float par7, float par8)
{
this.field_72587_r = false;
this.lastPosX = par1;

@ -4,6 +4,8 @@ import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.IOException;
import java.math.BigDecimal;
import org.mcmodule.math.BigInteger;
import java.util.HashMap;
import java.util.HashSet;
@ -115,12 +117,26 @@ public abstract class Packet
}
}
public static void writeBigDecimal(DataOutputStream out, BigDecimal value) throws IOException {
out.writeInt(value.scale());
byte[] data = value.unscaledValue().toByteArray();
out.writeInt(data.length);
out.write(data);
}
public static void writeBigInteger(DataOutputStream out, BigInteger value) throws IOException {
byte[] data = value.toByteArray();
out.writeInt(data.length);
out.write(data);
}
public static BigDecimal readBigDecimal(DataInputStream in) throws IOException {
int scale = in.readInt();
byte[] data = new byte[in.readInt()];
in.readFully(data);
return new BigDecimal(new java.math.BigInteger(data), scale);
}
public static BigInteger readBigInteger(DataInputStream in) throws IOException {
byte[] data = new byte[in.readInt()];
in.readFully(data);

@ -3,17 +3,18 @@ package net.minecraft.src;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
public class Packet10Flying extends Packet
{
/** The player's X position. */
public double xPosition;
public BigDecimal xPosition = BigDecimal.ZERO;
/** The player's Y position. */
public double yPosition;
/** The player's Z position. */
public double zPosition;
public BigDecimal zPosition = BigDecimal.ZERO;
/** The player's stance. (boundingBox.minY) */
public double stance;

@ -3,6 +3,7 @@ package net.minecraft.src;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
public class Packet11PlayerPosition extends Packet10Flying
{
@ -11,7 +12,7 @@ public class Packet11PlayerPosition extends Packet10Flying
this.moving = true;
}
public Packet11PlayerPosition(double par1, double par3, double par5, double par7, boolean par9)
public Packet11PlayerPosition(BigDecimal par1, double par3, double par5, BigDecimal par7, boolean par9)
{
this.xPosition = par1;
this.yPosition = par3;
@ -26,10 +27,10 @@ public class Packet11PlayerPosition extends Packet10Flying
*/
public void readPacketData(DataInputStream par1DataInputStream) throws IOException
{
this.xPosition = par1DataInputStream.readDouble();
this.xPosition = readBigDecimal(par1DataInputStream);
this.yPosition = par1DataInputStream.readDouble();
this.stance = par1DataInputStream.readDouble();
this.zPosition = par1DataInputStream.readDouble();
this.zPosition = readBigDecimal(par1DataInputStream);
super.readPacketData(par1DataInputStream);
}
@ -38,10 +39,10 @@ public class Packet11PlayerPosition extends Packet10Flying
*/
public void writePacketData(DataOutputStream par1DataOutputStream) throws IOException
{
par1DataOutputStream.writeDouble(this.xPosition);
writeBigDecimal(par1DataOutputStream, xPosition);
par1DataOutputStream.writeDouble(this.yPosition);
par1DataOutputStream.writeDouble(this.stance);
par1DataOutputStream.writeDouble(this.zPosition);
writeBigDecimal(par1DataOutputStream, zPosition);
super.writePacketData(par1DataOutputStream);
}

@ -3,6 +3,7 @@ package net.minecraft.src;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
public class Packet13PlayerLookMove extends Packet10Flying
{
@ -12,7 +13,7 @@ public class Packet13PlayerLookMove extends Packet10Flying
this.moving = true;
}
public Packet13PlayerLookMove(double par1, double par3, double par5, double par7, float par9, float par10, boolean par11)
public Packet13PlayerLookMove(BigDecimal par1, double par3, double par5, BigDecimal par7, float par9, float par10, boolean par11)
{
this.xPosition = par1;
this.yPosition = par3;
@ -30,10 +31,10 @@ public class Packet13PlayerLookMove extends Packet10Flying
*/
public void readPacketData(DataInputStream par1DataInputStream) throws IOException
{
this.xPosition = par1DataInputStream.readDouble();
this.xPosition = readBigDecimal(par1DataInputStream);
this.yPosition = par1DataInputStream.readDouble();
this.stance = par1DataInputStream.readDouble();
this.zPosition = par1DataInputStream.readDouble();
this.zPosition = readBigDecimal(par1DataInputStream);
this.yaw = par1DataInputStream.readFloat();
this.pitch = par1DataInputStream.readFloat();
super.readPacketData(par1DataInputStream);
@ -44,10 +45,10 @@ public class Packet13PlayerLookMove extends Packet10Flying
*/
public void writePacketData(DataOutputStream par1DataOutputStream) throws IOException
{
par1DataOutputStream.writeDouble(this.xPosition);
writeBigDecimal(par1DataOutputStream, xPosition);
par1DataOutputStream.writeDouble(this.yPosition);
par1DataOutputStream.writeDouble(this.stance);
par1DataOutputStream.writeDouble(this.zPosition);
writeBigDecimal(par1DataOutputStream, zPosition);
par1DataOutputStream.writeFloat(this.yaw);
par1DataOutputStream.writeFloat(this.pitch);
super.writePacketData(par1DataOutputStream);

Loading…
Cancel
Save