1
0
Fork 0
MinestomGameJam/src/main/java/dev/celestialfox/spectrumsurvival/utils/classes/NPC.java
Andus 90ddb82640 Added:
- SnowballProjectile
 - ZombieCreature
 - About (us/game) command
 - Credits command
 - Stop command
 - Terminal
All Color phases are now working
2024-08-13 17:51:38 +02:00

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);
}
}