From 833ad0d5b3740568a2e3ce0c7e1e1d7fa054bf9e Mon Sep 17 00:00:00 2001 From: Auxilor Date: Mon, 14 Jun 2021 14:07:25 +0100 Subject: [PATCH] Added necromance ring --- .../willfp/talismans/talismans/Talismans.java | 2 + .../talismans/talismans/NecromanceRing.java | 101 ++++++++++++++++++ .../main/resources/talismans/necromance.yml | 56 ++++++++++ 3 files changed, 159 insertions(+) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/talismans/NecromanceRing.java create mode 100644 eco-core/core-plugin/src/main/resources/talismans/necromance.yml diff --git a/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/Talismans.java b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/Talismans.java index a8a2424..701cddf 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/Talismans.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/Talismans.java @@ -19,6 +19,7 @@ import com.willfp.talismans.talismans.talismans.FluxTalisman; import com.willfp.talismans.talismans.talismans.GravityTalisman; import com.willfp.talismans.talismans.talismans.HealingTalisman; import com.willfp.talismans.talismans.talismans.ImmunityTalisman; +import com.willfp.talismans.talismans.talismans.NecromanceRing; import com.willfp.talismans.talismans.talismans.NetherTalisman; import com.willfp.talismans.talismans.talismans.NightCrystal; import com.willfp.talismans.talismans.talismans.PoseidonTalisman; @@ -78,6 +79,7 @@ public class Talismans { public static final Talisman ATTACK_SPEED_TALISMAN = new AttackSpeedTalisman(); public static final Talisman DAY_CRYSTAL = new DayCrystal(); public static final Talisman NIGHT_CRYSTAL = new NightCrystal(); + public static final Talisman NECROMANCE_RING = new NecromanceRing(); /** * Get all registered {@link Talisman}s. diff --git a/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/talismans/NecromanceRing.java b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/talismans/NecromanceRing.java new file mode 100644 index 0000000..efcc61f --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/talismans/talismans/talismans/NecromanceRing.java @@ -0,0 +1,101 @@ +package com.willfp.talismans.talismans.talismans; + +import com.willfp.talismans.talismans.Talisman; +import com.willfp.talismans.talismans.TalismanLevel; +import com.willfp.talismans.talismans.Talismans; +import org.bukkit.World; +import org.bukkit.entity.Arrow; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.entity.Skeleton; +import org.bukkit.entity.Trident; +import org.bukkit.entity.Zombie; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.jetbrains.annotations.NotNull; + +public class NecromanceRing extends Talisman { + public NecromanceRing() { + super("necromance"); + } + + @Override + public void onMeleeAttack(@NotNull final TalismanLevel level, + @NotNull final Player attacker, + @NotNull final LivingEntity victim, + @NotNull final EntityDamageByEntityEvent event) { + int count = 0; + double distance = level.getConfig().getDouble(Talismans.CONFIG_LOCATION + "distance"); + for (Entity nearbyEntity : attacker.getNearbyEntities(distance, distance, distance)) { + if (!(nearbyEntity instanceof Zombie || nearbyEntity instanceof Skeleton)) { + continue; + } + + count++; + } + + if (count == 0) { + return; + } + + double multiplier = level.getConfig().getDouble(Talismans.CONFIG_LOCATION + "multiplier-per-mob"); + multiplier *= count; + multiplier += 1; + + event.setDamage(event.getDamage() * multiplier); + } + + @Override + public void onArrowDamage(@NotNull final TalismanLevel level, + @NotNull final Player attacker, + @NotNull final LivingEntity victim, + @NotNull final Arrow arrow, + @NotNull final EntityDamageByEntityEvent event) { + int count = 0; + double distance = level.getConfig().getDouble(Talismans.CONFIG_LOCATION + "distance"); + for (Entity nearbyEntity : attacker.getNearbyEntities(distance, distance, distance)) { + if (!(nearbyEntity instanceof Zombie || nearbyEntity instanceof Skeleton)) { + continue; + } + + count++; + } + + if (count == 0) { + return; + } + + double multiplier = level.getConfig().getDouble(Talismans.CONFIG_LOCATION + "multiplier-per-mob"); + multiplier *= count; + multiplier += 1; + + event.setDamage(event.getDamage() * multiplier); + } + + @Override + public void onTridentDamage(@NotNull final TalismanLevel level, + @NotNull final Player attacker, + @NotNull final LivingEntity victim, + @NotNull final Trident trident, + @NotNull final EntityDamageByEntityEvent event) { + int count = 0; + double distance = level.getConfig().getDouble(Talismans.CONFIG_LOCATION + "distance"); + for (Entity nearbyEntity : attacker.getNearbyEntities(distance, distance, distance)) { + if (!(nearbyEntity instanceof Zombie || nearbyEntity instanceof Skeleton)) { + continue; + } + + count++; + } + + if (count == 0) { + return; + } + + double multiplier = level.getConfig().getDouble(Talismans.CONFIG_LOCATION + "multiplier-per-mob"); + multiplier *= count; + multiplier += 1; + + event.setDamage(event.getDamage() * multiplier); + } +} diff --git a/eco-core/core-plugin/src/main/resources/talismans/necromance.yml b/eco-core/core-plugin/src/main/resources/talismans/necromance.yml new file mode 100644 index 0000000..0388dfc --- /dev/null +++ b/eco-core/core-plugin/src/main/resources/talismans/necromance.yml @@ -0,0 +1,56 @@ +enabled: true +disabled-in-worlds: [ ] + +levels: + 1: + name: "&aNecromance Ring I" + description: Deal more damage to enemies for each undead mob near you. + + obtaining: + craftable: true + recipe: + - rotten_flesh + - bone + - rotten_flesh + + - bone + - ender_eye + - bone + + - rotten_flesh + - bone + - rotten_flesh + + general-config: + material: player_head + texture: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvN2E3MGM1ZDA3Yjc5YzViZTQzZDBiMjFjNmQ0ZTM3NDcyZGIyYWIzZmE2MzRhNWYxM2NmODlmYjk4N2IyZTUifX19 + + config: + distance: 5 + multiplier-per-mob: 0.02 + 2: + name: "&eNecromance Ring II" + description: Deal more damage to enemies for each undead mob near you. + + obtaining: + craftable: true + recipe: + - talismans:necromance_1 + - talismans:necromance_1 + - talismans:necromance_1 + + - talismans:necromance_1 + - heart_of_the_sea + - talismans:necromance_1 + + - talismans:necromance_1 + - talismans:necromance_1 + - talismans:necromance_1 + + general-config: + material: player_head + texture: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDk2YmM4ZWJkNGUxM2Y0OTZkOGQ3NGM1NjVkZDU2ZTk5YTRhZjJlMmVhN2EyN2E5NmMxYWJkMjg0MTg0YiJ9fX0= + + config: + distance: 7 + multiplier-per-mob: 0.04 \ No newline at end of file