From 4430c10546262a21fb5be1bebae92b8123937fa1 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Mon, 5 Apr 2021 13:44:19 +0100 Subject: [PATCH] Moved teleportation into effects --- .../com/willfp/ecobosses/bosses/EcoBoss.java | 20 ----- .../ecobosses/bosses/effects/Effects.java | 2 + .../effects/effects/EffectTeleport.java | 75 +++++++++++++++++++ .../bosses/listeners/AttackListeners.java | 41 ---------- .../bosses/util/obj/TeleportOptions.java | 16 ---- .../src/main/resources/bosses/alpha_wolf.yml | 6 -- .../src/main/resources/bosses/illusioner.yml | 7 +- .../src/main/resources/bosses/steel_golem.yml | 6 -- .../src/main/resources/bosses/tarantula.yml | 6 -- 9 files changed, 78 insertions(+), 101 deletions(-) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/effects/effects/EffectTeleport.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/TeleportOptions.java 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 22a72ec..1a6e16d 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 @@ -16,7 +16,6 @@ import com.willfp.ecobosses.bosses.util.obj.ImmunityOptions; import com.willfp.ecobosses.bosses.util.obj.OptionedSound; import com.willfp.ecobosses.bosses.util.obj.SpawnTotem; import com.willfp.ecobosses.bosses.util.obj.TargetMode; -import com.willfp.ecobosses.bosses.util.obj.TeleportOptions; import lombok.AccessLevel; import lombok.Getter; import org.bukkit.Bukkit; @@ -171,18 +170,6 @@ public class EcoBoss extends PluginDependent { @Getter private final List summonSounds; - /** - * If the boss can teleport. - */ - @Getter - private final boolean teleportationEnabled; - - /** - * Teleport options. - */ - @Getter - private final TeleportOptions teleportOptions; - /** * Spawn messages. */ @@ -380,13 +367,6 @@ public class EcoBoss extends PluginDependent { this.deathMessages.add(StringUtils.translate(string)); } - // Teleportation - this.teleportationEnabled = this.getConfig().getBool("defence.teleport.enabled"); - this.teleportOptions = new TeleportOptions( - this.getConfig().getInt("defence.teleport.range"), - this.getConfig().getDouble("defence.teleport.chance") - ); - // Top Damager Commands this.topDamagerCommands = new HashMap<>(); for (int i = 1; i <= 3; i++) { diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/effects/Effects.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/effects/Effects.java index de70882..0191b59 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/effects/Effects.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/effects/Effects.java @@ -6,6 +6,7 @@ import com.willfp.ecobosses.bosses.effects.effects.EffectGivePotionEffect; import com.willfp.ecobosses.bosses.effects.effects.EffectLightningNearbyEntities; import com.willfp.ecobosses.bosses.effects.effects.EffectShuffleHotbar; import com.willfp.ecobosses.bosses.effects.effects.EffectSummon; +import com.willfp.ecobosses.bosses.effects.effects.EffectTeleport; import lombok.experimental.UtilityClass; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -25,6 +26,7 @@ public class Effects { .put("summon", EffectSummon::new) .put("give-potion-effect", EffectGivePotionEffect::new) .put("shuffle-hotbar", EffectShuffleHotbar::new) + .put("teleport", EffectTeleport::new) .build(); /** diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/effects/effects/EffectTeleport.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/effects/effects/EffectTeleport.java new file mode 100644 index 0000000..1ffa1b4 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/effects/effects/EffectTeleport.java @@ -0,0 +1,75 @@ +package com.willfp.ecobosses.bosses.effects.effects; + +import com.willfp.eco.util.NumberUtils; +import com.willfp.ecobosses.bosses.EcoBoss; +import com.willfp.ecobosses.bosses.effects.Effect; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class EffectTeleport extends Effect { + private final int range; + private final double chance; + + public EffectTeleport(@NotNull final List args) { + super(args); + + if (args.size() < 2) { + showConfigError("Incorrect amount of arguments!"); + } + + range = Integer.parseInt(args.get(0)); + chance = Double.parseDouble(args.get(1)); + } + + @Override + public String getUsage() { + return "teleport::"; + } + + @Override + public void onAttack(@NotNull final EcoBoss boss, + @NotNull final LivingEntity entity, + @NotNull final Player player) { + if (NumberUtils.randFloat(0, 100) > this.chance) { + return; + } + + List valid = new ArrayList<>(); + for (int x = -range; x <= range; x++) { + for (int y = -range; y <= range; y++) { + for (int z = -range; z <= range; z++) { + Location location = entity.getLocation().clone(); + location.setX(location.getX() + x); + location.setY(location.getY() + y); + location.setZ(location.getZ() + z); + + Block block = location.getBlock(); + + if (block.getType() == Material.AIR + && block.getRelative(BlockFace.UP).getType() == Material.AIR + && !(block.getRelative(BlockFace.DOWN).isLiquid() || block.getRelative(BlockFace.DOWN).getType() == Material.AIR)) { + valid.add(location); + } + } + } + } + + if (valid.isEmpty()) { + return; + } + + Collections.shuffle(valid); + Location location = valid.get(0); + + entity.teleport(location); + } +} 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 d05d0dd..2406f04 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 @@ -2,16 +2,11 @@ package com.willfp.ecobosses.bosses.listeners; import com.willfp.eco.core.EcoPlugin; import com.willfp.eco.core.PluginDependent; -import com.willfp.eco.util.NumberUtils; import com.willfp.ecobosses.bosses.EcoBoss; import com.willfp.ecobosses.bosses.LivingEcoBoss; import com.willfp.ecobosses.bosses.util.BossUtils; import com.willfp.ecobosses.bosses.util.obj.DamagerProperty; import com.willfp.ecobosses.bosses.util.obj.ImmunityOptions; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; @@ -22,8 +17,6 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; @@ -200,39 +193,5 @@ public class AttackListeners extends PluginDependent implements Listener { event.setDamage(event.getDamage() * entry.getValue()); } } - - if (boss.isTeleportationEnabled()) { - if (NumberUtils.randFloat(0, 100) < boss.getTeleportOptions().getChance()) { - int range = boss.getTeleportOptions().getRange(); - List valid = new ArrayList<>(); - for (int x = -range; x <= range; x++) { - for (int y = -range; y <= range; y++) { - for (int z = -range; z <= range; z++) { - Location location = event.getEntity().getLocation().clone(); - location.setX(location.getX() + x); - location.setY(location.getY() + y); - location.setZ(location.getZ() + z); - - Block block = location.getBlock(); - - if (block.getType() == Material.AIR - && block.getRelative(BlockFace.UP).getType() == Material.AIR - && !(block.getRelative(BlockFace.DOWN).isLiquid() || block.getRelative(BlockFace.DOWN).getType() == Material.AIR)) { - valid.add(location); - } - } - } - } - - if (valid.isEmpty()) { - return; - } - - Collections.shuffle(valid); - Location location = valid.get(0); - - event.getEntity().teleport(location); - } - } } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/TeleportOptions.java b/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/TeleportOptions.java deleted file mode 100644 index f4ff280..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecobosses/bosses/util/obj/TeleportOptions.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.willfp.ecobosses.bosses.util.obj; - -import lombok.Data; - -@Data -public class TeleportOptions { - /** - * The teleportation range. - */ - private final int range; - - /** - * The chance to teleport. - */ - private final double chance; -} 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 24182bd..9c1e924 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 @@ -71,12 +71,6 @@ defence: melee: 1.1 projectile: 0.3 - # If the boss should teleport when damaged - teleport: - enabled: false - range: 7 - chance: 15 # As a percentage - attacks: # Chance is rolled when boss attacks player on-injure: true # If chance should be rolled when boss is attacked too 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 da58d19..9b752c7 100644 --- a/eco-core/core-plugin/src/main/resources/bosses/illusioner.yml +++ b/eco-core/core-plugin/src/main/resources/bosses/illusioner.yml @@ -60,6 +60,7 @@ effects: - "shuffle-hotbar:10" - "give-potion-effect:confusion:10:200:10" - "give-potion-effect:blindness:1:40:20" + - "teleport:7:15" defence: immunities: @@ -73,12 +74,6 @@ defence: melee: 1 projectile: 0.6 - # If the boss should teleport when damaged - teleport: - enabled: true - range: 7 - chance: 15 # As a percentage - attacks: # Chance is rolled when boss attacks player on-injure: true # If chance should be rolled when boss is attacked too 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 8a0a844..8cbb9da 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 @@ -75,12 +75,6 @@ defence: melee: 0.8 projectile: 0.2 - # If the boss should teleport when damaged - teleport: - enabled: false - range: 7 - chance: 15 # As a percentage - attacks: # Chance is rolled when boss attacks player on-injure: true # If chance should be rolled when boss is attacked too 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 593ad97..c4c70bb 100644 --- a/eco-core/core-plugin/src/main/resources/bosses/tarantula.yml +++ b/eco-core/core-plugin/src/main/resources/bosses/tarantula.yml @@ -75,12 +75,6 @@ defence: melee: 0.6 projectile: 0.3 - # If the boss should teleport when damaged - teleport: - enabled: false - range: 7 - chance: 15 # As a percentage - attacks: # Chance is rolled when boss attacks player on-injure: true # If chance should be rolled when boss is attacked too