From eb9af926ee71841c3995c42901e8d500e3d0cf15 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Thu, 12 Aug 2021 17:02:08 +0100 Subject: [PATCH] Added light reforge --- .../com/willfp/reforges/ReforgesPlugin.java | 12 ++-- .../com/willfp/reforges/reforges/Reforge.java | 10 +++ .../willfp/reforges/reforges/Reforges.java | 2 + .../reforges/reforges/ReforgeLight.java | 71 +++++++++++++++++++ .../reforges/reforges/util/ReforgeUtils.java | 24 +++---- .../willfp/reforges/vault/EconomyHandler.java | 3 - .../core-plugin/src/main/resources/lang.yml | 2 +- .../src/main/resources/reforges/light.yml | 12 ++++ 8 files changed, 114 insertions(+), 22 deletions(-) create mode 100644 eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeLight.java create mode 100644 eco-core/core-plugin/src/main/resources/reforges/light.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 d6be22e..cef9713 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 @@ -27,19 +27,21 @@ public class ReforgesPlugin extends EcoPlugin { * Internal constructor called by bukkit on plugin load. */ public ReforgesPlugin() { - super(0, 12412, "�ff00"); + super(0, 12412, "&3"); instance = this; } @Override protected void handleEnable() { - if (EconomyHandler.init()) { + this.getLogger().info(Reforges.values().size() + " Reforges Loaded"); + } + + @Override + protected void handleAfterLoad() { + if (!EconomyHandler.init()) { this.getLogger().severe("Vault economy is required!"); this.getServer().getPluginManager().disablePlugin(this); - return; } - - this.getLogger().info(Reforges.values().size() + " Reforges Loaded"); } @Override 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 7f62d39..0abb8c0 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 @@ -9,6 +9,7 @@ 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.jetbrains.annotations.NotNull; import java.util.Objects; @@ -90,6 +91,15 @@ public abstract class Reforge implements Listener, Watcher { */ public abstract ReforgeTarget getTarget(); + public void handleApplication(@NotNull final ItemStack itemStack) { + // Override when needed + } + + public void handleRemoval(@NotNull final ItemStack itemStack) { + // Override when needed + } + + @Override public boolean equals(final Object o) { if (this == o) { 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 11d7291..1a8e8bf 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,6 +4,7 @@ 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.ReforgeLight; import com.willfp.reforges.reforges.reforges.ReforgeSharp; import lombok.experimental.UtilityClass; import org.jetbrains.annotations.NotNull; @@ -20,6 +21,7 @@ public class Reforges { private static final BiMap BY_KEY = HashBiMap.create(); public static final Reforge SHARP = new ReforgeSharp(); + public static final Reforge LIGHT = new ReforgeLight(); /** * Get all registered {@link Reforge}s. 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 new file mode 100644 index 0000000..63835cf --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeLight.java @@ -0,0 +1,71 @@ +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.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.jetbrains.annotations.NotNull; + +import java.util.UUID; + +public class ReforgeLight extends Reforge { + private AttributeModifier speedModifier; + private AttributeModifier kbModifier; + + public ReforgeLight() { + super("light"); + } + + @Override + protected void postUpdate() { + this.speedModifier = new AttributeModifier( + UUID.nameUUIDFromBytes("light-speed".getBytes()), + "light-speed", + this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "speed-multiplier") - 1, + AttributeModifier.Operation.MULTIPLY_SCALAR_1 + ); + this.kbModifier = new AttributeModifier( + UUID.nameUUIDFromBytes("light-kb".getBytes()), + "light-kb", + this.getConfig().getDouble(Reforges.CONFIG_LOCATION + "knockback-multiplier") - 1, + AttributeModifier.Operation.MULTIPLY_SCALAR_1 + ); + } + + @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")); + } + + @Override + public void handleApplication(@NotNull final ItemStack itemStack) { + ItemMeta meta = itemStack.getItemMeta(); + assert meta != null; + + meta.addAttributeModifier(Attribute.GENERIC_ATTACK_SPEED, speedModifier); + meta.addAttributeModifier(Attribute.GENERIC_ATTACK_KNOCKBACK, kbModifier); + itemStack.setItemMeta(meta); + } + + @Override + public void handleRemoval(@NotNull final ItemStack itemStack) { + ItemMeta meta = itemStack.getItemMeta(); + assert meta != null; + + meta.removeAttributeModifier(Attribute.GENERIC_ATTACK_SPEED, speedModifier); + meta.removeAttributeModifier(Attribute.GENERIC_ATTACK_KNOCKBACK, kbModifier); + itemStack.setItemMeta(meta); + } +} 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 750807a..14a65d9 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 @@ -126,27 +126,25 @@ public class ReforgeUtils { */ public static void setReforge(@NotNull final ItemStack item, @NotNull final Reforge reforge) { - ItemMeta meta = item.getItemMeta(); - if (meta == null) { + if (item.getItemMeta() == null) { return; } - setReforge(meta, reforge); + Reforge previous = getReforge(item); - item.setItemMeta(meta); - } + if (previous != null) { + previous.handleRemoval(item); + } + + ItemMeta meta = item.getItemMeta(); - /** - * Set reforge on an item. - * - * @param meta The meta. - * @param reforge The reforge. - */ - public static void setReforge(@NotNull final ItemMeta meta, - @NotNull final Reforge reforge) { PersistentDataContainer container = meta.getPersistentDataContainer(); container.set(REFORGE_KEY, PersistentDataType.STRING, reforge.getKey()); + + item.setItemMeta(meta); + + reforge.handleApplication(item); } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/vault/EconomyHandler.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/vault/EconomyHandler.java index 42262de..e049349 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/vault/EconomyHandler.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/vault/EconomyHandler.java @@ -20,9 +20,6 @@ public class EconomyHandler { * @return If was successful. */ public boolean init() { - if (Bukkit.getServer().getPluginManager().getPlugin("Vault") == null) { - return false; - } RegisteredServiceProvider rsp = Bukkit.getServer().getServicesManager().getRegistration(Economy.class); if (rsp == null) { return false; diff --git a/eco-core/core-plugin/src/main/resources/lang.yml b/eco-core/core-plugin/src/main/resources/lang.yml index 6d17db0..ec31692 100644 --- a/eco-core/core-plugin/src/main/resources/lang.yml +++ b/eco-core/core-plugin/src/main/resources/lang.yml @@ -1,5 +1,5 @@ messages: - prefix: "�ff00&lReforges&r &8» &r" + prefix: "&3&lReforges&r &8» &r" no-permission: "&cYou don't have permission to do this!" not-player: "&cThis command must be run by a player" invalid-command: "&cUnknown subcommand!" diff --git a/eco-core/core-plugin/src/main/resources/reforges/light.yml b/eco-core/core-plugin/src/main/resources/reforges/light.yml new file mode 100644 index 0000000..93d4e1f --- /dev/null +++ b/eco-core/core-plugin/src/main/resources/reforges/light.yml @@ -0,0 +1,12 @@ +# +# Light Reforge +# + +name: "Light" +enabled: true +description: "Deal &a5%&7&o less damage and knockback, but attack &a3%&7&o faster." + +config: + multiplier: 0.95 # Damage multiplier + speed-multiplier: 1.03 + knockback-multiplier: 0.95 \ No newline at end of file