Advertisement
JackOUT

Untitled

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