/
HideEntity.java
71 lines (64 loc) · 3.37 KB
/
HideEntity.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
package net.aufdemrand.denizen.utilities.entity;
import net.aufdemrand.denizen.objects.dEntity;
import net.minecraft.server.v1_9_R1.EntityPlayer;
import net.minecraft.server.v1_9_R1.EntityTracker;
import net.minecraft.server.v1_9_R1.EntityTrackerEntry;
import net.minecraft.server.v1_9_R1.PacketPlayOutPlayerInfo;
import net.minecraft.server.v1_9_R1.WorldServer;
import org.bukkit.craftbukkit.v1_9_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_9_R1.entity.CraftPlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
public class HideEntity {
public static Map<UUID, Set<UUID>> hiddenEntities = new HashMap<UUID, Set<UUID>>();
public static void hideEntity(Player player, Entity entity, boolean keepInTabList) {
CraftPlayer craftPlayer = (CraftPlayer)player;
EntityPlayer entityPlayer = craftPlayer.getHandle();
UUID playerUUID = player.getUniqueId();
if (entityPlayer.playerConnection != null && !craftPlayer.equals(entity)) {
if (!hiddenEntities.containsKey(playerUUID)) {
hiddenEntities.put(playerUUID, new HashSet<UUID>());
}
Set hidden = hiddenEntities.get(playerUUID);
UUID entityUUID = entity.getUniqueId();
if (!hidden.contains(entityUUID)) {
hidden.add(entityUUID);
EntityTracker tracker = ((WorldServer)craftPlayer.getHandle().world).tracker;
net.minecraft.server.v1_9_R1.Entity other = ((CraftEntity)entity).getHandle();
EntityTrackerEntry entry = tracker.trackedEntities.get(other.getId());
if (entry != null) {
entry.clear(entityPlayer);
}
if (dEntity.isPlayer(entity) && !keepInTabList) {
entityPlayer.playerConnection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, (EntityPlayer) other));
}
}
}
}
public static void showEntity(Player player, Entity entity) {
CraftPlayer craftPlayer = (CraftPlayer)player;
EntityPlayer entityPlayer = craftPlayer.getHandle();
UUID playerUUID = player.getUniqueId();
if (entityPlayer.playerConnection != null && !craftPlayer.equals(entity) && hiddenEntities.containsKey(playerUUID)) {
Set hidden = hiddenEntities.get(playerUUID);
UUID entityUUID = entity.getUniqueId();
if (hidden.contains(entityUUID)) {
hidden.remove(entityUUID);
EntityTracker tracker = ((WorldServer)craftPlayer.getHandle().world).tracker;
net.minecraft.server.v1_9_R1.Entity other = ((CraftEntity)entity).getHandle();
if (dEntity.isPlayer(entity)) {
entityPlayer.playerConnection.sendPacket(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, (EntityPlayer) other));
}
EntityTrackerEntry entry = tracker.trackedEntities.get(other.getId());
if(entry != null && !entry.trackedPlayers.contains(entityPlayer)) {
entry.updatePlayer(entityPlayer);
}
}
}
}
}