From e6c7c77eaa0d3c5d4b45b577fba3d0bbd93d6bbb Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 20 Jan 2021 09:57:55 +0000 Subject: [PATCH] Added flight and hunger loss multiplier effects --- .../com/willfp/ecoarmor/EcoArmorPlugin.java | 6 ++- .../com/willfp/ecoarmor/effects/Effect.java | 14 +++++ .../com/willfp/ecoarmor/effects/Effects.java | 4 ++ .../effects/AttackSpeedMultiplier.java | 2 +- .../ecoarmor/effects/effects/BonusHearts.java | 2 +- .../effects/effects/BowDamageMultiplier.java | 2 +- .../effects/effects/DamageMultiplier.java | 2 +- .../effects/DamageTakenMultiplier.java | 2 +- .../effects/effects/DurabilityMultiplier.java | 2 +- .../ecoarmor/effects/effects/EvadeChance.java | 2 +- .../effects/effects/FallDamageMultiplier.java | 2 +- .../ecoarmor/effects/effects/Flight.java | 33 ++++++++++++ .../effects/effects/HungerLossMultiplier.java | 44 ++++++++++++++++ .../effects/MeleeDamageMultiplier.java | 2 +- .../effects/RegenerationMultiplier.java | 2 +- .../effects/effects/SpeedMutiplier.java | 2 +- .../effects/TridentDamageMultiplier.java | 2 +- .../ecoarmor/effects/effects/WarpChance.java | 2 +- .../util/EffectiveDurabilityListener.java | 2 +- .../core-plugin/src/main/resources/config.yml | 52 +++++++++++++++++++ 20 files changed, 166 insertions(+), 15 deletions(-) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/Flight.java create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/HungerLossMultiplier.java diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java index e56073c..d3e1d9a 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/EcoArmorPlugin.java @@ -11,6 +11,7 @@ import com.willfp.ecoarmor.commands.CommandEareload; import com.willfp.ecoarmor.commands.TabcompleterEagive; import com.willfp.ecoarmor.config.EcoArmorConfigs; import com.willfp.ecoarmor.display.ArmorDisplay; +import com.willfp.ecoarmor.effects.Effect; import com.willfp.ecoarmor.effects.Effects; import com.willfp.ecoarmor.sets.ArmorSets; import com.willfp.ecoarmor.sets.util.EffectiveDurabilityListener; @@ -47,7 +48,8 @@ public class EcoArmorPlugin extends AbstractEcoPlugin { public void enable() { Display.registerDisplayModule(new DisplayModule(ArmorDisplay::display, 1, this.getPluginName())); Display.registerRevertModule(ArmorDisplay::revertDisplay); - Effects.values().forEach(effect -> this.getEventManager().registerListener(effect)); + Effects.values().stream().filter(Effect::isEnabled).forEach(effect -> this.getEventManager().registerListener(effect)); + ArmorSets.update(); this.onReload(); } @@ -72,6 +74,8 @@ public class EcoArmorPlugin extends AbstractEcoPlugin { */ @Override public void onReload() { + Effects.values().forEach(effect -> this.getEventManager().unregisterListener(effect)); + Effects.values().stream().filter(Effect::isEnabled).forEach(effect -> this.getEventManager().registerListener(effect)); this.getLog().info(ArmorSets.values().size() + " Sets Loaded"); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effect.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effect.java index 87f15e6..3fbf9fc 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effect.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effect.java @@ -19,6 +19,12 @@ public abstract class Effect implements Listener { @Getter private final String name; + /** + * If the effect is enabled. + */ + @Getter + private boolean enabled; + /** * Create a new effect. * @@ -27,6 +33,14 @@ public abstract class Effect implements Listener { protected Effect(@NotNull final String name) { this.name = name; + update(); Effects.addNewEffect(this); } + + /** + * Update if the effect is enabled. + */ + public void update() { + enabled = this.getPlugin().getConfigYml().getBool("effects." + name + ".enabled"); + } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effects.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effects.java index 91cd685..f5dc636 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effects.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/Effects.java @@ -11,6 +11,8 @@ import com.willfp.ecoarmor.effects.effects.DamageTakenMultiplier; import com.willfp.ecoarmor.effects.effects.EvadeChance; import com.willfp.ecoarmor.effects.effects.ExperienceMultiplier; import com.willfp.ecoarmor.effects.effects.FallDamageMultiplier; +import com.willfp.ecoarmor.effects.effects.Flight; +import com.willfp.ecoarmor.effects.effects.HungerLossMultiplier; import com.willfp.ecoarmor.effects.effects.MeleeDamageMultiplier; import com.willfp.ecoarmor.effects.effects.RegenerationMultiplier; import com.willfp.ecoarmor.effects.effects.SpeedMutiplier; @@ -42,6 +44,8 @@ public class Effects { public static final Effect REGENERATION_MULTIPLIER = new RegenerationMultiplier(); public static final Effect WARP_CHANCE = new WarpChance(); public static final Effect ATTACK_SPEED_MULTIPLIER = new AttackSpeedMultiplier(); + public static final Effect FLIGHT = new Flight(); + public static final Effect HUNGER_LOSS_MULTIPLIER = new HungerLossMultiplier(); /** * Get effect matching name. diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/AttackSpeedMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/AttackSpeedMultiplier.java index 071f932..fd5f8ff 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/AttackSpeedMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/AttackSpeedMultiplier.java @@ -20,7 +20,7 @@ public class AttackSpeedMultiplier extends Effect { } @EventHandler - public void onArmorEquip(@NotNull final ArmorEquipEvent event) { + public void listener(@NotNull final ArmorEquipEvent event) { Player player = event.getPlayer(); AttributeInstance movementSpeed = player.getAttribute(Attribute.GENERIC_ATTACK_SPEED); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BonusHearts.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BonusHearts.java index 46b55ac..a9050ec 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BonusHearts.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BonusHearts.java @@ -20,7 +20,7 @@ public class BonusHearts extends Effect { } @EventHandler - public void onArmorEquip(@NotNull final ArmorEquipEvent event) { + public void listener(@NotNull final ArmorEquipEvent event) { Player player = event.getPlayer(); AttributeInstance maxHealth = player.getAttribute(Attribute.GENERIC_MAX_HEALTH); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BowDamageMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BowDamageMultiplier.java index b02c5c5..e94449b 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BowDamageMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/BowDamageMultiplier.java @@ -16,7 +16,7 @@ public class BowDamageMultiplier extends Effect { } @EventHandler - public void onDamage(@NotNull final EntityDamageByEntityEvent event) { + public void listener(@NotNull final EntityDamageByEntityEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageMultiplier.java index fbb5a49..c7398f1 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageMultiplier.java @@ -15,7 +15,7 @@ public class DamageMultiplier extends Effect { } @EventHandler - public void onDamage(@NotNull final EntityDamageByEntityEvent event) { + public void listener(@NotNull final EntityDamageByEntityEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageTakenMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageTakenMultiplier.java index 3121b17..fb05621 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageTakenMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DamageTakenMultiplier.java @@ -13,7 +13,7 @@ public class DamageTakenMultiplier extends Effect { } @EventHandler - public void onDamage(@NotNull final EntityDamageEvent event) { + public void listener(@NotNull final EntityDamageEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DurabilityMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DurabilityMultiplier.java index 6d0b5e8..53fa4fd 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DurabilityMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/DurabilityMultiplier.java @@ -14,7 +14,7 @@ public class DurabilityMultiplier extends Effect { } @EventHandler - public void onDamage(@NotNull final PlayerItemDamageEvent event) { + public void listener(@NotNull final PlayerItemDamageEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/EvadeChance.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/EvadeChance.java index 7692c1a..86fdb93 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/EvadeChance.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/EvadeChance.java @@ -14,7 +14,7 @@ public class EvadeChance extends Effect { } @EventHandler - public void onDamage(@NotNull final EntityDamageEvent event) { + public void listener(@NotNull final EntityDamageEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/FallDamageMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/FallDamageMultiplier.java index 9d0e2ce..21b7dee 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/FallDamageMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/FallDamageMultiplier.java @@ -13,7 +13,7 @@ public class FallDamageMultiplier extends Effect { } @EventHandler - public void onDamage(@NotNull final EntityDamageEvent event) { + public void listener(@NotNull final EntityDamageEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/Flight.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/Flight.java new file mode 100644 index 0000000..0a27a89 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/Flight.java @@ -0,0 +1,33 @@ +package com.willfp.ecoarmor.effects.effects; + +import com.willfp.eco.util.events.armorequip.ArmorEquipEvent; +import com.willfp.ecoarmor.effects.Effect; +import com.willfp.ecoarmor.sets.util.ArmorUtils; +import org.bukkit.GameMode; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.jetbrains.annotations.NotNull; + +public class Flight extends Effect { + public Flight() { + super("flight"); + } + + @EventHandler + public void onArmorEquip(@NotNull final ArmorEquipEvent event) { + Player player = event.getPlayer(); + + this.getPlugin().getScheduler().runLater(() -> { + Boolean flight = ArmorUtils.getEffectStrength(player, this); + if (flight == null) { + if (player.getGameMode() == GameMode.SURVIVAL || player.getGameMode() == GameMode.ADVENTURE) { + player.setAllowFlight(false); + } + } else { + if (flight) { + player.setAllowFlight(true); + } + } + }, 1); + } +} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/HungerLossMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/HungerLossMultiplier.java new file mode 100644 index 0000000..a83f6f6 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/HungerLossMultiplier.java @@ -0,0 +1,44 @@ +package com.willfp.ecoarmor.effects.effects; + +import com.willfp.eco.util.NumberUtils; +import com.willfp.ecoarmor.effects.Effect; +import com.willfp.ecoarmor.sets.util.ArmorUtils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.FoodLevelChangeEvent; +import org.jetbrains.annotations.NotNull; + +public class HungerLossMultiplier extends Effect { + public HungerLossMultiplier() { + super("hunger-loss-multiplier"); + } + + @EventHandler + public void listener(@NotNull final FoodLevelChangeEvent event) { + if (!(event.getEntity() instanceof Player)) { + return; + } + + Player player = (Player) event.getEntity(); + + Double multiplier = ArmorUtils.getEffectStrength(player, this); + + if (multiplier == null) { + return; + } + + if (event.getFoodLevel() > player.getFoodLevel()) { + return; + } + + if (multiplier < 1) { + if (NumberUtils.randFloat(0, 1) > multiplier) { + event.setCancelled(true); + } + } else { + int difference = player.getFoodLevel() - event.getFoodLevel(); + difference = (int) Math.ceil(difference * multiplier); + event.setFoodLevel(player.getFoodLevel() - difference); + } + } +} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/MeleeDamageMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/MeleeDamageMultiplier.java index d5c850e..a539e90 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/MeleeDamageMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/MeleeDamageMultiplier.java @@ -13,7 +13,7 @@ public class MeleeDamageMultiplier extends Effect { } @EventHandler - public void onDamage(@NotNull final EntityDamageByEntityEvent event) { + public void listener(@NotNull final EntityDamageByEntityEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/RegenerationMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/RegenerationMultiplier.java index 7945904..c65ca66 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/RegenerationMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/RegenerationMultiplier.java @@ -13,7 +13,7 @@ public class RegenerationMultiplier extends Effect { } @EventHandler - public void onDamage(@NotNull final EntityRegainHealthEvent event) { + public void listener(@NotNull final EntityRegainHealthEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/SpeedMutiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/SpeedMutiplier.java index d57a09a..89c1923 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/SpeedMutiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/SpeedMutiplier.java @@ -20,7 +20,7 @@ public class SpeedMutiplier extends Effect { } @EventHandler - public void onArmorEquip(@NotNull final ArmorEquipEvent event) { + public void listener(@NotNull final ArmorEquipEvent event) { Player player = event.getPlayer(); AttributeInstance movementSpeed = player.getAttribute(Attribute.GENERIC_MOVEMENT_SPEED); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/TridentDamageMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/TridentDamageMultiplier.java index f54ff47..fb3c8dd 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/TridentDamageMultiplier.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/TridentDamageMultiplier.java @@ -16,7 +16,7 @@ public class TridentDamageMultiplier extends Effect { } @EventHandler - public void onDamage(@NotNull final EntityDamageByEntityEvent event) { + public void listener(@NotNull final EntityDamageByEntityEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/WarpChance.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/WarpChance.java index 796de22..e637573 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/WarpChance.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/effects/effects/WarpChance.java @@ -18,7 +18,7 @@ public class WarpChance extends Effect { } @EventHandler - public void onDamage(@NotNull final EntityDamageByEntityEvent event) { + public void listener(@NotNull final EntityDamageByEntityEvent event) { if (event.isCancelled()) { return; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/EffectiveDurabilityListener.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/EffectiveDurabilityListener.java index f67002a..e0394a0 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/EffectiveDurabilityListener.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/EffectiveDurabilityListener.java @@ -28,7 +28,7 @@ public class EffectiveDurabilityListener extends PluginDependent implements List * @param event The event to listen for. */ @EventHandler - public void onDamage(@NotNull final PlayerItemDamageEvent event) { + public void listener(@NotNull final PlayerItemDamageEvent event) { ItemStack itemStack = event.getItem(); ItemMeta meta = itemStack.getItemMeta(); diff --git a/eco-core/core-plugin/src/main/resources/config.yml b/eco-core/core-plugin/src/main/resources/config.yml index bed8fd8..73aa5b9 100644 --- a/eco-core/core-plugin/src/main/resources/config.yml +++ b/eco-core/core-plugin/src/main/resources/config.yml @@ -2,3 +2,55 @@ # EcoArmor # by Auxilor # + + +# Effects are passive abilities that happen when wearing a full set with the effect present. +effects: + attack-speed-multiplier: + # Changes attack speed by some multiplier + enabled: true + bonus-hearts: + # Extra hearts given to a player + enabled: true + bow-damage-multipier: + # Changes bow damage by some multiplier + enabled: true + damage-multipier: + # Changes damage from any form by some multiplier + enabled: true + damage-taken-multipier: + # Changes incoming damage by some multiplier + enabled: true + durability-multiplier: + # Changes durability for **all items in inventory** by some multiplier + enabled: true + evade-chance: + # Chance of avoiding attack, as a percentage + enabled: true + experience-multiplier: + # Changes experience gained by some multiplier + enabled: true + fall-damage-multiplier: + # Changes fall damage by some multiplier + enabled: true + flight: + # Allows flight + enabled: true + melee-damage-multiplier: + # Changes melee damage by some multiplier + enabled: true + regeneration-multiplier: + # Changes regeneration by some multiplier + enabled: true + speed-multiplier: + # Changes movement speed by some multiplier + enabled: true + trident-damage-multiplier: + # Changes trident damage by some multiplier + enabled: true + warp-chance: + # Chance to warp behind your opponent after damaging them, as a percentage + enabled: true + hunger-loss-multiplier: + # Modify hunger loss by some multiplier + enabled: true \ No newline at end of file