Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package games.coob.v1_19;
- import games.coob.nmsinterface.HologramRegistry;
- import games.coob.nmsinterface.NMSHologramI;
- import lombok.Getter;
- import net.minecraft.network.protocol.game.ClientboundAddEntityPacket;
- import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket;
- import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket;
- import net.minecraft.server.level.ServerLevel;
- import net.minecraft.world.entity.Entity;
- import net.minecraft.world.entity.decoration.ArmorStand;
- import org.bukkit.Location;
- import org.bukkit.World;
- import org.bukkit.entity.Player;
- import org.bukkit.metadata.FixedMetadataValue;
- import org.mineacademy.fo.Common;
- import org.mineacademy.fo.Messenger;
- import org.mineacademy.fo.ReflectionUtil;
- import org.mineacademy.fo.collection.SerializedMap;
- import org.mineacademy.fo.plugin.SimplePlugin;
- import org.mineacademy.fo.remain.Remain;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import java.util.UUID;
- public class NMSHologram_v1_19 implements NMSHologramI {
- /**
- * The spawned NMS entity
- */
- @Getter
- private ArmorStand entityArmorStand;
- private List<ArmorStand> entityLinesList = new ArrayList<>();
- private List<String> lines;
- public ArmorStand createEntity(final Object nmsWorld, final Location location) {
- entityArmorStand = new ArmorStand((ServerLevel) nmsWorld, location.getX(), location.getY(), location.getZ());
- this.entityArmorStand.valid = true;
- this.entityArmorStand.setInvisible(true);
- return entityArmorStand;
- }
- @Override
- public UUID getUniqueId() {
- return this.entityArmorStand.getBukkitEntity().getUniqueId();
- }
- /**
- * Convenience method to return the location of this Hologram.
- *
- * @return
- */
- @Override
- public Location getLocation() {
- //Valid.checkBoolean(this.isShown(), "Cannot call getLocation when " + this + " is not created");
- return this.entityArmorStand.getBukkitEntity().getLocation();
- }
- @Override
- public void sendPackets(final Player player, final Object nmsArmorStand) {
- final ArmorStand nmsStand = (ArmorStand) nmsArmorStand;
- Remain.sendPacket(player, new ClientboundAddEntityPacket(nmsStand));
- Remain.sendPacket(player, new ClientboundSetEntityDataPacket(nmsStand.getId(), nmsStand.getEntityData().getNonDefaultValues())); // TODO fix error
- player.setMetadata(getUniqueId().toString(), new FixedMetadataValue(SimplePlugin.getInstance(), ""));
- }
- @Override
- public void setLines(final List<String> lines) {
- this.lines = lines;
- }
- public void setEntityList(final List<ArmorStand> armorStandList) {
- this.entityLinesList = armorStandList;
- }
- public void setEntity(final ArmorStand armorStand) {
- this.entityArmorStand = armorStand;
- }
- @Override
- public List<String> getLines() {
- return this.lines;
- }
- @Override
- public void remove(final Player player) {
- for (final ArmorStand armorStand : this.entityLinesList)
- Remain.sendPacket(player, new ClientboundRemoveEntitiesPacket(armorStand.getId()));
- //HologramRegistry_v1_19.getInstance().unregister(this);
- HologramRegistry.removeHologram(this);
- player.removeMetadata(getUniqueId().toString(), SimplePlugin.getInstance());
- }
- @Override
- public void hide(final Player player) {
- for (final ArmorStand armorStand : this.entityLinesList) {
- armorStand.valid = false;
- // armorStand.setRemoved(Entity.RemovalReason.DISCARDED);
- // armorStand.discard();
- armorStand.remove(Entity.RemovalReason.DISCARDED);
- Remain.sendPacket(player, new ClientboundRemoveEntitiesPacket(armorStand.getId()));
- }
- player.removeMetadata(getUniqueId().toString(), SimplePlugin.getInstance());
- }
- @Override
- public void show(final Location location, final Player player, final String... linesOfText) {
- for (final ArmorStand nmsArmorStand : this.entityLinesList) { // TODO
- final String line = nmsArmorStand.getName().getString();
- final org.bukkit.entity.ArmorStand armorStand = ReflectionUtil.invoke("getBukkitEntity", nmsArmorStand);
- nmsArmorStand.valid = true;
- Remain.setCustomName(armorStand, line);
- this.sendPackets(player, nmsArmorStand);
- }
- /*for (int i = 0; i < this.lines.size(); i++) {
- System.out.println("count: " + i);
- final String line = this.lines.get(i);
- final ArmorStand nmsArmorStand = this.entityLinesList.get(i);
- System.out.println("Line: " + line);
- System.out.println("Hologram: " + nmsArmorStand);
- final org.bukkit.entity.ArmorStand armorStand = ReflectionUtil.invoke("getBukkitEntity", nmsArmorStand);
- Remain.setCustomName(armorStand, line);
- this.sendPackets(player, nmsArmorStand);
- }*/
- player.setMetadata(getUniqueId().toString(), new FixedMetadataValue(SimplePlugin.getInstance(), ""));
- }
- @Override
- public boolean isShown() {
- return this.entityArmorStand.valid;
- }
- @Override
- public void createHologram(final String id, Location location, final Player player, final String... linesOfText) {
- if (!this.entityLinesList.isEmpty()) {
- Messenger.error(player, "Hologram cannot be created.");
- return;
- }
- if (HologramRegistry.getHologramIDs().contains(id)) {
- Messenger.error(player, "A hologram named test has already been created.");
- return;
- }
- final World world = location.getWorld();
- if (world == null)
- return;
- final Object nmsWorld = Remain.getHandleWorld(location.getWorld());
- setLines(Arrays.asList(linesOfText));
- for (final String line : linesOfText) {
- final ArmorStand nmsArmorStand = this.createEntity(nmsWorld, location);
- final org.bukkit.entity.ArmorStand armorStand = ReflectionUtil.invoke("getBukkitEntity", nmsArmorStand);
- //armorStand.setVisible(false);
- Remain.setCustomName(armorStand, line);
- this.sendPackets(player, nmsArmorStand);
- location = location.subtract(0, 0.26, 0);
- this.entityLinesList.add(nmsArmorStand);
- }
- player.setMetadata(getUniqueId().toString(), new FixedMetadataValue(SimplePlugin.getInstance(), ""));
- Common.runLater(() -> HologramRegistry.createHologram(id, this));
- }
- @Override
- public SerializedMap serialize() {
- //Valid.checkBoolean(this.isShown(), "Cannot save non-created holograms");
- return SerializedMap.ofArray(
- "Lines", this.lines,
- "Last_Location", this.getLocation());
- }
- public static NMSHologram_v1_19 deserialize(final SerializedMap map) { // TODO
- final List<String> lines = map.getStringList("Lines");
- Location lastLocation = map.getLocation("Last_Location");
- final Object nmsWorld = Remain.getHandleWorld(lastLocation.getWorld());
- final NMSHologram_v1_19 hologram = new NMSHologram_v1_19();
- final List<ArmorStand> armorStandList = new ArrayList<>();
- hologram.setLines(lines);
- hologram.setEntity(hologram.createEntity(nmsWorld, lastLocation));
- for (int i = 0; i < lines.size(); i++) {
- armorStandList.add(hologram.createEntity(nmsWorld, lastLocation));
- lastLocation = lastLocation.subtract(0, 0.26, 0);
- }
- hologram.setEntityList(armorStandList);
- return hologram;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement