9
0
mirror of https://github.com/Auxilor/Reforges.git synced 2025-12-24 17:39:32 +00:00

Began migrating to EcoArmor / EcoWeapons-like system

This commit is contained in:
Auxilor
2021-09-23 12:43:32 +01:00
parent 4be7d949df
commit c9380468c1
42 changed files with 611 additions and 1171 deletions

View File

@@ -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);
});
}
}

View File

@@ -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()));
}

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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<String> getTargets() {
return this.getKeys(false);
}
/**
* Get all materials from a target name.
*
* @param target The name of the target.
* @return All materials.
*/
public Set<TestableItem> getTargetItems(@NotNull final String target) {
Set<TestableItem> items = new HashSet<>();
this.getStrings(target, false).forEach(s -> items.add(Items.lookup(s.toUpperCase())));
return items;
}
}

View File

@@ -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
}
}

View File

@@ -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<String, Effect> 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<Effect> 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);
}
}

View File

@@ -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"));
}
}

View File

@@ -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"));
}
}

View File

@@ -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<Effect, JSONConfig> 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<ReforgeTarget> 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<String> 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<Effect, JSONConfig> 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<Effect, JSONConfig> 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()
+ "}";
}
}

View File

@@ -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<String, Reforge> 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());
}
}

View File

@@ -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<ReforgeTarget> REGISTERED = new HashSet<>();
private static final Map<String, ReforgeTarget> 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<ReforgeTarget> 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<ReforgeTarget> matching = REGISTERED.stream()
Optional<ReforgeTarget> 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<ReforgeTarget> values() {
return ImmutableSet.copyOf(REGISTERED);
return ImmutableSet.copyOf(REGISTERED.values());
}
}

View File

@@ -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"));
}
}
}

View File

@@ -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"));
}
}
}

View File

@@ -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"));
}
}

View File

@@ -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);
}
}
}

View File

@@ -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"));
}
}
}

View File

@@ -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);
}
}
}

View File

@@ -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"));
}
}
}

View File

@@ -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());
}
}

View File

@@ -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;
}
}

View File

@@ -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"));
}
}
}

View File

@@ -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"));
}
}
}

View File

@@ -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"));
}
}

View File

@@ -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"));
}
}
}

View File

@@ -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"));
}
}

View File

@@ -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"));
}
}

View File

@@ -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"));
}
}

View File

@@ -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"));
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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"));
}
}

View File

@@ -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"));
}
}

View File

@@ -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")));
}
}

View File

@@ -43,7 +43,7 @@ public class ReforgeHandler extends PluginDependent<EcoPlugin> {
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;
}

View File

@@ -51,7 +51,7 @@ public class ReforgeUtils {
List<Reforge> 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);
}

View File

@@ -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.
}
}

View File

@@ -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<EcoPlugin> implements Listener {
/**
* Create new listener for watcher events.
@@ -64,7 +69,12 @@ public class WatcherTriggers extends PluginDependent<EcoPlugin> implements Liste
return;
}
reforge.onBlockBreak(player, block, event);
for (Map.Entry<Effect, JSONConfig> 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<EcoPlugin> implements Liste
return;
}
reforge.onArrowDamage(attacker, victim, arrow, event);
for (Map.Entry<Effect, JSONConfig> 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<EcoPlugin> implements Liste
return;
}
reforge.onTridentDamage(attacker, victim, trident, event);
for (Map.Entry<Effect, JSONConfig> 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<EcoPlugin> implements Liste
continue;
}
reforge.onJump(player, event);
for (Map.Entry<Effect, JSONConfig> 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<EcoPlugin> implements Liste
return;
}
reforge.onMeleeAttack(attacker, victim, event);
for (Map.Entry<Effect, JSONConfig> 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<EcoPlugin> implements Liste
return;
}
reforge.onBowShoot(shooter, arrow, event);
for (Map.Entry<Effect, JSONConfig> 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<EcoPlugin> implements Liste
return;
}
reforge.onProjectileLaunch(shooter, projectile, event);
for (Map.Entry<Effect, JSONConfig> 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<EcoPlugin> implements Liste
continue;
}
reforge.onFallDamage(victim, event);
for (Map.Entry<Effect, JSONConfig> 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<EcoPlugin> implements Liste
return;
}
reforge.onArrowHit(shooter, event);
for (Map.Entry<Effect, JSONConfig> 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<EcoPlugin> implements Liste
return;
}
reforge.onTridentHit(shooter, event);
for (Map.Entry<Effect, JSONConfig> 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<EcoPlugin> implements Liste
continue;
}
reforge.onDamageWearingArmor(victim, event);
for (Map.Entry<Effect, JSONConfig> 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<EcoPlugin> implements Liste
return;
}
reforge.onTridentLaunch(shooter, trident, event);
for (Map.Entry<Effect, JSONConfig> 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());
}
}
}

View File

@@ -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

View File

@@ -0,0 +1,43 @@
{
"reforges": [
{
"id": "dynamic",
"name": "<gradient:#AAFFA9>Dynamic</gradient:#11FFBD>",
"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": [
]
}
]
}

View File

@@ -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