From c9380468c1733b20061120cd61740ba63789f062 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Thu, 23 Sep 2021 12:43:32 +0100 Subject: [PATCH] Began migrating to EcoArmor / EcoWeapons-like system --- .../com/willfp/reforges/ReforgesPlugin.java | 31 +++- .../willfp/reforges/commands/CommandGive.java | 2 +- .../willfp/reforges/config/ReforgeConfig.java | 28 ---- .../willfp/reforges/config/ReforgesJson.java | 16 ++ .../com/willfp/reforges/config/TargetYml.java | 43 +++++ .../com/willfp/reforges/effects/Effect.java | 55 +++++++ .../com/willfp/reforges/effects/Effects.java | 54 +++++++ .../effects/effects/EffectCritMultiplier.java | 28 ++++ .../effects/EffectDamageMultiplier.java | 24 +++ .../com/willfp/reforges/reforges/Reforge.java | 147 +++++++++--------- .../willfp/reforges/reforges/Reforges.java | 70 ++------- .../reforges/reforges/meta/ReforgeTarget.java | 85 +++------- .../reforges/reforges/ReforgeAcute.java | 29 ---- .../reforges/reforges/ReforgeAerobic.java | 30 ---- .../reforges/reforges/ReforgeAffluent.java | 42 ----- .../reforges/reforges/ReforgeDurable.java | 44 ------ .../reforges/reforges/ReforgeDynamic.java | 30 ---- .../reforges/reforges/ReforgeEvasive.java | 28 ---- .../reforges/reforges/ReforgeGravitated.java | 28 ---- .../reforges/reforges/ReforgeImmediate.java | 57 ------- .../reforges/reforges/ReforgeLight.java | 56 ------- .../reforges/reforges/ReforgeLucky.java | 33 ---- .../reforges/reforges/ReforgeNautical.java | 30 ---- .../reforges/reforges/ReforgePointy.java | 28 ---- .../reforges/reforges/ReforgeProspecting.java | 34 ---- .../reforges/reforges/ReforgeReinforced.java | 25 --- .../reforges/reforges/ReforgeRich.java | 50 ------ .../reforges/reforges/ReforgeSharp.java | 26 ---- .../reforges/reforges/ReforgeStreamlined.java | 28 ---- .../reforges/reforges/ReforgeStrong.java | 49 ------ .../reforges/reforges/ReforgeThin.java | 48 ------ .../reforges/reforges/ReforgeTough.java | 48 ------ .../reforges/reforges/ReforgeVersatile.java | 26 ---- .../reforges/reforges/ReforgeWealthy.java | 37 ----- .../reforges/reforges/ReforgeWise.java | 31 ---- .../reforges/util/ReforgeHandler.java | 2 +- .../reforges/reforges/util/ReforgeUtils.java | 10 +- .../reforges/reforges/util/Watcher.java | 88 ++++++++--- .../reforges/util/WatcherTriggers.java | 95 +++++++++-- .../core-plugin/src/main/resources/config.yml | 63 -------- .../src/main/resources/reforges.json | 43 +++++ .../core-plugin/src/main/resources/target.yml | 61 ++++++++ 42 files changed, 611 insertions(+), 1171 deletions(-) delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/config/ReforgeConfig.java create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/config/ReforgesJson.java create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/config/TargetYml.java create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/Effect.java create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/Effects.java create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectCritMultiplier.java create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectDamageMultiplier.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeAcute.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeAerobic.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeAffluent.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeDurable.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeDynamic.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeEvasive.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeGravitated.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeImmediate.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeLight.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeLucky.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeNautical.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgePointy.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeProspecting.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeReinforced.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeRich.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeSharp.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeStreamlined.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeStrong.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeThin.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeTough.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeVersatile.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeWealthy.java delete mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeWise.java create mode 100644 eco-core/core-plugin/src/main/resources/reforges.json create mode 100644 eco-core/core-plugin/src/main/resources/target.yml diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/ReforgesPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/ReforgesPlugin.java index ca3d8f9..8d3ab40 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/ReforgesPlugin.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/ReforgesPlugin.java @@ -6,8 +6,11 @@ import com.willfp.eco.core.display.DisplayModule; import com.willfp.eco.core.items.Items; import com.willfp.reforges.commands.CommandReforge; import com.willfp.reforges.commands.CommandReforges; +import com.willfp.reforges.config.ReforgesJson; +import com.willfp.reforges.config.TargetYml; import com.willfp.reforges.display.ReforgesDisplay; -import com.willfp.reforges.reforges.Reforge; +import com.willfp.reforges.effects.Effect; +import com.willfp.reforges.effects.Effects; import com.willfp.reforges.reforges.Reforges; import com.willfp.reforges.reforges.util.ReforgeArgParser; import com.willfp.reforges.reforges.util.WatcherTriggers; @@ -29,11 +32,25 @@ public class ReforgesPlugin extends EcoPlugin { @Getter private static ReforgesPlugin instance; + /** + * target.yml. + */ + @Getter + private final TargetYml targetYml; + + /** + * reforges.json. + */ + @Getter + private final ReforgesJson reforgesJson; + /** * Internal constructor called by bukkit on plugin load. */ public ReforgesPlugin() { super(1330, 12412, "&3", true); + this.targetYml = new TargetYml(this); + this.reforgesJson = new ReforgesJson(this); instance = this; } @@ -54,13 +71,11 @@ public class ReforgesPlugin extends EcoPlugin { @Override protected void handleReload() { - for (Reforge reforge : Reforges.values()) { - HandlerList.unregisterAll(reforge); - this.getScheduler().runLater(() -> { - if (reforge.isEnabled()) { - this.getEventManager().registerListener(reforge); - } - }, 1); + for (Effect effect : Effects.values()) { + HandlerList.unregisterAll(effect); + this.getScheduler().run(() -> { + this.getEventManager().registerListener(effect); + }); } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandGive.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandGive.java index f683cf7..4c1b6dc 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandGive.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandGive.java @@ -57,7 +57,7 @@ public class CommandGive extends Subcommand { STONE_NAMES.clear(); STONE_NAMES.addAll(Reforges.values().stream().filter(Reforge::isEnabled) .filter(Reforge::isRequiresStone) - .map(Reforge::getKey) + .map(Reforge::getId) .collect(Collectors.toList())); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/config/ReforgeConfig.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/config/ReforgeConfig.java deleted file mode 100644 index ab86c05..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/config/ReforgeConfig.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.willfp.reforges.config; - -import com.willfp.eco.core.EcoPlugin; -import com.willfp.eco.core.config.yaml.YamlExtendableConfig; -import lombok.Getter; -import org.jetbrains.annotations.NotNull; - -public class ReforgeConfig extends YamlExtendableConfig { - /** - * The name of the config. - */ - @Getter - private final String name; - - /** - * Instantiate a new config for a reforge. - * - * @param name The name of the config. - * @param source The provider of the reforge. - * @param plugin Instance of reforges. - */ - public ReforgeConfig(@NotNull final String name, - @NotNull final Class source, - @NotNull final EcoPlugin plugin) { - super(name, true, plugin, source, "reforges/"); - this.name = name; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/config/ReforgesJson.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/config/ReforgesJson.java new file mode 100644 index 0000000..34a81d8 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/config/ReforgesJson.java @@ -0,0 +1,16 @@ +package com.willfp.reforges.config; + +import com.willfp.eco.core.EcoPlugin; +import com.willfp.eco.core.config.json.JSONBaseConfig; +import org.jetbrains.annotations.NotNull; + +public class ReforgesJson extends JSONBaseConfig { + /** + * Instantiate reforges.json. + * + * @param plugin Instance of reforges. + */ + public ReforgesJson(@NotNull final EcoPlugin plugin) { + super("reforges", true, plugin); + } +} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/config/TargetYml.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/config/TargetYml.java new file mode 100644 index 0000000..c55f5bf --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/config/TargetYml.java @@ -0,0 +1,43 @@ +package com.willfp.reforges.config; + +import com.willfp.eco.core.EcoPlugin; +import com.willfp.eco.core.config.yaml.YamlBaseConfig; +import com.willfp.eco.core.items.Items; +import com.willfp.eco.core.items.TestableItem; +import org.jetbrains.annotations.NotNull; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class TargetYml extends YamlBaseConfig { + /** + * Instantiate target.yml. + * + * @param plugin Instance of EcoEnchants. + */ + public TargetYml(@NotNull final EcoPlugin plugin) { + super("target", false, plugin); + } + + /** + * Get all target names. + * + * @return Set of all names. + */ + public List getTargets() { + return this.getKeys(false); + } + + /** + * Get all materials from a target name. + * + * @param target The name of the target. + * @return All materials. + */ + public Set getTargetItems(@NotNull final String target) { + Set items = new HashSet<>(); + this.getStrings(target, false).forEach(s -> items.add(Items.lookup(s.toUpperCase()))); + return items; + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/Effect.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/Effect.java new file mode 100644 index 0000000..2665dd8 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/Effect.java @@ -0,0 +1,55 @@ +package com.willfp.reforges.effects; + +import com.willfp.eco.core.config.interfaces.JSONConfig; +import com.willfp.reforges.ReforgesPlugin; +import com.willfp.reforges.reforges.util.Watcher; +import lombok.AccessLevel; +import lombok.Getter; +import org.bukkit.event.Listener; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; + +public abstract class Effect implements Listener, Watcher { + /** + * Instance of Reforges. + */ + @Getter(AccessLevel.PROTECTED) + private final ReforgesPlugin plugin = ReforgesPlugin.getInstance(); + + /** + * The name of the effect. + */ + @Getter + private final String name; + + /** + * Create a new effect. + * + * @param name The effect name. + */ + protected Effect(@NotNull final String name) { + this.name = name; + + Effects.addNewEffect(this); + } + + /** + * Handle reforge application. + * + * @param meta The meta. + * @param config The config. + */ + public void handleApplication(@NotNull final ItemMeta meta, + @NotNull final JSONConfig config) { + // Override when needed + } + + /** + * Handle reforge removal. + * + * @param meta The meta. + */ + public void handleRemoval(@NotNull final ItemMeta meta) { + // Override when needed + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/Effects.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/Effects.java new file mode 100644 index 0000000..7dbfd77 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/Effects.java @@ -0,0 +1,54 @@ +package com.willfp.reforges.effects; + +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; +import com.google.common.collect.ImmutableList; +import com.willfp.reforges.effects.effects.EffectCritMultiplier; +import com.willfp.reforges.effects.effects.EffectDamageMultiplier; +import lombok.experimental.UtilityClass; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +@UtilityClass +@SuppressWarnings("unused") +public class Effects { + /** + * All registered effects. + */ + private static final BiMap BY_NAME = HashBiMap.create(); + + public static final Effect DAMAGE_MULTIPLIER = new EffectDamageMultiplier(); + public static final Effect CRIT_MULTIPLIER = new EffectCritMultiplier(); + + /** + * Get effect matching name. + * + * @param name The name to query. + * @return The matching effect, or null if not found. + */ + @Nullable + public static Effect getByName(@NotNull final String name) { + return BY_NAME.get(name); + } + + /** + * List of all registered effects. + * + * @return The effects. + */ + public static List values() { + return ImmutableList.copyOf(BY_NAME.values()); + } + + /** + * Add new effect to EcoWeapons. + * + * @param effect The effect to add. + */ + public static void addNewEffect(@NotNull final Effect effect) { + BY_NAME.remove(effect.getName()); + BY_NAME.put(effect.getName(), effect); + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectCritMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectCritMultiplier.java new file mode 100644 index 0000000..09cc000 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectCritMultiplier.java @@ -0,0 +1,28 @@ +package com.willfp.reforges.effects.effects; + +import com.willfp.eco.core.config.interfaces.JSONConfig; +import com.willfp.reforges.effects.Effect; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.jetbrains.annotations.NotNull; + +public class EffectCritMultiplier extends Effect { + /** + * Create a new effect. + */ + public EffectCritMultiplier() { + super("crit_multiplier"); + } + + @Override + public void onMeleeAttack(@NotNull final LivingEntity attacker, + @NotNull final LivingEntity victim, + @NotNull final EntityDamageByEntityEvent event, + @NotNull final JSONConfig config) { + if (attacker.getVelocity().getY() > 0) { + return; + } + + event.setDamage(event.getDamage() * config.getDouble("multiplier")); + } +} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectDamageMultiplier.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectDamageMultiplier.java new file mode 100644 index 0000000..05ab513 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/effects/effects/EffectDamageMultiplier.java @@ -0,0 +1,24 @@ +package com.willfp.reforges.effects.effects; + +import com.willfp.eco.core.config.interfaces.JSONConfig; +import com.willfp.reforges.effects.Effect; +import org.bukkit.entity.LivingEntity; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.jetbrains.annotations.NotNull; + +public class EffectDamageMultiplier extends Effect { + /** + * Create a new effect. + */ + public EffectDamageMultiplier() { + super("damage_multiplier"); + } + + @Override + public void onMeleeAttack(@NotNull final LivingEntity attacker, + @NotNull final LivingEntity victim, + @NotNull final EntityDamageByEntityEvent event, + @NotNull final JSONConfig config) { + event.setDamage(event.getDamage() * config.getDouble("multiplier")); + } +} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/Reforge.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/Reforge.java index 2425600..db2d826 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/Reforge.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/Reforge.java @@ -1,28 +1,31 @@ package com.willfp.reforges.reforges; import com.willfp.eco.core.EcoPlugin; -import com.willfp.eco.core.Prerequisite; +import com.willfp.eco.core.config.interfaces.JSONConfig; import com.willfp.eco.core.display.Display; +import com.willfp.eco.core.items.CustomItem; import com.willfp.eco.core.items.builder.SkullBuilder; import com.willfp.eco.core.recipe.Recipes; import com.willfp.reforges.ReforgesPlugin; -import com.willfp.reforges.config.ReforgeConfig; +import com.willfp.reforges.effects.Effect; +import com.willfp.reforges.effects.Effects; import com.willfp.reforges.reforges.meta.ReforgeTarget; import com.willfp.reforges.reforges.util.ReforgeUtils; -import com.willfp.reforges.reforges.util.Watcher; import lombok.AccessLevel; import lombok.Getter; -import org.bukkit.event.Listener; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Objects; -import java.util.UUID; +import java.util.Set; -public abstract class Reforge implements Listener, Watcher { +public class Reforge { /** * Instance of Reforges for reforges to be able to access. */ @@ -33,43 +36,31 @@ public abstract class Reforge implements Listener, Watcher { * The key to store reforges in meta. */ @Getter - private final String key; - - /** - * The UUID used in attribute modifiers. - */ - @Getter - private final UUID uuid; - - /** - * The alternative UUID used in attribute modifiers. - */ - @Getter - private final UUID altUuid; + private final String id; /** * The reforges config. */ @Getter - private final ReforgeConfig config; + private final JSONConfig config; /** - * If the reforge is enabled. + * The effects. */ @Getter - private boolean enabled; + private final Map effects; /** * The display name. */ @Getter - private String name; + private final String name; /** * The display name. */ @Getter - private String description; + private final String description; /** * If a reforge stone is required. @@ -84,36 +75,44 @@ public abstract class Reforge implements Listener, Watcher { private ItemStack stone; /** - * Create a new Reforge. - * - * @param key The key name of the reforge.. - * @param prerequisites Optional {@link Prerequisite}s that must be met. + * The reforge target. */ - protected Reforge(@NotNull final String key, - @NotNull final Prerequisite... prerequisites) { - this.key = key; - this.config = new ReforgeConfig(this.getKey(), this.getClass(), this.plugin); - this.uuid = UUID.nameUUIDFromBytes(key.getBytes()); - this.altUuid = UUID.nameUUIDFromBytes((key + "2").getBytes()); - - if (!Prerequisite.areMet(prerequisites)) { - return; - } - - Reforges.addNewReforge(this); - this.update(); - } + @Getter + private final Set targets; /** - * Update the reforge based off config values. - * This can be overridden but may lead to unexpected behavior. + * Create a new Reforge. + * + * @param config The config. + * @param plugin Instance of reforges. */ - public void update() { - enabled = config.getBool("enabled"); - name = config.getString("name"); - description = config.getString("description"); + protected Reforge(@NotNull final JSONConfig config, + @NotNull final ReforgesPlugin plugin) { + this.config = config; + this.id = config.getString("id"); - requiresStone = config.getBool("stone-config.requires-stone"); + this.name = config.getString("name"); + this.description = config.getString("description"); + + this.targets = new HashSet<>(); + for (String targetName : config.getStrings("targets")) { + this.targets.add(ReforgeTarget.getByName(targetName)); + } + + this.effects = new HashMap<>(); + for (JSONConfig effectConfig : config.getSubsections("effects")) { + Effect effect = Effects.getByName(effectConfig.getString("id")); + if (effect != null) { + effects.put(effect, effectConfig); + } + } + + handleStone(config.getSubsection("stone"), plugin); + } + + private void handleStone(@NotNull final JSONConfig config, + @NotNull final ReforgesPlugin plugin) { + this.requiresStone = config.getBool("enabled"); if (requiresStone) { List stoneLore = new ArrayList<>(); @@ -121,8 +120,8 @@ public abstract class Reforge implements Listener, Watcher { stoneLore.add(Display.PREFIX + string.replace("%reforge%", this.getName())); } stone = new SkullBuilder() - .setSkullTexture(config.getString("stone-config.texture")) - .setDisplayName(this.getPlugin().getConfigYml().getString("reforge.stone.name").replace("%reforge%", this.getName())) + .setSkullTexture(config.getString("texture")) + .setDisplayName(this.getPlugin().getConfigYml().getString("stone.name").replace("%reforge%", this.getName())) .addLoreLines(stoneLore) .build(); } else { @@ -132,36 +131,31 @@ public abstract class Reforge implements Listener, Watcher { ReforgeUtils.setReforgeStone(stone, this); - if (config.getBool("stone-config.craftable")) { + new CustomItem( + plugin.getNamespacedKeyFactory().create("stone_" + this.getId()), + test -> Objects.equals(ReforgeUtils.getReforgeStone(test), this), + stone + ).register(); + + if (config.getBool("craftable")) { Recipes.createAndRegisterRecipe( plugin, - "stone_" + this.getKey(), + "stone_" + this.getId(), stone, - config.getStrings("stone-config.recipe", false) + config.getStrings("recipe", false) ); } - - if (!this.isEnabled()) { - Reforges.removeReforge(this); - } - - postUpdate(); } - protected void postUpdate() { - // Unused as some talismans may have postUpdate tasks, however most won't. - } - - /** - * Get the reforge target. - */ - public abstract ReforgeTarget[] getTarget(); - public final void handleApplication(@NotNull final ItemStack itemStack) { itemStack.setItemMeta(this.handleApplication(Objects.requireNonNull(itemStack.getItemMeta()))); } - public ItemMeta handleApplication(@NotNull final ItemMeta meta) { + public final ItemMeta handleApplication(@NotNull final ItemMeta meta) { + for (Map.Entry entry : this.getEffects().entrySet()) { + entry.getKey().handleApplication(meta, entry.getValue()); + } + // Override when needed return meta; } @@ -170,8 +164,11 @@ public abstract class Reforge implements Listener, Watcher { itemStack.setItemMeta(this.handleRemoval(Objects.requireNonNull(itemStack.getItemMeta()))); } - public ItemMeta handleRemoval(@NotNull final ItemMeta meta) { - // Override when needed + public final ItemMeta handleRemoval(@NotNull final ItemMeta meta) { + for (Map.Entry entry : this.getEffects().entrySet()) { + entry.getKey().handleApplication(meta, entry.getValue()); + } + return meta; } @@ -186,18 +183,18 @@ public abstract class Reforge implements Listener, Watcher { return false; } - return this.getKey().equals(reforge.getKey()); + return this.getId().equals(reforge.getId()); } @Override public int hashCode() { - return Objects.hash(this.getKey()); + return Objects.hash(this.getId()); } @Override public String toString() { return "Reforge{" - + this.getKey() + + this.getId() + "}"; } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/Reforges.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/Reforges.java index ef1edd3..411f163 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/Reforges.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/Reforges.java @@ -3,68 +3,20 @@ package com.willfp.reforges.reforges; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import com.google.common.collect.ImmutableSet; +import com.willfp.eco.core.config.interfaces.JSONConfig; import com.willfp.eco.core.config.updating.ConfigUpdater; -import com.willfp.reforges.reforges.reforges.ReforgeAcute; -import com.willfp.reforges.reforges.reforges.ReforgeAerobic; -import com.willfp.reforges.reforges.reforges.ReforgeAffluent; -import com.willfp.reforges.reforges.reforges.ReforgeDurable; -import com.willfp.reforges.reforges.reforges.ReforgeDynamic; -import com.willfp.reforges.reforges.reforges.ReforgeEvasive; -import com.willfp.reforges.reforges.reforges.ReforgeGravitated; -import com.willfp.reforges.reforges.reforges.ReforgeImmediate; -import com.willfp.reforges.reforges.reforges.ReforgeLight; -import com.willfp.reforges.reforges.reforges.ReforgeLucky; -import com.willfp.reforges.reforges.reforges.ReforgeNautical; -import com.willfp.reforges.reforges.reforges.ReforgePointy; -import com.willfp.reforges.reforges.reforges.ReforgeProspecting; -import com.willfp.reforges.reforges.reforges.ReforgeReinforced; -import com.willfp.reforges.reforges.reforges.ReforgeRich; -import com.willfp.reforges.reforges.reforges.ReforgeSharp; -import com.willfp.reforges.reforges.reforges.ReforgeStreamlined; -import com.willfp.reforges.reforges.reforges.ReforgeStrong; -import com.willfp.reforges.reforges.reforges.ReforgeThin; -import com.willfp.reforges.reforges.reforges.ReforgeTough; -import com.willfp.reforges.reforges.reforges.ReforgeVersatile; -import com.willfp.reforges.reforges.reforges.ReforgeWealthy; -import com.willfp.reforges.reforges.reforges.ReforgeWise; +import com.willfp.reforges.ReforgesPlugin; import lombok.experimental.UtilityClass; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.HashSet; import java.util.Set; @UtilityClass @SuppressWarnings({"unused", "checkstyle:JavadocVariable"}) public class Reforges { - public static final String CONFIG_LOCATION = "config."; - private static final BiMap BY_KEY = HashBiMap.create(); - public static final Reforge SHARP = new ReforgeSharp(); - public static final Reforge LIGHT = new ReforgeLight(); - public static final Reforge WISE = new ReforgeWise(); - public static final Reforge DYNAMIC = new ReforgeDynamic(); - public static final Reforge GRAVITATED = new ReforgeGravitated(); - public static final Reforge STRONG = new ReforgeStrong(); - public static final Reforge WEALTHY = new ReforgeWealthy(); - public static final Reforge RICH = new ReforgeRich(); - public static final Reforge LUCKY = new ReforgeLucky(); - public static final Reforge AEROBIC = new ReforgeAerobic(); - public static final Reforge STREAMLINED = new ReforgeStreamlined(); - public static final Reforge THIN = new ReforgeThin(); - public static final Reforge TOUGH = new ReforgeTough(); - public static final Reforge REINFORCED = new ReforgeReinforced(); - public static final Reforge EVASIVE = new ReforgeEvasive(); - public static final Reforge NAUTICAL = new ReforgeNautical(); - public static final Reforge POINTY = new ReforgePointy(); - public static final Reforge VERSATILE = new ReforgeVersatile(); - public static final Reforge AFFLUENT = new ReforgeAffluent(); - public static final Reforge DURABLE = new ReforgeDurable(); - public static final Reforge IMMEDIATE = new ReforgeImmediate(); - public static final Reforge PROSPECTING = new ReforgeProspecting(); - public static final Reforge ACUTE = new ReforgeAcute(); - /** * Get all registered {@link Reforge}s. * @@ -98,11 +50,17 @@ public class Reforges { /** * Update all {@link Reforge}s. + * + * @param plugin Instance of Reforges. */ @ConfigUpdater - public static void update() { - for (Reforge reforge : new HashSet<>(values())) { - reforge.update(); + public static void update(@NotNull final ReforgesPlugin plugin) { + for (Reforge reforge : values()) { + removeReforge(reforge); + } + + for (JSONConfig config : plugin.getReforgesJson().getSubsections("reforges")) { + addNewReforge(new Reforge(config, plugin)); } } @@ -114,8 +72,8 @@ public class Reforges { * @param reforge The {@link Reforge} to add. */ public static void addNewReforge(@NotNull final Reforge reforge) { - BY_KEY.remove(reforge.getKey()); - BY_KEY.put(reforge.getKey(), reforge); + BY_KEY.remove(reforge.getId()); + BY_KEY.put(reforge.getId(), reforge); } /** @@ -124,6 +82,6 @@ public class Reforges { * @param reforge The {@link Reforge} to remove. */ public static void removeReforge(@NotNull final Reforge reforge) { - BY_KEY.remove(reforge.getKey()); + BY_KEY.remove(reforge.getId()); } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/meta/ReforgeTarget.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/meta/ReforgeTarget.java index bc01a32..b120b14 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/meta/ReforgeTarget.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/meta/ReforgeTarget.java @@ -2,20 +2,20 @@ package com.willfp.reforges.reforges.meta; import com.google.common.collect.ImmutableSet; import com.willfp.eco.core.config.updating.ConfigUpdater; -import com.willfp.eco.core.items.Items; import com.willfp.eco.core.items.TestableItem; import com.willfp.eco.core.recipe.parts.EmptyTestableItem; import com.willfp.reforges.ReforgesPlugin; import lombok.Getter; -import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; public class ReforgeTarget { /** @@ -23,49 +23,13 @@ public class ReforgeTarget { */ public static final ReforgeTarget ALL = new ReforgeTarget("all", new HashSet<>()); - /** - * Melee weapons. - */ - public static final ReforgeTarget MELEE = new ReforgeTarget("melee"); - - /** - * Armor. - */ - public static final ReforgeTarget ARMOR = new ReforgeTarget("armor"); - - /** - * Trident. - */ - public static final ReforgeTarget TRIDENT = new ReforgeTarget("trident"); - - /** - * Bows. - */ - public static final ReforgeTarget BOW = new ReforgeTarget("bow"); - - /** - * Pickaxes. - */ - public static final ReforgeTarget PICKAXE = new ReforgeTarget("pickaxe"); - - /** - * Axes. - */ - public static final ReforgeTarget AXE = new ReforgeTarget("axe"); - /** * All registered targets. */ - private static final Set REGISTERED = new HashSet<>(); + private static final Map REGISTERED = new HashMap<>(); static { - REGISTERED.add(ALL); - REGISTERED.add(MELEE); - REGISTERED.add(ARMOR); - REGISTERED.add(TRIDENT); - REGISTERED.add(BOW); - REGISTERED.add(PICKAXE); - REGISTERED.add(AXE); + REGISTERED.put("all", ALL); update(ReforgesPlugin.getInstance()); } @@ -96,23 +60,16 @@ public class ReforgeTarget { /** * Create new target. * - * @param name The name of the target. + * @param name The name of the target. + * @param plugin Instance of reforges. */ - public ReforgeTarget(@NotNull final String name) { + public ReforgeTarget(@NotNull final String name, + @NotNull final ReforgesPlugin plugin) { this.name = name; this.items = new HashSet<>(); - update(); - } - - /** - * Update the configs. - */ - public void update() { - this.items.clear(); - this.items.addAll(ReforgesPlugin.getInstance().getConfigYml().getStrings("targets." + name, false).stream() - .map(Items::lookup) - .collect(Collectors.toSet())); + this.items.addAll(plugin.getTargetYml().getTargetItems(name)); + items.removeIf(item -> item instanceof EmptyTestableItem); } /** @@ -122,8 +79,7 @@ public class ReforgeTarget { * @return The matching ReforgeTarget, or null if not found. */ public static ReforgeTarget getByName(@NotNull final String name) { - Optional matching = REGISTERED.stream().filter(rarity -> rarity.getName().equalsIgnoreCase(name)).findFirst(); - return matching.orElse(null); + return REGISTERED.get(name); } /** @@ -134,7 +90,7 @@ public class ReforgeTarget { */ @Nullable public static ReforgeTarget getForItem(@NotNull final ItemStack item) { - Optional matching = REGISTERED.stream() + Optional matching = REGISTERED.values().stream() .filter(rarity -> !rarity.getName().equalsIgnoreCase("all")) .filter(rarity -> rarity.getItems().stream().anyMatch(testableItem -> testableItem.matches(item))).findFirst(); return matching.orElse(null); @@ -148,13 +104,18 @@ public class ReforgeTarget { @ConfigUpdater public static void update(@NotNull final ReforgesPlugin plugin) { ALL.items.clear(); - for (ReforgeTarget reforgeTarget : REGISTERED) { - if (reforgeTarget.name.equals("all")) { + for (String id : new ArrayList<>(REGISTERED.keySet())) { + if (id.equalsIgnoreCase("all")) { continue; } - reforgeTarget.update(); - ALL.items.addAll(reforgeTarget.items); + REGISTERED.remove(id); + } + + for (String id : plugin.getTargetYml().getTargets()) { + ReforgeTarget target = new ReforgeTarget(id, plugin.getTargetYml().getTargetItems(id)); + REGISTERED.put(id, target); + ALL.items.addAll(target.items); } } @@ -164,6 +125,6 @@ public class ReforgeTarget { * @return A set of all targets. */ public static Set values() { - return ImmutableSet.copyOf(REGISTERED); + return ImmutableSet.copyOf(REGISTERED.values()); } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeAcute.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeAcute.java deleted file mode 100644 index 291ba59..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeAcute.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.eco.util.NumberUtils; -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.jetbrains.annotations.NotNull; - -public class ReforgeAcute extends Reforge { - public ReforgeAcute() { - super("acute"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.AXE}; - } - - @Override - public void onMeleeAttack(@NotNull final LivingEntity attacker, - @NotNull final LivingEntity victim, - @NotNull final EntityDamageByEntityEvent event) { - if (NumberUtils.randFloat(0, 100) < this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "chance")) { - event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier")); - } - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeAerobic.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeAerobic.java deleted file mode 100644 index a6273d1..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeAerobic.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.jetbrains.annotations.NotNull; - -public class ReforgeAerobic extends Reforge { - public ReforgeAerobic() { - super("aerobic"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.BOW}; - } - - @Override - public void onArrowDamage(@NotNull final LivingEntity attacker, - @NotNull final LivingEntity victim, - @NotNull final Arrow arrow, - @NotNull final EntityDamageByEntityEvent event) { - if (!attacker.isOnGround()) { - event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier")); - } - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeAffluent.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeAffluent.java deleted file mode 100644 index 4634ff4..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeAffluent.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.eco.core.events.EntityDeathByEntityEvent; -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import com.willfp.reforges.reforges.util.ReforgeUtils; -import com.willfp.reforges.vault.EconomyHandler; -import org.bukkit.entity.Player; -import org.bukkit.entity.Trident; -import org.bukkit.event.EventHandler; -import org.jetbrains.annotations.NotNull; - -public class ReforgeAffluent extends Reforge { - public ReforgeAffluent() { - super("affluent"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.TRIDENT}; - } - - @EventHandler - public void onKill(@NotNull final EntityDeathByEntityEvent event) { - if (!(event.getKiller() instanceof Trident trident)) { - return; - } - - if (!(trident.getShooter() instanceof Player player)) { - return; - } - - Reforge reforge = ReforgeUtils.getReforge(trident.getItem()); - - if (reforge == null || !reforge.equals(this)) { - return; - } - - EconomyHandler.getInstance().depositPlayer(player, this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "money")); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeDurable.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeDurable.java deleted file mode 100644 index 0ab47d0..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeDurable.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.eco.core.events.EntityDeathByEntityEvent; -import com.willfp.eco.util.NumberUtils; -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import com.willfp.reforges.reforges.util.ReforgeUtils; -import com.willfp.reforges.vault.EconomyHandler; -import org.bukkit.entity.Player; -import org.bukkit.entity.Trident; -import org.bukkit.event.EventHandler; -import org.bukkit.event.player.PlayerItemDamageEvent; -import org.jetbrains.annotations.NotNull; - -public class ReforgeDurable extends Reforge { - public ReforgeDurable() { - super("durable"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ - ReforgeTarget.TRIDENT, - ReforgeTarget.ARMOR, - ReforgeTarget.BOW, - ReforgeTarget.MELEE, - ReforgeTarget.PICKAXE - }; - } - - @EventHandler - public void handle(@NotNull final PlayerItemDamageEvent event) { - Reforge reforge = ReforgeUtils.getReforge(event.getItem()); - - if (reforge == null || !reforge.equals(this)) { - return; - } - - if (NumberUtils.randFloat(0, 100) < this.getConfig().getDouble("percent-less-damage")) { - event.setCancelled(true); - } - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeDynamic.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeDynamic.java deleted file mode 100644 index c238541..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeDynamic.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.jetbrains.annotations.NotNull; - -public class ReforgeDynamic extends Reforge { - public ReforgeDynamic() { - super("dynamic"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.MELEE}; - } - - @Override - public void onMeleeAttack(@NotNull final LivingEntity attacker, - @NotNull final LivingEntity victim, - @NotNull final EntityDamageByEntityEvent event) { - event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier")); - - if (attacker.getVelocity().getY() < 0) { - event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "crit-multiplier")); - } - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeEvasive.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeEvasive.java deleted file mode 100644 index 472ba60..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeEvasive.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.eco.util.NumberUtils; -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityDamageEvent; -import org.jetbrains.annotations.NotNull; - -public class ReforgeEvasive extends Reforge { - public ReforgeEvasive() { - super("evasive"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.ARMOR}; - } - - @Override - public void onDamageWearingArmor(@NotNull final LivingEntity victim, - @NotNull final EntityDamageEvent event) { - if (NumberUtils.randFloat(0, 100) < this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "chance")) { - event.setCancelled(true); - } - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeGravitated.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeGravitated.java deleted file mode 100644 index 2f300c5..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeGravitated.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.jetbrains.annotations.NotNull; - -public class ReforgeGravitated extends Reforge { - public ReforgeGravitated() { - super("gravitated"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.MELEE}; - } - - @Override - public void onMeleeAttack(@NotNull final LivingEntity attacker, - @NotNull final LivingEntity victim, - @NotNull final EntityDamageByEntityEvent event) { - if (attacker.getVelocity().getY() < 0) { - event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "crit-multiplier")); - } - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeImmediate.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeImmediate.java deleted file mode 100644 index 4d023ed..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeImmediate.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.eco.core.integrations.anticheat.AnticheatManager; -import com.willfp.eco.util.NumberUtils; -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import com.willfp.reforges.reforges.util.ReforgeUtils; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.event.EventHandler; -import org.bukkit.event.block.BlockDamageEvent; -import org.bukkit.event.player.PlayerItemDamageEvent; -import org.jetbrains.annotations.NotNull; - -public class ReforgeImmediate extends Reforge { - public ReforgeImmediate() { - super("immediate"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ - ReforgeTarget.PICKAXE - }; - } - - @EventHandler(ignoreCancelled = true) - public void handle(@NotNull final BlockDamageEvent event) { - Reforge reforge = ReforgeUtils.getReforge(event.getItemInHand()); - - if (reforge == null || !reforge.equals(this)) { - return; - } - - Block block = event.getBlock(); - - if (block.getDrops(event.getItemInHand()).isEmpty()) { - return; - } - - if (block.getType().getHardness() > 100) { - return; - } - - if (block.getType() == Material.BEDROCK) { - return; - } - - AnticheatManager.exemptPlayer(event.getPlayer()); - - if (NumberUtils.randFloat(0, 100) < this.getConfig().getDouble("chance")) { - event.setInstaBreak(true); - } - - AnticheatManager.unexemptPlayer(event.getPlayer()); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeLight.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeLight.java deleted file mode 100644 index 51eb9f5..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeLight.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import org.bukkit.attribute.Attribute; -import org.bukkit.attribute.AttributeModifier; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.jetbrains.annotations.NotNull; - -public class ReforgeLight extends Reforge { - public ReforgeLight() { - super("light"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.MELEE}; - } - - @Override - public void onMeleeAttack(@NotNull final LivingEntity attacker, - @NotNull final LivingEntity victim, - @NotNull final EntityDamageByEntityEvent event) { - event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier")); - } - - @Override - public ItemMeta handleApplication(@NotNull final ItemMeta meta) { - meta.addAttributeModifier(Attribute.GENERIC_ATTACK_SPEED, new AttributeModifier( - this.getUuid(), - "light-speed", - (this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "speed-multiplier") - 1), - AttributeModifier.Operation.MULTIPLY_SCALAR_1 - )); - meta.addAttributeModifier(Attribute.GENERIC_ATTACK_KNOCKBACK, new AttributeModifier( - this.getAltUuid(), - "light-kb", - this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "knockback-multiplier") - 1, - AttributeModifier.Operation.MULTIPLY_SCALAR_1 - )); - meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); - return meta; - } - - @Override - public ItemMeta handleRemoval(@NotNull final ItemMeta meta) { - meta.removeAttributeModifier(Attribute.GENERIC_ATTACK_SPEED); - meta.removeAttributeModifier(Attribute.GENERIC_ATTACK_KNOCKBACK); - return meta; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeLucky.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeLucky.java deleted file mode 100644 index 5f56bd2..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeLucky.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.eco.util.NumberUtils; -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.jetbrains.annotations.NotNull; - -public class ReforgeLucky extends Reforge { - public ReforgeLucky() { - super("lucky"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.BOW}; - } - - @Override - public void onArrowDamage(@NotNull final LivingEntity attacker, - @NotNull final LivingEntity victim, - @NotNull final Arrow arrow, - @NotNull final EntityDamageByEntityEvent event) { - if (NumberUtils.randFloat(0, 100) < this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "chance")) { - event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier")); - } else { - event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "bad-multiplier")); - } - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeNautical.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeNautical.java deleted file mode 100644 index 50f50bb..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeNautical.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Trident; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.jetbrains.annotations.NotNull; - -public class ReforgeNautical extends Reforge { - public ReforgeNautical() { - super("nautical"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.TRIDENT}; - } - - @Override - public void onTridentDamage(@NotNull final LivingEntity attacker, - @NotNull final LivingEntity victim, - @NotNull final Trident trident, - @NotNull final EntityDamageByEntityEvent event) { - if (attacker.isInWater()) { - event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier")); - } - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgePointy.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgePointy.java deleted file mode 100644 index 1693960..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgePointy.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Trident; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.jetbrains.annotations.NotNull; - -public class ReforgePointy extends Reforge { - public ReforgePointy() { - super("pointy"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.TRIDENT}; - } - - @Override - public void onTridentDamage(@NotNull final LivingEntity attacker, - @NotNull final LivingEntity victim, - @NotNull final Trident trident, - @NotNull final EntityDamageByEntityEvent event) { - event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier")); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeProspecting.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeProspecting.java deleted file mode 100644 index 8a5b6db..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeProspecting.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.eco.util.NumberUtils; -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import com.willfp.reforges.vault.EconomyHandler; -import org.bukkit.block.Block; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Trident; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.jetbrains.annotations.NotNull; - -public class ReforgeProspecting extends Reforge { - public ReforgeProspecting() { - super("prospecting"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.PICKAXE}; - } - - @Override - public void onBlockBreak(@NotNull final Player player, - @NotNull final Block block, - @NotNull final BlockBreakEvent event) { - if (NumberUtils.randFloat(0, 100) < this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "chance")) { - EconomyHandler.getInstance().depositPlayer(player, this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "money")); - } - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeReinforced.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeReinforced.java deleted file mode 100644 index 27fa83f..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeReinforced.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityDamageEvent; -import org.jetbrains.annotations.NotNull; - -public class ReforgeReinforced extends Reforge { - public ReforgeReinforced() { - super("reinforced"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.ARMOR}; - } - - @Override - public void onDamageWearingArmor(@NotNull final LivingEntity victim, - @NotNull final EntityDamageEvent event) { - event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier")); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeRich.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeRich.java deleted file mode 100644 index d09bada..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeRich.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.eco.core.events.EntityDeathByEntityEvent; -import com.willfp.eco.util.ArrowUtils; -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import com.willfp.reforges.reforges.util.ReforgeUtils; -import com.willfp.reforges.vault.EconomyHandler; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.NotNull; - -public class ReforgeRich extends Reforge { - public ReforgeRich() { - super("rich"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.BOW}; - } - - @EventHandler - public void onKill(@NotNull final EntityDeathByEntityEvent event) { - if (!(event.getKiller() instanceof Arrow arrow)) { - return; - } - - if (!(arrow.getShooter() instanceof Player player)) { - return; - } - - ItemStack bow = ArrowUtils.getBow(arrow); - - if (bow == null) { - return; - } - - Reforge reforge = ReforgeUtils.getReforge(bow); - - if (reforge == null || !reforge.equals(this)) { - return; - } - - EconomyHandler.getInstance().depositPlayer(player, this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "money")); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeSharp.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeSharp.java deleted file mode 100644 index d469673..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeSharp.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.jetbrains.annotations.NotNull; - -public class ReforgeSharp extends Reforge { - public ReforgeSharp() { - super("sharp"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.MELEE}; - } - - @Override - public void onMeleeAttack(@NotNull final LivingEntity attacker, - @NotNull final LivingEntity victim, - @NotNull final EntityDamageByEntityEvent event) { - event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier")); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeStreamlined.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeStreamlined.java deleted file mode 100644 index 9d1f9d8..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeStreamlined.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.jetbrains.annotations.NotNull; - -public class ReforgeStreamlined extends Reforge { - public ReforgeStreamlined() { - super("streamlined"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.BOW}; - } - - @Override - public void onArrowDamage(@NotNull final LivingEntity attacker, - @NotNull final LivingEntity victim, - @NotNull final Arrow arrow, - @NotNull final EntityDamageByEntityEvent event) { - event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier")); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeStrong.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeStrong.java deleted file mode 100644 index 312172f..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeStrong.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import org.bukkit.attribute.Attribute; -import org.bukkit.attribute.AttributeModifier; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.jetbrains.annotations.NotNull; - -public class ReforgeStrong extends Reforge { - public ReforgeStrong() { - super("strong"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.MELEE}; - } - - @Override - public void onMeleeAttack(@NotNull final LivingEntity attacker, - @NotNull final LivingEntity victim, - @NotNull final EntityDamageByEntityEvent event) { - event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier")); - } - - @Override - public ItemMeta handleApplication(@NotNull final ItemMeta meta) { - meta.addAttributeModifier(Attribute.GENERIC_ATTACK_KNOCKBACK, new AttributeModifier( - this.getUuid(), - "strong-kb", - this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "knockback-multiplier") - 1, - AttributeModifier.Operation.MULTIPLY_SCALAR_1 - )); - meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); - return meta; - } - - @Override - public ItemMeta handleRemoval(@NotNull final ItemMeta meta) { - meta.removeAttributeModifier(Attribute.GENERIC_ATTACK_KNOCKBACK); - return meta; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeThin.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeThin.java deleted file mode 100644 index 5c8e7a5..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeThin.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import org.bukkit.attribute.Attribute; -import org.bukkit.attribute.AttributeModifier; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.jetbrains.annotations.NotNull; - -public class ReforgeThin extends Reforge { - public ReforgeThin() { - super("thin"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.ARMOR}; - } - - @Override - public void onDamageWearingArmor(@NotNull final LivingEntity victim, - @NotNull final EntityDamageEvent event) { - event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier")); - } - - @Override - public ItemMeta handleApplication(@NotNull final ItemMeta meta) { - meta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, new AttributeModifier( - this.getUuid(), - "thin-speed", - this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "speed-multiplier") - 1, - AttributeModifier.Operation.MULTIPLY_SCALAR_1 - )); - meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); - return meta; - } - - @Override - public ItemMeta handleRemoval(@NotNull final ItemMeta meta) { - meta.removeAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED); - return meta; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeTough.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeTough.java deleted file mode 100644 index bed6bfc..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeTough.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import org.bukkit.attribute.Attribute; -import org.bukkit.attribute.AttributeModifier; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.inventory.ItemFlag; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.jetbrains.annotations.NotNull; - -public class ReforgeTough extends Reforge { - public ReforgeTough() { - super("tough"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.ARMOR}; - } - - @Override - public void onDamageWearingArmor(@NotNull final LivingEntity victim, - @NotNull final EntityDamageEvent event) { - event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier")); - } - - @Override - public ItemMeta handleApplication(@NotNull final ItemMeta meta) { - meta.addAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED, new AttributeModifier( - this.getUuid(), - "tough-speed", - this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "speed-multiplier") - 1, - AttributeModifier.Operation.MULTIPLY_SCALAR_1 - )); - meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); - return meta; - } - - @Override - public ItemMeta handleRemoval(@NotNull final ItemMeta meta) { - meta.removeAttributeModifier(Attribute.GENERIC_MOVEMENT_SPEED); - return meta; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeVersatile.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeVersatile.java deleted file mode 100644 index ee1856a..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeVersatile.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import org.bukkit.entity.LivingEntity; -import org.bukkit.event.entity.EntityDamageByEntityEvent; -import org.jetbrains.annotations.NotNull; - -public class ReforgeVersatile extends Reforge { - public ReforgeVersatile() { - super("versatile"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.TRIDENT}; - } - - @Override - public void onMeleeAttack(@NotNull final LivingEntity attacker, - @NotNull final LivingEntity victim, - @NotNull final EntityDamageByEntityEvent event) { - event.setDamage(event.getDamage() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier")); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeWealthy.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeWealthy.java deleted file mode 100644 index 7c052aa..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeWealthy.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.eco.core.events.EntityDeathByEntityEvent; -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import com.willfp.reforges.reforges.util.ReforgeUtils; -import com.willfp.reforges.vault.EconomyHandler; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.jetbrains.annotations.NotNull; - -public class ReforgeWealthy extends Reforge { - public ReforgeWealthy() { - super("wealthy"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.MELEE}; - } - - @EventHandler - public void onKill(@NotNull final EntityDeathByEntityEvent event) { - if (!(event.getKiller() instanceof Player player)) { - return; - } - - Reforge reforge = ReforgeUtils.getReforge(player.getInventory().getItemInMainHand()); - - if (reforge == null || !reforge.equals(this)) { - return; - } - - EconomyHandler.getInstance().depositPlayer(player, this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "money")); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeWise.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeWise.java deleted file mode 100644 index e12fc3a..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeWise.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.willfp.reforges.reforges.reforges; - -import com.willfp.eco.core.events.NaturalExpGainEvent; -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import com.willfp.reforges.reforges.meta.ReforgeTarget; -import com.willfp.reforges.reforges.util.ReforgeUtils; -import org.bukkit.event.EventHandler; -import org.jetbrains.annotations.NotNull; - -public class ReforgeWise extends Reforge { - public ReforgeWise() { - super("wise"); - } - - @Override - public ReforgeTarget[] getTarget() { - return new ReforgeTarget[]{ReforgeTarget.MELEE}; - } - - @EventHandler - public void onExpChange(@NotNull final NaturalExpGainEvent event) { - Reforge reforge = ReforgeUtils.getReforge(event.getExpChangeEvent().getPlayer().getInventory().getItemInMainHand()); - - if (reforge == null || !reforge.equals(this)) { - return; - } - - event.getExpChangeEvent().setAmount((int) Math.ceil(event.getExpChangeEvent().getAmount() * this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "multiplier"))); - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeHandler.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeHandler.java index b6523e9..8df4b82 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeHandler.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeHandler.java @@ -43,7 +43,7 @@ public class ReforgeHandler extends PluginDependent { if (menu.getCaptiveItems(player).size() == 2) { Reforge stone = ReforgeUtils.getReforgeStone(menu.getCaptiveItems(player).get(1)); if (stone != null) { - if (Arrays.stream(stone.getTarget()).anyMatch(reforgeTarget -> reforgeTarget.getItems().contains(toReforge.getType()))) { + if (Arrays.stream(stone.getTargets()).anyMatch(reforgeTarget -> reforgeTarget.getItems().contains(toReforge.getType()))) { reforge = stone; usedStone = true; } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeUtils.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeUtils.java index d4d935e..915fb2f 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeUtils.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeUtils.java @@ -51,7 +51,7 @@ public class ReforgeUtils { List applicable = new ArrayList<>(); for (Reforge reforge : Reforges.values()) { - if (Arrays.asList(reforge.getTarget()).contains(target) && !reforge.isRequiresStone()) { + if (Arrays.asList(reforge.getTargets()).contains(target) && !reforge.isRequiresStone()) { applicable.add(reforge); } } @@ -87,7 +87,9 @@ public class ReforgeUtils { if (status == ReforgeStatus.ALLOW) { Reforge reforgeStone = getReforgeStone(stone); - if (reforgeStone != null && Arrays.stream(reforgeStone.getTarget()).anyMatch(reforgeTarget -> reforgeTarget.getItems().contains(toReforge.getType()))) { + if (reforgeStone != null && reforgeStone.getTargets().stream() + .anyMatch(reforgeTarget -> reforgeTarget.getItems().stream() + .anyMatch(item -> item.matches(toReforge)))) { status = ReforgeStatus.ALLOW_STONE; } } @@ -173,7 +175,7 @@ public class ReforgeUtils { @NotNull final Reforge reforge) { PersistentDataContainer container = meta.getPersistentDataContainer(); - container.set(REFORGE_KEY, PersistentDataType.STRING, reforge.getKey()); + container.set(REFORGE_KEY, PersistentDataType.STRING, reforge.getId()); reforge.handleApplication(meta); } @@ -236,7 +238,7 @@ public class ReforgeUtils { PersistentDataContainer container = meta.getPersistentDataContainer(); - container.set(REFORGE_STONE_KEY, PersistentDataType.STRING, reforge.getKey()); + container.set(REFORGE_STONE_KEY, PersistentDataType.STRING, reforge.getId()); item.setItemMeta(meta); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/Watcher.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/Watcher.java index a1fa6ef..4aae4e2 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/Watcher.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/Watcher.java @@ -1,5 +1,6 @@ package com.willfp.reforges.reforges.util; +import com.willfp.eco.core.config.interfaces.JSONConfig; import org.bukkit.block.Block; import org.bukkit.entity.Arrow; import org.bukkit.entity.LivingEntity; @@ -24,11 +25,28 @@ public interface Watcher { * @param player The player. * @param block The block that was broken. * @param event The event that called this watcher. + * @param config The effect config. */ default void onBlockBreak(@NotNull final Player player, @NotNull final Block block, - @NotNull final BlockBreakEvent event) { - // Empty default as enchantments only override required watchers. + @NotNull final BlockBreakEvent event, + @NotNull final JSONConfig config) { + // Empty default as effects only override required watchers. + } + + /** + * Called when an entity attacks another entity via any mean. + * + * @param attacker The attacker. + * @param victim The victim. + * @param event The event. + * @param config The effect config. + */ + default void onAnyDamage(@NotNull final LivingEntity attacker, + @NotNull final LivingEntity victim, + @NotNull final EntityDamageByEntityEvent event, + @NotNull final JSONConfig config) { + // Empty default as effects only override required watchers. } /** @@ -38,12 +56,14 @@ public interface Watcher { * @param victim The victim. * @param arrow The arrow entity. * @param event The event that called this watcher. + * @param config The effect config. */ default void onArrowDamage(@NotNull final LivingEntity attacker, @NotNull final LivingEntity victim, @NotNull final Arrow arrow, - @NotNull final EntityDamageByEntityEvent event) { - // Empty default as enchantments only override required watchers. + @NotNull final EntityDamageByEntityEvent event, + @NotNull final JSONConfig config) { + // Empty default as effects only override required watchers. } /** @@ -53,12 +73,14 @@ public interface Watcher { * @param victim The victim. * @param trident The trident entity. * @param event The event that called this watcher. + * @param config The effect config. */ default void onTridentDamage(@NotNull final LivingEntity attacker, @NotNull final LivingEntity victim, @NotNull final Trident trident, - @NotNull final EntityDamageByEntityEvent event) { - // Empty default as enchantments only override required watchers. + @NotNull final EntityDamageByEntityEvent event, + @NotNull final JSONConfig config) { + // Empty default as effects only override required watchers. } /** @@ -66,10 +88,12 @@ public interface Watcher { * * @param player The player. * @param event The event that called this watcher. + * @param config The effect config. */ default void onJump(@NotNull final Player player, - @NotNull final PlayerMoveEvent event) { - // Empty default as enchantments only override required watchers. + @NotNull final PlayerMoveEvent event, + @NotNull final JSONConfig config) { + // Empty default as effects only override required watchers. } /** @@ -78,11 +102,13 @@ public interface Watcher { * @param attacker The attacker. * @param victim The victim. * @param event The event that called this watcher. + * @param config The effect config. */ default void onMeleeAttack(@NotNull final LivingEntity attacker, @NotNull final LivingEntity victim, - @NotNull final EntityDamageByEntityEvent event) { - // Empty default as enchantments only override required watchers. + @NotNull final EntityDamageByEntityEvent event, + @NotNull final JSONConfig config) { + // Empty default as effects only override required watchers. } /** @@ -91,11 +117,13 @@ public interface Watcher { * @param shooter The entity that shot the bow. * @param arrow The arrow that was shot. * @param event The event that called this watcher. + * @param config The effect config. */ default void onBowShoot(@NotNull final LivingEntity shooter, @NotNull final Arrow arrow, - @NotNull final EntityShootBowEvent event) { - // Empty default as enchantments only override required watchers. + @NotNull final EntityShootBowEvent event, + @NotNull final JSONConfig config) { + // Empty default as effects only override required watchers. } /** @@ -104,11 +132,13 @@ public interface Watcher { * @param shooter The entity that shot the bow. * @param projectile The projectile that was shot. * @param event The event that called this watcher. + * @param config The effect config. */ default void onProjectileLaunch(@NotNull final LivingEntity shooter, @NotNull final Projectile projectile, - @NotNull final ProjectileLaunchEvent event) { - // Empty default as enchantments only override required watchers. + @NotNull final ProjectileLaunchEvent event, + @NotNull final JSONConfig config) { + // Empty default as effects only override required watchers. } /** @@ -116,10 +146,12 @@ public interface Watcher { * * @param faller The entity that took the fall damage. * @param event The event that called this watcher. + * @param config The effect config. */ default void onFallDamage(@NotNull final LivingEntity faller, - @NotNull final EntityDamageEvent event) { - // Empty default as enchantments only override required watchers. + @NotNull final EntityDamageEvent event, + @NotNull final JSONConfig config) { + // Empty default as effects only override required watchers. } /** @@ -127,10 +159,12 @@ public interface Watcher { * * @param shooter The entity that shot the arrow. * @param event The event that called this watcher. + * @param config The effect config. */ default void onArrowHit(@NotNull final LivingEntity shooter, - @NotNull final ProjectileHitEvent event) { - // Empty default as enchantments only override required watchers. + @NotNull final ProjectileHitEvent event, + @NotNull final JSONConfig config) { + // Empty default as effects only override required watchers. } /** @@ -138,10 +172,12 @@ public interface Watcher { * * @param shooter The entity that threw the trident. * @param event The event that called this watcher. + * @param config The effect config. */ default void onTridentHit(@NotNull final LivingEntity shooter, - @NotNull final ProjectileHitEvent event) { - // Empty default as enchantments only override required watchers. + @NotNull final ProjectileHitEvent event, + @NotNull final JSONConfig config) { + // Empty default as effects only override required watchers. } /** @@ -149,10 +185,12 @@ public interface Watcher { * * @param victim The entity that took damage. * @param event The event that called this watcher. + * @param config The effect config. */ default void onDamageWearingArmor(@NotNull final LivingEntity victim, - @NotNull final EntityDamageEvent event) { - // Empty default as enchantments only override required watchers. + @NotNull final EntityDamageEvent event, + @NotNull final JSONConfig config) { + // Empty default as effects only override required watchers. } /** @@ -161,10 +199,12 @@ public interface Watcher { * @param shooter The entity that threw the trident. * @param trident The trident that was thrown. * @param event The event that called this watcher. + * @param config The effect config. */ default void onTridentLaunch(@NotNull final LivingEntity shooter, @NotNull final Trident trident, - @NotNull final ProjectileLaunchEvent event) { - // Empty default as enchantments only override required watchers. + @NotNull final ProjectileLaunchEvent event, + @NotNull final JSONConfig config) { + // Empty default as effects only override required watchers. } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/WatcherTriggers.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/WatcherTriggers.java index 5796b62..25ec0e1 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/WatcherTriggers.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/WatcherTriggers.java @@ -2,10 +2,13 @@ package com.willfp.reforges.reforges.util; import com.willfp.eco.core.EcoPlugin; import com.willfp.eco.core.PluginDependent; +import com.willfp.eco.core.config.interfaces.JSONConfig; import com.willfp.eco.core.events.PlayerJumpEvent; import com.willfp.eco.core.integrations.antigrief.AntigriefManager; import com.willfp.eco.core.integrations.mcmmo.McmmoManager; import com.willfp.eco.util.ArrowUtils; +import com.willfp.eco.util.NumberUtils; +import com.willfp.reforges.effects.Effect; import com.willfp.reforges.reforges.Reforge; import org.bukkit.block.Block; import org.bukkit.entity.AbstractArrow; @@ -27,6 +30,8 @@ import org.bukkit.inventory.EntityEquipment; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; +import java.util.Map; + public class WatcherTriggers extends PluginDependent implements Listener { /** * Create new listener for watcher events. @@ -64,7 +69,12 @@ public class WatcherTriggers extends PluginDependent implements Liste return; } - reforge.onBlockBreak(player, block, event); + for (Map.Entry entry : reforge.getEffects().entrySet()) { + if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) { + continue; + } + entry.getKey().onBlockBreak(player, block, event, entry.getValue()); + } } /** @@ -114,7 +124,13 @@ public class WatcherTriggers extends PluginDependent implements Liste return; } - reforge.onArrowDamage(attacker, victim, arrow, event); + for (Map.Entry entry : reforge.getEffects().entrySet()) { + if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) { + continue; + } + entry.getKey().onArrowDamage(attacker, victim, arrow, event, entry.getValue()); + entry.getKey().onAnyDamage(attacker, victim, event, entry.getValue()); + } } /** @@ -160,7 +176,13 @@ public class WatcherTriggers extends PluginDependent implements Liste return; } - reforge.onTridentDamage(attacker, victim, trident, event); + for (Map.Entry entry : reforge.getEffects().entrySet()) { + if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) { + continue; + } + entry.getKey().onTridentDamage(attacker, victim, trident, event, entry.getValue()); + entry.getKey().onAnyDamage(attacker, victim, event, entry.getValue()); + } } /** @@ -187,7 +209,12 @@ public class WatcherTriggers extends PluginDependent implements Liste continue; } - reforge.onJump(player, event); + for (Map.Entry entry : reforge.getEffects().entrySet()) { + if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) { + continue; + } + entry.getKey().onJump(player, event, entry.getValue()); + } } } @@ -234,7 +261,13 @@ public class WatcherTriggers extends PluginDependent implements Liste return; } - reforge.onMeleeAttack(attacker, victim, event); + for (Map.Entry entry : reforge.getEffects().entrySet()) { + if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) { + continue; + } + entry.getKey().onMeleeAttack(attacker, victim, event, entry.getValue()); + entry.getKey().onAnyDamage(attacker, victim, event, entry.getValue()); + } } /** @@ -267,7 +300,12 @@ public class WatcherTriggers extends PluginDependent implements Liste return; } - reforge.onBowShoot(shooter, arrow, event); + for (Map.Entry entry : reforge.getEffects().entrySet()) { + if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) { + continue; + } + entry.getKey().onBowShoot(shooter, arrow, event, entry.getValue()); + } } /** @@ -309,7 +347,12 @@ public class WatcherTriggers extends PluginDependent implements Liste return; } - reforge.onProjectileLaunch(shooter, projectile, event); + for (Map.Entry entry : reforge.getEffects().entrySet()) { + if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) { + continue; + } + entry.getKey().onProjectileLaunch(shooter, projectile, event, entry.getValue()); + } } /** @@ -348,7 +391,13 @@ public class WatcherTriggers extends PluginDependent implements Liste continue; } - reforge.onFallDamage(victim, event); + + for (Map.Entry entry : reforge.getEffects().entrySet()) { + if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) { + continue; + } + entry.getKey().onFallDamage(victim, event, entry.getValue()); + } } } @@ -387,7 +436,13 @@ public class WatcherTriggers extends PluginDependent implements Liste return; } - reforge.onArrowHit(shooter, event); + + for (Map.Entry entry : reforge.getEffects().entrySet()) { + if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) { + continue; + } + entry.getKey().onArrowHit(shooter, event, entry.getValue()); + } } /** @@ -421,7 +476,12 @@ public class WatcherTriggers extends PluginDependent implements Liste return; } - reforge.onTridentHit(shooter, event); + for (Map.Entry entry : reforge.getEffects().entrySet()) { + if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) { + continue; + } + entry.getKey().onTridentHit(shooter, event, entry.getValue()); + } } /** @@ -456,7 +516,12 @@ public class WatcherTriggers extends PluginDependent implements Liste continue; } - reforge.onDamageWearingArmor(victim, event); + for (Map.Entry entry : reforge.getEffects().entrySet()) { + if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) { + continue; + } + entry.getKey().onDamageWearingArmor(victim, event, entry.getValue()); + } } } @@ -492,6 +557,12 @@ public class WatcherTriggers extends PluginDependent implements Liste return; } - reforge.onTridentLaunch(shooter, trident, event); + for (Map.Entry entry : reforge.getEffects().entrySet()) { + if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) { + continue; + } + + entry.getKey().onTridentLaunch(shooter, trident, event, entry.getValue()); + } } } diff --git a/eco-core/core-plugin/src/main/resources/config.yml b/eco-core/core-plugin/src/main/resources/config.yml index 0aa96e5..e7dbc22 100644 --- a/eco-core/core-plugin/src/main/resources/config.yml +++ b/eco-core/core-plugin/src/main/resources/config.yml @@ -137,66 +137,3 @@ reforge: - "&7Place on the right of the" - "&7reforge menu to apply the" - "%reforge%&7 reforge!" - -targets: - pickaxe: - - wooden_pickaxe - - stone_pickaxe - - iron_pickaxe - - golden_pickaxe - - diamond_pickaxe - - netherite_pickaxe - axe: - - wooden_axe - - stone_axe - - iron_axe - - golden_axe - - diamond_axe - - netherite_axe - melee: - - wooden_axe - - stone_axe - - iron_axe - - golden_axe - - diamond_axe - - netherite_axe - - wooden_sword - - stone_sword - - iron_sword - - golden_sword - - diamond_sword - - netherite_sword - trident: - - trident - bow: - - bow - - crossbow - armor: - - turtle_helmet - - leather_helmet - - chainmail_helmet - - iron_helmet - - golden_helmet - - diamond_helmet - - netherite_helmet - - - leather_chestplate - - chainmail_chestplate - - iron_chestplate - - golden_chestplate - - diamond_chestplate - - netherite_chestplate - - - leather_leggings - - chainmail_leggings - - iron_leggings - - golden_leggings - - diamond_leggings - - netherite_leggings - - - leather_boots - - chainmail_boots - - iron_boots - - golden_boots - - diamond_boots - - netherite_boots \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/reforges.json b/eco-core/core-plugin/src/main/resources/reforges.json new file mode 100644 index 0000000..c63382f --- /dev/null +++ b/eco-core/core-plugin/src/main/resources/reforges.json @@ -0,0 +1,43 @@ +{ + "reforges": [ + { + "id": "dynamic", + "name": "Dynamic", + "description": "Deal &a5%&r more damage and &a10%&r more critical damage", + "targets": [ + "melee" + ], + "stone": { + "enabled": true, + "texture": "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmM0YTY1YzY4OWIyZDM2NDA5MTAwYTYwYzJhYjhkM2QwYTY3Y2U5NGVlYTNjMWY3YWM5NzRmZDg5MzU2OGI1ZCJ9fX0=",, + "craftable": true, + "recipe": [ + "air", + "ecoitems:blank_reforge_stone ? air", + "air", + + "iron_block", + "daylight_sensor", + "iron_block", + + "air", + "phantom_membrane", + "air" + ] + }, + "effects": [ + { + "id": "damage_multiplier", + "multiplier": 1.05 + }, + { + "id": "crit_multiplier", + "multiplier": 1.10 + } + ], + "conditions": [ + + ] + } + ] +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/target.yml b/eco-core/core-plugin/src/main/resources/target.yml new file mode 100644 index 0000000..6fd971d --- /dev/null +++ b/eco-core/core-plugin/src/main/resources/target.yml @@ -0,0 +1,61 @@ +pickaxe: + - wooden_pickaxe + - stone_pickaxe + - iron_pickaxe + - golden_pickaxe + - diamond_pickaxe + - netherite_pickaxe +axe: + - wooden_axe + - stone_axe + - iron_axe + - golden_axe + - diamond_axe + - netherite_axe +melee: + - wooden_axe + - stone_axe + - iron_axe + - golden_axe + - diamond_axe + - netherite_axe + - wooden_sword + - stone_sword + - iron_sword + - golden_sword + - diamond_sword + - netherite_sword +trident: + - trident +bow: + - bow + - crossbow +armor: + - turtle_helmet + - leather_helmet + - chainmail_helmet + - iron_helmet + - golden_helmet + - diamond_helmet + - netherite_helmet + + - leather_chestplate + - chainmail_chestplate + - iron_chestplate + - golden_chestplate + - diamond_chestplate + - netherite_chestplate + + - leather_leggings + - chainmail_leggings + - iron_leggings + - golden_leggings + - diamond_leggings + - netherite_leggings + + - leather_boots + - chainmail_boots + - iron_boots + - golden_boots + - diamond_boots + - netherite_boots \ No newline at end of file