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 d3e1d9a..297775a 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 @@ -15,6 +15,7 @@ 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; +import com.willfp.ecoarmor.sets.util.PotionEffectListener; import com.willfp.ecoarmor.upgrades.advanced.AdvancementShardListener; import com.willfp.ecoarmor.upgrades.crystal.CrystalListener; import com.willfp.ecoarmor.upgrades.crystal.UpgradeCrystal; @@ -130,6 +131,7 @@ public class EcoArmorPlugin extends AbstractEcoPlugin { return Arrays.asList( new CrystalListener(this), new AdvancementShardListener(this), + new PotionEffectListener(this), new EffectiveDurabilityListener(this) ); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java index 5ff4ca1..f76b3c1 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/ArmorSet.java @@ -65,6 +65,12 @@ public class ArmorSet { @Getter private final Map potionEffects = new HashMap<>(); + /** + * Potion effects to be applied on equipping advanced. + */ + @Getter + private final Map advancedPotionEffects = new HashMap<>(); + /** * Items in set. */ @@ -101,6 +107,22 @@ public class ArmorSet { advancedEffects.put(effect, value); } + if (EcoArmorConfigs.SETS.getConfig().getConfigurationSection(name + ".potion-effects") != null) { + for (String effectName : EcoArmorConfigs.SETS.getConfig().getConfigurationSection(name + ".potion-effects").getKeys(false)) { + PotionEffectType type = PotionEffectType.getByName(effectName.toUpperCase()); + int strength = EcoArmorConfigs.SETS.getInt(name + ".potion-effects." + effectName); + potionEffects.put(type, strength); + } + } + + if (EcoArmorConfigs.SETS.getConfig().getConfigurationSection(name + ".advanced-potion-effects") != null) { + for (String effectName : EcoArmorConfigs.SETS.getConfig().getConfigurationSection(name + ".advanced-potion-effects").getKeys(false)) { + PotionEffectType type = PotionEffectType.getByName(effectName.toUpperCase()); + int strength = EcoArmorConfigs.SETS.getInt(name + ".advanced-potion-effects." + effectName); + advancedPotionEffects.put(type, strength); + } + } + for (ArmorSlot slot : ArmorSlot.values()) { ItemStack item = construct(slot.name().toLowerCase(), false); items.put(slot, item); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/PotionEffectListener.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/PotionEffectListener.java new file mode 100644 index 0000000..a09553b --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoarmor/sets/util/PotionEffectListener.java @@ -0,0 +1,55 @@ +package com.willfp.ecoarmor.sets.util; + +import com.willfp.eco.util.events.armorequip.ArmorEquipEvent; +import com.willfp.eco.util.internal.PluginDependent; +import com.willfp.eco.util.plugin.AbstractEcoPlugin; +import com.willfp.ecoarmor.sets.ArmorSet; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.potion.PotionEffect; +import org.jetbrains.annotations.NotNull; + +public class PotionEffectListener extends PluginDependent implements Listener { + /** + * Create new potion effect listener for set effects. + * + * @param plugin EcoArmor. + */ + public PotionEffectListener(@NotNull final AbstractEcoPlugin plugin) { + super(plugin); + } + + /** + * Apply set potion effects. + * + * @param event The event to listen for. + */ + @EventHandler + public void onEquip(@NotNull final ArmorEquipEvent event) { + final Player player = event.getPlayer(); + + this.getPlugin().getScheduler().runLater(() -> { + for (PotionEffect effect : player.getActivePotionEffects()) { + if (effect.getDuration() >= 500000000) { + player.removePotionEffect(effect.getType()); + } + } + + ArmorSet set = ArmorUtils.getSetOnPlayer(player); + if (set == null) { + return; + } + + set.getPotionEffects().forEach((potionEffectType, integer) -> { + player.addPotionEffect(new PotionEffect(potionEffectType, 0x6fffffff, integer - 1, false, false, true)); + }); + + if (ArmorUtils.isAdvanced(player)) { + set.getAdvancedPotionEffects().forEach((potionEffectType, integer) -> { + player.addPotionEffect(new PotionEffect(potionEffectType, 0x6fffffff, integer - 1, false, false, true)); + }); + } + }, 1); + } +} diff --git a/eco-core/core-plugin/src/main/resources/sets.yml b/eco-core/core-plugin/src/main/resources/sets.yml index 5f90281..40c8bef 100644 --- a/eco-core/core-plugin/src/main/resources/sets.yml +++ b/eco-core/core-plugin/src/main/resources/sets.yml @@ -1,4 +1,180 @@ -Reaper: +miner: + set-bonus: + experience-multiplier: 1.25 + advanced-set-bonus: + hunger-loss-multiplier: 0.5 + potion-effects: + haste: 2 + advanced-potion-effects: + haste: 3 + advanced-lore: + - "" + - "<\$#f12711>&lADVANCED BONUS<\$#f5af19>" + - "&8» &6Lose 50% less hunger" + - "&8» &6Permanent Haste III" + - "&8&oRequires full set to be worn" + advancement-shard-name: "<\$#f12711>Advancement Shard:<\$#f5af19> &9Miner" + advancement-shard-lore: + - "&8Drop this onto &9Miner Armor" + - "&8to make it <\$#f12711>Advanced<\$#f5af19>." + shard-craftable: true + shard-recipe: + - prismarine_shard + - ecoarmor:set_miner_helmet + - prismarine_shard + + - ecoarmor:set_miner_chestplate + - nether_star + - ecoarmor:set_miner_leggings + + - prismarine_shard + - ecoarmor:set_miner_boots + - prismarine_shard + helmet: + enchants: + fire_protection: 4 + unbreaking: 1 + material: leather_helmet + leather-color: "#6699cc" + name: "&9Miner Helmet" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&9 Miner Helmet" + effective-durability: 1024 + lore: + - "&9&lMINER SET BONUS" + - "&8» &9Gain 50% more experience" + - "&8» &9Permanent Haste II" + - "&8&oRequires full set to be worn" + - "" + - "&fTier: %tier%" + - "&8&oUpgrade with an Upgrade Crystal" + recipe: + - air + - diamond_pickaxe + - air + + - diamond_pickaxe + - diamond_helmet + - diamond_pickaxe + + - air + - diamond_pickaxe + - air + chestplate: + enchants: + fire_protection: 4 + unbreaking: 1 + material: leather_chestplate + leather-color: "#6699cc" + name: "&9Miner Chestplate" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&9 Miner Chestplate" + effective-durability: 1024 + lore: + - "&9&lMINER SET BONUS" + - "&8» &9Gain 50% more experience" + - "&8» &9Permanent Haste II" + - "&8&oRequires full set to be worn" + - "" + - "&fTier: %tier%" + - "&8&oUpgrade with an Upgrade Crystal" + recipe: + - air + - diamond_pickaxe + - air + + - diamond_pickaxe + - diamond_chestplate + - diamond_pickaxe + + - air + - diamond_pickaxe + - air + elytra: + enchants: + unbreaking: 1 + material: elytra + name: "&9Miner Elytra" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&9 Miner Elytra" + effective-durability: 1024 + lore: + - "&9&lMINER SET BONUS" + - "&8» &9Gain 50% more experience" + - "&8» &9Permanent Haste II" + - "&8&oRequires full set to be worn" + - "" + - "&fTier: %tier%" + - "&8&oUpgrade with an Upgrade Crystal" + recipe: + - air + - diamond_pickaxe + - air + + - diamond_pickaxe + - elytra + - diamond_pickaxe + + - air + - diamond_pickaxe + - air + leggings: + enchants: + fire_protection: 4 + unbreaking: 1 + material: leather_leggings + leather-color: "#6699cc" + name: "&9Miner Leggings" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&9 Miner Leggings" + effective-durability: 1024 + lore: + - "&9&lMINER SET BONUS" + - "&8» &9Gain 50% more experience" + - "&8» &9Permanent Haste II" + - "&8&oRequires full set to be worn" + - "" + - "&fTier: %tier%" + - "&8&oUpgrade with an Upgrade Crystal" + recipe: + - air + - diamond_pickaxe + - air + + - diamond_pickaxe + - diamond_leggings + - diamond_pickaxe + + - air + - diamond_pickaxe + - air + boots: + enchants: + fire_protection: 4 + unbreaking: 1 + material: leather_boots + leather-color: "#6699cc" + name: "&9Miner Boots" + advanced-name: "<\$#f12711>Advanced<\$#f5af19>&9 Miner Boots" + effective-durability: 1024 + lore: + - "&9&lMINER SET BONUS" + - "&8» &9Gain 50% more experience" + - "&8» &9Permanent Haste II" + - "&8&oRequires full set to be worn" + - "" + - "&fTier: %tier%" + - "&8&oUpgrade with an Upgrade Crystal" + recipe: + - air + - diamond_pickaxe + - air + + - diamond_pickaxe + - diamond_boots + - diamond_pickaxe + + - air + - diamond_pickaxe + - air + +reaper: set-bonus: damage-multiplier: 1.25 advanced-set-bonus: