From d382dd54705b091a26fe629555ba46830786d08b Mon Sep 17 00:00:00 2001 From: Auxilor Date: Thu, 12 Aug 2021 18:03:41 +0100 Subject: [PATCH] Added cost exponent, and wise and dynamic reforges --- .../com/willfp/reforges/gui/ReforgeGUI.java | 15 ++++-- .../willfp/reforges/reforges/Reforges.java | 4 ++ .../reforges/reforges/ReforgeDynamic.java | 30 ++++++++++++ .../reforges/reforges/ReforgeLight.java | 4 +- .../reforges/reforges/ReforgeWise.java | 31 ++++++++++++ .../reforges/reforges/util/ReforgeUtils.java | 49 +++++++++++++++++++ .../core-plugin/src/main/resources/config.yml | 4 +- .../src/main/resources/reforges/dynamic.yml | 11 +++++ .../src/main/resources/reforges/light.yml | 4 +- .../src/main/resources/reforges/wise.yml | 10 ++++ 10 files changed, 154 insertions(+), 8 deletions(-) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeDynamic.java create 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/dynamic.yml create mode 100644 eco-core/core-plugin/src/main/resources/reforges/wise.yml diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/gui/ReforgeGUI.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/gui/ReforgeGUI.java index ab133e7..17f46a0 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/gui/ReforgeGUI.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/gui/ReforgeGUI.java @@ -84,26 +84,31 @@ public class ReforgeGUI { ReforgeStatus status = ReforgeUtils.getStatus(menu.getCaptiveItems(player)); + double cost = plugin.getConfigYml().getDouble("reforge.cost"); + int reforges = ReforgeUtils.getReforges(previous); + cost *= Math.pow(plugin.getConfigYml().getDouble("reforge.cost-exponent"), reforges); + double finalCost = cost; + switch (status) { case INVALID_ITEM -> { previous.setType(Objects.requireNonNull(Material.getMaterial(plugin.getConfigYml().getString("gui.invalid-item.material").toUpperCase()))); meta.setDisplayName(plugin.getConfigYml().getString("gui.invalid-item.name")); List lore = plugin.getConfigYml().getStrings("gui.invalid-item.lore"); - lore.replaceAll(s -> s.replace("%cost%", NumberUtils.format(plugin.getConfigYml().getDouble("reforge.cost")))); + lore.replaceAll(s -> s.replace("%cost%", NumberUtils.format(finalCost))); meta.setLore(lore); } case ALLOW -> { previous.setType(Objects.requireNonNull(Material.getMaterial(plugin.getConfigYml().getString("gui.allow.material").toUpperCase()))); meta.setDisplayName(plugin.getConfigYml().getString("gui.allow.name")); List lore = plugin.getConfigYml().getStrings("gui.allow.lore"); - lore.replaceAll(s -> s.replace("%cost%", NumberUtils.format(plugin.getConfigYml().getDouble("reforge.cost")))); + lore.replaceAll(s -> s.replace("%cost%", NumberUtils.format(finalCost))); meta.setLore(lore); } default -> { previous.setType(Objects.requireNonNull(Material.getMaterial(plugin.getConfigYml().getString("gui.no-item.material").toUpperCase()))); meta.setDisplayName(plugin.getConfigYml().getString("gui.no-item.name")); List lore = plugin.getConfigYml().getStrings("gui.no-item.lore"); - lore.replaceAll(s -> s.replace("%cost%", NumberUtils.format(plugin.getConfigYml().getDouble("reforge.cost")))); + lore.replaceAll(s -> s.replace("%cost%", NumberUtils.format(finalCost))); meta.setLore(lore); } } @@ -127,6 +132,8 @@ public class ReforgeGUI { } double cost = plugin.getConfigYml().getDouble("reforge.cost"); + int reforges = ReforgeUtils.getReforges(toReforge); + cost *= Math.pow(plugin.getConfigYml().getDouble("reforge.cost-exponent"), reforges); if (!EconomyHandler.getInstance().has(player, cost)) { player.sendMessage(plugin.getLangYml().getMessage("insufficient-money")); @@ -143,6 +150,8 @@ public class ReforgeGUI { player.sendMessage(plugin.getLangYml().getMessage("applied-reforge").replace("%reforge%", reforge.getName())); + ReforgeUtils.incrementReforges(toReforge); + EconomyHandler.getInstance().withdrawPlayer(player, cost); ReforgeUtils.setReforge(toReforge, reforge); 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 1a8e8bf..36b6555 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 @@ -4,8 +4,10 @@ import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import com.google.common.collect.ImmutableSet; import com.willfp.eco.core.config.updating.ConfigUpdater; +import com.willfp.reforges.reforges.reforges.ReforgeDynamic; import com.willfp.reforges.reforges.reforges.ReforgeLight; import com.willfp.reforges.reforges.reforges.ReforgeSharp; +import com.willfp.reforges.reforges.reforges.ReforgeWise; import lombok.experimental.UtilityClass; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -22,6 +24,8 @@ public class Reforges { 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(); /** * Get all registered {@link Reforge}s. 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 new file mode 100644 index 0000000..fc1d7f9 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeDynamic.java @@ -0,0 +1,30 @@ +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 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/ReforgeLight.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeLight.java index 728c3d9..9424693 100644 --- 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 @@ -28,14 +28,14 @@ public class ReforgeLight extends Reforge { this.speedModifier = new AttributeModifier( UUID.nameUUIDFromBytes("light-speed".getBytes()), "light-speed", - this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "speed-multiplier"), + this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "speed-multiplier") - 1, AttributeModifier.Operation.MULTIPLY_SCALAR_1, EquipmentSlot.HAND ); this.kbModifier = new AttributeModifier( UUID.nameUUIDFromBytes("light-kb".getBytes()), "light-kb", - this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "knockback-multiplier"), + this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "knockback-multiplier") - 1, AttributeModifier.Operation.MULTIPLY_SCALAR_1, EquipmentSlot.HAND ); 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 new file mode 100644 index 0000000..6be9199 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeWise.java @@ -0,0 +1,31 @@ +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 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/ReforgeUtils.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeUtils.java index 14a65d9..2da78cf 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 @@ -31,6 +31,11 @@ public class ReforgeUtils { */ private static final NamespacedKey REFORGE_KEY = PLUGIN.getNamespacedKeyFactory().create("reforge"); + /** + * The key for storing the currently displayed stat. + */ + private static final NamespacedKey REFORGE_AMOUNT = PLUGIN.getNamespacedKeyFactory().create("reforge_amount"); + /** * Get a random reforge for a target. * @@ -147,4 +152,48 @@ public class ReforgeUtils { reforge.handleApplication(item); } + + /** + * Get the amount of reforges done to an item. + * + * @param item The item. + */ + public static int getReforges(@NotNull final ItemStack item) { + ItemMeta meta = item.getItemMeta(); + + if (meta == null) { + return 0; + } + + PersistentDataContainer container = meta.getPersistentDataContainer(); + + if (!container.has(REFORGE_AMOUNT, PersistentDataType.INTEGER)) { + container.set(REFORGE_AMOUNT, PersistentDataType.INTEGER, 0); + item.setItemMeta(meta); + } + + Integer amount = container.get(REFORGE_AMOUNT, PersistentDataType.INTEGER); + + return amount == null ? 0 : amount; + } + + /** + * Get the amount of reforges done to an item. + * + * @param item The item. + */ + public static void incrementReforges(@NotNull final ItemStack item) { + ItemMeta meta = item.getItemMeta(); + + if (meta == null) { + return; + } + + int amount = getReforges(item); + amount++; + + PersistentDataContainer container = meta.getPersistentDataContainer(); + container.set(REFORGE_AMOUNT, PersistentDataType.INTEGER, amount); + item.setItemMeta(meta); + } } diff --git a/eco-core/core-plugin/src/main/resources/config.yml b/eco-core/core-plugin/src/main/resources/config.yml index bb7f802..5ac634a 100644 --- a/eco-core/core-plugin/src/main/resources/config.yml +++ b/eco-core/core-plugin/src/main/resources/config.yml @@ -39,7 +39,9 @@ gui: pitch: 0.8 reforge: - cost: 5000 + cost: 7500 + + cost-exponent: 1.15 # (Reforges done ^ cost exponent) * cost line-wrap: 32 diff --git a/eco-core/core-plugin/src/main/resources/reforges/dynamic.yml b/eco-core/core-plugin/src/main/resources/reforges/dynamic.yml new file mode 100644 index 0000000..1bc1eae --- /dev/null +++ b/eco-core/core-plugin/src/main/resources/reforges/dynamic.yml @@ -0,0 +1,11 @@ +# +# Dynamic Reforge +# + +name: "Sharp" +enabled: true +description: "Deal &a2.5%&r more damage and &a5%&r more critical damage" + +config: + multiplier: 1.025 + crit-multiplier: 1.05 \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/reforges/light.yml b/eco-core/core-plugin/src/main/resources/reforges/light.yml index c539dfa..4855336 100644 --- a/eco-core/core-plugin/src/main/resources/reforges/light.yml +++ b/eco-core/core-plugin/src/main/resources/reforges/light.yml @@ -8,5 +8,5 @@ description: "Deal &a5%&r less damage and knockback, but attack &a3%&7&o faster. config: multiplier: 0.95 # Damage multiplier - speed-multiplier: 0.03 - knockback-multiplier: -0.05 \ No newline at end of file + speed-multiplier: 1.03 + knockback-multiplier: 0.95 \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/reforges/wise.yml b/eco-core/core-plugin/src/main/resources/reforges/wise.yml new file mode 100644 index 0000000..f928324 --- /dev/null +++ b/eco-core/core-plugin/src/main/resources/reforges/wise.yml @@ -0,0 +1,10 @@ +# +# Wise Reforge +# + +name: "Light" +enabled: true +description: "Gain &a7.5%&r more experience." + +config: + multiplier: 1.075 \ No newline at end of file