NullValkyrie

Minecraft 1.19 multipurpose plugin for spigot servers with a lot of features where most modern servers have.
git clone https://codeberg.org/night0721/NullValkyrie
Log | Files | Refs | README | LICENSE

PerPlayerHologram.java (2063B)


      1 package me.night.nullvalkyrie.entities.holograms;
      2 
      3 import me.night.nullvalkyrie.packets.protocol.PacketPlayOutEntityMetadata;
      4 import me.night.nullvalkyrie.packets.protocol.PacketPlayOutSpawnEntity;
      5 import net.minecraft.network.chat.Component;
      6 import net.minecraft.network.syncher.EntityDataAccessor;
      7 import net.minecraft.network.syncher.EntityDataSerializers;
      8 import net.minecraft.network.syncher.SynchedEntityData;
      9 import net.minecraft.server.level.ServerPlayer;
     10 import net.minecraft.world.entity.decoration.ArmorStand;
     11 import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer;
     12 import org.bukkit.entity.Player;
     13 
     14 import java.util.HashMap;
     15 import java.util.Optional;
     16 
     17 public class PerPlayerHologram {
     18     public static HashMap<Integer, ArmorStand[]> holograms = new HashMap<>();
     19 
     20     public PerPlayerHologram(Player player, String[] lines) {
     21         spawnLine(player, lines);
     22     }
     23 
     24     private void spawnLine(Player player, String[] lines) {
     25         double c = (lines.length) * 0.3 - 0.8;
     26         ArmorStand[] stands = new ArmorStand[lines.length];
     27         for (int i = 0; i < lines.length; i++) {
     28             ServerPlayer p = ((CraftPlayer) player).getHandle();
     29             ArmorStand stand = new ArmorStand(p.getLevel(), player.getLocation().getX(), player.getLocation().getY() + c, player.getLocation().getZ());
     30             stand.setInvisible(true);
     31             new PacketPlayOutSpawnEntity(player, stand);
     32             stands[i] = stand;
     33             SynchedEntityData watcher = stand.getEntityData();
     34             watcher.set(new EntityDataAccessor<>(2, EntityDataSerializers.OPTIONAL_COMPONENT), Optional.of(Component.nullToEmpty(lines[i])));
     35             watcher.set(new EntityDataAccessor<>(3, EntityDataSerializers.BOOLEAN), true);
     36             new PacketPlayOutEntityMetadata(player, stand, watcher);
     37             c -= 0.3;
     38             if (lines.length == i + 1)
     39                 holograms.put(stand.getBukkitEntity().getEntityId(), stands);
     40         }
     41     }
     42 
     43     public static HashMap<Integer, ArmorStand[]> getHolograms() {
     44         return holograms;
     45     }
     46 }