mirror of
https://github.com/Auxilor/Reforges.git
synced 2025-12-30 04:19:24 +00:00
Merge branch 'Auxilor:master' into master
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
<h1 align="center">
|
||||
<br>
|
||||
<img src="https://i.imgur.com/LoZExNf.png" alt="Reforges logo" width="256">
|
||||
<img src="https://i.imgur.com/co0zeyJ.png" alt="Reforges logo" width="256">
|
||||
<br>
|
||||
</h1>
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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<String> STONE_NAMES = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* The cached numbers.
|
||||
*/
|
||||
private static final List<String> 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<String> 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);
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -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<String> 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);
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -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"));
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -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"));
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -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<String> 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<String> 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<String> 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<String> 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<String> 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());
|
||||
}
|
||||
}
|
||||
@@ -60,7 +60,7 @@ public class Reforges {
|
||||
}
|
||||
|
||||
for (JSONConfig config : plugin.getReforgesJson().getSubsections("reforges")) {
|
||||
addNewReforge(new Reforge(config, plugin));
|
||||
new Reforge(config, plugin);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<ItemStack> 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));
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -56,11 +56,15 @@ public class ReforgeHandler extends PluginDependent<EcoPlugin> {
|
||||
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<EcoPlugin> {
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
EconomyHandler.getInstance().withdrawPlayer(player, cost);
|
||||
}
|
||||
|
||||
int xpCost = this.getPlugin().getConfigYml().getInt("reforge.xp-cost");
|
||||
@@ -94,6 +95,10 @@ public class ReforgeHandler extends PluginDependent<EcoPlugin> {
|
||||
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()));
|
||||
|
||||
@@ -64,7 +64,7 @@ public class ReforgeUtils {
|
||||
return applicable.get(0);
|
||||
}
|
||||
|
||||
public static ReforgeStatus getStatus(@NotNull final List<ItemStack> captive) {
|
||||
public static MetadatedReforgeStatus getStatus(@NotNull final List<ItemStack> 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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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<String>()
|
||||
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()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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<String>()
|
||||
if (args.size == 1) {
|
||||
StringUtil.copyPartialMatches(
|
||||
args[0],
|
||||
Bukkit.getOnlinePlayers().map { it.name },
|
||||
completions
|
||||
)
|
||||
return@TabCompleteHandler completions
|
||||
}
|
||||
emptyList()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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))
|
||||
}
|
||||
}
|
||||
@@ -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"))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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"))
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
@@ -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") {
|
||||
|
||||
@@ -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)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
package com.willfp.reforges.reforges.util
|
||||
|
||||
data class MetadatedReforgeStatus(val status: ReforgeStatus, val cost: Double)
|
||||
@@ -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<String>,
|
||||
meta: ItemMeta
|
||||
): Predicate<ItemStack>? {
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,6 +43,10 @@ gui:
|
||||
- "100000001"
|
||||
- "100000001"
|
||||
|
||||
activator-slot:
|
||||
row: 2
|
||||
column: 5
|
||||
|
||||
stone-slot:
|
||||
row: 4
|
||||
column: 7
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
version = 3.3.0
|
||||
version = 3.5.6
|
||||
plugin-name = Reforges
|
||||
Reference in New Issue
Block a user