From 4f64526e796fd19156eb8e6e18c0e61572f93434 Mon Sep 17 00:00:00 2001 From: Indyuce Date: Mon, 30 Mar 2020 20:46:27 +0200 Subject: [PATCH] !Skill result refactor --- .../api/skill/result/LocationSkillResult.java | 38 +++++++++++++++++++ .../skill/{ => result}/TargetSkillResult.java | 7 +++- .../Indyuce/mmocore/skill/Combo_Attack.java | 2 +- .../net/Indyuce/mmocore/skill/Control.java | 2 +- .../net/Indyuce/mmocore/skill/Deep_Wound.java | 2 +- .../net/Indyuce/mmocore/skill/Fire_Storm.java | 2 +- .../Indyuce/mmocore/skill/Furtive_Strike.java | 2 +- .../mmocore/skill/Greater_Healings.java | 2 +- .../Indyuce/mmocore/skill/Human_Shield.java | 2 +- .../net/Indyuce/mmocore/skill/Ice_Spikes.java | 37 ++++-------------- .../Indyuce/mmocore/skill/Minor_Healings.java | 2 +- .../net/Indyuce/mmocore/skill/Telekinesy.java | 2 +- .../net/Indyuce/mmocore/skill/Weaken.java | 2 +- 13 files changed, 61 insertions(+), 41 deletions(-) create mode 100644 src/main/java/net/Indyuce/mmocore/api/skill/result/LocationSkillResult.java rename src/main/java/net/Indyuce/mmocore/api/skill/{ => result}/TargetSkillResult.java (84%) diff --git a/src/main/java/net/Indyuce/mmocore/api/skill/result/LocationSkillResult.java b/src/main/java/net/Indyuce/mmocore/api/skill/result/LocationSkillResult.java new file mode 100644 index 00000000..34d6c31a --- /dev/null +++ b/src/main/java/net/Indyuce/mmocore/api/skill/result/LocationSkillResult.java @@ -0,0 +1,38 @@ +package net.Indyuce.mmocore.api.skill.result; + +import org.bukkit.FluidCollisionMode; +import org.bukkit.Location; +import org.bukkit.util.RayTraceResult; + +import net.Indyuce.mmocore.api.player.PlayerData; +import net.Indyuce.mmocore.api.skill.Skill.SkillInfo; +import net.Indyuce.mmocore.api.skill.SkillResult; +import net.Indyuce.mmocore.api.util.MMOCoreUtils; + +public class LocationSkillResult extends SkillResult { + private Location loc; + + /* + * this SkillResult is only available for 1.13+ users. + */ + public LocationSkillResult(PlayerData data, SkillInfo skill, double range) { + super(data, skill); + + if (isSuccessful()) { + + RayTraceResult result = data.getPlayer().getWorld().rayTrace(data.getPlayer().getEyeLocation(), data.getPlayer().getEyeLocation().getDirection(), range, FluidCollisionMode.ALWAYS, true, 1.0D, entity -> MMOCoreUtils.canTarget(data.getPlayer(), entity)); + if (result == null) + abort(CancelReason.OTHER); + else + loc = result.getHitBlock() != null ? result.getHitBlock().getLocation() : result.getHitEntity() != null ? result.getHitEntity().getLocation() : null; + } + } + + public boolean hasHit() { + return loc != null; + } + + public Location getHit() { + return loc; + } +} diff --git a/src/main/java/net/Indyuce/mmocore/api/skill/TargetSkillResult.java b/src/main/java/net/Indyuce/mmocore/api/skill/result/TargetSkillResult.java similarity index 84% rename from src/main/java/net/Indyuce/mmocore/api/skill/TargetSkillResult.java rename to src/main/java/net/Indyuce/mmocore/api/skill/result/TargetSkillResult.java index bc238851..1d3f5cfe 100644 --- a/src/main/java/net/Indyuce/mmocore/api/skill/TargetSkillResult.java +++ b/src/main/java/net/Indyuce/mmocore/api/skill/result/TargetSkillResult.java @@ -1,9 +1,10 @@ -package net.Indyuce.mmocore.api.skill; +package net.Indyuce.mmocore.api.skill.result; import org.bukkit.entity.LivingEntity; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.skill.Skill.SkillInfo; +import net.Indyuce.mmocore.api.skill.SkillResult; import net.Indyuce.mmocore.api.util.MMOCoreUtils; import net.mmogroup.mmolib.MMOLib; import net.mmogroup.mmolib.api.MMORayTraceResult; @@ -23,6 +24,10 @@ public class TargetSkillResult extends SkillResult { } } + public boolean hasTarget() { + return target != null; + } + public LivingEntity getTarget() { return target; } diff --git a/src/main/java/net/Indyuce/mmocore/skill/Combo_Attack.java b/src/main/java/net/Indyuce/mmocore/skill/Combo_Attack.java index d6c0d97e..956fc4c9 100644 --- a/src/main/java/net/Indyuce/mmocore/skill/Combo_Attack.java +++ b/src/main/java/net/Indyuce/mmocore/skill/Combo_Attack.java @@ -10,7 +10,7 @@ import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.skill.Skill; import net.Indyuce.mmocore.api.skill.SkillResult; -import net.Indyuce.mmocore.api.skill.TargetSkillResult; +import net.Indyuce.mmocore.api.skill.result.TargetSkillResult; import net.Indyuce.mmocore.api.util.math.formula.LinearValue; import net.mmogroup.mmolib.MMOLib; import net.mmogroup.mmolib.api.AttackResult; diff --git a/src/main/java/net/Indyuce/mmocore/skill/Control.java b/src/main/java/net/Indyuce/mmocore/skill/Control.java index a77b1fbb..febe4bf8 100644 --- a/src/main/java/net/Indyuce/mmocore/skill/Control.java +++ b/src/main/java/net/Indyuce/mmocore/skill/Control.java @@ -17,7 +17,7 @@ import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.skill.Skill; import net.Indyuce.mmocore.api.skill.SkillResult; -import net.Indyuce.mmocore.api.skill.TargetSkillResult; +import net.Indyuce.mmocore.api.skill.result.TargetSkillResult; import net.Indyuce.mmocore.api.util.math.formula.LinearValue; import net.mmogroup.mmolib.version.VersionMaterial; import net.mmogroup.mmolib.version.VersionSound; diff --git a/src/main/java/net/Indyuce/mmocore/skill/Deep_Wound.java b/src/main/java/net/Indyuce/mmocore/skill/Deep_Wound.java index 99db73e0..763ba490 100644 --- a/src/main/java/net/Indyuce/mmocore/skill/Deep_Wound.java +++ b/src/main/java/net/Indyuce/mmocore/skill/Deep_Wound.java @@ -9,7 +9,7 @@ import org.bukkit.entity.LivingEntity; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.skill.Skill; import net.Indyuce.mmocore.api.skill.SkillResult; -import net.Indyuce.mmocore.api.skill.TargetSkillResult; +import net.Indyuce.mmocore.api.skill.result.TargetSkillResult; import net.Indyuce.mmocore.api.util.math.formula.LinearValue; import net.mmogroup.mmolib.MMOLib; import net.mmogroup.mmolib.api.AttackResult; diff --git a/src/main/java/net/Indyuce/mmocore/skill/Fire_Storm.java b/src/main/java/net/Indyuce/mmocore/skill/Fire_Storm.java index 37b55194..204f907c 100644 --- a/src/main/java/net/Indyuce/mmocore/skill/Fire_Storm.java +++ b/src/main/java/net/Indyuce/mmocore/skill/Fire_Storm.java @@ -12,7 +12,7 @@ import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.skill.Skill; import net.Indyuce.mmocore.api.skill.SkillResult; -import net.Indyuce.mmocore.api.skill.TargetSkillResult; +import net.Indyuce.mmocore.api.skill.result.TargetSkillResult; import net.Indyuce.mmocore.api.util.math.formula.LinearValue; import net.Indyuce.mmocore.api.util.math.particle.ParabolicProjectile; import net.mmogroup.mmolib.MMOLib; diff --git a/src/main/java/net/Indyuce/mmocore/skill/Furtive_Strike.java b/src/main/java/net/Indyuce/mmocore/skill/Furtive_Strike.java index d032da62..34681059 100644 --- a/src/main/java/net/Indyuce/mmocore/skill/Furtive_Strike.java +++ b/src/main/java/net/Indyuce/mmocore/skill/Furtive_Strike.java @@ -8,7 +8,7 @@ import org.bukkit.entity.LivingEntity; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.skill.Skill; import net.Indyuce.mmocore.api.skill.SkillResult; -import net.Indyuce.mmocore.api.skill.TargetSkillResult; +import net.Indyuce.mmocore.api.skill.result.TargetSkillResult; import net.Indyuce.mmocore.api.util.math.formula.LinearValue; import net.Indyuce.mmocore.api.util.math.particle.SmallParticleEffect; import net.mmogroup.mmolib.MMOLib; diff --git a/src/main/java/net/Indyuce/mmocore/skill/Greater_Healings.java b/src/main/java/net/Indyuce/mmocore/skill/Greater_Healings.java index 9cf8441a..b78af40b 100644 --- a/src/main/java/net/Indyuce/mmocore/skill/Greater_Healings.java +++ b/src/main/java/net/Indyuce/mmocore/skill/Greater_Healings.java @@ -9,7 +9,7 @@ import org.bukkit.entity.LivingEntity; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.skill.Skill; import net.Indyuce.mmocore.api.skill.SkillResult; -import net.Indyuce.mmocore.api.skill.TargetSkillResult; +import net.Indyuce.mmocore.api.skill.result.TargetSkillResult; import net.Indyuce.mmocore.api.util.math.formula.LinearValue; import net.Indyuce.mmocore.api.util.math.particle.SmallParticleEffect; diff --git a/src/main/java/net/Indyuce/mmocore/skill/Human_Shield.java b/src/main/java/net/Indyuce/mmocore/skill/Human_Shield.java index cd937f00..8b3353f2 100644 --- a/src/main/java/net/Indyuce/mmocore/skill/Human_Shield.java +++ b/src/main/java/net/Indyuce/mmocore/skill/Human_Shield.java @@ -15,7 +15,7 @@ import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.skill.Skill; import net.Indyuce.mmocore.api.skill.SkillResult; -import net.Indyuce.mmocore.api.skill.TargetSkillResult; +import net.Indyuce.mmocore.api.skill.result.TargetSkillResult; import net.Indyuce.mmocore.api.util.math.formula.LinearValue; import net.mmogroup.mmolib.version.VersionMaterial; diff --git a/src/main/java/net/Indyuce/mmocore/skill/Ice_Spikes.java b/src/main/java/net/Indyuce/mmocore/skill/Ice_Spikes.java index 961f3a58..1a714aa6 100644 --- a/src/main/java/net/Indyuce/mmocore/skill/Ice_Spikes.java +++ b/src/main/java/net/Indyuce/mmocore/skill/Ice_Spikes.java @@ -1,22 +1,20 @@ package net.Indyuce.mmocore.skill; -import org.bukkit.FluidCollisionMode; import org.bukkit.Location; import org.bukkit.Particle; import org.bukkit.Sound; -import org.bukkit.block.Block; import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.RayTraceResult; import org.bukkit.util.Vector; import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.skill.Skill; import net.Indyuce.mmocore.api.skill.SkillResult; +import net.Indyuce.mmocore.api.skill.result.LocationSkillResult; import net.Indyuce.mmocore.api.util.MMOCoreUtils; import net.Indyuce.mmocore.api.util.math.Line3D; import net.Indyuce.mmocore.api.util.math.formula.LinearValue; @@ -26,8 +24,7 @@ import net.mmogroup.mmolib.api.DamageType; import net.mmogroup.mmolib.version.VersionMaterial; public class Ice_Spikes extends Skill { - - private static final double r = 3; + private static final double radius = 3; public Ice_Spikes() { super(); @@ -42,19 +39,11 @@ public class Ice_Spikes extends Skill { @Override public SkillResult whenCast(PlayerData data, SkillInfo skill) { - IceSpikesCast cast = new IceSpikesCast(data, skill); - if (!cast.isSuccessful() || cast.loc == null) + LocationSkillResult cast = new LocationSkillResult(data, skill, 20); + if (!cast.isSuccessful()) return cast; - - Location loc; - Block hitBlock = cast.loc.getHitBlock(); - if (hitBlock == null) { - Entity hitEntity = cast.loc.getHitEntity(); - if(hitEntity == null) return cast; - else loc = hitEntity.getLocation(); - } - else loc = hitBlock.getLocation(); + Location loc = cast.getHit(); double damage = cast.getModifier("damage"); int slow = (int) (20 * cast.getModifier("slow")); @@ -69,14 +58,14 @@ public class Ice_Spikes extends Skill { return; } - Location loc1 = loc.clone().add(offset() * r, 0, offset() * r).add(0, 2, 0); + Location loc1 = loc.clone().add(offset() * radius, 0, offset() * radius).add(0, 2, 0); loc.getWorld().spawnParticle(Particle.FIREWORKS_SPARK, loc1, 32, 0, 2, 0, 0); loc.getWorld().spawnParticle(Particle.SNOWBALL, loc1, 32, 0, 2, 0, 0); loc.getWorld().playSound(loc1, Sound.BLOCK_GLASS_BREAK, 2, 0); Line3D line = new Line3D(loc.toVector(), loc.toVector().add(new Vector(0, 1, 0))); for (Entity entity : MMOCoreUtils.getNearbyChunkEntities(loc1)) - if (line.distanceSquared(entity.getLocation().toVector()) < 3 && Math.abs(entity.getLocation().getY() - loc1.getY()) < 10 && MMOCoreUtils.canTarget(data.getPlayer(), entity)) { + if (line.distanceSquared(entity.getLocation().toVector()) < radius && Math.abs(entity.getLocation().getY() - loc1.getY()) < 10 && MMOCoreUtils.canTarget(data.getPlayer(), entity)) { MMOLib.plugin.getDamage().damage(data.getPlayer(), (LivingEntity) entity, new AttackResult(damage, DamageType.SKILL, DamageType.MAGIC)); ((LivingEntity) entity).addPotionEffect(new PotionEffect(PotionEffectType.SLOW, slow, 0)); } @@ -88,16 +77,4 @@ public class Ice_Spikes extends Skill { private double offset() { return random.nextDouble() * (random.nextBoolean() ? 1 : -1); } - - private class IceSpikesCast extends SkillResult { - private RayTraceResult loc; - - public IceSpikesCast(PlayerData data, SkillInfo skill) { - super(data, skill); - if (!isSuccessful()) abort(); - - loc = data.getPlayer().getWorld().rayTrace(data.getPlayer().getEyeLocation(), data.getPlayer().getEyeLocation().getDirection(), - 30, FluidCollisionMode.ALWAYS, true, 1.0D, (entity) -> MMOCoreUtils.canTarget(data.getPlayer(), entity)); - } - } } diff --git a/src/main/java/net/Indyuce/mmocore/skill/Minor_Healings.java b/src/main/java/net/Indyuce/mmocore/skill/Minor_Healings.java index 72d614dc..4ceaa149 100644 --- a/src/main/java/net/Indyuce/mmocore/skill/Minor_Healings.java +++ b/src/main/java/net/Indyuce/mmocore/skill/Minor_Healings.java @@ -9,7 +9,7 @@ import org.bukkit.entity.LivingEntity; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.skill.Skill; import net.Indyuce.mmocore.api.skill.SkillResult; -import net.Indyuce.mmocore.api.skill.TargetSkillResult; +import net.Indyuce.mmocore.api.skill.result.TargetSkillResult; import net.Indyuce.mmocore.api.util.math.formula.LinearValue; import net.Indyuce.mmocore.api.util.math.particle.SmallParticleEffect; diff --git a/src/main/java/net/Indyuce/mmocore/skill/Telekinesy.java b/src/main/java/net/Indyuce/mmocore/skill/Telekinesy.java index d7016f7f..3efd5b9c 100644 --- a/src/main/java/net/Indyuce/mmocore/skill/Telekinesy.java +++ b/src/main/java/net/Indyuce/mmocore/skill/Telekinesy.java @@ -15,7 +15,7 @@ import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.skill.Skill; import net.Indyuce.mmocore.api.skill.SkillResult; -import net.Indyuce.mmocore.api.skill.TargetSkillResult; +import net.Indyuce.mmocore.api.skill.result.TargetSkillResult; import net.Indyuce.mmocore.api.util.math.formula.LinearValue; import net.Indyuce.mmocore.api.util.math.particle.ParabolicProjectile; import net.mmogroup.mmolib.version.VersionMaterial; diff --git a/src/main/java/net/Indyuce/mmocore/skill/Weaken.java b/src/main/java/net/Indyuce/mmocore/skill/Weaken.java index 06bf9a0e..9f9b5dfc 100644 --- a/src/main/java/net/Indyuce/mmocore/skill/Weaken.java +++ b/src/main/java/net/Indyuce/mmocore/skill/Weaken.java @@ -14,7 +14,7 @@ import net.Indyuce.mmocore.MMOCore; import net.Indyuce.mmocore.api.player.PlayerData; import net.Indyuce.mmocore.api.skill.Skill; import net.Indyuce.mmocore.api.skill.SkillResult; -import net.Indyuce.mmocore.api.skill.TargetSkillResult; +import net.Indyuce.mmocore.api.skill.result.TargetSkillResult; import net.Indyuce.mmocore.api.util.math.formula.LinearValue; import net.Indyuce.mmocore.api.util.math.particle.ParabolicProjectile; import net.Indyuce.mmocore.api.util.math.particle.SmallParticleEffect;