diff --git a/README.md b/README.md
index 0eca83e..2bfc4c5 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-
+
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