Advertisement
JackOUT

Untitled

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