Advertisement
JackOUT

Untitled

Jun 4th, 2023
604
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.00 KB | None | 0 0
  1. package games.coob.v1_19;
  2.  
  3. import games.coob.nmsinterface.HologramRegistry;
  4. import games.coob.nmsinterface.NMSHologramI;
  5. import lombok.Getter;
  6. import net.minecraft.network.protocol.game.ClientboundAddEntityPacket;
  7. import net.minecraft.network.protocol.game.ClientboundRemoveEntitiesPacket;
  8. import net.minecraft.network.protocol.game.ClientboundSetEntityDataPacket;
  9. import net.minecraft.server.level.ServerLevel;
  10. import net.minecraft.world.entity.Entity;
  11. import net.minecraft.world.entity.decoration.ArmorStand;
  12. import org.bukkit.Location;
  13. import org.bukkit.World;
  14. import org.bukkit.entity.Player;
  15. import org.bukkit.metadata.FixedMetadataValue;
  16. import org.mineacademy.fo.Common;
  17. import org.mineacademy.fo.Messenger;
  18. import org.mineacademy.fo.ReflectionUtil;
  19. import org.mineacademy.fo.collection.SerializedMap;
  20. import org.mineacademy.fo.plugin.SimplePlugin;
  21. import org.mineacademy.fo.remain.Remain;
  22.  
  23. import java.util.ArrayList;
  24. import java.util.Arrays;
  25. import java.util.List;
  26. import java.util.UUID;
  27.  
  28. public class NMSHologram_v1_19 implements NMSHologramI {
  29.  
  30.     /**
  31.      * The spawned NMS entity
  32.      */
  33.     @Getter
  34.     private ArmorStand entityArmorStand;
  35.  
  36.     private List<ArmorStand> entityLinesList = new ArrayList<>();
  37.  
  38.     private List<String> lines;
  39.  
  40.     public ArmorStand createEntity(final Object nmsWorld, final Location location) {
  41.         entityArmorStand = new ArmorStand((ServerLevel) nmsWorld, location.getX(), location.getY(), location.getZ());
  42.  
  43.         this.entityArmorStand.valid = true;
  44.         this.entityArmorStand.setInvisible(true);
  45.  
  46.         return entityArmorStand;
  47.     }
  48.  
  49.     @Override
  50.     public UUID getUniqueId() {
  51.         return this.entityArmorStand.getBukkitEntity().getUniqueId();
  52.     }
  53.  
  54.     /**
  55.      * Convenience method to return the location of this Hologram.
  56.      *
  57.      * @return
  58.      */
  59.     @Override
  60.     public Location getLocation() {
  61.         //Valid.checkBoolean(this.isShown(), "Cannot call getLocation when " + this + " is not created");
  62.  
  63.         return this.entityArmorStand.getBukkitEntity().getLocation();
  64.     }
  65.  
  66.     @Override
  67.     public void sendPackets(final Player player, final Object nmsArmorStand) {
  68.         final ArmorStand nmsStand = (ArmorStand) nmsArmorStand;
  69.  
  70.         Remain.sendPacket(player, new ClientboundAddEntityPacket(nmsStand));
  71.         Remain.sendPacket(player, new ClientboundSetEntityDataPacket(nmsStand.getId(), nmsStand.getEntityData().getNonDefaultValues())); // TODO fix error
  72.  
  73.         player.setMetadata(getUniqueId().toString(), new FixedMetadataValue(SimplePlugin.getInstance(), ""));
  74.     }
  75.  
  76.     @Override
  77.     public void setLines(final List<String> lines) {
  78.         this.lines = lines;
  79.     }
  80.  
  81.     public void setEntityList(final List<ArmorStand> armorStandList) {
  82.         this.entityLinesList = armorStandList;
  83.     }
  84.  
  85.     public void setEntity(final ArmorStand armorStand) {
  86.         this.entityArmorStand = armorStand;
  87.     }
  88.  
  89.     @Override
  90.     public List<String> getLines() {
  91.         return this.lines;
  92.     }
  93.  
  94.     @Override
  95.     public void remove(final Player player) {
  96.         for (final ArmorStand armorStand : this.entityLinesList)
  97.             Remain.sendPacket(player, new ClientboundRemoveEntitiesPacket(armorStand.getId()));
  98.  
  99.         //HologramRegistry_v1_19.getInstance().unregister(this);
  100.         HologramRegistry.removeHologram(this);
  101.         player.removeMetadata(getUniqueId().toString(), SimplePlugin.getInstance());
  102.     }
  103.  
  104.     @Override
  105.     public void hide(final Player player) {
  106.         for (final ArmorStand armorStand : this.entityLinesList) {
  107.             armorStand.valid = false;
  108.             // armorStand.setRemoved(Entity.RemovalReason.DISCARDED);
  109.             // armorStand.discard();
  110.             armorStand.remove(Entity.RemovalReason.DISCARDED);
  111.             Remain.sendPacket(player, new ClientboundRemoveEntitiesPacket(armorStand.getId()));
  112.         }
  113.  
  114.         player.removeMetadata(getUniqueId().toString(), SimplePlugin.getInstance());
  115.     }
  116.  
  117.     @Override
  118.     public void show(final Location location, final Player player, final String... linesOfText) {
  119.         for (final ArmorStand nmsArmorStand : this.entityLinesList) { // TODO
  120.             final String line = nmsArmorStand.getName().getString();
  121.             final org.bukkit.entity.ArmorStand armorStand = ReflectionUtil.invoke("getBukkitEntity", nmsArmorStand);
  122.  
  123.             nmsArmorStand.valid = true;
  124.             Remain.setCustomName(armorStand, line);
  125.             this.sendPackets(player, nmsArmorStand);
  126.         }
  127.  
  128.         /*for (int i = 0; i < this.lines.size(); i++) {
  129.             System.out.println("count: " + i);
  130.             final String line = this.lines.get(i);
  131.             final ArmorStand nmsArmorStand = this.entityLinesList.get(i);
  132.  
  133.             System.out.println("Line: " + line);
  134.             System.out.println("Hologram: " + nmsArmorStand);
  135.  
  136.             final org.bukkit.entity.ArmorStand armorStand = ReflectionUtil.invoke("getBukkitEntity", nmsArmorStand);
  137.  
  138.             Remain.setCustomName(armorStand, line);
  139.             this.sendPackets(player, nmsArmorStand);
  140.         }*/
  141.  
  142.         player.setMetadata(getUniqueId().toString(), new FixedMetadataValue(SimplePlugin.getInstance(), ""));
  143.     }
  144.  
  145.     @Override
  146.     public boolean isShown() {
  147.         return this.entityArmorStand.valid;
  148.     }
  149.  
  150.     @Override
  151.     public void createHologram(final String id, Location location, final Player player, final String... linesOfText) {
  152.         if (!this.entityLinesList.isEmpty()) {
  153.             Messenger.error(player, "Hologram cannot be created.");
  154.             return;
  155.         }
  156.  
  157.         if (HologramRegistry.getHologramIDs().contains(id)) {
  158.             Messenger.error(player, "A hologram named test has already been created.");
  159.             return;
  160.         }
  161.  
  162.         final World world = location.getWorld();
  163.  
  164.         if (world == null)
  165.             return;
  166.  
  167.         final Object nmsWorld = Remain.getHandleWorld(location.getWorld());
  168.  
  169.         setLines(Arrays.asList(linesOfText));
  170.  
  171.         for (final String line : linesOfText) {
  172.             final ArmorStand nmsArmorStand = this.createEntity(nmsWorld, location);
  173.             final org.bukkit.entity.ArmorStand armorStand = ReflectionUtil.invoke("getBukkitEntity", nmsArmorStand);
  174.  
  175.             //armorStand.setVisible(false);
  176.             Remain.setCustomName(armorStand, line);
  177.             this.sendPackets(player, nmsArmorStand);
  178.             location = location.subtract(0, 0.26, 0);
  179.  
  180.             this.entityLinesList.add(nmsArmorStand);
  181.         }
  182.  
  183.         player.setMetadata(getUniqueId().toString(), new FixedMetadataValue(SimplePlugin.getInstance(), ""));
  184.         Common.runLater(() -> HologramRegistry.createHologram(id, this));
  185.     }
  186.  
  187.     @Override
  188.     public SerializedMap serialize() {
  189.         //Valid.checkBoolean(this.isShown(), "Cannot save non-created holograms");
  190.  
  191.         return SerializedMap.ofArray(
  192.                 "Lines", this.lines,
  193.                 "Last_Location", this.getLocation());
  194.     }
  195.  
  196.     public static NMSHologram_v1_19 deserialize(final SerializedMap map) { // TODO
  197.         final List<String> lines = map.getStringList("Lines");
  198.         Location lastLocation = map.getLocation("Last_Location");
  199.  
  200.         final Object nmsWorld = Remain.getHandleWorld(lastLocation.getWorld());
  201.         final NMSHologram_v1_19 hologram = new NMSHologram_v1_19();
  202.         final List<ArmorStand> armorStandList = new ArrayList<>();
  203.  
  204.         hologram.setLines(lines);
  205.         hologram.setEntity(hologram.createEntity(nmsWorld, lastLocation));
  206.  
  207.         for (int i = 0; i < lines.size(); i++) {
  208.             armorStandList.add(hologram.createEntity(nmsWorld, lastLocation));
  209.             lastLocation = lastLocation.subtract(0, 0.26, 0);
  210.         }
  211.  
  212.         hologram.setEntityList(armorStandList);
  213.  
  214.         return hologram;
  215.     }
  216. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement