summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/minecraft/server/EntityTrackerEntry.java
diff options
context:
space:
mode:
authorTravis Watkins <amaranth@ubuntu.com>2013-04-11 18:10:24 -0500
committerWesley Wolfe <weswolf@aol.com>2013-04-13 00:30:30 -0500
commit159d614a3a7a56818b561f79ec2c0b1eb00440a0 (patch)
tree3cf4a63e6c8115a4dc603e27214279047d896d41 /src/main/java/net/minecraft/server/EntityTrackerEntry.java
parentce5b97ea831816056d759ef707b6f53f396b16c7 (diff)
downloadcraftbukkit-159d614a3a7a56818b561f79ec2c0b1eb00440a0.tar
craftbukkit-159d614a3a7a56818b561f79ec2c0b1eb00440a0.tar.gz
craftbukkit-159d614a3a7a56818b561f79ec2c0b1eb00440a0.tar.lz
craftbukkit-159d614a3a7a56818b561f79ec2c0b1eb00440a0.tar.xz
craftbukkit-159d614a3a7a56818b561f79ec2c0b1eb00440a0.zip
Correct vehicle movement issues. Fixes BUKKIT-2993, BUKKIT-4056
When a player comes into range of an entity in a vehicle they will often be sent the spawn packet for the rider before receiving one for the vehicle. This causes the attachment packet to fail client side because it attempts to attach the rider to a vehicle that doesn't exist on the client. To correct this we account for both possible orderings and send the attachment packet appropriately. Vanilla also sends an new attach packet every 60 ticks even if the vehicle has not changed. As this packet is a toggle this resulting in players teleporting around randomly. Since we handle attachments properly now we simply revert this section to use the 1.4 logic.
Diffstat (limited to 'src/main/java/net/minecraft/server/EntityTrackerEntry.java')
-rw-r--r--src/main/java/net/minecraft/server/EntityTrackerEntry.java8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
index 4871bd73..65cc4e84 100644
--- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java
+++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
@@ -68,7 +68,7 @@ public class EntityTrackerEntry {
this.scanPlayers(list);
}
- if (this.v != this.tracker.vehicle || this.tracker.vehicle != null && this.m % 60 == 0) {
+ if (this.v != this.tracker.vehicle /* || this.tracker.vehicle != null && this.m % 60 == 0 */) { // CraftBukkit - Revert to 1.4 logic, this packet is a toggle
this.v = this.tracker.vehicle;
this.broadcast(new Packet39AttachEntity(this.tracker, this.tracker.vehicle));
}
@@ -318,9 +318,13 @@ public class EntityTrackerEntry {
entityplayer.playerConnection.sendPacket(new Packet28EntityVelocity(this.tracker.id, this.tracker.motX, this.tracker.motY, this.tracker.motZ));
}
- if (this.tracker.vehicle != null) {
+ // CraftBukkit start
+ if (this.tracker.vehicle != null && this.tracker.id > this.tracker.vehicle.id) {
entityplayer.playerConnection.sendPacket(new Packet39AttachEntity(this.tracker, this.tracker.vehicle));
+ } else if (this.tracker.passenger != null && this.tracker.id > this.tracker.passenger.id) {
+ entityplayer.playerConnection.sendPacket(new Packet39AttachEntity(this.tracker.passenger, this.tracker));
}
+ // CraftBukkit end
if (this.tracker instanceof EntityLiving) {
for (int i = 0; i < 5; ++i) {