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 cef9713..7422d21 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 @@ -4,6 +4,7 @@ import com.willfp.eco.core.EcoPlugin; import com.willfp.eco.core.command.impl.PluginCommand; import com.willfp.eco.core.display.DisplayModule; import com.willfp.reforges.commands.CommandReforge; +import com.willfp.reforges.commands.CommandReforges; import com.willfp.reforges.display.ReforgesDisplay; import com.willfp.reforges.reforges.Reforge; import com.willfp.reforges.reforges.Reforges; @@ -66,7 +67,8 @@ public class ReforgesPlugin extends EcoPlugin { @Override protected List loadPluginCommands() { return Arrays.asList( - new CommandReforge(this) + new CommandReforge(this), + new CommandReforges(this) ); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandReforges.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandReforges.java index 1efceeb..8717381 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandReforges.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandReforges.java @@ -13,7 +13,7 @@ public class CommandReforges extends PluginCommand { * @param plugin The plugin for the commands to listen for. */ public CommandReforges(@NotNull final EcoPlugin plugin) { - super(plugin, "reforge", "reforges.command.reforges", false); + super(plugin, "reforges", "reforges.command.reforges", false); this.addSubcommand(new CommandReload(plugin)) .addSubcommand(new CommandGive(plugin)); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/display/ReforgesDisplay.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/display/ReforgesDisplay.java index 4594a32..b798812 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/display/ReforgesDisplay.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/display/ReforgesDisplay.java @@ -10,6 +10,7 @@ import com.willfp.reforges.reforges.Reforge; import com.willfp.reforges.reforges.meta.ReforgeTarget; import com.willfp.reforges.reforges.util.ReforgeUtils; import org.apache.commons.lang.WordUtils; +import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.SkullMeta; @@ -34,7 +35,7 @@ public class ReforgesDisplay extends DisplayModule { @NotNull final Object... args) { ReforgeTarget target = ReforgeTarget.getForMaterial(itemStack.getType()); - if (target == null) { + if (target == null && itemStack.getType() != Material.PLAYER_HEAD) { return; } @@ -46,17 +47,20 @@ public class ReforgesDisplay extends DisplayModule { FastItemStack fastItemStack = FastItemStack.wrap(itemStack); List lore = fastItemStack.getLore(); - assert lore != null; if (stone != null) { meta.setDisplayName(this.getPlugin().getConfigYml().getString("reforge.stone.name").replace("%reforge%", stone.getName())); - SkullUtils.setSkullTexture((SkullMeta) meta, reforge.getConfig().getString("stone-config.texture")); + SkullUtils.setSkullTexture((SkullMeta) meta, stone.getConfig().getString("stone-config.texture")); itemStack.setItemMeta(meta); List stoneLore = new ArrayList<>(); for (String string : this.getPlugin().getConfigYml().getStrings("reforge.stone.lore")) { - stoneLore.add(string.replace("%reforge%", stone.getName())); + stoneLore.add(Display.PREFIX + string.replace("%reforge%", stone.getName())); } lore.addAll(0, stoneLore); + } else { + if (itemStack.getType() == Material.PLAYER_HEAD) { + return; + } } if (reforge != null) { @@ -81,7 +85,7 @@ public class ReforgesDisplay extends DisplayModule { } } - if (reforge == null && this.getPlugin().getConfigYml().getBool("reforge.show-reforgable")) { + if (reforge == null && this.getPlugin().getConfigYml().getBool("reforge.show-reforgable") && itemStack.getType() != Material.PLAYER_HEAD) { List addLore = this.getPlugin().getConfigYml().getStrings("reforge.reforgable-suffix"); addLore.replaceAll(s -> Display.PREFIX + s); 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 31f75e4..9d40566 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 @@ -66,7 +66,7 @@ public class ReforgeGUI { ).setModifier((player, menu, previous) -> { ReforgeStatus status = ReforgeUtils.getStatus(menu.getCaptiveItems(player)); - if (status == ReforgeStatus.ALLOW) { + if (status == ReforgeStatus.ALLOW || status == ReforgeStatus.ALLOW_STONE) { previous.setType(Material.LIME_STAINED_GLASS_PANE); } else { previous.setType(Material.RED_STAINED_GLASS_PANE); @@ -121,6 +121,16 @@ public class ReforgeGUI { } meta.setLore(lore); } + case ALLOW_STONE -> { + previous.setType(Objects.requireNonNull(Material.getMaterial(plugin.getConfigYml().getString("gui.allow-stone.material").toUpperCase()))); + meta.setDisplayName(plugin.getConfigYml().getString("gui.allow-stone.name")); + List lore = new ArrayList<>(); + for (String string : plugin.getConfigYml().getStrings("gui.allow-stone.lore")) { + lore.add(string.replace("%cost%", NumberUtils.format(cost)) + .replace("%stone%", ReforgeUtils.getReforgeStone(menu.getCaptiveItems(player).get(1)).getName())); + } + 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")); @@ -192,8 +202,8 @@ public class ReforgeGUI { if (usedStone) { ItemStack stone = menu.getCaptiveItems(player).get(1); - stone.setType(Material.AIR); stone.setItemMeta(null); + stone.setAmount(0); } player.playSound( 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 8fa0915..f8f88f4 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 @@ -7,6 +7,7 @@ import com.willfp.eco.core.recipe.Recipes; import com.willfp.reforges.ReforgesPlugin; import com.willfp.reforges.config.ReforgeConfig; 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; @@ -94,9 +95,16 @@ public abstract class Reforge implements Listener, Watcher { description = config.getString("description"); requiresStone = config.getBool("stone-config.requires-stone"); - stone = new SkullBuilder() - .setSkullTexture(config.getString("stone-config.texture")) - .build(); + if (requiresStone) { + stone = new SkullBuilder() + .setSkullTexture(config.getString("stone-config.texture")) + .build(); + } else { + stone = new SkullBuilder() + .build(); + } + + ReforgeUtils.setReforgeStone(stone, this); if (config.getBool("stone-config.craftable")) { Recipes.createAndRegisterRecipe( 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 a8d446e..0666a07 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 @@ -9,6 +9,7 @@ import com.willfp.reforges.reforges.reforges.ReforgeGravitated; import com.willfp.reforges.reforges.reforges.ReforgeLight; import com.willfp.reforges.reforges.reforges.ReforgeSharp; import com.willfp.reforges.reforges.reforges.ReforgeStrong; +import com.willfp.reforges.reforges.reforges.ReforgeWealthy; import com.willfp.reforges.reforges.reforges.ReforgeWise; import lombok.experimental.UtilityClass; import org.jetbrains.annotations.NotNull; @@ -30,6 +31,7 @@ public class Reforges { 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(); /** * Get all registered {@link Reforge}s. 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 new file mode 100644 index 0000000..0042a99 --- /dev/null +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/reforges/ReforgeWealthy.java @@ -0,0 +1,37 @@ +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 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/util/ReforgeStatus.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeStatus.java index f8de633..70ba626 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeStatus.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeStatus.java @@ -6,6 +6,11 @@ public enum ReforgeStatus { */ ALLOW, + /** + * Allow the reforge with a stone. + */ + ALLOW_STONE, + /** * Invalid item to reforge. */ 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 0610d61..e6bb372 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 @@ -6,6 +6,7 @@ import com.willfp.reforges.reforges.Reforge; import com.willfp.reforges.reforges.Reforges; import com.willfp.reforges.reforges.meta.ReforgeTarget; import lombok.experimental.UtilityClass; +import org.bukkit.Material; import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; @@ -49,7 +50,7 @@ public class ReforgeUtils { List applicable = new ArrayList<>(); for (Reforge reforge : Reforges.values()) { - if (reforge.getTarget().equals(target)) { + if (reforge.getTarget().equals(target) && !reforge.isRequiresStone()) { applicable.add(reforge); } } @@ -65,11 +66,12 @@ public class ReforgeUtils { public static ReforgeStatus getStatus(@NotNull final List captive) { ItemStack toReforge = captive.isEmpty() ? null : captive.get(0); + ItemStack stone = captive.size() == 2 ? captive.get(1) : null; ReforgeStatus status = null; ReforgeTarget target = null; - if (toReforge == null) { + if (toReforge == null || toReforge.getType() == Material.AIR) { status = ReforgeStatus.NO_ITEM; } else { target = ReforgeTarget.getForMaterial(toReforge.getType()); @@ -82,6 +84,13 @@ public class ReforgeUtils { status = ReforgeStatus.ALLOW; } + if (status == ReforgeStatus.ALLOW) { + Reforge reforgeStone = getReforgeStone(stone); + if (reforgeStone != null && reforgeStone.getTarget().getMaterials().contains(toReforge.getType())) { + status = ReforgeStatus.ALLOW_STONE; + } + } + return status; } @@ -211,12 +220,6 @@ public class ReforgeUtils { return; } - Reforge previous = getReforge(item); - - if (previous != null) { - previous.handleRemoval(item); - } - ItemMeta meta = item.getItemMeta(); PersistentDataContainer container = meta.getPersistentDataContainer(); @@ -224,8 +227,6 @@ public class ReforgeUtils { container.set(REFORGE_STONE_KEY, PersistentDataType.STRING, reforge.getKey()); item.setItemMeta(meta); - - reforge.handleApplication(item); } /** diff --git a/eco-core/core-plugin/src/main/resources/config.yml b/eco-core/core-plugin/src/main/resources/config.yml index 6a87798..759f845 100644 --- a/eco-core/core-plugin/src/main/resources/config.yml +++ b/eco-core/core-plugin/src/main/resources/config.yml @@ -16,6 +16,19 @@ gui: - '&6\$%cost%' - '' - '&eClick to reforge!' + allow-stone: + material: anvil + name: "&aReforge Item" + lore: + - '&7Reforges the above item with' + - '&7a reforge stone, giving it' + - '&7the %stone%&7 reforge to' + - '&7boost its stats.' + - '' + - '&7Cost' + - '&6\$%cost%' + - '' + - '&eClick to reforge!' no-item: material: anvil name: "&eReforge Item" diff --git a/eco-core/core-plugin/src/main/resources/lang.yml b/eco-core/core-plugin/src/main/resources/lang.yml index a6e793f..0fa7523 100644 --- a/eco-core/core-plugin/src/main/resources/lang.yml +++ b/eco-core/core-plugin/src/main/resources/lang.yml @@ -10,6 +10,6 @@ messages: invalid-player: "&cInvalid player!" needs-stone: "&cYou must specify a reforge stone" invalid-stone: "&cInvalid reforge!" - give-success: "Gave &a%reforge%&r to &a%recipient%" + give-success: "Gave &a%reforge%&r reforge stone to &a%recipient%" description-color: "&7&o" \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/reforges/dynamic.yml b/eco-core/core-plugin/src/main/resources/reforges/dynamic.yml index d4a7d21..9726faf 100644 --- a/eco-core/core-plugin/src/main/resources/reforges/dynamic.yml +++ b/eco-core/core-plugin/src/main/resources/reforges/dynamic.yml @@ -4,7 +4,7 @@ name: "Dynamic" enabled: true -description: "Deal &a2.5%&r more damage and &a5%&r more critical damage" +description: "Deal &a5%&r more damage and &a10%&r more critical damage" stone-config: requires-stone: true @@ -22,5 +22,5 @@ stone-config: - air config: - multiplier: 1.025 - crit-multiplier: 1.05 \ No newline at end of file + multiplier: 1.05 + crit-multiplier: 1.10 \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/resources/reforges/wealthy.yml b/eco-core/core-plugin/src/main/resources/reforges/wealthy.yml new file mode 100644 index 0000000..d40f995 --- /dev/null +++ b/eco-core/core-plugin/src/main/resources/reforges/wealthy.yml @@ -0,0 +1,16 @@ +# +# Wealthy Reforge +# + +name: "Wealthy" +enabled: true +description: "Gain &e\$10&f for each mob you kill" + +stone-config: + requires-stone: true + texture: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzVmNDg2MWFhNWIyMmVlMjhhOTBlNzVkYWI0NWQyMjFlZmQxNGMwYjFlY2M4ZWU5OThmYjY3ZTQzYmI4ZjNkZSJ9fX0= + craftable: false + recipe: [] + +config: + money: 10 \ No newline at end of file