JackOUT

Untitled

Nov 12th, 2022
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.96 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.collection.SerializedMap;
  8. import org.mineacademy.fo.model.ConfigSerializable;
  9. import org.mineacademy.fo.model.Tuple;
  10. import org.mineacademy.fo.settings.ConfigItems;
  11. import org.mineacademy.fo.settings.ConfigSection;
  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("Level", this.level);
  196. map.put("Range", this.range);
  197. map.put("Price", this.price);
  198. map.put("Health", this.health);
  199. map.put("Enable_Laser_Pointer", this.laserEnabled);
  200. map.put("Laser_Pointer_Damage", this.laserDamage);
  201. map.putIf("Loot_Drops", this.lootChances);
  202.  
  203. return map;
  204. }
  205.  
  206. /*public static List<LevelData> deserialize(final SerializedMap map) {
  207. //final Map<Integer, LevelData> levels = new HashMap<>();
  208. final List<LevelData> levelDataList = new ArrayList<>();
  209.  
  210. for (final Map.Entry<String, Object> entry : map.entrySet()) {
  211. final int level = Integer.parseInt(entry.getKey());
  212. final LevelData levelData = new LevelData(level);
  213. final SerializedMap levelSettings = SerializedMap.of(entry.getValue());
  214.  
  215. System.out.println("Level: " + level);
  216. System.out.println("Map: " + map);
  217. System.out.println("Entry: " + levelSettings);
  218.  
  219. levelSettings.setRemoveOnGet(true);
  220.  
  221. levelData.range = levelSettings.getInteger("Range");
  222. Valid.checkNotNull(levelData.range, "Missing 'Range' key from level: " + map);
  223.  
  224. levelData.health = levelSettings.getInteger("Health");
  225. Valid.checkNotNull(levelData.health, "Missing 'Health' key from level: " + map);
  226.  
  227. levelData.price = levelSettings.getDouble("Price");
  228. Valid.checkNotNull(levelData.price, "Missing 'Price' key from level: " + map);
  229.  
  230. levelData.laserEnabled = levelSettings.getBoolean("Enable_Laser_Pointer");
  231. Valid.checkNotNull(levelData.laserEnabled, "Missing 'Enable_Laser_Pointers' key from level: " + map);
  232.  
  233. levelData.laserDamage = levelSettings.getDouble("Laser_Pointer_Damage");
  234. Valid.checkNotNull(levelData.price, "Missing 'Laser_Pointer_Damage' key from level: " + map);
  235.  
  236. levelData.lootChances = levelSettings.getTupleList("Loot_Drops", ItemStack.class, Double.class);
  237. Valid.checkNotNull(levelData.lootChances, "Missing 'Loot_Drops' key from level: " + map);
  238.  
  239. Valid.checkBoolean(levelSettings.isEmpty(), "Found unrecognized level settings: " + map);
  240.  
  241. //levels.put(level, levelData);
  242. levelDataList.add(level - 1, levelData);
  243. }
  244.  
  245. System.out.println("Levels map: " + levelDataList);
  246.  
  247. return levelDataList;
  248. }*/
  249.  
  250. public static List<LevelData> deserialize(final SerializedMap map) {
  251. System.out.println("Map : " + map);
  252. System.out.println("Values: " + map.values());
  253. final List<LevelData> dataList = new ArrayList<>();
  254.  
  255. for (final Object object : map.values()) {
  256. final ConfigSection configSection = (ConfigSection) object;
  257. System.out.println("Level: " + configSection.retrieve("Level"));
  258.  
  259. final int range = (int) configSection.retrieve("Range");
  260. final int health = (int) configSection.retrieve("Health");
  261. final double price = (double) configSection.retrieve("Price");
  262. final boolean enableLaserPointer = (boolean) configSection.retrieve("Enable_Laser_Pointer");
  263. final double laserPointerDamage = (double) configSection.retrieve("Laser_Pointer_Damage");
  264. final List<Tuple<ItemStack, Double>> lootDrops = (List<Tuple<ItemStack, Double>>) configSection.retrieve("Loot_Drops");
  265.  
  266. final LevelData levelData = new LevelData((Integer) ((ConfigSection) object).retrieve("Level"));
  267.  
  268. levelData.setRange(range);
  269. levelData.setPrice(price);
  270. levelData.setHealth(health);
  271. levelData.setLaserEnabled(enableLaserPointer);
  272. levelData.setLaserDamage(laserPointerDamage);
  273. levelData.setLootChances(lootDrops);
  274.  
  275. dataList.add(levelData);
  276. System.out.println("LevelData: " + dataList);
  277. }
  278.  
  279. System.out.println("DataList: " + dataList);
  280.  
  281. return dataList;
  282.  
  283. /*final int range = map.getInteger("Range");
  284. final int health = map.getInteger("Health");
  285. final double price = map.getDouble("Price");
  286. final boolean enableLaserPointer = map.getBoolean("Enable_Laser_Pointer");
  287. final double laserPointerDamage = map.getDouble("Laser_Pointer_Damage");
  288. final List<Tuple<ItemStack, Double>> lootDrops = map.getTupleList("Loot_Drops", ItemStack.class, Double.class);
  289.  
  290. final LevelData levelData = new LevelData(map.getInteger("Level"));
  291.  
  292. levelData.setRange(range);
  293. levelData.setPrice(price);
  294. levelData.setHealth(health);
  295. levelData.setLaserEnabled(enableLaserPointer);
  296. levelData.setLaserDamage(laserPointerDamage);
  297. levelData.setLootChances(lootDrops);*/
  298. }
  299. }
  300.  
  301. // -----------------------------------------------------------------
  302. // Static
  303. // -----------------------------------------------------------------
  304.  
  305. public static void createSettings(@NonNull final String turretType) {
  306. loadedTurretSettings.loadOrCreateItem(turretType, () -> new TurretSettings(turretType));
  307. }
  308.  
  309. public static void loadTurretSettings() {
  310. loadedTurretSettings.loadItems();
  311. }
  312.  
  313. public static Collection<TurretSettings> getTurretSettings() {
  314. return loadedTurretSettings.getItems();
  315. }
  316.  
  317. public static Set<String> getTurretSettingTypes() {
  318. return loadedTurretSettings.getItemNames();
  319. }
  320.  
  321. public static boolean isTurretSettingLoaded(final String type) {
  322. return loadedTurretSettings.isItemLoaded(type);
  323. }
  324.  
  325. public static TurretSettings findTurretSettings(final String type) {
  326. return loadedTurretSettings.findItem(type);
  327. }
  328. }
  329.  
Advertisement
Add Comment
Please, Sign In to add comment