Advertisement
JackOUT

Untitled

Oct 15th, 2022
791
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.79 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;
  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() { // TODO ask question about this condition
  41.         if (this.levels != null) {
  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.getList("Levels", LevelData.class);
  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.     public void setSettingsRange(final LevelData levelData, final int range) {
  62.         levelData.setRange(range);
  63.  
  64.         this.save();
  65.     }
  66.  
  67.     public int getLevelsSize() {
  68.         return this.levels.size();
  69.     }
  70.  
  71.     public LevelData addLevel() {
  72.         final List<LevelData> levels = this.levels;
  73.         final LevelData level = new LevelData(levels.size() + 1);
  74.  
  75.         level.setLevelSettings(levels.get(levels.size() - 1), level);
  76.         levels.add(level);
  77.         this.save();
  78.  
  79.         return levels.get(levels.size() - 1);
  80.     }
  81.  
  82.     public void setLevelPrice(final LevelData levelData, final double price) {
  83.         levelData.setPrice(price);
  84.  
  85.         this.save();
  86.     }
  87.  
  88.     public LevelData getLevel(final int level) {
  89.         final boolean outOfBounds = level <= 0 || level >= this.levels.size() + 1;
  90.  
  91.         System.out.println("Get Full Level: " + this.levels);
  92.         System.out.println("Get Level: " + this.levels.get(level - 1));
  93.  
  94.         if (!outOfBounds)
  95.             return this.levels.get(level - 1);
  96.  
  97.         return null;
  98.     }
  99.  
  100.     /*getFullLevel: [[TurretSettings.LevelData(level=1, price=500.0, laserEnabled=false, laserDamage=0.0, range=15, health=100, lootChances=[ItemStack{IRON_INGOT x 25} - 0.5, ItemStack{GOLD_INGOT x 10} - 0.2, ItemStack{EMERALD x 5} - 0.1, ItemStack{DIAMOND x 2} - 0.05]),
  101.             TurretSettings.LevelData(level=2, price=750.0, laserEnabled=true, laserDamage=0.5, range=16, health=120, lootChances=[ItemStack{IRON_INGOT x 25} - 0.6, ItemStack{GOLD_INGOT x 10} - 0.3, ItemStack{EMERALD x 5} - 0.2, ItemStack{DIAMOND x 2} - 0.1]),
  102.             TurretSettings.LevelData(level=3, price=1000.0, laserEnabled=true, laserDamage=1.0, range=18, health=150, lootChances=[ItemStack{IRON_INGOT x 25} - 0.75, ItemStack{GOLD_INGOT x 10} - 0.4, ItemStack{EMERALD x 5} - 0.3, ItemStack{DIAMOND x 2} - 0.1])]]*/
  103.  
  104.     public void removeLevel(final int settingsLevel) {
  105.         this.levels.remove(settingsLevel - 1);
  106.         this.save();
  107.     }
  108.  
  109.     public void setLaserEnabled(final LevelData levelData, final boolean laserEnabled) {
  110.         levelData.setLaserEnabled(laserEnabled);
  111.  
  112.         this.save();
  113.     }
  114.  
  115.     public void setLaserDamage(final LevelData levelData, final double damage) {
  116.         levelData.setLaserDamage(damage);
  117.  
  118.         this.save();
  119.     }
  120.  
  121.     public void setLootChances(final LevelData levelData, final List<Tuple<ItemStack, Double>> lootChances) {
  122.         levelData.setLootChances(lootChances);
  123.  
  124.         this.save();
  125.     }
  126.  
  127.     public void addPlayerToBlacklist(final UUID uuid) {
  128.         this.playerBlacklist.add(uuid);
  129.  
  130.         this.save();
  131.     }
  132.  
  133.     public void removePlayerFromBlacklist(final UUID uuid) {
  134.         if (this.playerBlacklist != null)
  135.             this.playerBlacklist.remove(uuid);
  136.  
  137.         this.save();
  138.     }
  139.  
  140.     public void addMobToBlacklist(final EntityType entityType) {
  141.         this.mobBlacklist.add(entityType);
  142.  
  143.         this.save();
  144.     }
  145.  
  146.     public void removeMobFromBlacklist(final EntityType entityType) {
  147.         if (this.mobBlacklist != null)
  148.             this.mobBlacklist.remove(entityType);
  149.  
  150.         this.save();
  151.     }
  152.  
  153.     @Getter
  154.     @Setter
  155.     @ToString
  156.     @RequiredArgsConstructor(access = AccessLevel.PRIVATE)
  157.     public static class LevelData implements ConfigSerializable {
  158.  
  159.         private final int level;
  160.  
  161.         private double price;
  162.  
  163.         private boolean laserEnabled;
  164.  
  165.         private double laserDamage;
  166.  
  167.         private int range;
  168.  
  169.         private int health;
  170.  
  171.         private List<Tuple<ItemStack, Double>> lootChances;
  172.  
  173.         public void setLevelData(final TurretData.TurretLevel turretLevel) {
  174.             turretLevel.setRange(this.range);
  175.             turretLevel.setPrice(this.price);
  176.             turretLevel.setLaserEnabled(this.laserEnabled);
  177.             turretLevel.setLaserDamage(this.laserDamage);
  178.             turretLevel.setMaxHealth(this.health);
  179.             turretLevel.setLootChances(this.lootChances);
  180.         }
  181.  
  182.         public void setLevelSettings(final LevelData levelData, final LevelData newLevel) {
  183.             newLevel.setRange(levelData.getRange());
  184.             newLevel.setPrice(levelData.getPrice());
  185.             newLevel.setLaserEnabled(levelData.isLaserEnabled());
  186.             newLevel.setLaserDamage(levelData.getLaserDamage());
  187.             newLevel.setHealth(levelData.getHealth());
  188.             newLevel.setLootChances(levelData.getLootChances());
  189.         }
  190.  
  191.         @Override
  192.         public SerializedMap serialize() {
  193.             final SerializedMap map = new SerializedMap();
  194.  
  195.             map.put("Range", this.range);
  196.             map.put("Price", this.price);
  197.             map.put("Health", this.health);
  198.             map.put("Enable_Laser_Pointer", this.laserEnabled);
  199.             map.put("Laser_Pointer_Damage", this.laserDamage);
  200.             map.putIf("Loot_Drops", this.lootChances);
  201.  
  202.             return map;
  203.         }
  204.  
  205.         public static List<LevelData> deserialize(final SerializedMap map) {
  206.             //final Map<Integer, LevelData> levels = new HashMap<>();
  207.             final List<LevelData> levelDataList = new ArrayList<>();
  208.  
  209.             for (final Map.Entry<String, Object> entry : map.entrySet()) {
  210.                 final int level = Integer.parseInt(entry.getKey());
  211.                 final LevelData levelData = new LevelData(level);
  212.                 final SerializedMap levelSettings = SerializedMap.of(entry.getValue());
  213.  
  214.                 System.out.println("Level: " + level);
  215.                 System.out.println("Map: " + map);
  216.                 System.out.println("Entry: " + levelSettings);
  217.  
  218.                 levelSettings.setRemoveOnGet(true);
  219.  
  220.                 levelData.range = levelSettings.getInteger("Range");
  221.                 Valid.checkNotNull(levelData.range, "Missing 'Range' key from level: " + map);
  222.  
  223.                 levelData.health = levelSettings.getInteger("Health");
  224.                 Valid.checkNotNull(levelData.health, "Missing 'Health' key from level: " + map);
  225.  
  226.                 levelData.price = levelSettings.getDouble("Price");
  227.                 Valid.checkNotNull(levelData.price, "Missing 'Price' key from level: " + map);
  228.  
  229.                 levelData.laserEnabled = levelSettings.getBoolean("Enable_Laser_Pointer");
  230.                 Valid.checkNotNull(levelData.laserEnabled, "Missing 'Enable_Laser_Pointers' key from level: " + map);
  231.  
  232.                 levelData.laserDamage = levelSettings.getDouble("Laser_Pointer_Damage");
  233.                 Valid.checkNotNull(levelData.price, "Missing 'Laser_Pointer_Damage' key from level: " + map);
  234.  
  235.                 levelData.lootChances = levelSettings.getTupleList("Loot_Drops", ItemStack.class, Double.class);
  236.                 Valid.checkNotNull(levelData.lootChances, "Missing 'Loot_Drops' key from level: " + map);
  237.  
  238.                 Valid.checkBoolean(levelSettings.isEmpty(), "Found unrecognized level settings: " + map);
  239.  
  240.                 //levels.put(level, levelData);
  241.                 levelDataList.add(level - 1, levelData);
  242.             }
  243.  
  244.             System.out.println("Levels map: " + levelDataList);
  245.  
  246.             return levelDataList;
  247.         }
  248.     }
  249.  
  250.     // -----------------------------------------------------------------
  251.     // Static
  252.     // -----------------------------------------------------------------
  253.  
  254.     public static void createSettings(@NonNull final String turretType) {
  255.         loadedTurretSettings.loadOrCreateItem(turretType, () -> new TurretSettings(turretType));
  256.     }
  257.  
  258.     public static void loadTurretSettings() {
  259.         loadedTurretSettings.loadItems();
  260.     }
  261.  
  262.     public static Collection<TurretSettings> getTurretSettings() {
  263.         return loadedTurretSettings.getItems();
  264.     }
  265.  
  266.     public static Set<String> getTurretSettingTypes() {
  267.         return loadedTurretSettings.getItemNames();
  268.     }
  269.  
  270.     public static boolean isTurretSettingLoaded(final String type) {
  271.         return loadedTurretSettings.isItemLoaded(type);
  272.     }
  273.  
  274.     public static TurretSettings findTurretSettings(final String type) {
  275.         return loadedTurretSettings.findItem(type);
  276.     }
  277. }
  278.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement