diff --git a/README.md b/README.md index 0eca83e..2bfc4c5 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@


- Reforges logo + Reforges logo

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 bef983a..263aac6 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 @@ -10,11 +10,13 @@ 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.effects.ConfiguredEffect; import com.willfp.reforges.effects.Effect; import com.willfp.reforges.effects.Effects; import com.willfp.reforges.integrations.aureliumskills.AureliumSkillsIntegration; import com.willfp.reforges.integrations.ecoskills.EcoSkillsIntegration; import com.willfp.reforges.integrations.talismans.TalismansIntegration; +import com.willfp.reforges.reforges.Reforge; import com.willfp.reforges.reforges.Reforges; import com.willfp.reforges.reforges.util.ReforgeArgParser; import com.willfp.reforges.reforges.util.ReforgeEnableListeners; @@ -66,6 +68,17 @@ public class ReforgesPlugin extends EcoPlugin { Items.registerArgParser(new ReforgeArgParser()); } + @Override + protected void handleDisable() { + for (Player player : Bukkit.getOnlinePlayers()) { + for (Reforge value : Reforges.values()) { + for (ConfiguredEffect effect : value.getEffects()) { + effect.getEffect().handleDisabling(player); + } + } + } + } + @Override protected void handleAfterLoad() { EconomyHandler.setEnabled(EconomyHandler.init()); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandGive.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandGive.java deleted file mode 100644 index 02c3c2d..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandGive.java +++ /dev/null @@ -1,151 +0,0 @@ -package com.willfp.reforges.commands; - - -import com.willfp.eco.core.EcoPlugin; -import com.willfp.eco.core.command.CommandHandler; -import com.willfp.eco.core.command.TabCompleteHandler; -import com.willfp.eco.core.command.impl.Subcommand; -import com.willfp.eco.core.config.updating.ConfigUpdater; -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.util.StringUtil; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - -public class CommandGive extends Subcommand { - /** - * The cached names. - */ - private static final List STONE_NAMES = new ArrayList<>(); - - /** - * The cached numbers. - */ - private static final List NUMBERS = Arrays.asList( - "1", - "2", - "3", - "4", - "5", - "10", - "32", - "64" - ); - - /** - * Instantiate a new command handler. - * - * @param plugin The plugin for the commands to listen for. - */ - public CommandGive(@NotNull final EcoPlugin plugin) { - super(plugin, "give", "reforges.command.give", false); - } - - /** - * Called on reload. - */ - @ConfigUpdater - public static void reload() { - STONE_NAMES.clear(); - STONE_NAMES.addAll(Reforges.values().stream() - .filter(Reforge::getRequiresStone) - .map(Reforge::getId) - .collect(Collectors.toList())); - } - - @Override - public CommandHandler getHandler() { - return (sender, args) -> { - if (args.isEmpty()) { - sender.sendMessage(this.getPlugin().getLangYml().getMessage("needs-player")); - return; - } - - if (args.size() == 1) { - sender.sendMessage(this.getPlugin().getLangYml().getMessage("needs-stone")); - return; - } - - int amount = 1; - - if (args.size() > 2) { - try { - amount = Integer.parseInt(args.get(2)); - } catch (NumberFormatException ignored) { - // do nothing - } - } - - String recieverName = args.get(0); - Player reciever = Bukkit.getPlayer(recieverName); - - if (reciever == null) { - sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-player")); - return; - } - - String key = args.get(1); - - Reforge reforge = Reforges.getByKey(key); - - if (reforge == null) { - sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-stone")); - return; - } - - String message = this.getPlugin().getLangYml().getMessage("give-success"); - message = message.replace("%reforge%", reforge.getName()).replace("%recipient%", reciever.getName()); - sender.sendMessage(message); - - ItemStack itemStack = reforge.getStone(); - itemStack.setAmount(amount); - reciever.getInventory().addItem(itemStack); - }; - } - - @Override - public TabCompleteHandler getTabCompleter() { - return (sender, args) -> { - List completions = new ArrayList<>(); - - if (args.isEmpty()) { - // Currently, this case is not ever reached - return STONE_NAMES; - } - - if (args.size() == 1) { - StringUtil.copyPartialMatches(args.get(0), Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList()), completions); - return completions; - } - - if (args.size() == 2) { - StringUtil.copyPartialMatches(args.get(1), STONE_NAMES, completions); - - Collections.sort(completions); - return completions; - } - - if (args.size() == 3) { - StringUtil.copyPartialMatches(args.get(2), NUMBERS, completions); - - completions.sort((s1, s2) -> { - int t1 = Integer.parseInt(s1); - int t2 = Integer.parseInt(s2); - return t1 - t2; - }); - - return completions; - } - - return new ArrayList<>(0); - }; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandOpen.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandOpen.java deleted file mode 100644 index e58db84..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandOpen.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.willfp.reforges.commands; - - -import com.willfp.eco.core.EcoPlugin; -import com.willfp.eco.core.command.CommandHandler; -import com.willfp.eco.core.command.TabCompleteHandler; -import com.willfp.eco.core.command.impl.PluginCommand; -import com.willfp.reforges.gui.ReforgeGUI; -import org.bukkit.Bukkit; -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.util.StringUtil; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -public class CommandOpen extends PluginCommand { - /** - * Instantiate a new command handler. - * - * @param plugin The plugin for the commands to listen for. - */ - public CommandOpen(@NotNull final EcoPlugin plugin) { - super(plugin, "open", "reforges.command.open", false); - } - - @Override - public CommandHandler getHandler() { - return (sender, args) -> { - if (args.isEmpty()) { - sender.sendMessage(this.getPlugin().getLangYml().getMessage("needs-player")); - return; - } - - Player player = Bukkit.getPlayer(args.get(0)); - - if (player == null) { - sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-player")); - return; - } - - player.playSound( - player.getLocation(), - Sound.valueOf(this.getPlugin().getConfigYml().getString("gui.open-sound.id").toUpperCase()), - 1f, - (float) this.getPlugin().getConfigYml().getDouble("gui.open-sound.pitch") - ); - ReforgeGUI.getMenu().open(player); - }; - } - - @Override - public TabCompleteHandler getTabCompleter() { - return (sender, args) -> { - List completions = new ArrayList<>(); - - if (args.size() == 1) { - StringUtil.copyPartialMatches(args.get(0), Bukkit.getOnlinePlayers().stream().map(Player::getName).collect(Collectors.toList()), completions); - return completions; - } - - return new ArrayList<>(0); - }; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandReforge.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandReforge.java deleted file mode 100644 index 4af39cc..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandReforge.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.willfp.reforges.commands; - - -import com.willfp.eco.core.EcoPlugin; -import com.willfp.eco.core.command.CommandHandler; -import com.willfp.eco.core.command.impl.PluginCommand; -import com.willfp.reforges.gui.ReforgeGUI; -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public class CommandReforge extends PluginCommand { - /** - * Instantiate a new command handler. - * - * @param plugin The plugin for the commands to listen for. - */ - public CommandReforge(@NotNull final EcoPlugin plugin) { - super(plugin, "reforge", "reforges.command.reforge", true); - } - - @Override - public CommandHandler getHandler() { - return (sender, args) -> { - Player player = (Player) sender; - - player.playSound( - player.getLocation(), - Sound.valueOf(this.getPlugin().getConfigYml().getString("gui.open-sound.id").toUpperCase()), - 1f, - (float) this.getPlugin().getConfigYml().getDouble("gui.open-sound.pitch") - ); - ReforgeGUI.getMenu().open(player); - }; - } -} 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 deleted file mode 100644 index dd88391..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandReforges.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.willfp.reforges.commands; - - -import com.willfp.eco.core.EcoPlugin; -import com.willfp.eco.core.command.CommandHandler; -import com.willfp.eco.core.command.impl.PluginCommand; -import org.jetbrains.annotations.NotNull; - -public class CommandReforges extends PluginCommand { - /** - * Instantiate a new command handler. - * - * @param plugin The plugin for the commands to listen for. - */ - public CommandReforges(@NotNull final EcoPlugin plugin) { - super(plugin, "reforges", "reforges.command.reforges", false); - - this.addSubcommand(new CommandReload(plugin)) - .addSubcommand(new CommandGive(plugin)) - .addSubcommand(new CommandOpen(plugin)); - } - - @Override - public CommandHandler getHandler() { - return (sender, args) -> { - sender.sendMessage(this.getPlugin().getLangYml().getMessage("invalid-command")); - }; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandReload.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandReload.java deleted file mode 100644 index b5381d4..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/commands/CommandReload.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.willfp.reforges.commands; - - -import com.willfp.eco.core.EcoPlugin; -import com.willfp.eco.core.command.CommandHandler; -import com.willfp.eco.core.command.impl.Subcommand; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class CommandReload extends Subcommand { - /** - * Instantiate a new command handler. - * - * @param plugin The plugin for the commands to listen for. - */ - public CommandReload(@NotNull final EcoPlugin plugin) { - super(plugin, "reload", "reforges.command.reload", false); - } - - @Override - public CommandHandler getHandler() { - return (sender, args) -> { - this.getPlugin().reload(); - sender.sendMessage(this.getPlugin().getLangYml().getMessage("reloaded")); - }; - } -} 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 deleted file mode 100644 index 9b87faf..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/gui/ReforgeGUI.java +++ /dev/null @@ -1,202 +0,0 @@ -package com.willfp.reforges.gui; - -import com.willfp.eco.core.EcoPlugin; -import com.willfp.eco.core.config.updating.ConfigUpdater; -import com.willfp.eco.core.drops.DropQueue; -import com.willfp.eco.core.gui.menu.Menu; -import com.willfp.eco.core.gui.slot.FillerMask; -import com.willfp.eco.core.gui.slot.MaskMaterials; -import com.willfp.eco.core.gui.slot.Slot; -import com.willfp.eco.core.items.builder.ItemStackBuilder; -import com.willfp.eco.util.NumberUtils; -import com.willfp.reforges.ReforgesPlugin; -import com.willfp.reforges.reforges.util.ReforgeHandler; -import com.willfp.reforges.reforges.util.ReforgeStatus; -import com.willfp.reforges.reforges.util.ReforgeUtils; -import lombok.Getter; -import lombok.experimental.UtilityClass; -import org.bukkit.Material; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.jetbrains.annotations.NotNull; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -@SuppressWarnings("deprecation") -@UtilityClass -public class ReforgeGUI { - /** - * The reforge GUI. - */ - @Getter - private static Menu menu; - - /** - * Update the GUI. - * - * @param plugin The plugin. - */ - @ConfigUpdater - public static void update(@NotNull final EcoPlugin plugin) { - ReforgeHandler handler = new ReforgeHandler(plugin); - Slot activatorSlot = Slot.builder(new ItemStack(Material.ANVIL)) - .setModifier((player, menu, previous) -> { - ItemMeta meta = previous.getItemMeta(); - if (meta == null) { - return; - } - - ReforgeStatus status = ReforgeUtils.getStatus(menu.getCaptiveItems(player)); - - double cost = plugin.getConfigYml().getDouble("reforge.cost"); - if (status == ReforgeStatus.ALLOW) { - ItemStack item = menu.getCaptiveItems(player).get(0); - int reforges = ReforgeUtils.getReforges(item); - cost *= Math.pow(plugin.getConfigYml().getDouble("reforge.cost-exponent"), reforges); - } - - int xpcost = plugin.getConfigYml().getInt("reforge.xp-cost"); - if (status == ReforgeStatus.ALLOW) { - ItemStack item = menu.getCaptiveItems(player).get(0); - int reforges = ReforgeUtils.getReforges(item); - xpcost *= Math.pow(plugin.getConfigYml().getDouble("reforge.cost-exponent"), reforges); - } - - 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 = new ArrayList<>(); - for (String string : plugin.getConfigYml().getStrings("gui.invalid-item.lore")) { - lore.add(string.replace("%cost%", NumberUtils.format(cost)) - .replace("%xpcost%", NumberUtils.format(xpcost))); - } - 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 = new ArrayList<>(); - for (String string : plugin.getConfigYml().getStrings("gui.allow.lore")) { - lore.add(string.replace("%cost%", NumberUtils.format(cost)) - .replace("%xpcost%", NumberUtils.format(xpcost))); - } - 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("%xpcost%", NumberUtils.format(xpcost)) - .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")); - List lore = new ArrayList<>(); - for (String string : plugin.getConfigYml().getStrings("gui.no-item.lore")) { - lore.add(string.replace("%cost%", NumberUtils.format(cost)) - .replace("%xpcost%", NumberUtils.format(xpcost))); - } - meta.setLore(lore); - } - } - - previous.setItemMeta(meta); - }) - .onLeftClick(handler::handleReforgeClick) - .build(); - - String[] maskPattern = plugin.getConfigYml().getStrings("gui.mask.pattern", false).toArray(new String[0]); - Material[] maskMaterials = plugin.getConfigYml() - .getStrings("gui.mask.materials", false) - .stream() - .map(string -> Material.getMaterial(string.toUpperCase())) - .filter(Objects::nonNull) - .toArray(Material[]::new); - - Material allowMaterial = Material.getMaterial(plugin.getConfigYml().getString("gui.show-allowed.allow-material", false).toUpperCase()); - Material denyMaterial = Material.getMaterial(plugin.getConfigYml().getString("gui.show-allowed.deny-material", false).toUpperCase()); - assert allowMaterial != null; - assert denyMaterial != null; - - Material closeMaterial = Material.getMaterial(plugin.getConfigYml().getString("gui.close.material", false).toUpperCase()); - assert closeMaterial != null; - - menu = Menu.builder(plugin.getConfigYml().getInt("gui.rows")) - .setTitle(plugin.getLangYml().getString("menu.title")) - .setMask( - new FillerMask( - new MaskMaterials( - maskMaterials - ), - maskPattern - ) - ) - .modfiy(builder -> { - Slot slot = Slot.builder( - new ItemStackBuilder(Material.BLACK_STAINED_GLASS_PANE) - .setDisplayName("&r") - .build() - ).setModifier((player, menu, previous) -> { - ReforgeStatus status = ReforgeUtils.getStatus(menu.getCaptiveItems(player)); - if (status == ReforgeStatus.ALLOW || status == ReforgeStatus.ALLOW_STONE) { - previous.setType(allowMaterial); - } else { - previous.setType(denyMaterial); - } - }).build(); - - List allowedPattern = plugin.getConfigYml().getStrings("gui.show-allowed.pattern"); - - for (int i = 1; i <= allowedPattern.size(); i++) { - String row = allowedPattern.get(i - 1); - for (int j = 1; j <= 9; j++) { - if (row.charAt(j - 1) != '0') { - builder.setSlot(i, j, slot); - } - } - } - }) - .setSlot(plugin.getConfigYml().getInt("gui.item-slot.row"), - plugin.getConfigYml().getInt("gui.item-slot.column"), - Slot.builder() - .setCaptive() - .build() - ) - .setSlot(plugin.getConfigYml().getInt("gui.stone-slot.row"), - plugin.getConfigYml().getInt("gui.stone-slot.column"), - Slot.builder() - .setCaptive() - .build() - ) - .setSlot(2, 5, activatorSlot) - .setSlot(plugin.getConfigYml().getInt("gui.close.location.row"), - plugin.getConfigYml().getInt("gui.close.location.column"), - Slot.builder( - new ItemStackBuilder(closeMaterial) - .setDisplayName(plugin.getLangYml().getString("menu.close")) - .build() - ).onLeftClick((event, slot, menu) -> { - event.getWhoClicked().closeInventory(); - }).build() - ).onClose((event, menu) -> { - new DropQueue((Player) event.getPlayer()) - .addItems(menu.getCaptiveItems((Player) event.getPlayer())) - .setLocation(event.getPlayer().getEyeLocation()) - .push(); - }) - .build(); - } - - static { - update(ReforgesPlugin.getInstance()); - } -} 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 57a377c..3f4c4ff 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 @@ -60,7 +60,7 @@ public class Reforges { } for (JSONConfig config : plugin.getReforgesJson().getSubsections("reforges")) { - addNewReforge(new Reforge(config, plugin)); + new Reforge(config, plugin); } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeArgParser.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeArgParser.java deleted file mode 100644 index b4f0fd1..0000000 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeArgParser.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.willfp.reforges.reforges.util; - -import com.willfp.eco.core.items.args.LookupArgParser; -import com.willfp.reforges.reforges.Reforge; -import com.willfp.reforges.reforges.Reforges; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.function.Predicate; - -public class ReforgeArgParser implements LookupArgParser { - @Override - public @Nullable Predicate parseArguments(@NotNull final String[] args, - @NotNull final ItemMeta meta) { - Reforge reforge = null; - for (String arg : args) { - String[] split = arg.split(":"); - if (split.length == 1 || !split[0].equalsIgnoreCase("reforge")) { - continue; - } - - Reforge match = Reforges.getByKey(split[1].toLowerCase()); - if (match == null) { - continue; - } - - reforge = match; - break; - } - - if (reforge == null) { - return null; - } - - ReforgeUtils.setReforge(meta, reforge); - - Reforge finalReforge = reforge; - return test -> { - ItemMeta testMeta = test.getItemMeta(); - if (testMeta == null) { - return false; - } - - return finalReforge.equals(ReforgeUtils.getReforge(testMeta)); - }; - } -} diff --git a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeHandler.java b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeHandler.java index 250b27c..90f3018 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeHandler.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/reforges/reforges/util/ReforgeHandler.java @@ -56,11 +56,15 @@ public class ReforgeHandler extends PluginDependent { return; } - + double cost = 0; if (EconomyHandler.isEnabled()) { - double cost = this.getPlugin().getConfigYml().getDouble("reforge.cost"); + cost = this.getPlugin().getConfigYml().getDouble("reforge.cost"); int reforges = ReforgeUtils.getReforges(toReforge); cost *= Math.pow(this.getPlugin().getConfigYml().getDouble("reforge.cost-exponent"), reforges); + if (reforge.getRequiresStone() && reforge.getStonePrice() != -1) { + cost = reforge.getStonePrice(); + } + if (!EconomyHandler.getInstance().has(player, cost)) { player.sendMessage(this.getPlugin().getLangYml().getMessage("insufficient-money")); @@ -73,9 +77,6 @@ public class ReforgeHandler extends PluginDependent { return; } - - - EconomyHandler.getInstance().withdrawPlayer(player, cost); } int xpCost = this.getPlugin().getConfigYml().getInt("reforge.xp-cost"); @@ -94,6 +95,10 @@ public class ReforgeHandler extends PluginDependent { return; } + if (EconomyHandler.isEnabled()) { + EconomyHandler.getInstance().withdrawPlayer(player, cost); + } + player.setLevel(player.getLevel() - xpCost); player.sendMessage(this.getPlugin().getLangYml().getMessage("applied-reforge").replace("%reforge%", reforge.getName())); 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 7cad42d..ff2bffc 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 @@ -64,7 +64,7 @@ public class ReforgeUtils { return applicable.get(0); } - public static ReforgeStatus getStatus(@NotNull final List captive) { + public static MetadatedReforgeStatus 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; @@ -84,16 +84,18 @@ public class ReforgeUtils { status = ReforgeStatus.ALLOW; } + double cost = 0; if (status == ReforgeStatus.ALLOW) { Reforge reforgeStone = getReforgeStone(stone); if (reforgeStone != null && reforgeStone.getTargets().stream() .anyMatch(reforgeTarget -> reforgeTarget.getItems().stream() .anyMatch(item -> item.matches(toReforge)))) { + cost = reforgeStone.getStonePrice(); status = ReforgeStatus.ALLOW_STONE; } } - return status; + return new MetadatedReforgeStatus(status, cost); } /** diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/commands/CommandGive.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/commands/CommandGive.kt new file mode 100644 index 0000000..c907c3b --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/commands/CommandGive.kt @@ -0,0 +1,95 @@ +package com.willfp.reforges.commands + +import com.willfp.eco.core.EcoPlugin +import com.willfp.eco.core.command.CommandHandler +import com.willfp.eco.core.command.TabCompleteHandler +import com.willfp.eco.core.command.impl.Subcommand +import com.willfp.reforges.reforges.Reforges +import org.bukkit.Bukkit +import org.bukkit.util.StringUtil + +class CommandGive( + plugin: EcoPlugin +) : Subcommand(plugin, "give", "reforges.command.give", false) { + private val numbers = listOf( + "1", + "2", + "3", + "4", + "5", + "10", + "32", + "64" + ) + + override fun getHandler(): CommandHandler { + return CommandHandler { sender, args -> + if (args.isEmpty()) { + sender.sendMessage(plugin.langYml.getMessage("needs-player")) + return@CommandHandler + } + + if (args.size == 1) { + sender.sendMessage(plugin.langYml.getMessage("needs-stone")) + return@CommandHandler + } + + val amount = if (args.size > 2) args[2].toIntOrNull() ?: 1 else 1 + val recieverName = args[0] + val reciever = Bukkit.getPlayer(recieverName) + if (reciever == null) { + sender.sendMessage(plugin.langYml.getMessage("invalid-player")) + return@CommandHandler + } + val key = args[1] + val reforge = Reforges.getByKey(key) + if (reforge == null) { + sender.sendMessage(plugin.langYml.getMessage("invalid-stone")) + return@CommandHandler + } + var message = plugin.langYml.getMessage("give-success") + message = message.replace("%reforge%", reforge.name).replace("%recipient%", reciever.name) + sender.sendMessage(message) + val itemStack = reforge.stone + itemStack.amount = amount + reciever.inventory.addItem(itemStack) + } + } + + override fun getTabCompleter(): TabCompleteHandler { + return TabCompleteHandler { _, args -> + val completions = mutableListOf() + if (args.isEmpty()) { + // Currently, this case is not ever reached + return@TabCompleteHandler Reforges.values().filter { it.requiresStone }.map { it.id } + } + if (args.size == 1) { + StringUtil.copyPartialMatches( + args[0], + Bukkit.getOnlinePlayers().map { it.name }, + completions + ) + return@TabCompleteHandler completions + } + if (args.size == 2) { + StringUtil.copyPartialMatches( + args[1], + Reforges.values().filter { it.requiresStone }.map { it.id }, + completions + ) + completions.sort() + return@TabCompleteHandler completions + } + if (args.size == 3) { + StringUtil.copyPartialMatches(args[2], numbers, completions) + completions.sortWith { s1, s2 -> + val t1 = s1.toInt() + val t2 = s2.toInt() + t1 - t2 + } + return@TabCompleteHandler completions + } + emptyList() + } + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/commands/CommandOpen.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/commands/CommandOpen.kt new file mode 100644 index 0000000..e718c74 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/commands/CommandOpen.kt @@ -0,0 +1,50 @@ +package com.willfp.reforges.commands + +import com.willfp.eco.core.EcoPlugin +import com.willfp.eco.core.command.CommandHandler +import com.willfp.eco.core.command.TabCompleteHandler +import com.willfp.eco.core.command.impl.PluginCommand +import com.willfp.reforges.gui.ReforgeGUI.menu +import org.bukkit.Bukkit +import org.bukkit.Sound +import org.bukkit.util.StringUtil + +class CommandOpen( + plugin: EcoPlugin +) : PluginCommand(plugin, "open", "reforges.command.open", false) { + override fun getHandler(): CommandHandler { + return CommandHandler { sender, args -> + if (args.isEmpty()) { + sender.sendMessage(plugin.langYml.getMessage("needs-player")) + return@CommandHandler + } + val player = Bukkit.getPlayer(args[0]) + if (player == null) { + sender.sendMessage(plugin.langYml.getMessage("invalid-player")) + return@CommandHandler + } + player.playSound( + player.location, + Sound.valueOf(plugin.configYml.getString("gui.open-sound.id").uppercase()), + 1f, + plugin.configYml.getDouble("gui.open-sound.pitch").toFloat() + ) + menu.open(player) + } + } + + override fun getTabCompleter(): TabCompleteHandler { + return TabCompleteHandler { _, args -> + val completions = mutableListOf() + if (args.size == 1) { + StringUtil.copyPartialMatches( + args[0], + Bukkit.getOnlinePlayers().map { it.name }, + completions + ) + return@TabCompleteHandler completions + } + emptyList() + } + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/commands/CommandReforge.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/commands/CommandReforge.kt new file mode 100644 index 0000000..d086268 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/commands/CommandReforge.kt @@ -0,0 +1,25 @@ +package com.willfp.reforges.commands + +import com.willfp.eco.core.EcoPlugin +import com.willfp.eco.core.command.CommandHandler +import com.willfp.eco.core.command.impl.PluginCommand +import com.willfp.reforges.gui.ReforgeGUI.menu +import org.bukkit.Sound +import org.bukkit.entity.Player + +class CommandReforge( + plugin: EcoPlugin +) : PluginCommand(plugin, "reforge", "reforges.command.reforge", true) { + override fun getHandler(): CommandHandler { + return CommandHandler { player, _ -> + player as Player + player.playSound( + player.location, + Sound.valueOf(plugin.configYml.getString("gui.open-sound.id").uppercase()), + 1f, + plugin.configYml.getDouble("gui.open-sound.pitch").toFloat() + ) + menu.open(player) + } + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/commands/CommandReforges.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/commands/CommandReforges.kt new file mode 100644 index 0000000..3ead430 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/commands/CommandReforges.kt @@ -0,0 +1,21 @@ +package com.willfp.reforges.commands + +import com.willfp.eco.core.EcoPlugin +import com.willfp.eco.core.command.CommandHandler +import com.willfp.eco.core.command.impl.PluginCommand + +class CommandReforges(plugin: EcoPlugin) : PluginCommand(plugin, "reforges", "reforges.command.reforges", false) { + override fun getHandler(): CommandHandler { + return CommandHandler { sender, _ -> + sender.sendMessage( + plugin.langYml.getMessage("invalid-command") + ) + } + } + + init { + addSubcommand(CommandReload(plugin)) + .addSubcommand(CommandGive(plugin)) + .addSubcommand(CommandOpen(plugin)) + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/commands/CommandReload.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/commands/CommandReload.kt new file mode 100644 index 0000000..2bda176 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/commands/CommandReload.kt @@ -0,0 +1,14 @@ +package com.willfp.reforges.commands + +import com.willfp.eco.core.EcoPlugin +import com.willfp.eco.core.command.CommandHandler +import com.willfp.eco.core.command.impl.Subcommand + +class CommandReload(plugin: EcoPlugin) : Subcommand(plugin, "reload", "reforges.command.reload", false) { + override fun getHandler(): CommandHandler { + return CommandHandler { sender, _ -> + plugin.reload() + sender.sendMessage(plugin.langYml.getMessage("reloaded")) + } + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/display/ReforgesDisplay.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/display/ReforgesDisplay.kt index 98993cb..8a620cd 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/display/ReforgesDisplay.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/display/ReforgesDisplay.kt @@ -13,17 +13,26 @@ import com.willfp.reforges.reforges.util.ReforgeUtils import net.kyori.adventure.text.Component import net.kyori.adventure.text.TextReplacementConfig import net.kyori.adventure.text.format.TextDecoration +import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer import org.bukkit.Material import org.bukkit.inventory.ItemStack import org.bukkit.inventory.meta.SkullMeta +import org.bukkit.persistence.PersistentDataType @Suppress("DEPRECATION") class ReforgesDisplay(private val plugin: ReforgesPlugin) : DisplayModule(plugin, DisplayPriority.HIGHEST) { + /** + * Deprecated + */ + @Deprecated("Use PDC components!") private val replacement = TextReplacementConfig.builder() .match("§w(.+)§w") .replacement("") .build() + private val originalComponentKey = plugin.namespacedKeyFactory.create("real_name") + private val serializer = GsonComponentSerializer.gson() + override fun display( itemStack: ItemStack, vararg args: Any @@ -56,10 +65,12 @@ class ReforgesDisplay(private val plugin: ReforgesPlugin) : DisplayModule(plugin if (stone != null) { meta.setDisplayName(plugin.configYml.getString("reforge.stone.name").replace("%reforge%", stone.name)) - SkullUtils.setSkullTexture( - meta as SkullMeta, - stone.config.getString("stone.texture") - ) + if (stone.config.has("stone.texture") && stone.config.getString("stone.texture").isNotEmpty()) { + SkullUtils.setSkullTexture( + meta as SkullMeta, + stone.config.getString("stone.texture") + ) + } itemStack.itemMeta = meta val stoneLore = plugin.configYml.getStrings("reforge.stone.lore").map { "${Display.PREFIX}${it.replace("%reforge%", stone.name)}" @@ -76,12 +87,13 @@ class ReforgesDisplay(private val plugin: ReforgesPlugin) : DisplayModule(plugin lore.addAll(addLore) } if (plugin.configYml.getBool("reforge.display-in-name") && Prerequisite.HAS_PAPER.isMet) { - val displayName = - (if (meta.hasDisplayName()) meta.displayName()!! else Component.translatable(itemStack)) - .replaceText( - replacement - ) - val newName = StringUtils.toComponent("§w${reforge.name} §w") + val displayName = (meta.displayName() ?: Component.translatable(itemStack)).replaceText(replacement) + meta.persistentDataContainer.set( + originalComponentKey, + PersistentDataType.STRING, + serializer.serialize(displayName) + ) + val newName = StringUtils.toComponent("${reforge.name} ") .decoration(TextDecoration.ITALIC, false).append(displayName) meta.displayName(newName) } @@ -96,12 +108,10 @@ class ReforgesDisplay(private val plugin: ReforgesPlugin) : DisplayModule(plugin val meta = itemStack.itemMeta ?: return if (plugin.configYml.getBool("reforge.display-in-name") && Prerequisite.HAS_PAPER.isMet) { - val displayName = meta.displayName() ?: return - meta.displayName( - displayName.replaceText( - replacement - ) - ) + val originalName = + meta.persistentDataContainer.get(originalComponentKey, PersistentDataType.STRING) ?: return + meta.persistentDataContainer.remove(originalComponentKey) + meta.displayName(serializer.deserialize(originalName).replaceText(replacement)) } itemStack.itemMeta = meta diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectRewardBlockBreak.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectRewardBlockBreak.kt index 8cdc4f9..b376d4a 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectRewardBlockBreak.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectRewardBlockBreak.kt @@ -7,7 +7,7 @@ import org.bukkit.block.Block import org.bukkit.entity.Player import org.bukkit.event.block.BlockBreakEvent -class EffectRewardBlockBreak : Effect("reward_kill") { +class EffectRewardBlockBreak : Effect("reward_block_break") { override fun onBlockBreak( player: Player, block: Block, diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectRewardKill.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectRewardKill.kt index 31a77fa..a6b6a38 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectRewardKill.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/effects/effects/EffectRewardKill.kt @@ -8,12 +8,10 @@ import org.bukkit.entity.LivingEntity import org.bukkit.entity.Player class EffectRewardKill : Effect("reward_kill") { - override fun onKill( - killer: Player, - victim: LivingEntity, - event: EntityDeathByEntityEvent, - config: JSONConfig - ) { + override fun onKill(killer: Player, + victim: LivingEntity, + event: EntityDeathByEntityEvent, + config: JSONConfig) { if (EconomyHandler.isEnabled()) { EconomyHandler.getInstance().depositPlayer(killer, config.getDouble("amount")) } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/gui/ReforgeGUI.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/gui/ReforgeGUI.kt new file mode 100644 index 0000000..168099d --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/gui/ReforgeGUI.kt @@ -0,0 +1,190 @@ +package com.willfp.reforges.gui + +import com.willfp.eco.core.EcoPlugin +import com.willfp.eco.core.config.updating.ConfigUpdater +import com.willfp.eco.core.drops.DropQueue +import com.willfp.eco.core.gui.menu.Menu +import com.willfp.eco.core.gui.slot.FillerMask +import com.willfp.eco.core.gui.slot.MaskMaterials +import com.willfp.eco.core.gui.slot.Slot +import com.willfp.eco.core.items.builder.ItemStackBuilder +import com.willfp.eco.util.NumberUtils +import com.willfp.reforges.ReforgesPlugin +import com.willfp.reforges.reforges.util.ReforgeHandler +import com.willfp.reforges.reforges.util.ReforgeStatus +import com.willfp.reforges.reforges.util.ReforgeUtils +import org.bukkit.Material +import org.bukkit.entity.Player +import org.bukkit.inventory.ItemStack +import kotlin.math.pow + +@Suppress("DEPRECATION") +object ReforgeGUI { + @JvmStatic + lateinit var menu: Menu + + init { + update(ReforgesPlugin.getInstance()) + } + + @JvmStatic + @ConfigUpdater + fun update(plugin: EcoPlugin) { + val handler = ReforgeHandler(plugin) + + val activatorSlot = Slot.builder( + ItemStack(Material.ANVIL) + ).apply { + setModifier { player, menu, previous -> + val meta = previous.itemMeta ?: return@setModifier + + val (status, specialCost) = ReforgeUtils.getStatus(menu.getCaptiveItems(player)) + + val cost: Double = when { + status == ReforgeStatus.ALLOW || (status == ReforgeStatus.ALLOW_STONE && specialCost < 0) -> { + val amountOfReforges = ReforgeUtils.getReforges(menu.getCaptiveItems(player)[0]) + plugin.configYml.getDouble("reforge.cost") * + plugin.configYml.getDouble("reforge.cost-exponent").pow(amountOfReforges) + } + status == ReforgeStatus.ALLOW_STONE -> { + specialCost + } + else -> 0.0 // Never used, but at least kotlin can shut up + } + + var xpCost = plugin.configYml.getInt("reforge.xp-cost") + if (status == ReforgeStatus.ALLOW) { + val item = menu.getCaptiveItems(player)[0] + val reforges = ReforgeUtils.getReforges(item) + xpCost *= plugin.configYml.getDouble("reforge.cost-exponent").pow(reforges.toDouble()).toInt() + } + + when (status) { + ReforgeStatus.INVALID_ITEM -> { + previous.type = Material.getMaterial( + plugin.configYml.getString("gui.invalid-item.material").uppercase() + )!! + meta.setDisplayName(plugin.configYml.getString("gui.invalid-item.name")) + meta.lore = plugin.configYml.getStrings("gui.invalid-item.lore").map { + it.replace("%cost%", NumberUtils.format(cost)) + .replace("%xpcost%", NumberUtils.format(xpCost.toDouble())) + } + } + ReforgeStatus.ALLOW -> { + previous.type = Material.getMaterial( + plugin.configYml.getString("gui.allow.material").uppercase() + )!! + meta.setDisplayName(plugin.configYml.getString("gui.allow.name")) + meta.lore = plugin.configYml.getStrings("gui.allow.lore").map { + it.replace("%cost%", NumberUtils.format(cost)) + .replace("%xpcost%", NumberUtils.format(xpCost.toDouble())) + } + } + ReforgeStatus.ALLOW_STONE -> { + previous.type = Material.getMaterial( + plugin.configYml.getString("gui.allow-stone.material").uppercase() + )!! + meta.setDisplayName(plugin.configYml.getString("gui.allow-stone.name")) + meta.lore = plugin.configYml.getStrings("gui.allow-stone.lore").map { + it.replace("%cost%", NumberUtils.format(cost)) + .replace("%xpcost%", NumberUtils.format(xpCost.toDouble())) + .replace("%stone%", ReforgeUtils.getReforgeStone(menu.getCaptiveItems(player)[1]).name) + } + } + ReforgeStatus.NO_ITEM -> { + previous.type = Material.getMaterial( + plugin.configYml.getString("gui.no-item.material").uppercase() + )!! + meta.setDisplayName(plugin.configYml.getString("gui.no-item.name")) + meta.lore = plugin.configYml.getStrings("gui.no-item.lore").map { + it.replace("%cost%", NumberUtils.format(cost)) + .replace("%xpcost%", NumberUtils.format(xpCost.toDouble())) + } + } + } + + previous.itemMeta = meta + } + onLeftClick(handler::handleReforgeClick) + }.build() + + val maskPattern = plugin.configYml.getStrings("gui.mask.pattern", false).toTypedArray() + + val maskMaterials = plugin.configYml.getStrings("gui.mask.materials", false) + .mapNotNull { Material.getMaterial(it.uppercase()) } + .toTypedArray() + + val allowMaterial = + Material.getMaterial(plugin.configYml.getString("gui.show-allowed.allow-material", false).uppercase())!! + val denyMaterial = + Material.getMaterial(plugin.configYml.getString("gui.show-allowed.deny-material", false).uppercase())!! + val closeMaterial = + Material.getMaterial(plugin.configYml.getString("gui.close.material", false).toUpperCase())!! + + menu = Menu.builder(plugin.configYml.getInt("gui.rows")).apply { + setTitle(plugin.langYml.getString("menu.title")) + setMask(FillerMask(MaskMaterials(*maskMaterials), *maskPattern)) + modfiy { builder -> + val slot = Slot.builder( + ItemStackBuilder(Material.BLACK_STAINED_GLASS_PANE) + .setDisplayName("&r") + .build() + ).apply { + setModifier { player, menu, previous -> + val status = ReforgeUtils.getStatus( + menu.getCaptiveItems(player) + ).status + + if (status == ReforgeStatus.ALLOW || status == ReforgeStatus.ALLOW_STONE) { + previous.type = allowMaterial + } else { + previous.type = denyMaterial + } + } + }.build() + + val allowedPattern = plugin.configYml.getStrings("gui.show-allowed.pattern") + for (i in 1..allowedPattern.size) { + val row = allowedPattern[i - 1] + for (j in 1..9) { + if (row[j - 1] != '0') { + builder.setSlot(i, j, slot) + } + } + } + } + setSlot( + plugin.configYml.getInt("gui.item-slot.row"), + plugin.configYml.getInt("gui.item-slot.column"), + Slot.builder().setCaptive().build() + ) + setSlot( + plugin.configYml.getInt("gui.stone-slot.row"), + plugin.configYml.getInt("gui.stone-slot.column"), + Slot.builder().setCaptive().build() + ) + setSlot( + plugin.configYml.getInt("gui.activator-slot.row"), + plugin.configYml.getInt("gui.activator-slot.column"), + activatorSlot + ) + setSlot( + plugin.configYml.getInt("gui.close.location.row"), + plugin.configYml.getInt("gui.close.location.column"), + Slot.builder( + ItemStackBuilder(closeMaterial) + .setDisplayName(plugin.langYml.getString("menu.close")) + .build() + ).onLeftClick { event, _, _ -> + event.whoClicked.closeInventory() + }.build() + ) + onClose { event, menu -> + DropQueue(event.player as Player) + .addItems(menu.getCaptiveItems(event.player as Player)) + .setLocation(event.player.eyeLocation) + .push() + } + }.build() + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/integrations/ecoskills/EffectAddStat.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/integrations/ecoskills/EffectAddStat.kt index 175544b..90a1ddd 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/integrations/ecoskills/EffectAddStat.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/integrations/ecoskills/EffectAddStat.kt @@ -6,6 +6,7 @@ import com.willfp.ecoskills.api.modifier.PlayerStatModifier import com.willfp.ecoskills.stats.Stats import com.willfp.reforges.effects.Effect import com.willfp.reforges.effects.getEffectAmount +import org.bukkit.Bukkit import org.bukkit.entity.Player class EffectAddStat : Effect("add_stat") { diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/Reforge.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/Reforge.kt index 03efc74..10b6c35 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/Reforge.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/Reforge.kt @@ -44,27 +44,33 @@ class Reforge( val stone: ItemStack = SkullBuilder().apply { if (config.getBool("stone.enabled")) { setSkullTexture(config.getString("stone.texture")) - setDisplayName(plugin.configYml.getString("stone.name").replace("%reforge%", name)) + setDisplayName(plugin.configYml.getString("reforge.stone.name").replace("%reforge%", name)) addLoreLines( plugin.configYml.getStrings("stone.lore").map { "${Display.PREFIX}${it.replace("%reforge%", name)}" }) } }.build() + val stonePrice = config.getIntOrNull("stone.price") ?: -1 + init { + Reforges.addNewReforge(this) + ReforgeUtils.setReforgeStone(stone, this) + Display.display(stone) + CustomItem( plugin.namespacedKeyFactory.create("stone_" + this.id), { test -> ReforgeUtils.getReforgeStone(test) == this }, stone ).register() - if (config.getBool("craftable")) { + if (config.getBool("stone.craftable") && config.getBool("stone.enabled")) { Recipes.createAndRegisterRecipe( plugin, "stone_" + this.id, stone, - config.getStrings("recipe", false) + config.getStrings("stone.recipe", false) ) } } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/MetadatedReforgeStatus.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/MetadatedReforgeStatus.kt new file mode 100644 index 0000000..dc68dbf --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/MetadatedReforgeStatus.kt @@ -0,0 +1,3 @@ +package com.willfp.reforges.reforges.util + +data class MetadatedReforgeStatus(val status: ReforgeStatus, val cost: Double) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/ReforgeArgParser.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/ReforgeArgParser.kt new file mode 100644 index 0000000..af7872b --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/ReforgeArgParser.kt @@ -0,0 +1,36 @@ +package com.willfp.reforges.reforges.util + +import com.willfp.eco.core.items.args.LookupArgParser +import com.willfp.reforges.reforges.Reforge +import com.willfp.reforges.reforges.Reforges +import org.bukkit.inventory.ItemStack +import org.bukkit.inventory.meta.ItemMeta +import java.util.function.Predicate + +class ReforgeArgParser : LookupArgParser { + override fun parseArguments( + args: Array, + meta: ItemMeta + ): Predicate? { + var reforge: Reforge? = null + + for (arg in args) { + val split = arg.split(":").toTypedArray() + if (split.size == 1 || !split[0].equals("reforge", ignoreCase = true)) { + continue + } + val match = Reforges.getByKey(split[1].lowercase()) ?: continue + reforge = match + break + } + + reforge ?: return null + + ReforgeUtils.setReforge(meta, reforge) + + return Predicate { test -> + val testMeta = test.itemMeta ?: return@Predicate false + reforge == ReforgeUtils.getReforge(testMeta) + } + } +} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/WatcherTriggers.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/WatcherTriggers.kt index b0531c1..07c4c45 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/WatcherTriggers.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/WatcherTriggers.kt @@ -222,7 +222,7 @@ class WatcherTriggers( if (NumberUtils.randFloat(0.0, 100.0) > config.getDoubleOrNull("chance") ?: 100.0) { continue } - effect.onKill(killer, victim, event, config) + (effect as Watcher).onKill(killer, victim, event, config) } } } diff --git a/eco-core/core-plugin/src/main/resources/config.yml b/eco-core/core-plugin/src/main/resources/config.yml index ba87f91..7d8848a 100644 --- a/eco-core/core-plugin/src/main/resources/config.yml +++ b/eco-core/core-plugin/src/main/resources/config.yml @@ -43,6 +43,10 @@ gui: - "100000001" - "100000001" + activator-slot: + row: 2 + column: 5 + stone-slot: row: 4 column: 7 diff --git a/gradle.properties b/gradle.properties index a435798..ca28d14 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ -version = 3.3.0 +version = 3.5.6 plugin-name = Reforges \ No newline at end of file