diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/EcoBoss.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/EcoBoss.java index ad76a6b..be07a06 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/EcoBoss.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/EcoBoss.java @@ -500,11 +500,10 @@ public class EcoBoss extends PluginDependent { return true; } - if (!(o instanceof EcoBoss)) { + if (!(o instanceof EcoBoss boss)) { return false; } - EcoBoss boss = (EcoBoss) o; return this.getName().equals(boss.getName()); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/LivingEcoBoss.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/LivingEcoBoss.java index a01eb2e..76fdf28 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/LivingEcoBoss.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/LivingEcoBoss.java @@ -83,8 +83,8 @@ public class LivingEcoBoss extends PluginDependent { Bukkit.getServer().createBossBar( plugin.getNamespacedKeyFactory().create("boss_" + NumberUtils.randInt(0, 1000000)), entity.getCustomName(), - boss.getBossbarProperties().getColor(), - boss.getBossbarProperties().getStyle(), + boss.getBossbarProperties().color(), + boss.getBossbarProperties().style(), (BarFlag) null ), this.getPlugin().getConfigYml().getInt("bossbar-radius") @@ -127,7 +127,7 @@ public class LivingEcoBoss extends PluginDependent { attackDamage.setBaseValue(boss.getAttackDamage()); for (OptionedSound sound : boss.getSpawnSounds()) { - entity.getWorld().playSound(entity.getLocation(), sound.getSound(), sound.getVolume(), sound.getPitch()); + entity.getWorld().playSound(entity.getLocation(), sound.sound(), sound.volume(), sound.pitch()); } for (String spawnMessage : boss.getSpawnMessages()) { @@ -170,7 +170,7 @@ public class LivingEcoBoss extends PluginDependent { */ public void handleAttack(@NotNull final Player player) { for (OptionedSound sound : boss.getInjureSounds()) { - player.getWorld().playSound(entity.getLocation(), sound.getSound(), sound.getVolume(), sound.getPitch()); + player.getWorld().playSound(entity.getLocation(), sound.sound(), sound.volume(), sound.pitch()); } for (Effect effect : effects) { diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/effects/Effect.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/effects/Effect.java index 1e8141e..cecaa68 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/effects/Effect.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/effects/Effect.java @@ -91,10 +91,9 @@ public abstract class Effect implements BossTicker { if (this == o) { return true; } - if (!(o instanceof Effect)) { + if (!(o instanceof Effect effect)) { return false; } - Effect effect = (Effect) o; return Objects.equals(getArgs(), effect.getArgs()); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/listeners/AttackListeners.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/listeners/AttackListeners.java index 8d7be29..80adacd 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/listeners/AttackListeners.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/listeners/AttackListeners.java @@ -38,21 +38,11 @@ public class AttackListeners extends PluginDependent implements Listener { */ @EventHandler(ignoreCancelled = true) public void onAttackBoss(@NotNull final EntityDamageByEntityEvent event) { - if (!(event.getEntity() instanceof LivingEntity)) { + if (!(event.getEntity() instanceof LivingEntity entity)) { return; } - LivingEntity entity = (LivingEntity) event.getEntity(); - - Player player = null; - - if (event.getDamager() instanceof Player) { - player = (Player) event.getDamager(); - } else if (event.getDamager() instanceof Projectile) { - if (((Projectile) event.getDamager()).getShooter() instanceof Player) { - player = (Player) ((Projectile) event.getDamager()).getShooter(); - } - } + Player player = BossUtils.getPlayerFromEntity(event.getDamager()); if (player == null) { return; @@ -66,6 +56,8 @@ public class AttackListeners extends PluginDependent implements Listener { LivingEcoBoss livingEcoBoss = boss.getLivingBoss(entity); + BossUtils.warnIfNull(livingEcoBoss); + if (boss.isAttackOnInjure()) { livingEcoBoss.handleAttack(player); } @@ -78,28 +70,16 @@ public class AttackListeners extends PluginDependent implements Listener { */ @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void topDamageTracker(@NotNull final EntityDamageByEntityEvent event) { - if (!(event.getEntity() instanceof LivingEntity)) { + if (!(event.getEntity() instanceof LivingEntity entity)) { return; } - LivingEntity entity = (LivingEntity) event.getEntity(); + Player player = BossUtils.getPlayerFromEntity(event.getDamager()); - Player temp = null; - - if (event.getDamager() instanceof Player) { - temp = (Player) event.getDamager(); - } else if (event.getDamager() instanceof Projectile) { - if (((Projectile) event.getDamager()).getShooter() instanceof Player) { - temp = (Player) ((Projectile) event.getDamager()).getShooter(); - } - } - - if (temp == null) { + if (player == null) { return; } - Player player = temp; - EcoBoss boss = BossUtils.getBoss(entity); if (boss == null) { @@ -110,11 +90,11 @@ public class AttackListeners extends PluginDependent implements Listener { double playerDamage; - Optional damager = topDamagers.stream().filter(damagerProperty -> damagerProperty.getPlayerUUID().equals(player.getUniqueId())).findFirst(); - playerDamage = damager.map(DamagerProperty::getDamage).orElse(0.0); + Optional damager = topDamagers.stream().filter(damagerProperty -> damagerProperty.playerUUID().equals(player.getUniqueId())).findFirst(); + playerDamage = damager.map(DamagerProperty::damage).orElse(0.0); playerDamage += event.getFinalDamage(); - topDamagers.removeIf(damagerProperty -> damagerProperty.getPlayerUUID().equals(player.getUniqueId())); + topDamagers.removeIf(damagerProperty -> damagerProperty.playerUUID().equals(player.getUniqueId())); topDamagers.add(new DamagerProperty(player.getUniqueId(), playerDamage)); entity.removeMetadata("ecobosses-top-damagers", this.getPlugin()); @@ -128,18 +108,14 @@ public class AttackListeners extends PluginDependent implements Listener { */ @EventHandler(ignoreCancelled = true) public void onAttackPlayer(@NotNull final EntityDamageByEntityEvent event) { - if (!(event.getEntity() instanceof Player)) { + if (!(event.getEntity() instanceof Player player)) { return; } - if (!(event.getDamager() instanceof LivingEntity)) { + if (!(event.getDamager() instanceof LivingEntity entity)) { return; } - LivingEntity entity = (LivingEntity) event.getDamager(); - - Player player = (Player) event.getEntity(); - EcoBoss boss = BossUtils.getBoss(entity); if (boss == null) { @@ -148,9 +124,7 @@ public class AttackListeners extends PluginDependent implements Listener { LivingEcoBoss livingEcoBoss = boss.getLivingBoss(entity); - if (livingEcoBoss == null) { - return; - } + BossUtils.warnIfNull(livingEcoBoss); livingEcoBoss.handleAttack(player); } @@ -162,12 +136,10 @@ public class AttackListeners extends PluginDependent implements Listener { */ @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH) public void defenceListener(@NotNull final EntityDamageEvent event) { - if (!(event.getEntity() instanceof LivingEntity)) { + if (!(event.getEntity() instanceof LivingEntity entity)) { return; } - LivingEntity entity = (LivingEntity) event.getEntity(); - EcoBoss boss = BossUtils.getBoss(entity); if (boss == null) { @@ -176,22 +148,22 @@ public class AttackListeners extends PluginDependent implements Listener { ImmunityOptions immunities = boss.getImmunityOptions(); - if (immunities.isImmuneToFire() + if (immunities.immuneToFire() && (event.getCause() == EntityDamageEvent.DamageCause.FIRE || event.getCause() == EntityDamageEvent.DamageCause.FIRE_TICK || event.getCause() == EntityDamageEvent.DamageCause.HOT_FLOOR)) { event.setCancelled(true); } - if (immunities.isImmuneToSuffocation()&& event.getCause() == EntityDamageEvent.DamageCause.SUFFOCATION) { + if (immunities.immuneToSuffocation()&& event.getCause() == EntityDamageEvent.DamageCause.SUFFOCATION) { event.setCancelled(true); } - if (immunities.isImmuneToDrowning() && event.getCause() == EntityDamageEvent.DamageCause.DROWNING) { + if (immunities.immuneToDrowning() && event.getCause() == EntityDamageEvent.DamageCause.DROWNING) { event.setCancelled(true); } - if (immunities.isImmuneToExplosions() && (event.getCause() == EntityDamageEvent.DamageCause.ENTITY_EXPLOSION || event.getCause() == EntityDamageEvent.DamageCause.BLOCK_EXPLOSION)) { + if (immunities.immuneToExplosions() && (event.getCause() == EntityDamageEvent.DamageCause.ENTITY_EXPLOSION || event.getCause() == EntityDamageEvent.DamageCause.BLOCK_EXPLOSION)) { event.setCancelled(true); } - if (immunities.isImmuneToProjectiles() && (event.getCause() == EntityDamageEvent.DamageCause.PROJECTILE)) { + if (immunities.immuneToProjectiles() && (event.getCause() == EntityDamageEvent.DamageCause.PROJECTILE)) { event.setCancelled(true); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/listeners/DeathListeners.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/listeners/DeathListeners.java index b3e4286..39cfcd4 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/listeners/DeathListeners.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/listeners/DeathListeners.java @@ -52,7 +52,7 @@ public class DeathListeners extends PluginDependent implements Listener { } for (OptionedSound sound : boss.getDeathSounds()) { - entity.getWorld().playSound(entity.getLocation(), sound.getSound(), sound.getVolume(), sound.getPitch()); + entity.getWorld().playSound(entity.getLocation(), sound.sound(), sound.volume(), sound.pitch()); } } @@ -89,14 +89,14 @@ public class DeathListeners extends PluginDependent implements Listener { String na = this.getPlugin().getLangYml().getString("na"); - String topDamager = top == null ? na : Bukkit.getPlayer(top.getPlayerUUID()).getDisplayName(); - String topDamage = top == null ? na : StringUtils.internalToString(top.getDamage()); + String topDamager = top == null ? na : Bukkit.getPlayer(top.playerUUID()).getDisplayName(); + String topDamage = top == null ? na : StringUtils.internalToString(top.damage()); - String secondDamager = second == null ? na : Bukkit.getPlayer(second.getPlayerUUID()).getDisplayName(); - String secondDamage = second == null ? na : StringUtils.internalToString(second.getDamage()); + String secondDamager = second == null ? na : Bukkit.getPlayer(second.playerUUID()).getDisplayName(); + String secondDamage = second == null ? na : StringUtils.internalToString(second.damage()); - String thirdDamager = third == null ? na : Bukkit.getPlayer(third.getPlayerUUID()).getDisplayName(); - String thirdDamage = third == null ? na : StringUtils.internalToString(third.getDamage()); + String thirdDamager = third == null ? na : Bukkit.getPlayer(third.playerUUID()).getDisplayName(); + String thirdDamage = third == null ? na : StringUtils.internalToString(third.damage()); for (String spawnMessage : boss.getDeathMessages()) { Bukkit.broadcastMessage(spawnMessage @@ -114,17 +114,17 @@ public class DeathListeners extends PluginDependent implements Listener { for (Pair pair : topDamagerCommands) { if (top != null && i == 1) { if (NumberUtils.randFloat(0, 100) < pair.getFirst()) { - Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), pair.getSecond().replace("%player%", Bukkit.getOfflinePlayer(top.getPlayerUUID()).getName())); + Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), pair.getSecond().replace("%player%", Bukkit.getOfflinePlayer(top.playerUUID()).getName())); } } if (second != null && i == 2) { if (NumberUtils.randFloat(0, 100) < pair.getFirst()) { - Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), pair.getSecond().replace("%player%", Bukkit.getOfflinePlayer(second.getPlayerUUID()).getName())); + Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), pair.getSecond().replace("%player%", Bukkit.getOfflinePlayer(second.playerUUID()).getName())); } } if (third != null && i == 3) { if (NumberUtils.randFloat(0, 100) < pair.getFirst()) { - Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), pair.getSecond().replace("%player%", Bukkit.getOfflinePlayer(third.getPlayerUUID()).getName())); + Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), pair.getSecond().replace("%player%", Bukkit.getOfflinePlayer(third.playerUUID()).getName())); } } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/listeners/PassiveListeners.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/listeners/PassiveListeners.java index 8040e1b..446e13d 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/listeners/PassiveListeners.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/listeners/PassiveListeners.java @@ -29,7 +29,7 @@ public class PassiveListeners extends PluginDependent implements Listener { */ @EventHandler(ignoreCancelled = true) public void onAttackBoss(@NotNull final EntityMountEvent event) { - if (!(event.getEntity() instanceof LivingEntity)) { + if (!(event.getEntity() instanceof LivingEntity entity)) { return; } @@ -37,8 +37,6 @@ public class PassiveListeners extends PluginDependent implements Listener { return; } - LivingEntity entity = (LivingEntity) event.getEntity(); - EcoBoss boss = BossUtils.getBoss(entity); if (boss == null) { diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/BossUtils.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/BossUtils.java index d6376fa..5668e70 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/BossUtils.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/BossUtils.java @@ -3,6 +3,7 @@ package com.willfp.ecobosses.bosses.util; import com.willfp.ecobosses.EcoBossesPlugin; import com.willfp.ecobosses.bosses.EcoBoss; import com.willfp.ecobosses.bosses.EcoBosses; +import com.willfp.ecobosses.bosses.LivingEcoBoss; import com.willfp.ecobosses.bosses.util.obj.DamagerProperty; import lombok.experimental.UtilityClass; import org.bukkit.Bukkit; @@ -11,6 +12,8 @@ import org.bukkit.boss.BossBar; import org.bukkit.boss.KeyedBossBar; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; import org.bukkit.persistence.PersistentDataType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -69,7 +72,7 @@ public class BossUtils { } assert topDamagers != null; - topDamagers.sort(Comparator.comparingDouble(DamagerProperty::getDamage)); + topDamagers.sort(Comparator.comparingDouble(DamagerProperty::damage)); Collections.reverse(topDamagers); return topDamagers; @@ -131,4 +134,39 @@ public class BossUtils { return amount; } + + /** + * Get player from entity if player or projectile. + * + * @param entity The entity. + * @return The player, or null if not a player. + */ + @Nullable + public Player getPlayerFromEntity(@NotNull final Entity entity) { + Player player = null; + + if (entity instanceof Player) { + player = (Player) entity; + } else if (entity instanceof Projectile) { + if (((Projectile) entity).getShooter() instanceof Player) { + player = (Player) ((Projectile) entity).getShooter(); + } + } + + return player; + } + + /** + * Warn if a boss is null. + * + * @param boss The boss. + */ + public void warnIfNull(@Nullable final LivingEcoBoss boss) { + if (boss != null) { + return; + } + + PLUGIN.getLogger().severe("Not-Null boss is null! Generating stacktrace."); + throw new NullPointerException("Not-Null boss is null!"); + } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/BossbarProperties.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/BossbarProperties.java index bafecec..45e4122 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/BossbarProperties.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/BossbarProperties.java @@ -4,15 +4,6 @@ import lombok.Data; import org.bukkit.boss.BarColor; import org.bukkit.boss.BarStyle; -@Data -public class BossbarProperties { - /** - * The BossBar color. - */ - private final BarColor color; +public record BossbarProperties(BarColor color, BarStyle style) { - /** - * The BossBar style. - */ - private final BarStyle style; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/DamagerProperty.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/DamagerProperty.java index 4c29e09..24e94e4 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/DamagerProperty.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/DamagerProperty.java @@ -4,15 +4,6 @@ import lombok.Data; import java.util.UUID; -@Data -public class DamagerProperty { - /** - * The player. - */ - private final UUID playerUUID; +public record DamagerProperty(UUID playerUUID, double damage) { - /** - * The damage. - */ - private final double damage; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/ExperienceOptions.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/ExperienceOptions.java index 648ad48..5201ecf 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/ExperienceOptions.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/ExperienceOptions.java @@ -2,29 +2,7 @@ package com.willfp.ecobosses.bosses.util.obj; import com.willfp.eco.util.NumberUtils; -public class ExperienceOptions { - /** - * The minimum xp to drop. - */ - private final int minimum; - - /** - * The maximum xp to drop. - */ - private final int maximum; - - /** - * Create new experience options. - * - * @param minimum Minimum xp. - * @param maximum Maximum xp. - */ - public ExperienceOptions(final int minimum, - final int maximum) { - this.minimum = minimum; - this.maximum = maximum; - } - +public record ExperienceOptions(int minimum, int maximum) { /** * Generate an exp amount. * diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/ImmunityOptions.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/ImmunityOptions.java index 710098e..3835c7b 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/ImmunityOptions.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/ImmunityOptions.java @@ -2,30 +2,9 @@ package com.willfp.ecobosses.bosses.util.obj; import lombok.Data; -@Data -public class ImmunityOptions { - /** - * If is immune to fire. - */ - private final boolean immuneToFire; - - /** - * If is immune to suffocation. - */ - private final boolean immuneToSuffocation; - - /** - * If is immune to drowning. - */ - private final boolean immuneToDrowning; - - /** - * If is immune to projectiles. - */ - private final boolean immuneToProjectiles; - - /** - * If is immune to explosions. - */ - private final boolean immuneToExplosions; +public record ImmunityOptions(boolean immuneToFire, + boolean immuneToSuffocation, + boolean immuneToDrowning, + boolean immuneToProjectiles, + boolean immuneToExplosions) { } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/OptionedSound.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/OptionedSound.java index f3c4970..a2814a0 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/OptionedSound.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/OptionedSound.java @@ -4,37 +4,8 @@ import lombok.Getter; import org.bukkit.Sound; import org.jetbrains.annotations.NotNull; -public class OptionedSound { - /** - * The sound. - */ - @Getter - private final Sound sound; +public record OptionedSound(Sound sound, + float volume, + float pitch) { - /** - * The volume. - */ - @Getter - private final float volume; - - /** - * The pitch, from 0.5 to 2. - */ - @Getter - private final float pitch; - - /** - * Create a new optioned sound. - * - * @param sound The sound. - * @param volume The volume. - * @param pitch The pitch, from 0.5 to 2. - */ - public OptionedSound(@NotNull final Sound sound, - final float volume, - final float pitch) { - this.sound = sound; - this.volume = volume; - this.pitch = pitch; - } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/SpawnTotem.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/SpawnTotem.java index e7f2008..fa0ca3b 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/SpawnTotem.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/SpawnTotem.java @@ -3,20 +3,7 @@ package com.willfp.ecobosses.bosses.util.obj; import lombok.Data; import org.bukkit.Material; -@Data -public class SpawnTotem { - /** - * The bottom block. - */ - private final Material bottom; - - /** - * The middle block. - */ - private final Material middle; - - /** - * The top block. - */ - private final Material top; +public record SpawnTotem(Material bottom, + Material middle, + Material top) { }