Advertisement
xeRicker

Untitled

Apr 13th, 2023
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.67 KB | None | 0 0
  1. package com.xericker.mysteryboxes.core.vaults.holograms;
  2.  
  3. import com.xericker.mysteryboxes.Main;
  4. import com.xericker.mysteryboxes.Plugin;
  5. import com.xericker.mysteryboxes.config.files.VaultsValue;
  6. import com.xericker.mysteryboxes.config.handlers.ConfigFile;
  7. import com.xericker.mysteryboxes.config.handlers.ConfigParser;
  8. import com.xericker.mysteryboxes.core.placeholders.GeneralPlaceholders;
  9. import com.xericker.mysteryboxes.core.vaults.Vault;
  10. import com.xericker.mysteryboxes.playerdata.player.PlayerData;
  11. import com.xericker.mysteryboxes.playerdata.player.PlayerDataManager;
  12. import org.bukkit.Location;
  13. import org.bukkit.NamespacedKey;
  14. import org.bukkit.World;
  15. import org.bukkit.configuration.ConfigurationSection;
  16. import org.bukkit.configuration.file.FileConfiguration;
  17. import org.bukkit.entity.ArmorStand;
  18. import org.bukkit.entity.Display;
  19. import org.bukkit.entity.Entity;
  20. import org.bukkit.entity.Player;
  21. import org.bukkit.persistence.PersistentDataType;
  22.  
  23. import java.util.ArrayList;
  24. import java.util.Collections;
  25. import java.util.List;
  26.  
  27. public class Hologram {
  28.  
  29. /*-----------------------------------------------------------------------------------------------------------------*/
  30.  
  31. private Vault vault;
  32. private Player player;
  33. private boolean removed;
  34. private List<ArmorStand> lines;
  35.  
  36. /*-----------------------------------------------------------------------------------------------------------------*/
  37.  
  38. public Hologram(Vault vault, Player player) {
  39. this.vault = vault;
  40. this.player = player;
  41. lines = new ArrayList<>();
  42. }
  43.  
  44. /*-----------------------------------------------------------------------------------------------------------------*/
  45.  
  46. public void register() {
  47. FileConfiguration configFile = ConfigFile.VAULTS.getFile();
  48. if (configFile == null) return;
  49.  
  50. String animationPath = "animation-builder";
  51. ConfigurationSection configSection = configFile.getConfigurationSection(animationPath);
  52. if (configSection == null) return;
  53.  
  54. for (String animationId : configSection.getKeys(false)) {
  55. HologramAnimation hologramAnimation = new HologramAnimation(animationId, animationPath + "." + animationId, configFile);
  56. hologramAnimation.register();
  57. this.animations.add(hologramAnimation);
  58. }
  59. }
  60.  
  61. /*-----------------------------------------------------------------------------------------------------------------*/
  62.  
  63. public void update() {
  64. if (removed || player == null || !player.isOnline()) return;
  65. if (vault.isDuringOpening() || vault.isDuringCrafting()) return;
  66.  
  67. List<String> hologramLines = new ArrayList<>();
  68. PlayerData playerData = PlayerDataManager.getData(player);
  69.  
  70. int boxesAvailable = playerData.getBoxesAvailable();
  71. int giftsAvailable = playerData.getGiftsAvailable();
  72. int dustAvailable = playerData.getDust();
  73.  
  74. displayLines:
  75. for (String displayLine : ConfigParser.getStringList(VaultsValue.HOLOGRAM_LINES)) {
  76. for (HologramAnimation hologramAnimation : this.animations) {
  77. if (hologramAnimation.getDisplay() == null) break displayLines;
  78.  
  79. String placeholder = "{ANIMATION_[" + hologramAnimation.getAnimationId() + "]}";
  80. if (!displayLine.contains(placeholder)) continue;
  81.  
  82. if (!hologramAnimation.isRequireSyncingData() && !playerData.isDataSynced()) continue displayLines;
  83. if (hologramAnimation.isRequireBoxes() && boxesAvailable == 0) continue displayLines;
  84. if (hologramAnimation.isRequireGifts() && giftsAvailable == 0) continue displayLines;
  85. if (hologramAnimation.isRequireDust() && dustAvailable == 0) continue displayLines;
  86. if (hologramAnimation.isRequireSyncingData() && playerData.isDataSynced()) continue displayLines;
  87.  
  88. displayLine = displayLine.replace(placeholder, hologramAnimation.getDisplay());
  89. }
  90. hologramLines.add(displayLine);
  91. }
  92.  
  93. List<String> linesToDisplay = new ArrayList<>();
  94. for (String hologramLine : hologramLines) {
  95. linesToDisplay.add(GeneralPlaceholders.translate(player, hologramLine));
  96. }
  97. Collections.reverse(linesToDisplay);
  98.  
  99. if (linesToDisplay.size() > lines.size() || linesToDisplay.size() < lines.size()) {
  100. for (ArmorStand line : lines) {
  101. line.remove();
  102. }
  103. lines.clear();
  104. }
  105.  
  106. if (lines.size() > 0) {
  107. for (int i = 0; i < linesToDisplay.size(); i++) {
  108. ArmorStand line = lines.get(i);
  109. line.setCustomName(linesToDisplay.get(i));
  110. }
  111. }
  112.  
  113. if (lines.size() == 0) {
  114. for (int i = 0; i < linesToDisplay.size(); i++) {
  115. Location lineLoc = vault.getVaultLoc().getBlock().getLocation().add(0.5, -1.5 + 0.3 * (i + 1), 0.5);
  116. ArmorStand line = lineLoc.getWorld().spawn(lineLoc, ArmorStand.class);
  117.  
  118. if (!linesToDisplay.get(i).isEmpty()) {
  119. line.setCustomName(linesToDisplay.get(i));
  120. line.setCustomNameVisible(true);
  121. }
  122. line.setVisible(false);
  123. line.setGravity(false);
  124.  
  125. NamespacedKey vaultKey = new NamespacedKey(Main.getPlugin(), "mysteryVault");
  126. line.getPersistentDataContainer().set(vaultKey, PersistentDataType.STRING, vault.getVaultId().toString());
  127.  
  128. lines.add(line);
  129. }
  130. }
  131. }
  132.  
  133. /*-----------------------------------------------------------------------------------------------------------------*/
  134.  
  135. public void remove() {
  136. for (ArmorStand line : lines) {
  137. line.remove();
  138. }
  139. removed = true;
  140. }
  141.  
  142. /*-----------------------------------------------------------------------------------------------------------------*/
  143.  
  144. public Vault getVault() {
  145. return vault;
  146. }
  147.  
  148. public Player getPlayer() {
  149. return player;
  150. }
  151.  
  152. public boolean isRemoved() {
  153. return removed;
  154. }
  155.  
  156. public List<ArmorStand> getLines() {
  157. return lines;
  158. }
  159.  
  160. /*-----------------------------------------------------------------------------------------------------------------*/
  161.  
  162. private List<HologramAnimation> animations = new ArrayList<>();
  163.  
  164. public List<HologramAnimation> getAnimations() {
  165. return animations;
  166. }
  167.  
  168. /*-----------------------------------------------------------------------------------------------------------------*/
  169. }
  170.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement