Advertisement
JackOUT

Untitled

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