Advertisement
JackOUT

Untitled

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