Skip to content

Instantly share code, notes, and snippets.

@mworzala
Last active April 6, 2025 17:33
Show Gist options
  • Save mworzala/2c5da51204c45c70db771d0ce7fe9412 to your computer and use it in GitHub Desktop.
Save mworzala/2c5da51204c45c70db771d0ce7fe9412 to your computer and use it in GitHub Desktop.
package dev.hollowcube.replay.playback;
import net.minestom.server.entity.*;
import net.minestom.server.network.packet.server.play.EntityMetaDataPacket;
import net.minestom.server.network.packet.server.play.PlayerInfoRemovePacket;
import net.minestom.server.network.packet.server.play.PlayerInfoUpdatePacket;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Map;
@SuppressWarnings("UnstableApiUsage")
public class PlaybackPlayer extends Entity {
private final String username;
private final String skinTexture;
private final String skinSignature;
public PlaybackPlayer(@NotNull String username, @Nullable String skinTexture, @Nullable String skinSignature) {
super(EntityType.PLAYER);
this.username = username;
this.skinTexture = skinTexture;
this.skinSignature = skinSignature;
setNoGravity(true);
}
@Override
public void updateNewViewer(@NotNull Player player) {
var properties = new ArrayList<PlayerInfoUpdatePacket.Property>();
if (skinTexture != null && skinSignature != null) {
properties.add(new PlayerInfoUpdatePacket.Property("textures", skinTexture, skinSignature));
}
var entry = new PlayerInfoUpdatePacket.Entry(getUuid(), username, properties, false,
0, GameMode.SURVIVAL, null, null);
player.sendPacket(new PlayerInfoUpdatePacket(PlayerInfoUpdatePacket.Action.ADD_PLAYER, entry));
// Spawn the player entity
super.updateNewViewer(player);
// Enable skin layers
player.sendPackets(new EntityMetaDataPacket(getEntityId(), Map.of(17, Metadata.Byte((byte) 127))));
}
@Override
public void updateOldViewer(@NotNull Player player) {
super.updateOldViewer(player);
player.sendPacket(new PlayerInfoRemovePacket(getUuid()));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment