- SnowballProjectile - ZombieCreature - About (us/game) command - Credits command - Stop command - Terminal All Color phases are now working
70 lines
2.5 KiB
Java
70 lines
2.5 KiB
Java
package dev.celestialfox.spectrumsurvival.utils.classes;
|
|
|
|
import net.kyori.adventure.text.Component;
|
|
import net.minestom.server.entity.*;
|
|
import net.minestom.server.entity.metadata.PlayerMeta;
|
|
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 NPC extends Entity {
|
|
private final String username;
|
|
|
|
private final String skinTexture;
|
|
private final String skinSignature;
|
|
|
|
public NPC(@NotNull String username, @Nullable String skinTexture, @Nullable String skinSignature) {
|
|
super(EntityType.PLAYER);
|
|
this.username = username;
|
|
setCustomName(Component.text(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);
|
|
setSkin();
|
|
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()));
|
|
}
|
|
|
|
public void setSkin() {
|
|
PlayerMeta meta = (PlayerMeta) this.entityMeta;
|
|
|
|
// Nice and pretty second layer
|
|
meta.setNotifyAboutChanges(false);
|
|
meta.setCapeEnabled(true);
|
|
meta.setHatEnabled(true);
|
|
meta.setJacketEnabled(true);
|
|
meta.setLeftLegEnabled(true);
|
|
meta.setRightLegEnabled(true);
|
|
meta.setLeftSleeveEnabled(true);
|
|
meta.setRightSleeveEnabled(true);
|
|
meta.setNotifyAboutChanges(true);
|
|
}
|
|
}
|