Advertisement
JackOUT

Untitled

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