-
-
Notifications
You must be signed in to change notification settings - Fork 295
/
PlayerlistTrackerEntry.java
139 lines (123 loc) · 4.5 KB
/
PlayerlistTrackerEntry.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package net.citizensnpcs.nms.v1_13_R2.util;
import java.lang.reflect.Field;
import org.bukkit.entity.Player;
import net.citizensnpcs.nms.v1_13_R2.entity.EntityHumanNPC;
import net.citizensnpcs.npc.skin.SkinnableEntity;
import net.citizensnpcs.util.NMS;
import net.minecraft.server.v1_13_R2.Entity;
import net.minecraft.server.v1_13_R2.EntityPlayer;
import net.minecraft.server.v1_13_R2.EntityTrackerEntry;
public class PlayerlistTrackerEntry extends EntityTrackerEntry {
public PlayerlistTrackerEntry(Entity entity, int i, int j, int k, boolean flag) {
super(entity, i, j, k, flag);
}
public PlayerlistTrackerEntry(EntityTrackerEntry entry) {
this(getTracker(entry), getE(entry), getF(entry), getG(entry), getU(entry));
}
@Override
public void updatePlayer(final EntityPlayer entityplayer) {
// prevent updates to NPC "viewers"
if (entityplayer instanceof EntityHumanNPC)
return;
Entity tracker = getTracker(this);
if (entityplayer != tracker && c(entityplayer)) {
if (!this.trackedPlayers.contains(entityplayer)
&& ((entityplayer.getWorldServer().getPlayerChunkMap().a(entityplayer, getChunkX(tracker), getChunkZ(tracker)))
|| (tracker.attachedToPlayer))) {
if ((tracker instanceof SkinnableEntity)) {
SkinnableEntity skinnable = (SkinnableEntity) tracker;
Player player = skinnable.getBukkitEntity();
if (!entityplayer.getBukkitEntity().canSee(player))
return;
skinnable.getSkinTracker().updateViewer(entityplayer.getBukkitEntity());
}
}
}
super.updatePlayer(entityplayer);
}
private static int getE(EntityTrackerEntry entry) {
try {
return (Integer) E.get(entry);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return 0;
}
private static int getF(EntityTrackerEntry entry) {
try {
return (Integer) F.get(entry);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return 0;
}
private static int getG(EntityTrackerEntry entry) {
try {
return (Integer) G.get(entry);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return 0;
}
private static Entity getTracker(EntityTrackerEntry entry) {
try {
return (Entity) TRACKER.get(entry);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
private static boolean getU(EntityTrackerEntry entry) {
try {
return (Boolean) U.get(entry);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return false;
}
private static int getChunkX(Entity tracker) {
try {
return tracker.chunkX;
}
catch (NoSuchFieldError ex) {
try {
return CHUNK_X.getInt(tracker);
}
catch (Exception ex2) {
ex2.printStackTrace();
return 0;
}
}
}
private static int getChunkZ(Entity tracker) {
try {
return tracker.chunkZ;
}
catch (NoSuchFieldError ex) {
try {
return CHUNK_Z.getInt(tracker);
}
catch (Exception ex2) {
ex2.printStackTrace();
return 0;
}
}
}
private static Field CHUNK_X = NMS.getField(Entity.class, "ae", false);
private static Field CHUNK_Z = NMS.getField(Entity.class, "ag", false);
private static Field E = NMS.getField(EntityTrackerEntry.class, "e");
private static Field F = NMS.getField(EntityTrackerEntry.class, "f");
private static Field G = NMS.getField(EntityTrackerEntry.class, "g");
private static Field TRACKER = NMS.getField(EntityTrackerEntry.class, "tracker");
private static Field U = NMS.getField(EntityTrackerEntry.class, "u");
}