Simple nametag library for Minestom using text displays, handling the tracking and mounting for you.
MiniMessage miniMessage = MiniMessage.miniMessage();
GlobalEventHandler globalEventHandler = MinecraftServer.getGlobalEventHandler();
TeamManager teamManager = MinecraftServer.getTeamManager();
Team nameTagTeam = new TeamBuilder("name-tags", teamManager)
.collisionRule(TeamsPacket.CollisionRule.NEVER)
.build();
NameTagManager nameTagManager = new NameTagManager(globalEventHandler, entity -> nameTagTeam);
globalEventHandler.addListener(PlayerSpawnEvent.class, event -> {
Player player = event.getPlayer();
NameTag playerNameTag = nameTagManager.createNameTag(player);
playerNameTag.setText(miniMessage.deserialize("<red><b>OWNER</b> " + player.getUsername()));
playerNameTag.addViewer(player); // add viewer to see own nametag, otherwise leave this out
playerNameTag.mount(); // initial mount, required since we just added player as viewer otherwise nametag will appear stagnant for this player
});repositories {
..
maven {
url = "https://maven.hapily.me/releases"
}
}dependencies {
..
implementation("com.github.echolightmc:MSNameTags:1.8-SNAPSHOT") {
exclude group: "net.minestom", module: "minestom"
}
}When using Player#setSkin, you need to manually update the passengers (NameTags) list.
Due to a bug in the current Minestom implementation, passengers may get unmounted from the player after changing the skin.
This issue occurs on the client of the player whose skin is being updated.
After calling setSkin, resend the SetPassengersPacket to reattach passengers on the client.
player.setSkin(skin);
player.sendPacket(new SetPassengersPacket(
player.getEntityId(),
player.getPassengers().stream()
.map(Entity::getEntityId)
.toList()
));