mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-23 06:50:25 +01:00
Send absolute position the first time an entity is seen
This commit is contained in:
parent
58a75fef88
commit
579868e0c1
1 changed files with 88 additions and 0 deletions
|
@ -0,0 +1,88 @@
|
|||
From 9cb32ededdc1ae3b2d844daabab50b0e844a96ce Mon Sep 17 00:00:00 2001
|
||||
From: Jedediah Smith <jedediah@silencegreys.com>
|
||||
Date: Fri, 3 Apr 2015 17:26:21 -0400
|
||||
Subject: [PATCH] Send absolute position the first time an entity is seen
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
|
||||
index f0149bf..b77de55 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityTrackerEntry.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityTrackerEntry.java
|
||||
@@ -40,6 +40,7 @@ public class EntityTrackerEntry {
|
||||
private boolean y;
|
||||
public boolean n;
|
||||
public Set<EntityPlayer> trackedPlayers = Sets.newHashSet();
|
||||
+ public Set<EntityPlayer> freshViewers = Sets.newHashSet(); // PaperSpigot
|
||||
|
||||
public EntityTrackerEntry(Entity entity, int i, int j, boolean flag) {
|
||||
this.tracker = entity;
|
||||
@@ -121,20 +122,20 @@ public class EntityTrackerEntry {
|
||||
boolean flag = Math.abs(j1) >= 4 || Math.abs(k1) >= 4 || Math.abs(l1) >= 4 || this.m % 60 == 0;
|
||||
boolean flag1 = Math.abs(l - this.yRot) >= 4 || Math.abs(i1 - this.xRot) >= 4;
|
||||
|
||||
- // CraftBukkit start - Code moved from below
|
||||
- if (flag) {
|
||||
- this.xLoc = i;
|
||||
- this.yLoc = j;
|
||||
- this.zLoc = k;
|
||||
- }
|
||||
+ if (this.m > 0 || this.tracker instanceof EntityArrow) { // PaperSpigot - Move up
|
||||
+ // CraftBukkit start - Code moved from below
|
||||
+ if (flag) {
|
||||
+ this.xLoc = i;
|
||||
+ this.yLoc = j;
|
||||
+ this.zLoc = k;
|
||||
+ }
|
||||
|
||||
- if (flag1) {
|
||||
- this.yRot = l;
|
||||
- this.xRot = i1;
|
||||
- }
|
||||
- // CraftBukkit end
|
||||
+ if (flag1) {
|
||||
+ this.yRot = l;
|
||||
+ this.xRot = i1;
|
||||
+ }
|
||||
+ // CraftBukkit end
|
||||
|
||||
- if (this.m > 0 || this.tracker instanceof EntityArrow) {
|
||||
if (j1 >= -128 && j1 < 128 && k1 >= -128 && k1 < 128 && l1 >= -128 && l1 < 128 && this.v <= 400 && !this.x && this.y == this.tracker.onGround) {
|
||||
if ((!flag || !flag1) && !(this.tracker instanceof EntityArrow)) {
|
||||
if (flag) {
|
||||
@@ -173,7 +174,24 @@ public class EntityTrackerEntry {
|
||||
}
|
||||
|
||||
if (object != null) {
|
||||
- this.broadcast((Packet) object);
|
||||
+ // PaperSpigot start - ensure fresh viewers get an absolute position on their first update,
|
||||
+ // since we can't be certain what position they received in the spawn packet.
|
||||
+ if (object instanceof PacketPlayOutEntityTeleport) {
|
||||
+ this.broadcast((Packet) object);
|
||||
+ } else {
|
||||
+ PacketPlayOutEntityTeleport teleportPacket = new PacketPlayOutEntityTeleport(this.tracker.getId(), i, j, k, (byte) l, (byte) i1, this.tracker.onGround);
|
||||
+
|
||||
+ for (EntityPlayer viewer : (Set<EntityPlayer>) this.trackedPlayers) {
|
||||
+ if (this.freshViewers.contains(viewer)) {
|
||||
+ viewer.playerConnection.sendPacket(teleportPacket);
|
||||
+ } else {
|
||||
+ viewer.playerConnection.sendPacket((Packet) object);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ this.freshViewers.clear();
|
||||
+ // PaperSpigot end
|
||||
}
|
||||
|
||||
this.b();
|
||||
@@ -324,6 +342,7 @@ public class EntityTrackerEntry {
|
||||
|
||||
entityplayer.removeQueue.remove(Integer.valueOf(this.tracker.getId()));
|
||||
// CraftBukkit end
|
||||
+ this.freshViewers.add(entityplayer); // PaperSpigot
|
||||
this.trackedPlayers.add(entityplayer);
|
||||
Packet packet = this.c();
|
||||
|
||||
--
|
||||
1.9.5.msysgit.1
|
||||
|
Loading…
Reference in a new issue