Skip to content

Commit

Permalink
Force sync passengers
Browse files Browse the repository at this point in the history
  • Loading branch information
Owen1212055 committed Jun 27, 2023
1 parent fc909f0 commit 071e91c
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 2 deletions.
19 changes: 19 additions & 0 deletions src/main/java/com/owen1212055/customname/CustomName.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

Expand All @@ -32,6 +34,8 @@ public class CustomName {
private Component name;
private boolean hidden;

private final BukkitTask task;

CustomName(Entity entity) {
this.nametagEntityId = Bukkit.getUnsafe().nextEntityId();
this.targetEntity = entity;
Expand All @@ -45,6 +49,18 @@ public class CustomName {
// Add the actual offset of the nametag
this.effectiveHeight = -ridingOffset - 0.5 + nametagOffset;
this.passengerOffset = ridingOffset;

this.task = new BukkitRunnable() {

private final Packet<ClientGamePacketListener> packet = interaction.getRiderPacket();

@Override
public void run() {
for (Player player : entity.getTrackedPlayers()) {
((CraftPlayer) player).getHandle().connection.send(packet);
}
}
}.runTaskTimer(CustomNamePlugin.getProvidingPlugin(CustomNamePlugin.class), 20, 20);
}

public void setName(Component name) {
Expand Down Expand Up @@ -123,4 +139,7 @@ private void runOnTrackers(Consumer<Player> consumer) {
}
}

public void close() {
this.task.cancel();
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.owen1212055.customname;

import com.owen1212055.customname.listener.EntityPassengerListener;
import com.owen1212055.customname.listener.PlayerQuitListener;
import com.owen1212055.customname.listener.PlayerSneakListener;
import com.owen1212055.customname.listener.PlayerTrackerListener;
import org.bukkit.Bukkit;
Expand All @@ -16,6 +17,7 @@ public void registerListeners(JavaPlugin plugin) {
Bukkit.getPluginManager().registerEvents(new PlayerTrackerListener(this.storage), plugin);
Bukkit.getPluginManager().registerEvents(new PlayerSneakListener(this.storage), plugin);
Bukkit.getPluginManager().registerEvents(new EntityPassengerListener(this.storage, plugin), plugin);
Bukkit.getPluginManager().registerEvents(new PlayerQuitListener(plugin, this.storage), plugin);
}

public CustomName forEntity(Entity entity) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,11 @@ public CustomName getCustomPlayerName(UUID uuid) {
public void registerNew(UUID entityId, CustomName name) {
this.customPlayerNameMap.put(entityId, name);
}

public void remove(UUID uuid) {
CustomName name = this.customPlayerNameMap.remove(uuid);
if (name != null) {
name.close();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.owen1212055.customname.listener;

import com.owen1212055.customname.CustomNameStorage;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;

public class PlayerQuitListener implements Listener {

private final JavaPlugin plugin;
private final CustomNameStorage nameStorage;

public PlayerQuitListener(JavaPlugin plugin, CustomNameStorage nameStorage) {
this.plugin = plugin;
this.nameStorage = nameStorage;
}

@EventHandler
public void playerQuit(PlayerQuitEvent event) {
new BukkitRunnable() {

@Override
public void run() {
nameStorage.remove(event.getPlayer().getUniqueId()); // Be safe, remove long enough so the entity is removed
}
}.runTaskLater(this.plugin, 5);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,17 @@ public Packet<ClientGamePacketListener> syncDataPacket() {
return new ClientboundSetEntityDataPacket(this.customName.getNametagId(), data);
}

public Packet<?> initialSpawnPacket() {
public Packet<ClientGamePacketListener> getRiderPacket() {
FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer());
buf.writeVarInt(this.customName.getTargetEntity().getEntityId());
buf.writeVarIntArray(new int[]{this.customName.getNametagId()});

return new ClientboundSetPassengersPacket(buf);
}

public Packet<?> initialSpawnPacket() {


ClientboundSetEntityDataPacket initialCreatePacket = new ClientboundSetEntityDataPacket(this.customName.getNametagId(), List.of(
ofData(DataAccessors.DATA_WIDTH_ID, 0f),
ofData(DataAccessors.DATA_HEIGHT_ID, (float) this.customName.getEffectiveHeight()),
Expand All @@ -64,7 +70,7 @@ public Packet<?> initialSpawnPacket() {
createPacket(), // Create entity
initialCreatePacket,
syncData,
new ClientboundSetPassengersPacket(buf),
this.getRiderPacket(),
afterCreateData
));
}
Expand Down

0 comments on commit 071e91c

Please sign in to comment.