Advertisement
JackOUT

Untitled

Feb 18th, 2023
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.60 KB | None | 0 0
  1. package games.coob.laserturrets.model;
  2.  
  3. import games.coob.laserturrets.settings.TurretSettings;
  4. import games.coob.laserturrets.util.Hologram;
  5. import lombok.AccessLevel;
  6. import lombok.Getter;
  7. import lombok.RequiredArgsConstructor;
  8. import lombok.ToString;
  9. import org.bukkit.Location;
  10. import org.bukkit.entity.EntityType;
  11. import org.bukkit.inventory.ItemStack;
  12. import org.mineacademy.fo.SerializeUtil;
  13. import org.mineacademy.fo.Valid;
  14. import org.mineacademy.fo.collection.SerializedMap;
  15. import org.mineacademy.fo.model.ConfigSerializable;
  16. import org.mineacademy.fo.model.Tuple;
  17. import org.mineacademy.fo.remain.CompMaterial;
  18.  
  19. import javax.annotation.Nullable;
  20. import java.util.*;
  21.  
  22. @Getter
  23. @ToString
  24. public class TurretData implements ConfigSerializable { // TODO create ammo
  25.  
  26. private Location location;
  27.  
  28. private CompMaterial material;
  29.  
  30. private String id;
  31.  
  32. private String type;
  33.  
  34. private UUID owner;
  35.  
  36. private boolean broken;
  37.  
  38. private List<ItemStack> currentLoot;
  39.  
  40. private Set<UUID> playerBlacklist = new HashSet<>();
  41.  
  42. private Set<EntityType> mobBlacklist = new HashSet<>();
  43.  
  44. private boolean mobWhitelistEnabled;
  45.  
  46. private boolean playerWhitelistEnabled;
  47.  
  48. private List<TurretData.TurretLevel> turretLevels = new ArrayList<>();
  49.  
  50. private double currentHealth;
  51.  
  52. private int currentLevel;
  53.  
  54. private Hologram hologram;
  55.  
  56. public void setLocation(final Location location) {
  57. this.location = location;
  58. }
  59.  
  60. public void setMaterial(final CompMaterial material) {
  61. this.material = material;
  62. }
  63.  
  64. public void setType(final String type) {
  65. this.type = type;
  66. }
  67.  
  68. public void setId(final String id) {
  69. this.id = id;
  70. }
  71.  
  72. public void setOwner(final UUID uuid) {
  73. this.owner = uuid;
  74. }
  75.  
  76. public void setBroken(final boolean broken) {
  77. this.broken = broken;
  78. }
  79.  
  80. public void setBrokenAndFill(final boolean broken) {
  81. this.broken = broken;
  82.  
  83. if (this.isBroken()) {
  84. final List<Tuple<ItemStack, Double>> lootChances = this.turretLevels.get(this.currentLevel - 1).getLootChances();
  85. this.currentLoot = randomItemPercentageList(lootChances);
  86. }
  87. }
  88.  
  89. private List<ItemStack> randomItemPercentageList(final List<Tuple<ItemStack, Double>> lootChanceList) {
  90. final List<ItemStack> items = new ArrayList<>();
  91.  
  92. for (final Tuple<ItemStack, Double> lootChance : lootChanceList) {
  93. if (lootChance != null) {
  94. final Random random = new Random();
  95. final double randomPercentage = random.nextDouble();
  96.  
  97. if (lootChance.getValue() >= randomPercentage)
  98. items.add(lootChance.getKey());
  99. }
  100. }
  101.  
  102. return items;
  103. }
  104.  
  105. public void setHologram(final Hologram hologram) {
  106. this.hologram = hologram;
  107. }
  108.  
  109. public void setCurrentLevel(final int level) {
  110. this.currentLevel = level;
  111. }
  112.  
  113. public void setCurrentLoot(final @Nullable List<ItemStack> items) {
  114. this.currentLoot = items;
  115. }
  116.  
  117. public void removeCurrentLoot(final ItemStack itemStack) {
  118. this.getCurrentLoot().remove(itemStack);
  119. }
  120.  
  121. public void addPlayerToBlacklist(final UUID uuid) {
  122. this.playerBlacklist.add(uuid);
  123. }
  124.  
  125. public void removePlayerFromBlacklist(final UUID uuid) {
  126. if (this.playerBlacklist != null)
  127. this.playerBlacklist.remove(uuid);
  128. }
  129.  
  130. public boolean isPlayerListedAsAlly(final UUID uuid) {
  131. if (this.playerBlacklist != null)
  132. return this.playerBlacklist.contains(uuid);
  133. else return false;
  134. }
  135.  
  136. public void setPlayerBlacklist(final Set<UUID> playerBlacklist) {
  137. this.playerBlacklist = playerBlacklist;
  138. }
  139.  
  140. public void setMobWhitelistEnabled(final boolean whitelist) {
  141. this.mobWhitelistEnabled = whitelist;
  142. }
  143.  
  144. public void setPlayerWhitelistEnabled(final boolean whitelist) {
  145. this.playerWhitelistEnabled = whitelist;
  146. }
  147.  
  148. public void setCurrentHealth(final double health) {
  149. this.currentHealth = health;
  150. }
  151.  
  152. public void addMobToBlacklist(final EntityType entityType) {
  153. this.mobBlacklist.add(entityType);
  154. }
  155.  
  156. public void removeMobFromBlacklist(final EntityType entityType) {
  157. this.mobBlacklist.remove(entityType);
  158. }
  159.  
  160. public boolean isMobListedAsAlly(final EntityType entityType) {
  161. return this.mobBlacklist.contains(entityType);
  162. }
  163.  
  164. public void setMobBlacklist(final @Nullable Set<EntityType> entityTypes) {
  165. this.mobBlacklist = entityTypes;
  166. }
  167.  
  168. public TurretLevel getLevel(final int level) {
  169. final boolean outOfBounds = level <= 0 || level >= this.turretLevels.size() + 1;
  170.  
  171. if (!outOfBounds)
  172. return this.turretLevels.get(level - 1);
  173.  
  174. return null;
  175. }
  176.  
  177. public TurretLevel addLevel() {
  178. final TurretData.TurretLevel level = new TurretData.TurretLevel(this);
  179.  
  180. turretLevels.add(level);
  181.  
  182. return this.turretLevels.get(this.turretLevels.size() - 1);
  183. }
  184.  
  185. public void createLevel(final String turretType) {
  186. final TurretData.TurretLevel level = addLevel();
  187. final List<TurretSettings.LevelData> levels = TurretSettings.findByName(turretType).getLevels();
  188.  
  189. levels.get(levels.size() - 1).setLevelData(level);
  190. }
  191.  
  192. public void removeLevel(final int level) {
  193. Valid.checkBoolean(getLevels() >= level, "Cannot remove level " + level + " because the turret only has " + getLevels() + " levels.");
  194. this.turretLevels.remove(level - 1);
  195. }
  196.  
  197. public void setTurretLevels(final List<TurretData.TurretLevel> levels) {
  198. this.turretLevels = levels;
  199. }
  200.  
  201. public int getLevels() {
  202. return this.turretLevels.size();
  203. }
  204.  
  205. private String toHash(final Location location, final CompMaterial material) {
  206. return SerializeUtil.serializeLoc(location) + " | " + material;
  207. }
  208.  
  209. @Override
  210. public SerializedMap serialize() {
  211. final SerializedMap map = new SerializedMap();
  212.  
  213. map.put("Block", toHash(this.location, this.material));
  214. map.put("Id", this.id);
  215. map.put("Type", this.type);
  216. map.put("Owner", this.owner);
  217. map.putIf("Player_Blacklist", this.playerBlacklist);
  218. map.putIf("Mob_Blacklist", this.mobBlacklist);
  219. map.putIf("Current_Loot", this.currentLoot);
  220. map.put("Use_Player_Whitelist", this.playerWhitelistEnabled);
  221. map.put("Use_Mob_Whitelist", this.mobWhitelistEnabled);
  222. map.put("Current_Health", this.currentHealth);
  223. map.put("Current_Level", this.currentLevel);
  224. map.put("Broken", this.broken);
  225. map.putIf("Hologram", this.hologram);
  226. map.put("Levels", this.turretLevels);
  227.  
  228. return map;
  229. }
  230.  
  231. public static TurretData deserialize(final SerializedMap map) {
  232. final TurretData turretData = new TurretData();
  233.  
  234. final String hash = map.getString("Block");
  235. final String id = map.getString("Id");
  236. final String type = map.getString("Type");
  237. final UUID owner = map.getUUID("Owner");
  238. final Set<UUID> blacklist = map.getSet("Player_Blacklist", UUID.class);
  239. final Set<EntityType> entityTypes = map.getSet("Mob_Blacklist", EntityType.class);
  240. final List<ItemStack> currentLoot = map.getList("Current_Loot", ItemStack.class);
  241. final boolean playerWhitelist = map.getBoolean("Use_Player_Whitelist", false);
  242. final boolean mobWhitelist = map.getBoolean("Use_Mob_Whitelist", false); // Add default value to load it if the key doesn't exist
  243. final double currentHealth = map.getDouble("Current_Health");
  244. final Integer level = map.getInteger("Current_Level");
  245. final boolean broken = map.getBoolean("Broken", false);
  246.  
  247. final String[] split = hash.split(" \\| ");
  248. final Location location = SerializeUtil.deserializeLocation(split[0]);
  249. final CompMaterial material = CompMaterial.valueOf(split[1]);
  250. //final List<String> lore = Lang.ofList("Turret_Display.Hologram", "{turretType}", TurretUtil.capitalizeWord(turretData.getType()), "{owner}", Remain.getOfflinePlayerByUUID(turretData.getOwner()).getName(), "{level}", MathUtil.toRoman(turretData.getCurrentLevel()), "{health}", turretData.getCurrentHealth());
  251.  
  252. final Hologram hologram = map.get("Hologram", Hologram.class, new Hologram(location.clone().add(0.5, 0.5, 0.5)));
  253. final List<TurretLevel> levels = map.getList("Levels", TurretLevel.class, turretData);
  254.  
  255. turretData.setMaterial(material);
  256. turretData.setLocation(location);
  257. turretData.setId(id);
  258. turretData.setType(type);
  259. turretData.setOwner(owner);
  260. turretData.setPlayerBlacklist(blacklist);
  261. turretData.setMobBlacklist(entityTypes);
  262. turretData.setCurrentLoot(currentLoot);
  263. turretData.setPlayerWhitelistEnabled(playerWhitelist);
  264. turretData.setMobWhitelistEnabled(mobWhitelist);
  265. turretData.setCurrentLevel(level);
  266. turretData.setCurrentHealth(currentHealth);
  267. turretData.setBroken(broken);
  268. turretData.setHologram(hologram);
  269. turretData.setTurretLevels(levels);
  270.  
  271. return turretData;
  272. }
  273.  
  274. @RequiredArgsConstructor(access = AccessLevel.PRIVATE)
  275. public final static class TurretLevel implements ConfigSerializable {
  276.  
  277. private final TurretData turretData;
  278.  
  279. @Getter
  280. private double price;
  281.  
  282. @Getter
  283. private List<Tuple<ItemStack, Double>> lootChances = new ArrayList<>();
  284.  
  285. @Getter
  286. private int range;
  287.  
  288. @Getter
  289. private boolean laserEnabled;
  290.  
  291. @Getter
  292. private double laserDamage;
  293.  
  294. @Getter
  295. private double maxHealth;
  296.  
  297. public void setPrice(final double price) {
  298. this.price = price;
  299. }
  300.  
  301. public void setRange(final int range) {
  302. this.range = range;
  303. }
  304.  
  305. public void setLaserEnabled(final boolean laserEnabled) {
  306. this.laserEnabled = laserEnabled;
  307. }
  308.  
  309. public void setLaserDamage(final double laserDamage) {
  310. this.laserDamage = laserDamage;
  311. }
  312.  
  313. public void setLootChances(final @Nullable List<Tuple<ItemStack, Double>> lootChances) {
  314. this.lootChances = lootChances;
  315. }
  316.  
  317. public void setMaxHealth(final double health) {
  318. this.maxHealth = health;
  319. }
  320.  
  321. public static TurretLevel deserialize(final SerializedMap map, final TurretData turretData) {
  322. final double price = map.getDouble("Price");
  323. final List<Tuple<ItemStack, Double>> lootChances = map.getTupleList("Loot_Chances", ItemStack.class, Double.class);
  324. final int range = map.getInteger("Range");
  325. final boolean laserEnabled = map.getBoolean("Laser_Enabled");
  326. final double laserDamage = map.getDouble("Laser_Damage");
  327. final double maxHealth = map.getDouble("Max_Health");
  328.  
  329. final TurretLevel level = new TurretLevel(turretData);
  330.  
  331. level.setPrice(price);
  332. level.setLootChances(lootChances);
  333. level.setRange(range);
  334. level.setLaserEnabled(laserEnabled);
  335. level.setLaserDamage(laserDamage);
  336. level.setMaxHealth(maxHealth);
  337.  
  338. return level;
  339. }
  340.  
  341. @Override
  342. public SerializedMap serialize() {
  343. final SerializedMap map = new SerializedMap();
  344.  
  345. map.put("Price", this.price);
  346. map.put("Range", this.range);
  347. map.put("Max_Health", this.maxHealth);
  348. map.put("Laser_Enabled", this.laserEnabled);
  349. map.put("Laser_Damage", this.laserDamage);
  350. map.putIf("Loot_Chances", this.lootChances);
  351.  
  352. return map;
  353. }
  354. }
  355. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement