From 28ff948f62fc72193983cbbad7169de1253486b9 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Tue, 6 Apr 2021 20:04:29 +0100 Subject: [PATCH] Added no-boats option --- .../com/willfp/ecobosses/EcoBossesPlugin.java | 4 +- .../com/willfp/ecobosses/bosses/EcoBoss.java | 9 ++++ .../bosses/listeners/PassiveListeners.java | 52 +++++++++++++++++++ .../src/main/resources/bosses/alpha_wolf.yml | 2 + .../src/main/resources/bosses/illusioner.yml | 2 + .../src/main/resources/bosses/steel_golem.yml | 2 + .../src/main/resources/bosses/tarantula.yml | 2 + 7 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/listeners/PassiveListeners.java diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/EcoBossesPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/EcoBossesPlugin.java index c9e6cb0..3b34938 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/EcoBossesPlugin.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/EcoBossesPlugin.java @@ -7,6 +7,7 @@ import com.willfp.eco.core.integrations.IntegrationLoader; import com.willfp.ecobosses.bosses.EcoBosses; import com.willfp.ecobosses.bosses.listeners.AttackListeners; import com.willfp.ecobosses.bosses.listeners.DeathListeners; +import com.willfp.ecobosses.bosses.listeners.PassiveListeners; import com.willfp.ecobosses.bosses.listeners.SpawnListeners; import com.willfp.ecobosses.commands.CommandEbdrop; import com.willfp.ecobosses.commands.CommandEbkillall; @@ -121,7 +122,8 @@ public class EcoBossesPlugin extends EcoPlugin { return Arrays.asList( new AttackListeners(this), new DeathListeners(this), - new SpawnListeners(this) + new SpawnListeners(this), + new PassiveListeners(this) ); } 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 1a6e16d..8afb876 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 @@ -228,6 +228,12 @@ public class EcoBoss extends PluginDependent { @Getter private final TargetMode targetMode; + /** + * If the boss shouldn't get into boats and minecarts. + */ + @Getter + private final boolean disableBoats; + /** * Create a new Boss. * @@ -416,6 +422,9 @@ public class EcoBoss extends PluginDependent { this.targetDistance = this.getConfig().getDouble("attacks.target.range"); this.targetMode = TargetMode.getByName(this.getConfig().getString("attacks.target.mode")); + // Boat + Minecarts + this.disableBoats = this.getConfig().getBool("defence.no-boats"); + if (this.getConfig().getBool("enabled")) { EcoBosses.addBoss(this); } 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 new file mode 100644 index 0000000..8040e1b --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/listeners/PassiveListeners.java @@ -0,0 +1,52 @@ +package com.willfp.ecobosses.bosses.listeners; + +import com.willfp.eco.core.EcoPlugin; +import com.willfp.eco.core.PluginDependent; +import com.willfp.ecobosses.bosses.EcoBoss; +import com.willfp.ecobosses.bosses.util.BossUtils; +import org.bukkit.entity.Boat; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Minecart; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.jetbrains.annotations.NotNull; +import org.spigotmc.event.entity.EntityMountEvent; + +public class PassiveListeners extends PluginDependent implements Listener { + /** + * Create new attack listeners. + * + * @param plugin Instance of EcoBosses. + */ + public PassiveListeners(@NotNull final EcoPlugin plugin) { + super(plugin); + } + + /** + * Called when a player attacks a boss. + * + * @param event The event to listen for. + */ + @EventHandler(ignoreCancelled = true) + public void onAttackBoss(@NotNull final EntityMountEvent event) { + if (!(event.getEntity() instanceof LivingEntity)) { + return; + } + + if (!(event.getMount() instanceof Boat || event.getMount() instanceof Minecart)) { + return; + } + + LivingEntity entity = (LivingEntity) event.getEntity(); + + EcoBoss boss = BossUtils.getBoss(entity); + + if (boss == null) { + return; + } + + if (boss.isDisableBoats()) { + event.setCancelled(true); + } + } +} diff --git a/eco-core/core-plugin/src/main/resources/bosses/alpha_wolf.yml b/eco-core/core-plugin/src/main/resources/bosses/alpha_wolf.yml index b950783..b67b7c9 100644 --- a/eco-core/core-plugin/src/main/resources/bosses/alpha_wolf.yml +++ b/eco-core/core-plugin/src/main/resources/bosses/alpha_wolf.yml @@ -68,6 +68,8 @@ defence: projectiles: true suffocation: true + no-boats: true + incoming-multipliers: melee: 1.1 projectile: 0.3 diff --git a/eco-core/core-plugin/src/main/resources/bosses/illusioner.yml b/eco-core/core-plugin/src/main/resources/bosses/illusioner.yml index c7d8ec9..2f14d94 100644 --- a/eco-core/core-plugin/src/main/resources/bosses/illusioner.yml +++ b/eco-core/core-plugin/src/main/resources/bosses/illusioner.yml @@ -71,6 +71,8 @@ defence: projectiles: false suffocation: true + no-boats: true + incoming-multipliers: melee: 1 projectile: 0.6 diff --git a/eco-core/core-plugin/src/main/resources/bosses/steel_golem.yml b/eco-core/core-plugin/src/main/resources/bosses/steel_golem.yml index a75f979..60c72dc 100644 --- a/eco-core/core-plugin/src/main/resources/bosses/steel_golem.yml +++ b/eco-core/core-plugin/src/main/resources/bosses/steel_golem.yml @@ -72,6 +72,8 @@ defence: projectiles: true suffocation: true + no-boats: true + incoming-multipliers: melee: 0.8 projectile: 0.2 diff --git a/eco-core/core-plugin/src/main/resources/bosses/tarantula.yml b/eco-core/core-plugin/src/main/resources/bosses/tarantula.yml index 48e6ed0..ab63f2e 100644 --- a/eco-core/core-plugin/src/main/resources/bosses/tarantula.yml +++ b/eco-core/core-plugin/src/main/resources/bosses/tarantula.yml @@ -72,6 +72,8 @@ defence: projectiles: false suffocation: true + no-boats: true + incoming-multipliers: melee: 0.6 projectile: 0.3