Advertisement
JackOUT

Untitled

Aug 7th, 2022
983
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.63 KB | None | 0 0
  1. package games.coob.laserturrets.settings;
  2.  
  3. import games.coob.laserturrets.model.TurretData;
  4. import lombok.*;
  5. import org.bukkit.entity.EntityType;
  6. import org.bukkit.inventory.ItemStack;
  7. import org.mineacademy.fo.Valid;
  8. import org.mineacademy.fo.collection.SerializedMap;
  9. import org.mineacademy.fo.model.ConfigSerializable;
  10. import org.mineacademy.fo.model.Tuple;
  11. import org.mineacademy.fo.settings.ConfigItems;
  12. import org.mineacademy.fo.settings.YamlConfig;
  13.  
  14. import java.util.*;
  15.  
  16. @Getter
  17. public class TurretSettings extends YamlConfig {
  18.  
  19.     private static final ConfigItems<TurretSettings> loadedTurretSettings = ConfigItems.fromFolder("turrets", TurretSettings.class);
  20.  
  21.     /*public static TurretSettings getInstance(final String turretType) {
  22.         System.out.println(turretType);
  23.         TurretSettings settings = loadedTurretSettings.findItem(turretType);
  24.  
  25.         if (settings == null)
  26.             settings = createSettings(turretType);
  27.  
  28.         return settings;
  29.     }*/
  30.  
  31.     private List<LevelData> levels = new ArrayList<>();
  32.  
  33.     private Set<UUID> playerBlacklist = new HashSet<>();
  34.  
  35.     private Set<EntityType> mobBlacklist = new HashSet<>();
  36.  
  37.     private TurretSettings(final String turretType) {
  38.         this.setPathPrefix("Turret_Settings");
  39.         this.loadConfiguration("turret-data.yml", "turrets/" + turretType + "-turrets.yml");
  40.     }
  41.  
  42.     @Override
  43.     protected void onLoad() {
  44.         if (this.levels != null && this.playerBlacklist != null && this.mobBlacklist != null) {
  45.             this.save();
  46.  
  47.             return;
  48.         }
  49.  
  50.         this.playerBlacklist = this.getSet("Player_Blacklist", UUID.class);
  51.         this.mobBlacklist = this.getSet("Mob_Blacklist", EntityType.class);
  52.         this.levels = this.loadLevels();
  53.     }
  54.  
  55.     @Override
  56.     protected void onSave() {
  57.         this.set("Player_Blacklist", this.playerBlacklist);
  58.         this.set("Mob_Blacklist", this.mobBlacklist);
  59.         this.set("Levels", this.levels);
  60.     }
  61.  
  62.     private List<LevelData> loadLevels() {
  63.         final List<LevelData> levels = new ArrayList<>();
  64.  
  65.         for (final Map.Entry<Integer, Object> entry : getMap("Levels", Integer.class, Object.class).entrySet()) {
  66.             final int level = entry.getKey();
  67.             final SerializedMap levelSettings = SerializedMap.of(entry.getValue());
  68.  
  69.             levels.add(LevelData.deserialize(levelSettings, level));
  70.         }
  71.  
  72.         return levels;
  73.     }
  74.  
  75.     public void setSettingsRange(final LevelData levelData, final int range) {
  76.         levelData.setRange(range);
  77.  
  78.         this.save();
  79.     }
  80.  
  81.     public int getLevelsSize() {
  82.         return this.levels.size();
  83.     }
  84.  
  85.     public LevelData addLevel() {
  86.         final LevelData level = new LevelData(this.levels.size());
  87.  
  88.         this.levels.add(level);
  89.         this.save();
  90.  
  91.         return this.levels.get(this.levels.size() - 1);
  92.     }
  93.  
  94.     public void createSettingsLevel() {
  95.         final LevelData level = addLevel();
  96.         final List<TurretSettings.LevelData> levels = this.levels;
  97.  
  98.         levels.get(levels.size() - 1).setLevelSettings(level);
  99.         this.save();
  100.     }
  101.  
  102.     public void setLevelPrice(final LevelData levelData, final double price) {
  103.         levelData.setPrice(price);
  104.  
  105.         this.save();
  106.     }
  107.  
  108.     public LevelData getLevel(final int level) {
  109.         final boolean outOfBounds = level < 0 || level >= this.levels.toArray().length;
  110.  
  111.         if (!outOfBounds)
  112.             return this.levels.get(level - 1);
  113.  
  114.         return null;
  115.     }
  116.  
  117.     public void setLaserEnabled(final LevelData levelData, final boolean laserEnabled) {
  118.         levelData.setLaserEnabled(laserEnabled);
  119.  
  120.         this.save();
  121.     }
  122.  
  123.     public void setLaserDamage(final LevelData levelData, final double damage) {
  124.         levelData.setLaserDamage(damage);
  125.  
  126.         this.save();
  127.     }
  128.  
  129.     public void setLootChances(final LevelData levelData, final List<Tuple<ItemStack, Double>> lootChances) {
  130.         levelData.setLootChances(lootChances);
  131.  
  132.         this.save();
  133.     }
  134.  
  135.     public void addPlayerToBlacklist(final UUID uuid) {
  136.         this.playerBlacklist.add(uuid);
  137.  
  138.         this.save();
  139.     }
  140.  
  141.     public void removePlayerFromBlacklist(final UUID uuid) {
  142.         if (this.playerBlacklist != null)
  143.             this.playerBlacklist.remove(uuid);
  144.  
  145.         this.save();
  146.     }
  147.  
  148.     public void addMobToBlacklist(final EntityType entityType) {
  149.         this.mobBlacklist.add(entityType);
  150.  
  151.         this.save();
  152.     }
  153.  
  154.     public void removeMobFromBlacklist(final EntityType entityType) {
  155.         if (this.mobBlacklist != null)
  156.             this.mobBlacklist.remove(entityType);
  157.  
  158.         this.save();
  159.     }
  160.  
  161.     @Getter
  162.     @Setter
  163.     @ToString
  164.     @RequiredArgsConstructor(access = AccessLevel.PRIVATE)
  165.     public static class LevelData implements ConfigSerializable {
  166.  
  167.         private final int level;
  168.  
  169.         private double price;
  170.  
  171.         private boolean laserEnabled;
  172.  
  173.         private double laserDamage;
  174.  
  175.         private int range;
  176.  
  177.         private int health;
  178.  
  179.         private List<Tuple<ItemStack, Double>> lootChances;
  180.  
  181.         public void setLevelData(final TurretData.TurretLevel turretLevel) {
  182.             turretLevel.setRange(this.range);
  183.             turretLevel.setPrice(this.price);
  184.             turretLevel.setLaserEnabled(this.laserEnabled);
  185.             turretLevel.setLaserDamage(this.laserDamage);
  186.             turretLevel.setHealth(this.health);
  187.             turretLevel.setLootChances(this.lootChances);
  188.         }
  189.  
  190.         public void setLevelSettings(final LevelData levelData) {
  191.             levelData.setRange(this.range);
  192.             levelData.setPrice(this.price);
  193.             levelData.setLaserEnabled(this.laserEnabled);
  194.             levelData.setLaserDamage(this.laserDamage);
  195.             levelData.setHealth(this.health);
  196.             levelData.setLootChances(this.lootChances);
  197.         }
  198.  
  199.         @Override
  200.         public SerializedMap serialize() {
  201.             final SerializedMap map = new SerializedMap();
  202.  
  203.             map.put("Range", this.range);
  204.             map.put("Price", this.price);
  205.             map.put("Laser_Enabled", this.laserEnabled);
  206.             map.put("Laser_Damage", this.laserDamage);
  207.             map.put("Health", this.health);
  208.             map.putIf("Loot_Drops", this.lootChances);
  209.  
  210.             return map;
  211.         }
  212.  
  213.         public static LevelData deserialize(final SerializedMap map, final int level) {
  214.             final LevelData levelData = new LevelData(level);
  215.  
  216.             map.setRemoveOnGet(true);
  217.  
  218.             levelData.range = map.getInteger("Range");
  219.             Valid.checkNotNull(levelData.range, "Missing 'Range' key from level: " + map);
  220.  
  221.             levelData.health = map.getInteger("Health");
  222.             Valid.checkNotNull(levelData.health, "Missing 'Health' key from level: " + map);
  223.  
  224.             levelData.price = map.getDouble("Price");
  225.             Valid.checkNotNull(levelData.price, "Missing 'Price' key from level: " + map);
  226.  
  227.             levelData.laserEnabled = map.getBoolean("Enable_Laser_Pointers");
  228.             Valid.checkNotNull(levelData.laserEnabled, "Missing 'Enable_Laser_Pointers' key from level: " + map);
  229.  
  230.             levelData.laserDamage = map.getDouble("Laser_Pointer_Damage");
  231.             Valid.checkNotNull(levelData.price, "Missing 'Laser_Pointer_Damage' key from level: " + map);
  232.  
  233.             levelData.lootChances = map.getTupleList("Loot_Drops", ItemStack.class, Double.class);
  234.             Valid.checkNotNull(levelData.lootChances, "Missing 'Loot_Drops' key from level: " + map);
  235.  
  236.             Valid.checkBoolean(map.isEmpty(), "Found unrecognized level settings: " + map);
  237.  
  238.             return levelData;
  239.         }
  240.     }
  241.  
  242.     // -----------------------------------------------------------------
  243.     // Static
  244.     // -----------------------------------------------------------------
  245.  
  246.     public static void createSettings(@NonNull final String turretType) {
  247.         loadedTurretSettings.loadOrCreateItem(turretType, () -> new TurretSettings(turretType));
  248.     }
  249.  
  250.     public static void loadTurretSettings() {
  251.         loadedTurretSettings.loadItems();
  252.     }
  253.  
  254.     public static Collection<TurretSettings> getTurretSettings() {
  255.         return loadedTurretSettings.getItems();
  256.     }
  257.  
  258.     public static Set<String> getTurretSettingTypes() {
  259.         return loadedTurretSettings.getItemNames();
  260.     }
  261.  
  262.     public static boolean isTurretSettingLoaded(final String type) {
  263.         return loadedTurretSettings.isItemLoaded(type);
  264.     }
  265.  
  266.     public static TurretSettings findTurretSettings(final String type) {
  267.         return loadedTurretSettings.findItem(type);
  268.     }
  269. }
  270.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement