Advertisement
JackOUT

Untitled

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