From 25b350c09ac94b00a8da3434514f813d72aad5ec Mon Sep 17 00:00:00 2001 From: Indyuce Date: Tue, 14 Apr 2020 01:07:45 +0200 Subject: [PATCH] First step for party friendly fire --- .../mmocore/api/util/MMOCoreUtils.java | 23 +++++++++++++++---- .../mmocore/skill/Empowered_Attack.java | 2 +- .../net/Indyuce/mmocore/skill/Fire_Rage.java | 2 +- .../net/Indyuce/mmocore/skill/Fireball.java | 4 ++-- .../net/Indyuce/mmocore/skill/Ice_Spikes.java | 2 +- .../net/Indyuce/mmocore/skill/Power_Mark.java | 2 +- 6 files changed, 25 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/Indyuce/mmocore/api/util/MMOCoreUtils.java b/src/main/java/net/Indyuce/mmocore/api/util/MMOCoreUtils.java index 198e7735..bfa549a5 100644 --- a/src/main/java/net/Indyuce/mmocore/api/util/MMOCoreUtils.java +++ b/src/main/java/net/Indyuce/mmocore/api/util/MMOCoreUtils.java @@ -21,6 +21,7 @@ import org.bukkit.util.io.BukkitObjectOutputStream; import org.yaml.snakeyaml.external.biz.base64Coder.Base64Coder; import net.Indyuce.mmocore.MMOCore; +import net.Indyuce.mmocore.api.player.PlayerData; import net.mmogroup.mmolib.MMOLib; import net.mmogroup.mmolib.version.VersionMaterial; @@ -30,7 +31,8 @@ public class MMOCoreUtils { } public static String displayName(ItemStack item) { - return item.hasItemMeta() && item.getItemMeta().hasDisplayName() ? item.getItemMeta().getDisplayName() : caseOnWords(item.getType().name().replace("_", " ")); + return item.hasItemMeta() && item.getItemMeta().hasDisplayName() ? item.getItemMeta().getDisplayName() + : caseOnWords(item.getType().name().replace("_", " ")); } public static String caseOnWords(String s) { @@ -58,7 +60,8 @@ public class MMOCoreUtils { Validate.notNull(string, "String cannot be null"); String[] split = string.split("\\:"); Material material = Material.valueOf(split[0].toUpperCase().replace("-", "_").replace(" ", "_")); - return split.length > 1 ? MMOLib.plugin.getVersion().getWrapper().textureItem(material, Integer.parseInt(split[1])) : new ItemStack(material); + return split.length > 1 ? MMOLib.plugin.getVersion().getWrapper().textureItem(material, Integer.parseInt(split[1])) + : new ItemStack(material); } catch (IllegalArgumentException exception) { return new ItemStack(Material.BARRIER); } @@ -154,8 +157,20 @@ public class MMOCoreUtils { } // TODO worldguard flags support for no target - public static boolean canTarget(Player player, Entity target) { - return !player.equals(target) && target instanceof LivingEntity && !target.isDead() && !MMOCore.plugin.entities.findCustom(target); + public static boolean canTarget(PlayerData player, Entity target) { + + // basic checks + if (!(target instanceof LivingEntity) || player.getPlayer().equals(target) || target.isDead() || MMOCore.plugin.entities.findCustom(target)) + return false; + + // party check + if (target instanceof Player) { + PlayerData targetData = PlayerData.get((Player) target); + if (targetData.hasParty() && targetData.getParty().getMembers().has(player)) + return false; + } + + return true; } public static void heal(LivingEntity target, double value) { diff --git a/src/main/java/net/Indyuce/mmocore/skill/Empowered_Attack.java b/src/main/java/net/Indyuce/mmocore/skill/Empowered_Attack.java index 00247aa1..ebfeb35b 100644 --- a/src/main/java/net/Indyuce/mmocore/skill/Empowered_Attack.java +++ b/src/main/java/net/Indyuce/mmocore/skill/Empowered_Attack.java @@ -104,7 +104,7 @@ public class Empowered_Attack extends Skill { Location src = target.getLocation().add(0, target.getHeight() / 2, 0); for (Entity entity : target.getNearbyEntities(rad, rad, rad)) - if (MMOCoreUtils.canTarget(player.getPlayer(), entity)) { + if (MMOCoreUtils.canTarget(player, entity)) { drawVector(src, entity.getLocation().add(0, entity.getHeight() / 2, 0).subtract(src).toVector()); MMOLib.plugin.getDamage().damage(player.getPlayer(), (LivingEntity) entity, new AttackResult(sweep, DamageType.SKILL, DamageType.PHYSICAL)); } diff --git a/src/main/java/net/Indyuce/mmocore/skill/Fire_Rage.java b/src/main/java/net/Indyuce/mmocore/skill/Fire_Rage.java index 3f58e9ac..20eee0db 100644 --- a/src/main/java/net/Indyuce/mmocore/skill/Fire_Rage.java +++ b/src/main/java/net/Indyuce/mmocore/skill/Fire_Rage.java @@ -131,7 +131,7 @@ public class Fire_Rage extends Skill { loc.getWorld().spawnParticle(Particle.LAVA, loc, 0); for (Entity target : MMOCoreUtils.getNearbyChunkEntities(loc)) - if (MMOLib.plugin.getNMS().isInBoundingBox(target, loc) && MMOCoreUtils.canTarget(data.getPlayer(), target)) { + if (MMOLib.plugin.getNMS().isInBoundingBox(target, loc) && MMOCoreUtils.canTarget(data, target)) { loc.getWorld().spawnParticle(Particle.LAVA, loc, 8); loc.getWorld().spawnParticle(Particle.FLAME, loc, 32, 0, 0, 0, .1); loc.getWorld().playSound(loc, Sound.ENTITY_BLAZE_HURT, 2, 1); diff --git a/src/main/java/net/Indyuce/mmocore/skill/Fireball.java b/src/main/java/net/Indyuce/mmocore/skill/Fireball.java index 23b979d3..8e56c14a 100644 --- a/src/main/java/net/Indyuce/mmocore/skill/Fireball.java +++ b/src/main/java/net/Indyuce/mmocore/skill/Fireball.java @@ -60,7 +60,7 @@ public class Fireball extends Skill { loc.getWorld().spawnParticle(Particle.LAVA, loc, 0); for (Entity target : MMOCoreUtils.getNearbyChunkEntities(loc)) - if (MMOLib.plugin.getNMS().isInBoundingBox(target, loc) && MMOCoreUtils.canTarget(data.getPlayer(), target)) { + if (MMOLib.plugin.getNMS().isInBoundingBox(target, loc) && MMOCoreUtils.canTarget(data, target)) { loc.getWorld().spawnParticle(Particle.LAVA, loc, 8); loc.getWorld().spawnParticle(Particle.FLAME, loc, 32, 0, 0, 0, .1); loc.getWorld().playSound(loc, Sound.ENTITY_BLAZE_HURT, 2, 1); @@ -82,7 +82,7 @@ public class Fireball extends Skill { Vector dir = randomDirection(); loc.getWorld().playSound(loc, Sound.ENTITY_BLAZE_HURT, 2, 1.5f); - MMORayTraceResult result = MMOLib.plugin.getVersion().getWrapper().rayTrace(loc, dir, range, entity -> MMOCoreUtils.canTarget(data.getPlayer(), entity)); + MMORayTraceResult result = MMOLib.plugin.getVersion().getWrapper().rayTrace(loc, dir, range, entity -> MMOCoreUtils.canTarget(data, entity)); if (result.hasHit()) MMOLib.plugin.getDamage().damage(data.getPlayer(), result.getHit(), new AttackResult(damage, DamageType.SKILL, DamageType.PROJECTILE, DamageType.MAGIC)); result.draw(loc.clone(), dir, 8, tick -> tick.getWorld().spawnParticle(Particle.FLAME, tick, 0)); 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 1a714aa6..cbc62d3b 100644 --- a/src/main/java/net/Indyuce/mmocore/skill/Ice_Spikes.java +++ b/src/main/java/net/Indyuce/mmocore/skill/Ice_Spikes.java @@ -65,7 +65,7 @@ public class Ice_Spikes extends Skill { 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()) < radius && 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, 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)); } diff --git a/src/main/java/net/Indyuce/mmocore/skill/Power_Mark.java b/src/main/java/net/Indyuce/mmocore/skill/Power_Mark.java index ad32a58a..bed7617b 100644 --- a/src/main/java/net/Indyuce/mmocore/skill/Power_Mark.java +++ b/src/main/java/net/Indyuce/mmocore/skill/Power_Mark.java @@ -113,7 +113,7 @@ public class Power_Mark extends Skill implements Listener { stun += Math.log(Math.max(1, accumulate - 10)) / 8; for (Entity entity : MMOCoreUtils.getNearbyChunkEntities(loc)) - if (entity.getLocation().distanceSquared(loc) < 25 && MMOCoreUtils.canTarget(data.getPlayer(), entity)) { + if (entity.getLocation().distanceSquared(loc) < 25 && MMOCoreUtils.canTarget(data, entity)) { ((LivingEntity) entity).addPotionEffect(new PotionEffect(PotionEffectType.SLOW, (int) (stun * 20), 10, false, false)); MMOLib.plugin.getDamage().damage(data.getPlayer(), (LivingEntity) entity, new AttackResult(accumulate, DamageType.SKILL, DamageType.MAGIC)); entity.setVelocity(format(entity.getLocation().subtract(loc).toVector().setY(0)).setY(.3));