Advertisement
JackOUT

Untitled

Apr 7th, 2023
629
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 21.43 KB | None | 0 0
  1. package games.coob.laserturrets.model;
  2.  
  3. import games.coob.laserturrets.settings.Settings;
  4. import games.coob.laserturrets.settings.TurretSettings;
  5. import games.coob.laserturrets.util.Hologram;
  6. import games.coob.laserturrets.util.Lang;
  7. import games.coob.laserturrets.util.TurretUtil;
  8. import lombok.*;
  9. import org.bukkit.Location;
  10. import org.bukkit.block.Block;
  11. import org.bukkit.block.BlockFace;
  12. import org.bukkit.entity.EntityType;
  13. import org.bukkit.entity.Player;
  14. import org.bukkit.inventory.ItemStack;
  15. import org.mineacademy.fo.Common;
  16. import org.mineacademy.fo.MathUtil;
  17. import org.mineacademy.fo.SerializeUtil;
  18. import org.mineacademy.fo.Valid;
  19. import org.mineacademy.fo.collection.SerializedMap;
  20. import org.mineacademy.fo.model.ConfigSerializable;
  21. import org.mineacademy.fo.model.Tuple;
  22. import org.mineacademy.fo.remain.CompMaterial;
  23. import org.mineacademy.fo.remain.Remain;
  24. import org.mineacademy.fo.settings.ConfigItems;
  25. import org.mineacademy.fo.settings.YamlConfig;
  26.  
  27. import javax.annotation.Nullable;
  28. import java.util.*;
  29.  
  30. @Getter
  31. @Setter
  32. public class TurretData extends YamlConfig {
  33.  
  34.     /**
  35.      * The folder name where all items are stored
  36.      */
  37.     private static final String FOLDER = "turrets";
  38.  
  39.     private static final ConfigItems<TurretData> loadedFiles = ConfigItems.fromFolder(FOLDER, TurretData.class);
  40.  
  41.     private Location location;
  42.  
  43.     private CompMaterial material;
  44.  
  45.     private String id;
  46.  
  47.     private String type;
  48.  
  49.     private UUID owner;
  50.  
  51.     private boolean broken;
  52.  
  53.     private List<ItemStack> currentLoot;
  54.  
  55.     private Set<UUID> playerBlacklist = new HashSet<>();
  56.  
  57.     private Set<EntityType> mobBlacklist = new HashSet<>();
  58.  
  59.     private boolean mobWhitelistEnabled;
  60.  
  61.     private boolean playerWhitelistEnabled;
  62.  
  63.     private List<TurretLevel> turretLevels = new ArrayList<>();
  64.  
  65.     private double currentHealth;
  66.  
  67.     private int currentLevel;
  68.  
  69.     @Nullable
  70.     private ItemStack unplacedTurret;
  71.  
  72.     private Hologram hologram;
  73.  
  74.     // Called when ConfigItems class loads your boss from your bosses/ folder
  75.     private TurretData(final String id) {
  76.         this(id, null, null, null);
  77.     }
  78.  
  79.     // Called from the game when you create new bosses
  80.     private TurretData(final String id, final Block block, final String type, final Player player) {
  81.         Valid.checkBoolean(!loadedFiles.isItemLoaded(id), Lang.of("Tool.Already_Registered", "{location}", Common.shortLocation(block.getLocation())));
  82.  
  83.         this.location = block.getLocation();
  84.         this.material = CompMaterial.fromMaterial(block.getType());
  85.         this.type = type;
  86.         this.owner = player.getUniqueId();
  87.         this.id = id;
  88.         this.currentLevel = 1;
  89.  
  90.         final TurretSettings turretSettings = TurretSettings.findByName(type);
  91.  
  92.         this.mobBlacklist = turretSettings.getMobList();
  93.         this.playerBlacklist = turretSettings.getPlayerList();
  94.         this.playerWhitelistEnabled = turretSettings.isEnablePlayerWhitelist();
  95.         this.mobWhitelistEnabled = turretSettings.isEnableMobWhitelist();
  96.  
  97.         if (!this.isPlayerWhitelistEnabled())
  98.             this.playerBlacklist.add(player.getUniqueId());
  99.  
  100.         for (final TurretSettings.LevelData levelData : turretSettings.getLevels()) {
  101.             final TurretData.TurretLevel level = addLevel();
  102.             levelData.setLevelData(level);
  103.         }
  104.  
  105.         this.currentHealth = this.getLevel(1).getMaxHealth();
  106.         this.hologram = createHologram();
  107.  
  108.         this.loadConfiguration(NO_DEFAULT, FOLDER + "/" + id + ".yml");
  109.     }
  110.  
  111.     @Override
  112.     protected void onLoad() {
  113.         if (this.location == null && this.material == null && this.currentHealth == 0) { // TODO test
  114.             Valid.checkBoolean(isSet("Block"), "Corrupted turret file: " + this.getFileName() + ", lacks the 'Block' key to determine the block where the turret is placed.");
  115.  
  116.             final String hash = this.getString("Block");
  117.  
  118.             final String[] split = hash.split(" \\| ");
  119.             final Location location = SerializeUtil.deserializeLocation(split[0]);
  120.             final CompMaterial material = CompMaterial.valueOf(split[1]);
  121.  
  122.             this.location = location;
  123.             this.material = material;
  124.             this.currentHealth = this.getDouble("Current_Health");
  125.         }
  126.  
  127.         this.id = this.getString("Id");
  128.         this.type = this.getString("Type");
  129.         this.owner = this.get("Owner", UUID.class);
  130.         this.playerBlacklist = this.getSet("Player_Blacklist", UUID.class);
  131.         this.mobBlacklist = this.getSet("Mob_Blacklist", EntityType.class);
  132.         this.currentLoot = this.getList("Current_Loot", ItemStack.class);
  133.         this.playerWhitelistEnabled = this.getBoolean("Use_Player_Whitelist", false);
  134.         this.mobWhitelistEnabled = this.getBoolean("Use_Mob_Whitelist", false); // Add default value to load it if the key doesn't exist
  135.         this.currentLevel = this.getInteger("Current_Level");
  136.         this.broken = this.getBoolean("Broken", false);
  137.         this.unplacedTurret = this.getItemStack("Unplaced_Turret");
  138.  
  139.         this.save();
  140.     }
  141.  
  142.     private String toHash(final Location location, final CompMaterial material) {
  143.         return SerializeUtil.serializeLoc(location) + " | " + material;
  144.     }
  145.  
  146.     @Override
  147.     protected void onSave() {
  148.         this.set("Block", toHash(this.location, this.material));
  149.         this.set("Id", this.id);
  150.         this.set("Type", this.type);
  151.         this.set("Owner", this.owner);
  152.         this.set("Player_Blacklist", this.playerBlacklist);
  153.         this.set("Mob_Blacklist", this.mobBlacklist);
  154.         this.set("Current_Loot", this.currentLoot);
  155.         this.set("Use_Player_Whitelist", this.playerWhitelistEnabled);
  156.         this.set("Use_Mob_Whitelist", this.mobWhitelistEnabled);
  157.         this.set("Current_Health", this.currentHealth);
  158.         this.set("Current_Level", this.currentLevel);
  159.         this.set("Broken", this.broken);
  160.         this.set("Hologram", this.hologram);
  161.         this.set("Unplaced_Turret", this.unplacedTurret);
  162.         this.set("Levels", this.turretLevels);
  163.     }
  164.  
  165.     public void register(final Player player, final Block block, final String type, final String uniqueID) { // TODO register and create file
  166.         Valid.checkBoolean(!loadedFiles.isItemLoaded(uniqueID), Lang.of("Tool.Already_Registered", "{location}", Common.shortLocation(block.getLocation())));
  167.  
  168.         this.setLocation(block.getLocation());
  169.         this.setMaterial(CompMaterial.fromMaterial(block.getType()));
  170.         this.setType(type);
  171.         this.setOwner(player.getUniqueId());
  172.         this.setId(uniqueID);
  173.         this.setCurrentLevel(1);
  174.  
  175.         final TurretSettings turretSettings = TurretSettings.findByName(type);
  176.  
  177.         this.setMobBlacklist(turretSettings.getMobList());
  178.         this.setPlayerBlacklist(turretSettings.getPlayerList());
  179.         this.setPlayerWhitelistEnabled(turretSettings.isEnablePlayerWhitelist());
  180.         this.setMobWhitelistEnabled(turretSettings.isEnableMobWhitelist());
  181.  
  182.         if (!this.isPlayerWhitelistEnabled())
  183.             this.playerBlacklist.add(player.getUniqueId());
  184.  
  185.         for (final TurretSettings.LevelData levelData : turretSettings.getLevels()) {
  186.             final TurretData.TurretLevel level = addLevel();
  187.             levelData.setLevelData(level);
  188.         }
  189.  
  190.         this.setCurrentHealth(this.getLevel(1).getMaxHealth());
  191.         this.setHologram(createHologram());
  192.  
  193.         this.save();
  194.     }
  195.  
  196.     public void unregister() {
  197.         if (this.getHologram() != null)
  198.             this.getHologram().remove();
  199.  
  200.         this.getLocation().getBlock().getRelative(BlockFace.UP).setType(CompMaterial.AIR.getMaterial());
  201.         removeTurret(this.id);
  202.  
  203.         this.save();
  204.     }
  205.  
  206.     public void registerUnplacedTurret(final Block block) {
  207.         if (this.unplacedTurret != null) {
  208.             this.setUnplacedTurret(null);
  209.             this.setLocation(block.getLocation());
  210.             this.setMaterial(CompMaterial.fromMaterial(block.getType()));
  211.             this.setHologram(createHologram());
  212.         }
  213.  
  214.         this.save();
  215.     }
  216.  
  217.     /*public void registerTurretById(final Block block, final String turretId) { // TODO create unplaced boolean value
  218.         final TurretData turretData = getUnplacedTurretById(turretId);
  219.  
  220.         this.registeredUnplacedTurrets.removeIf(tuple -> tuple.getKey().equals(turretData));
  221.  
  222.         turretData.setLocation(block.getLocation());
  223.         turretData.setMaterial(CompMaterial.fromMaterial(block.getType()));
  224.         turretData.setHologram(createHologram(turretData));
  225.  
  226.         this.registeredTurrets.add(turretData);
  227.         this.save();
  228.     }*/
  229.  
  230.     private Hologram createHologram() {
  231.         final List<String> lore = Lang.ofList("Turret_Display.Hologram", "{turretType}", TurretUtil.capitalizeWord(this.getType()), "{owner}", Remain.getOfflinePlayerByUUID(this.getOwner()).getName(), "{level}", MathUtil.toRoman(this.getCurrentLevel()), "{health}", this.getCurrentHealth());
  232.         final List<String> loreList = new ArrayList<>(lore);
  233.  
  234.         if (!Settings.TurretSection.ENABLE_DAMAGEABLE_TURRETS)
  235.             loreList.removeIf(line -> line.contains(String.valueOf(this.getCurrentHealth())));
  236.  
  237.         final Object[] objects = loreList.toArray();
  238.         final String[] lines = Arrays.copyOf(objects, objects.length, String[].class);
  239.         final int linesLength = objects.length;
  240.         final Hologram hologram = new Hologram(this.getLocation().clone().add(0.5, TurretUtil.getYForLines(linesLength), 0.5));
  241.  
  242.         hologram.setLore(lines);
  243.  
  244.         return hologram;
  245.     }
  246.  
  247.     /*public void unregister(final Block block) {
  248.         final TurretData turretData = getTurretByBlock(block);
  249.  
  250.         if (turretData.getHologram() != null)
  251.             turretData.getHologram().remove();
  252.  
  253.         block.getRelative(BlockFace.UP).setType(CompMaterial.AIR.getMaterial());
  254.         this.registeredTurrets.remove(turretData);
  255.  
  256.         this.save();
  257.     }*/
  258.  
  259.     /*public void unregister(final TurretData turretData) {
  260.         if (turretData.getHologram() != null)
  261.             turretData.getHologram().remove();
  262.  
  263.         turretData.getLocation().getBlock().getRelative(BlockFace.UP).setType(CompMaterial.AIR.getMaterial());
  264.         this.registeredTurrets.remove(turretData);
  265.  
  266.         this.save();
  267.     }*/
  268.  
  269.     /*public void unregister(final String turretID) {
  270.         final TurretData turretData = getTurretByID(turretID);
  271.  
  272.         if (turretData.getHologram() != null)
  273.             turretData.getHologram().remove();
  274.  
  275.         turretData.getLocation().getBlock().getRelative(BlockFace.UP).setType(CompMaterial.AIR.getMaterial());
  276.         this.registeredTurrets.remove(turretData);
  277.  
  278.         this.save();
  279.     }*/
  280.  
  281.     public void setUnplacedTurret(@Nullable final ItemStack turretItem) {
  282.         this.unplacedTurret = turretItem;
  283.  
  284.         this.save();
  285.     }
  286.  
  287.     public void addPlayerToBlacklist(final UUID uuid) {
  288.         this.playerBlacklist.add(uuid);
  289.  
  290.         this.save();
  291.     }
  292.  
  293.     public void removePlayerFromBlacklist(final UUID uuid) {
  294.         if (this.playerBlacklist != null)
  295.             this.playerBlacklist.remove(uuid);
  296.  
  297.         this.save();
  298.     }
  299.  
  300.     public void addMobToBlacklist(final EntityType entityType) {
  301.         this.mobBlacklist.add(entityType);
  302.  
  303.         this.save();
  304.     }
  305.  
  306.     public void removeMobFromBlacklist(final EntityType entityType) {
  307.         this.mobBlacklist.remove(entityType);
  308.  
  309.         this.save();
  310.     }
  311.  
  312.     public void enableMobWhitelist(final boolean enableWhitelist) {
  313.         this.mobWhitelistEnabled = enableWhitelist;
  314.  
  315.         this.save();
  316.     }
  317.  
  318.     public boolean isMobListedAsAlly(final EntityType entityType) {
  319.         return this.mobBlacklist.contains(entityType);
  320.     }
  321.  
  322.     public void enablePlayerWhitelist(final boolean enableWhitelist) {
  323.         this.playerWhitelistEnabled = enableWhitelist;
  324.  
  325.         this.save();
  326.     }
  327.  
  328.     public boolean isPlayerListedAsAlly(final UUID uuid) {
  329.         if (this.playerBlacklist != null)
  330.             return this.playerBlacklist.contains(uuid);
  331.         else return false;
  332.     }
  333.  
  334.     public void setRange(final int level, final int range) {
  335.         this.getLevel(level).setRange(range);
  336.  
  337.         this.save();
  338.     }
  339.  
  340.     public void setLaserEnabled(final int level, final boolean laserEnabled) {
  341.         this.getLevel(level).setLaserEnabled(laserEnabled);
  342.  
  343.         this.save();
  344.     }
  345.  
  346.     public void setLaserDamage(final int level, final double damage) {
  347.         this.getLevel(level).setLaserDamage(damage);
  348.  
  349.         this.save();
  350.     }
  351.  
  352.     public void updateHologram() {
  353.         this.getHologram().remove();
  354.         this.setHologram(createHologram());
  355.  
  356.         this.save();
  357.     }
  358.  
  359.     public void setLevelPrice(final int level, final double price) {
  360.         this.getLevel(level).setPrice(price);
  361.  
  362.         this.save();
  363.     }
  364.  
  365.     public TurretLevel getLevel(final int level) {
  366.         final boolean outOfBounds = level <= 0 || level >= this.turretLevels.size() + 1;
  367.  
  368.         if (!outOfBounds)
  369.             return this.turretLevels.get(level - 1);
  370.  
  371.         return null;
  372.     }
  373.  
  374.     public void createLevel() {
  375.         final TurretLevel level = addLevel();
  376.         final List<TurretSettings.LevelData> levels = TurretSettings.findByName(this.type).getLevels();
  377.  
  378.         levels.get(levels.size() - 1).setLevelData(level);
  379.  
  380.         this.save();
  381.     }
  382.  
  383.     public void removeLevel(final int level) {
  384.         Valid.checkBoolean(getLevels() >= level, "Cannot remove level " + level + " because the turret only has " + getLevels() + " levels.");
  385.         this.turretLevels.remove(level - 1);
  386.  
  387.         this.save();
  388.     }
  389.  
  390.     public int getLevels() {
  391.         return this.turretLevels.size();
  392.     }
  393.  
  394.     public void setCurrentTurretLevel(final int level) {
  395.         this.currentLevel = level;
  396.  
  397.         this.save();
  398.     }
  399.  
  400.     public TurretLevel addLevel() {
  401.         final TurretLevel level = new TurretLevel(this);
  402.  
  403.         turretLevels.add(level);
  404.  
  405.         return this.turretLevels.get(this.turretLevels.size() - 1);
  406.     }
  407.  
  408.     public void setTurretHealth(final Block block, final double health) {
  409.         if (isRegistered(block))
  410.             this.setCurrentHealth(health);
  411.  
  412.         this.save();
  413.     }
  414.  
  415.     public void setTurretHealth(final double health) {
  416.         this.currentHealth = health;
  417.  
  418.         this.save();
  419.     }
  420.  
  421.     public void setBrokenAndFill(final Block block, final boolean broken) {
  422.         if (isRegistered(block)) {
  423.             this.broken = broken;
  424.  
  425.             if (this.isBroken()) {
  426.                 final List<Tuple<ItemStack, Double>> lootChances = this.turretLevels.get(this.currentLevel - 1).getLootChances();
  427.                 this.currentLoot = randomItemPercentageList(lootChances);
  428.             }
  429.  
  430.             this.save();
  431.         }
  432.     }
  433.  
  434.     private List<ItemStack> randomItemPercentageList(final List<Tuple<ItemStack, Double>> lootChanceList) {
  435.         final List<ItemStack> items = new ArrayList<>();
  436.  
  437.         for (final Tuple<ItemStack, Double> lootChance : lootChanceList) {
  438.             if (lootChance != null) {
  439.                 final Random random = new Random();
  440.                 final double randomPercentage = random.nextDouble();
  441.  
  442.                 if (lootChance.getValue() >= randomPercentage)
  443.                     items.add(lootChance.getKey());
  444.             }
  445.         }
  446.  
  447.         return items;
  448.     }
  449.  
  450.     public void setBroken(final boolean broken) {
  451.         this.broken = broken;
  452.  
  453.         if (!this.isBroken())
  454.             setTurretHealth(this.getLevel(this.getCurrentLevel()).getMaxHealth());
  455.  
  456.         this.save();
  457.     }
  458.  
  459.     public List<Tuple<ItemStack, Double>> getTurretLootChances(final int level) {
  460.         return this.getLevel(level).getLootChances();
  461.     }
  462.  
  463.     public void setTurretLootChances(final int level, final List<Tuple<ItemStack, Double>> lootChances) {
  464.         this.getLevel(level).setLootChances(lootChances);
  465.  
  466.         this.save();
  467.     }
  468.  
  469.     public void setCurrentLoot(@Nullable final List<ItemStack> items) {
  470.         this.currentLoot = items;
  471.  
  472.         this.save();
  473.     }
  474.  
  475.     public void removeCurrentLoot(final ItemStack item) {
  476.         this.currentLoot.remove(item);
  477.  
  478.         this.save();
  479.     }
  480.  
  481.     @Override
  482.     protected boolean saveComments() {
  483.         return false;
  484.     }
  485.  
  486.     // -----------------------------------------------------------------
  487.     // Turret levels
  488.     // -----------------------------------------------------------------
  489.  
  490.     @RequiredArgsConstructor(access = AccessLevel.PRIVATE)
  491.     public final static class TurretLevel implements ConfigSerializable {
  492.  
  493.         private final TurretData turretData;
  494.  
  495.         @Getter
  496.         private double price;
  497.  
  498.         @Getter
  499.         private List<Tuple<ItemStack, Double>> lootChances = new ArrayList<>();
  500.  
  501.         @Getter
  502.         private int range;
  503.  
  504.         @Getter
  505.         private boolean laserEnabled;
  506.  
  507.         @Getter
  508.         private double laserDamage;
  509.  
  510.         @Getter
  511.         private double maxHealth;
  512.  
  513.         public void setPrice(final double price) {
  514.             this.price = price;
  515.         }
  516.  
  517.         public void setRange(final int range) {
  518.             this.range = range;
  519.         }
  520.  
  521.         public void setLaserEnabled(final boolean laserEnabled) {
  522.             this.laserEnabled = laserEnabled;
  523.         }
  524.  
  525.         public void setLaserDamage(final double laserDamage) {
  526.             this.laserDamage = laserDamage;
  527.         }
  528.  
  529.         public void setLootChances(final @Nullable List<Tuple<ItemStack, Double>> lootChances) {
  530.             this.lootChances = lootChances;
  531.         }
  532.  
  533.         public void setMaxHealth(final double health) {
  534.             this.maxHealth = health;
  535.         }
  536.  
  537.         public static TurretLevel deserialize(final SerializedMap map, final TurretData turretData) {
  538.             final double price = map.getDouble("Price");
  539.             final List<Tuple<ItemStack, Double>> lootChances = map.getTupleList("Loot_Chances", ItemStack.class, Double.class);
  540.             final int range = map.getInteger("Range");
  541.             final boolean laserEnabled = map.getBoolean("Laser_Enabled");
  542.             final double laserDamage = map.getDouble("Laser_Damage");
  543.             final double maxHealth = map.getDouble("Max_Health");
  544.  
  545.             final TurretLevel level = new TurretLevel(turretData);
  546.  
  547.             level.setPrice(price);
  548.             level.setLootChances(lootChances);
  549.             level.setRange(range);
  550.             level.setLaserEnabled(laserEnabled);
  551.             level.setLaserDamage(laserDamage);
  552.             level.setMaxHealth(maxHealth);
  553.  
  554.             return level;
  555.         }
  556.  
  557.         @Override
  558.         public SerializedMap serialize() {
  559.             final SerializedMap map = new SerializedMap();
  560.  
  561.             map.put("Price", this.price);
  562.             map.put("Range", this.range);
  563.             map.put("Max_Health", this.maxHealth);
  564.             map.put("Laser_Enabled", this.laserEnabled);
  565.             map.put("Laser_Damage", this.laserDamage);
  566.             map.putIf("Loot_Chances", this.lootChances);
  567.  
  568.             return map;
  569.         }
  570.     }
  571.  
  572.     // -----------------------------------------------------------------
  573.     // Static
  574.     // -----------------------------------------------------------------
  575.  
  576.     public static void syncTurretDataWithSettings(final TurretSettings settings, final TurretData turretData) {
  577.         turretData.setMobBlacklist(settings.getMobList());
  578.         turretData.setPlayerBlacklist(settings.getPlayerList());
  579.         turretData.setPlayerWhitelistEnabled(settings.isEnablePlayerWhitelist());
  580.         turretData.setMobWhitelistEnabled(settings.isEnableMobWhitelist());
  581.  
  582.         if (!turretData.isPlayerWhitelistEnabled())
  583.             turretData.addPlayerToBlacklist(turretData.getOwner());
  584.  
  585.         for (int i = 1; i <= turretData.getLevels() + 2; i++)
  586.             turretData.removeLevel(1);
  587.  
  588.         for (final TurretSettings.LevelData levelData : settings.getLevels()) {
  589.             final TurretLevel level = turretData.addLevel();
  590.             levelData.setLevelData(level);
  591.         }
  592.  
  593.         final double maxHealth = turretData.getLevel(turretData.getCurrentLevel()).getMaxHealth();
  594.  
  595.         if (turretData.getCurrentHealth() > maxHealth)
  596.             turretData.setCurrentHealth(maxHealth);
  597.  
  598.         TurretUtil.updateHologramAndTexture(turretData);
  599.  
  600.         turretData.save();
  601.     }
  602.  
  603.     public static boolean isRegistered(final Block block) {
  604.         for (final TurretData turretData : getTurrets())
  605.             return turretData.getLocation().getBlock().getLocation().equals(block.getLocation());
  606.  
  607.         return false;
  608.     }
  609.  
  610.     public static boolean isRegistered(final String turretID) {
  611.         for (final TurretData turretData : getTurrets()) {
  612.             if (turretData.getId().equals(turretID))
  613.                 return true;
  614.         }
  615.  
  616.         return false;
  617.     }
  618.  
  619.     public static TurretData findByBlock(final Block block) {
  620.         for (final TurretData turretData : getTurrets())
  621.             if (turretData.getLocation().getBlock().getLocation().equals(block.getLocation()))
  622.                 return turretData;
  623.  
  624.         return null;
  625.     }
  626.  
  627.     public static Set<TurretData> getTurretsOfType(final String turretType) {
  628.         final Set<TurretData> dataList = new HashSet<>();
  629.  
  630.         for (final TurretData turretData : getTurrets())
  631.             if (turretData.getType().equals(turretType))
  632.                 dataList.add(turretData);
  633.  
  634.         return dataList;
  635.     }
  636.  
  637.     public static Set<TurretData> getRegisteredTurrets() {
  638.         return new HashSet<>(getTurrets());
  639.     }
  640.  
  641.     public static List<Location> getTurretLocations() {
  642.         final List<Location> locations = new ArrayList<>();
  643.  
  644.         for (final TurretData turretData : getTurrets())
  645.             locations.add(turretData.getLocation());
  646.  
  647.         return locations;
  648.     }
  649.  
  650.     public static List<TurretData> getUnplacedTurrets() {
  651.         final List<TurretData> turretDataList = new ArrayList<>();
  652.  
  653.         for (final TurretData turretData : getTurrets())
  654.             if (turretData.getUnplacedTurret() != null)
  655.                 turretDataList.add(turretData);
  656.  
  657.         return turretDataList;
  658.     }
  659.  
  660.     public static Set<String> getTurretIDs() {
  661.         final Set<String> turretIDs = new HashSet<>();
  662.  
  663.         for (final TurretData turretData : getTurrets())
  664.             turretIDs.add(turretData.getId());
  665.  
  666.         return turretIDs;
  667.     }
  668.  
  669.     public static List<Location> getTurretLocationsOfType(final String type) {
  670.         final List<Location> locations = new ArrayList<>();
  671.  
  672.         for (final TurretData turretData : getTurretsOfType(type))
  673.             locations.add(turretData.getLocation());
  674.  
  675.         return locations;
  676.     }
  677.  
  678.     public static boolean isTurretOfType(final Block block, final String type) {
  679.         for (final TurretData turretData : getTurretsOfType(type))
  680.             if (turretData.getLocation().getBlock().getLocation().equals(block.getLocation()))
  681.                 return true;
  682.  
  683.         return false;
  684.     }
  685.  
  686.     /**
  687.      * @return
  688.      * @see ConfigItems#getItems()
  689.      */
  690.     public static List<? extends TurretData> getTurrets() {
  691.         return loadedFiles.getItems();
  692.     }
  693.  
  694.     /**
  695.      * @return
  696.      * @see ConfigItems#getItemNames()
  697.      */
  698.     public static Set<String> getTurretNames() {
  699.         return loadedFiles.getItemNames();
  700.     }
  701.  
  702.     public static void createTurret(@NonNull final String turretId, final Block block, final String type, final Player owner) { // TODO
  703.         loadedFiles.loadOrCreateItem(turretId, () -> new TurretData(turretId, block, type, owner));
  704.     }
  705.  
  706.     /**
  707.      * @see ConfigItems#loadItems()
  708.      */
  709.     public static void loadTurrets() {
  710.         loadedFiles.loadItems();
  711.     }
  712.  
  713.     public static void removeTurret(final String turretId) {
  714.         loadedFiles.removeItemByName(turretId);
  715.     }
  716.  
  717.     /**
  718.      * @see ConfigItems#isItemLoaded(String)
  719.      */
  720.     public static boolean isTurretLoaded(final String id) {
  721.         return loadedFiles.isItemLoaded(id);
  722.     }
  723.  
  724.     /**
  725.      * @return
  726.      * @see ConfigItems#findItem(String)
  727.      */
  728.     public static TurretData findById(@NonNull final String id) {
  729.         return loadedFiles.findItem(id);
  730.     }
  731. }
  732.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement