Skip to content

Commit f98bcfe

Browse files
committed
Fix bug
1 parent a7248a2 commit f98bcfe

3 files changed

Lines changed: 102 additions & 34 deletions

File tree

spaceNPC/src/main/java/me/tofaa/entitylib/npc/NPC.java

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import com.github.retrooper.packetevents.wrapper.PacketWrapper;
1818
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerEntityHeadLook;
19+
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerPlayerInfo;
1920
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerPlayerInfoRemove;
2021
import io.github.retrooper.packetevents.util.viaversion.ViaVersionAccessor;
2122
import io.github.retrooper.packetevents.util.viaversion.ViaVersionUtil;
@@ -230,6 +231,9 @@ public void spawn(@NotNull Location location) {
230231
for (Player player : Bukkit.getOnlinePlayers()) {
231232
if (player.getWorld() != npcWorld) continue;
232233
entity.addViewer(player.getUniqueId());
234+
if (entity instanceof me.tofaa.entitylib.wrapper.WrapperPlayer) {
235+
doStupidDogshitForOldClients(player);
236+
}
233237
}
234238

235239
if (options.isSitting()) {
@@ -285,13 +289,22 @@ public void despawn() {
285289
hologram = null;
286290
}
287291

292+
if (entity != null) {
293+
for (UUID viewerId : entity.getViewers()) {
294+
org.bukkit.entity.Player player = org.bukkit.Bukkit.getPlayer(viewerId);
295+
if (player != null && entity instanceof me.tofaa.entitylib.wrapper.WrapperPlayer) {
296+
doStupidDogshitForOldClients(player);
297+
}
298+
}
299+
entity.remove();
300+
entity = null;
301+
}
302+
288303
if (sittingEntity != null) {
289304
sittingEntity.remove();
290305
sittingEntity = null;
291306
}
292307

293-
entity.remove();
294-
entity = null;
295308
spawned = false;
296309
}
297310

@@ -356,6 +369,11 @@ private void updateHologram() {
356369
}
357370
}
358371

372+
/**
373+
* Very important, fixes legacy garbage clients from
374+
* Seeing the npc name in tab
375+
* @param player
376+
*/
359377
public void doStupidDogshitForOldClients(
360378
Player player
361379
) {
@@ -365,11 +383,23 @@ public void doStupidDogshitForOldClients(
365383
if (!checkIfStupidDogshitPlayerIsOldClient(player ) || !getEntity().isPresent()) {
366384
return;
367385
}
368-
WrapperPlayServerPlayerInfoRemove packet = new WrapperPlayServerPlayerInfoRemove(
369-
getEntity().get().getUuid()
386+
WrapperPlayer p = (WrapperPlayer) getEntity().get();
387+
388+
PacketWrapper<?> packet = new WrapperPlayServerPlayerInfo(
389+
WrapperPlayServerPlayerInfo.Action.REMOVE_PLAYER,
390+
new WrapperPlayServerPlayerInfo.PlayerData(
391+
p.getDisplayName(),
392+
new UserProfile(p.getUuid(), p.getUsername()),
393+
p.getGameMode(),
394+
null, 0
395+
)
370396
);
371-
user.sendPacket(packet);
372-
}, 20);
397+
// packet = new WrapperPlayServerPlayerInfoRemove(
398+
// getEntity().get().getUuid()
399+
// );
400+
// user.sendPacket(packet);
401+
sendPacketSilentlySkipTranslation(user, packet);
402+
}, 5);
373403

374404
}
375405

@@ -406,7 +436,7 @@ public static void sendPacketSilentlySkipTranslation(User user, PacketWrapper<?>
406436
public void updateHeadRotationForViewers(Location npcLocation) {
407437
if (entity == null || !spawned) return;
408438

409-
PacketEventsAPI<?> api = me.tofaa.entitylib.EntityLib.getApi().getPacketEvents();
439+
PacketEventsAPI<?> api = EntityLib.getApi().getPacketEvents();
410440

411441
for (UUID viewerId : entity.getViewers()) {
412442
org.bukkit.entity.Player player = org.bukkit.Bukkit.getPlayer(

spaceNPC/src/main/java/me/tofaa/entitylib/npc/NPCMovement.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ private static void processViewerSync() {
9999

100100
boolean permanentlyVisible = npc.getOptions().isPermanentlyVisible();
101101
double viewDistance = npc.getOptions().getViewDistance();
102+
boolean isSitting = npc.getSittingEntity().isPresent();
102103

103104
for (org.bukkit.entity.Player player : org.bukkit.Bukkit.getOnlinePlayers()) {
104105
if (player.getWorld() != npcWorld) continue;
@@ -108,10 +109,19 @@ private static void processViewerSync() {
108109
boolean shouldSee = permanentlyVisible || isPlayerInRange(player, npcLocation, viewDistance);
109110

110111
if (shouldSee && !isViewer) {
112+
if (isSitting) {
113+
npc.getSittingEntity().ifPresent(sitting -> sitting.addViewer(playerId));
114+
}
111115
entity.addViewer(playerId);
112116
npc.getHologram().ifPresent(h -> h.addViewer(playerId));
117+
if (entity instanceof me.tofaa.entitylib.wrapper.WrapperPlayer) {
118+
npc.doStupidDogshitForOldClients(player);
119+
}
113120
} else if (!shouldSee && isViewer) {
114121
entity.removeViewer(playerId);
122+
if (isSitting) {
123+
npc.getSittingEntity().ifPresent(sitting -> sitting.removeViewer(playerId));
124+
}
115125
npc.getHologram().ifPresent(h -> h.removeViewer(playerId));
116126
}
117127
}

spaceNPC/src/main/java/me/tofaa/entitylib/npc/NPCPlayerListener.java

Lines changed: 55 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerPlayerInfo;
88
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerPlayerInfoRemove;
99
import me.tofaa.entitylib.wrapper.WrapperEntity;
10+
import me.tofaa.entitylib.wrapper.WrapperPlayer;
1011
import org.bukkit.World;
1112
import org.bukkit.entity.Player;
1213
import org.bukkit.event.EventHandler;
@@ -36,15 +37,22 @@ public void onPlayerJoin(PlayerJoinEvent event) {
3637
Location npcLoc = npc.getPosition();
3738
if (viewDistance > 0 && !isPlayerInRange(playerLoc, npcLoc, viewDistance)) continue;
3839

39-
npc.getEntity().get().addViewer(playerId);
40+
boolean isSitting = npc.getSittingEntity().isPresent();
4041

41-
npc.getSittingEntity().ifPresent(sitting -> sitting.addViewer(playerId));
42+
if (isSitting) {
43+
npc.getSittingEntity().ifPresent(sitting -> sitting.addViewer(playerId));
44+
}
45+
46+
npc.getEntity().ifPresent(entity -> {
47+
entity.addViewer(playerId);
48+
if (entity instanceof me.tofaa.entitylib.wrapper.WrapperPlayer) {
49+
npc.doStupidDogshitForOldClients(player);
50+
}
51+
});
4252

4353
if (npc.getHologram().isPresent()) {
4454
npc.getHologram().get().addViewer(playerId);
4555
}
46-
47-
npc.doStupidDogshitForOldClients(player);
4856
}
4957
}
5058

@@ -56,10 +64,10 @@ public void onPlayerQuit(PlayerQuitEvent event) {
5664
for (NPC npc : NPCRegistry.getAll()) {
5765
if (!npc.isSpawned() || !npc.getEntity().isPresent()) continue;
5866

59-
npc.getEntity().get().removeViewer(playerId);
60-
6167
npc.getSittingEntity().ifPresent(sitting -> sitting.removeViewer(playerId));
6268

69+
npc.getEntity().ifPresent(entity -> entity.removeViewer(playerId));
70+
6371
if (npc.getHologram().isPresent()) {
6472
npc.getHologram().get().removeViewer(playerId);
6573
}
@@ -85,29 +93,49 @@ public void onPlayerTeleport(PlayerTeleportEvent event) {
8593
Location npcLoc = npc.getPosition();
8694
boolean inRange = viewDistance <= 0 || isPlayerInRange(playerLoc, npcLoc, viewDistance);
8795

88-
npc.getEntity().ifPresent(entity -> {
89-
if (inRange) {
90-
if (!entity.getViewers().contains(playerId)) {
91-
entity.addViewer(playerId);
96+
boolean isSitting = npc.getSittingEntity().isPresent();
97+
98+
if (isSitting) {
99+
npc.getSittingEntity().ifPresent(sitting -> {
100+
if (inRange) {
101+
if (!sitting.getViewers().contains(playerId)) {
102+
sitting.addViewer(playerId);
103+
}
104+
npc.getEntity().ifPresent(entity -> {
105+
if (!entity.getViewers().contains(playerId)) {
106+
entity.addViewer(playerId);
107+
}
108+
if (entity instanceof me.tofaa.entitylib.wrapper.WrapperPlayer) {
109+
npc.doStupidDogshitForOldClients(player);
110+
}
111+
});
112+
} else {
113+
if (sitting.getViewers().contains(playerId)) {
114+
sitting.removeViewer(playerId);
115+
}
116+
npc.getEntity().ifPresent(entity -> {
117+
if (entity.getViewers().contains(playerId)) {
118+
entity.removeViewer(playerId);
119+
}
120+
});
92121
}
93-
} else {
94-
if (entity.getViewers().contains(playerId)) {
95-
entity.removeViewer(playerId);
122+
});
123+
} else {
124+
npc.getEntity().ifPresent(entity -> {
125+
if (inRange) {
126+
if (!entity.getViewers().contains(playerId)) {
127+
entity.addViewer(playerId);
128+
}
129+
if (entity instanceof me.tofaa.entitylib.wrapper.WrapperPlayer) {
130+
npc.doStupidDogshitForOldClients(player);
131+
}
132+
} else {
133+
if (entity.getViewers().contains(playerId)) {
134+
entity.removeViewer(playerId);
135+
}
96136
}
97-
}
98-
});
99-
100-
npc.getSittingEntity().ifPresent(sitting -> {
101-
if (inRange) {
102-
if (!sitting.getViewers().contains(playerId)) {
103-
sitting.addViewer(playerId);
104-
}
105-
} else {
106-
if (sitting.getViewers().contains(playerId)) {
107-
sitting.removeViewer(playerId);
108-
}
109-
}
110-
});
137+
});
138+
}
111139

112140
npc.getHologram().ifPresent(hologram -> {
113141
if (inRange) {

0 commit comments

Comments
 (0)