summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/minecraft/server/NetServerHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/minecraft/server/NetServerHandler.java')
-rw-r--r--src/main/java/net/minecraft/server/NetServerHandler.java35
1 files changed, 22 insertions, 13 deletions
diff --git a/src/main/java/net/minecraft/server/NetServerHandler.java b/src/main/java/net/minecraft/server/NetServerHandler.java
index 43b45647..6a454895 100644
--- a/src/main/java/net/minecraft/server/NetServerHandler.java
+++ b/src/main/java/net/minecraft/server/NetServerHandler.java
@@ -69,6 +69,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
private double lastPosZ = Double.MAX_VALUE;
private float lastPitch = Float.MAX_VALUE;
private float lastYaw = Float.MAX_VALUE;
+ private boolean justTeleported = false;
// For the packet15 hack :(
Long lastPacket;
@@ -138,7 +139,7 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
// CraftBukkit start
Player player = this.getPlayer();
- Location from = player.getLocation().clone(); // Get the Players current location.
+ Location from = new Location(player.getWorld(), lastPosX, lastPosY, lastPosZ, lastYaw, lastPitch); // Get the Players previous Event location.
Location to = player.getLocation().clone(); // Start off the To location as the Players current location.
// If the packet contains movement information then we update the To location with the correct XYZ.
@@ -155,12 +156,18 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
}
// Prevent 40 event-calls for less than a single pixel of movement >.>
- double delta = Math.pow(this.lastPosX - this.x, 2) + Math.pow(this.lastPosY - this.y, 2) + Math.pow(this.lastPosZ - this.z, 2);
- float deltaAngle = Math.abs(this.lastYaw - this.player.yaw) + Math.abs(this.lastPitch - this.player.pitch);
+ double delta = Math.pow(this.lastPosX - to.getX(), 2) + Math.pow(this.lastPosY - to.getY(), 2) + Math.pow(this.lastPosZ - to.getZ(), 2);
+ float deltaAngle = Math.abs(this.lastYaw - to.getYaw()) + Math.abs(this.lastPitch - to.getPitch());
+
+ if ((delta > 1f / 256 || deltaAngle > 10f) && (this.checkMovement && !this.player.dead)) {
+ this.lastPosX = to.getX();
+ this.lastPosY = to.getY();
+ this.lastPosZ = to.getZ();
+ this.lastYaw = to.getYaw();
+ this.lastPitch = to.getPitch();
- if (delta > 1f / 256 || deltaAngle > 10f) {
// Skip the first time we do this
- if (this.lastPosX != Double.MAX_VALUE) {
+ if (from.getX() != Double.MAX_VALUE) {
PlayerMoveEvent event = new PlayerMoveEvent(player, from, to);
this.server.getPluginManager().callEvent(event);
@@ -174,22 +181,17 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
there to avoid any 'Moved wrongly' or 'Moved too quickly' errors.
We only do this if the Event was not cancelled. */
if (!to.equals(event.getTo()) && !event.isCancelled()) {
- ((CraftPlayer) this.player.getBukkitEntity()).teleport(event.getTo());
+ this.player.getBukkitEntity().teleport(event.getTo());
return;
}
/* Check to see if the Players Location has some how changed during the call of the event.
This can happen due to a plugin teleporting the player instead of using .setTo() */
- if(!from.equals(this.getPlayer().getLocation())){
+ if (!from.equals(this.getPlayer().getLocation()) && this.justTeleported) {
+ this.justTeleported = false;
return;
}
}
-
- this.lastPosX = this.player.locX;
- this.lastPosY = this.player.locY;
- this.lastPosZ = this.player.locZ;
- this.lastYaw = this.player.yaw;
- this.lastPitch = this.player.pitch;
}
if (Double.isNaN(packet10flying.x) || Double.isNaN(packet10flying.y) || Double.isNaN(packet10flying.z) || Double.isNaN(packet10flying.stance)) {
@@ -398,6 +400,13 @@ public class NetServerHandler extends NetHandler implements ICommandListener {
if (Float.isNaN(f1)) {
f1 = 0;
}
+
+ this.lastPosX = d0;
+ this.lastPosY = d1;
+ this.lastPosZ = d2;
+ this.lastYaw = f;
+ this.lastPitch = f1;
+ this.justTeleported = true;
// CraftBukkit end
this.checkMovement = false;