Refactored commands

This commit is contained in:
BuildTools 2020-09-21 14:56:35 +01:00
parent 31986f256c
commit 476fc2bcfd
9 changed files with 291 additions and 260 deletions

View File

@ -0,0 +1,50 @@
package com.willfp.ecoenchants.command;
import com.willfp.ecoenchants.config.ConfigManager;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.Arrays;
import java.util.List;
public abstract class AbstractCommand implements CommandExecutor {
private static AbstractCommand instance;
private final String name;
private final String permission;
private final boolean playersOnly;
protected AbstractCommand(String name, String permission, boolean playersOnly) {
this.name = name;
this.permission = permission;
this.playersOnly = playersOnly;
instance = this;
}
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if(!command.getName().equalsIgnoreCase(name)) return false;
if(playersOnly && !(sender instanceof Player)) {
sender.sendMessage(ConfigManager.getLang().getMessage("not-player"));
return true;
}
if (!sender.hasPermission(permission) && sender instanceof Player) {
sender.sendMessage(ConfigManager.getLang().getNoPermission());
return true;
}
onExecute(sender, Arrays.asList(args));
return true;
}
public abstract void onExecute(CommandSender sender, List<String> args);
public static AbstractCommand getInstance() {
return instance;
}
}

View File

@ -0,0 +1,43 @@
package com.willfp.ecoenchants.command.commands;
import com.willfp.ecoenchants.EcoEnchantsPlugin;
import com.willfp.ecoenchants.command.AbstractCommand;
import com.willfp.ecoenchants.config.ConfigManager;
import com.willfp.ecoenchants.enchantments.EcoEnchants;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public final class CommandEcodebug extends AbstractCommand {
private CommandEcodebug() {
super("ecodebug", "ecoenchants.ecodebug", true);
}
@Override
public void onExecute(CommandSender sender, List<String> args) {
Bukkit.getLogger().info("--------------- BEGIN DEBUG ----------------");
Player player = (Player) sender;
Bukkit.getLogger().info("Running Version: " + EcoEnchantsPlugin.getInstance().getDescription().getVersion());
Bukkit.getLogger().info("Held Item: " + player.getInventory().getItemInMainHand().toString());
Bukkit.getLogger().info("EcoEnchants.getAll(): " + EcoEnchants.getAll().toString());
Bukkit.getLogger().info("Enchantment.values(): " + Arrays.toString(Enchantment.values()));
try {
Field byNameField = Enchantment.class.getDeclaredField("byName");
byNameField.setAccessible(true);
Map<String, Enchantment> byName = (Map<String, Enchantment>) byNameField.get(null);
Bukkit.getLogger().info("Enchantment.byName: " + byName.toString());
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
Bukkit.getLogger().info("--------------- END DEBUG ----------------");
}
}

View File

@ -1,6 +1,7 @@
package com.willfp.ecoenchants.commands;
package com.willfp.ecoenchants.command.commands;
import com.willfp.ecoenchants.EcoEnchantsPlugin;
import com.willfp.ecoenchants.command.AbstractCommand;
import com.willfp.ecoenchants.config.ConfigManager;
import com.willfp.ecoenchants.display.EnchantDisplay;
import com.willfp.ecoenchants.enchantments.EcoEnchants;
@ -13,20 +14,17 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.HandlerList;
public class CommandEcoreload implements CommandExecutor {
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (command.getName().equalsIgnoreCase("ecoreload")) {
if (sender instanceof Player) {
if (!sender.hasPermission("ecoenchants.reload")) {
sender.sendMessage(ConfigManager.getLang().getNoPermission());
return true;
}
}
reload();
sender.sendMessage(ConfigManager.getLang().getMessage("reloaded"));
}
import java.util.List;
return false;
public final class CommandEcoreload extends AbstractCommand {
private CommandEcoreload() {
super("ecoreload", "ecoenchants.reload", false);
}
@Override
public void onExecute(CommandSender sender, List<String> args) {
reload();
sender.sendMessage(ConfigManager.getLang().getMessage("reloaded"));
}
public static void reload() {

View File

@ -0,0 +1,38 @@
package com.willfp.ecoenchants.command.commands;
import com.willfp.ecoenchants.command.AbstractCommand;
import com.willfp.ecoenchants.config.ConfigManager;
import com.willfp.ecoenchants.display.EnchantDisplay;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataType;
import java.util.List;
public final class CommandEcoskip extends AbstractCommand {
private CommandEcoskip() {
super("ecoskip", "ecoenchants.skip", true);
}
@Override
public void onExecute(CommandSender sender, List<String> args) {
Player player = (Player) sender;
ItemStack item = player.getInventory().getItemInMainHand();
ItemMeta meta = item.getItemMeta();
if(meta == null) {
return;
}
if(meta.getPersistentDataContainer().has(EnchantDisplay.KEY_SKIP, PersistentDataType.INTEGER)) {
meta.getPersistentDataContainer().remove(EnchantDisplay.KEY_SKIP);
player.sendMessage(ConfigManager.getLang().getMessage("skip-removed"));
} else {
meta.getPersistentDataContainer().set(EnchantDisplay.KEY_SKIP, PersistentDataType.INTEGER, 1);
player.sendMessage(ConfigManager.getLang().getMessage("skip-added"));
}
item.setItemMeta(meta);
}
}

View File

@ -0,0 +1,140 @@
package com.willfp.ecoenchants.command.commands;
import com.willfp.ecoenchants.command.AbstractCommand;
import com.willfp.ecoenchants.config.ConfigManager;
import com.willfp.ecoenchants.enchantments.EcoEnchant;
import com.willfp.ecoenchants.enchantments.EcoEnchants;
import org.apache.commons.lang.WordUtils;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.enchantments.Enchantment;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public final class CommandEnchantinfo extends AbstractCommand {
private CommandEnchantinfo() {
super("enchantinfo", "ecoenchants.enchantinfo", false);
}
@Override
public void onExecute(CommandSender sender, List<String> args) {
if(args.size() == 0) {
sender.sendMessage(ConfigManager.getLang().getMessage("missing-enchant"));
return;
}
StringBuilder nameBuilder = new StringBuilder();
args.forEach((arg) -> {
nameBuilder.append(arg).append(" ");
});
String searchName = nameBuilder.toString();
searchName = searchName.substring(0, searchName.length() - 1);
EcoEnchant enchantment = EcoEnchants.getByName(searchName);
boolean notFound = enchantment == null;
if(notFound) {
String message = ConfigManager.getLang().getMessage("not-found").replace("%name%", searchName);
sender.sendMessage(message);
return;
}
String name;
String color;
List<String> description;
boolean isCurse = enchantment.isCursed();
boolean isSpecial = false;
boolean isArtifact = false;
if(enchantment.getType().equals(EcoEnchant.EnchantmentType.SPECIAL)) {
isSpecial = true;
}
if(enchantment.getType().equals(EcoEnchant.EnchantmentType.ARTIFACT)) {
isArtifact = true;
}
if(isCurse) color = ChatColor.translateAlternateColorCodes('&', ConfigManager.getLang().getString("curse-color"));
else if(isSpecial) color = ChatColor.translateAlternateColorCodes('&', ConfigManager.getLang().getString("special-color"));
else if(isArtifact) color = ChatColor.translateAlternateColorCodes('&', ConfigManager.getLang().getString("artifact-color"));
else color = ChatColor.translateAlternateColorCodes('&', ConfigManager.getLang().getString("not-curse-color"));
name = enchantment.getName();
description = EcoEnchants.getFromEnchantment(enchantment).getDescription();
StringBuilder descriptionBuilder = new StringBuilder();
description.forEach((line) -> {
descriptionBuilder.append(line).append(" ");
});
String desc = descriptionBuilder.toString();
Set<String> conflictNames = new HashSet<>();
Set<Enchantment> conflicts = enchantment.getConflicts();
conflicts.forEach((enchantment1 -> {
if(EcoEnchants.getFromEnchantment(enchantment1) != null) {
conflictNames.add(EcoEnchants.getFromEnchantment(enchantment1).getName());
} else {
conflictNames.add(ConfigManager.getLang().getString("vanilla." + enchantment1.getKey().getKey() + ".name"));
}
}));
StringBuilder conflictNamesBuilder = new StringBuilder();
conflictNames.forEach((name1) -> {
conflictNamesBuilder.append(name1).append(", ");
});
String allConflicts = conflictNamesBuilder.toString();
if(allConflicts.length() >= 2) {
allConflicts = allConflicts.substring(0, allConflicts.length() -2);
} else {
allConflicts = ChatColor.translateAlternateColorCodes('&', ConfigManager.getLang().getString("no-conflicts"));
}
Set<Material> targets = enchantment.getTarget();
Set<String> applicableItemsSet = new HashSet<>();
targets.forEach(material -> {
String matName = material.toString();
matName = matName.toLowerCase();
matName = matName.replaceAll("_", " ");
matName = WordUtils.capitalize(matName);
applicableItemsSet.add(matName);
});
StringBuilder targetNamesBuilder = new StringBuilder();
applicableItemsSet.forEach((name1) -> {
targetNamesBuilder.append(name1).append(", ");
});
String allTargets = targetNamesBuilder.toString();
if(allTargets.length() >= 2) {
allTargets = allTargets.substring(0, allTargets.length() - 2);
} else {
allTargets = ChatColor.translateAlternateColorCodes('&', ConfigManager.getLang().getString("no-targets"));
}
String maxLevel = String.valueOf(enchantment.getMaxLevel());
final String finalName = color + name;
final String finalDescription = desc;
final String finalTargets = allTargets;
final String finalConflicts = allConflicts;
final String finalMaxLevel = maxLevel;
Arrays.asList(ConfigManager.getLang().getMessage("enchantinfo").split("\\r?\\n")).forEach((string -> {
string = string.replaceAll("%name%", finalName)
.replaceAll("%description%", finalDescription)
.replaceAll("%target%", finalTargets)
.replaceAll("%conflicts%", finalConflicts)
.replaceAll("%maxlevel%", finalMaxLevel);
sender.sendMessage(string);
}));
}
}

View File

@ -1,50 +0,0 @@
package com.willfp.ecoenchants.commands;
import com.willfp.ecoenchants.EcoEnchantsPlugin;
import com.willfp.ecoenchants.config.ConfigManager;
import com.willfp.ecoenchants.enchantments.EcoEnchants;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.Map;
public class CommandEcodebug implements CommandExecutor {
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (command.getName().equalsIgnoreCase("ecodebug")) {
if (!(sender instanceof Player)) {
sender.sendMessage(ConfigManager.getLang().getMessage("not-player"));
return true;
}
if (!sender.hasPermission("ecoenchants.ecodebug")) {
sender.sendMessage(ConfigManager.getLang().getNoPermission());
return true;
}
Bukkit.getLogger().info("--------------- BEGIN DEBUG ----------------");
Player player = (Player) sender;
Bukkit.getLogger().info("Running Version: " + EcoEnchantsPlugin.getInstance().getDescription().getVersion());
Bukkit.getLogger().info("Held Item: " + player.getInventory().getItemInMainHand().toString());
Bukkit.getLogger().info("EcoEnchants.getAll(): " + EcoEnchants.getAll().toString());
Bukkit.getLogger().info("Enchantment.values(): " + Arrays.toString(Enchantment.values()));
try {
Field byNameField = Enchantment.class.getDeclaredField("byName");
byNameField.setAccessible(true);
Map<String, Enchantment> byName = (Map<String, Enchantment>) byNameField.get(null);
Bukkit.getLogger().info("Enchantment.byName: " + byName.toString());
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
Bukkit.getLogger().info("--------------- END DEBUG ----------------");
}
return false;
}
}

View File

@ -1,44 +0,0 @@
package com.willfp.ecoenchants.commands;
import com.willfp.ecoenchants.config.ConfigManager;
import com.willfp.ecoenchants.display.EnchantDisplay;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataType;
public class CommandEcoskip implements CommandExecutor {
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (command.getName().equalsIgnoreCase("ecoskip")) {
if (!(sender instanceof Player)) {
sender.sendMessage(ConfigManager.getLang().getMessage("not-player"));
return true;
}
if (!sender.hasPermission("ecoenchants.skip")) {
sender.sendMessage(ConfigManager.getLang().getNoPermission());
return true;
}
Player player = (Player) sender;
ItemStack item = player.getInventory().getItemInMainHand();
ItemMeta meta = item.getItemMeta();
if(meta == null) {
return true;
}
if(meta.getPersistentDataContainer().has(EnchantDisplay.KEY_SKIP, PersistentDataType.INTEGER)) {
meta.getPersistentDataContainer().remove(EnchantDisplay.KEY_SKIP);
player.sendMessage(ConfigManager.getLang().getMessage("skip-removed"));
} else {
meta.getPersistentDataContainer().set(EnchantDisplay.KEY_SKIP, PersistentDataType.INTEGER, 1);
player.sendMessage(ConfigManager.getLang().getMessage("skip-added"));
}
item.setItemMeta(meta);
}
return false;
}
}

View File

@ -1,144 +0,0 @@
package com.willfp.ecoenchants.commands;
import com.willfp.ecoenchants.config.ConfigManager;
import com.willfp.ecoenchants.enchantments.EcoEnchant;
import com.willfp.ecoenchants.enchantments.EcoEnchants;
import org.apache.commons.lang.WordUtils;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.enchantments.Enchantment;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class CommandEnchantinfo implements CommandExecutor {
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (command.getName().equalsIgnoreCase("enchantinfo")) {
if (!sender.hasPermission("ecoenchants.enchantinfo")) {
sender.sendMessage(ConfigManager.getLang().getNoPermission());
return true;
}
if(args.length == 0) {
sender.sendMessage(ConfigManager.getLang().getMessage("missing-enchant"));
return true;
}
StringBuilder nameBuilder = new StringBuilder();
Arrays.asList(args).forEach((arg) -> {
nameBuilder.append(arg).append(" ");
});
String searchName = nameBuilder.toString();
searchName = searchName.substring(0, searchName.length() - 1);
EcoEnchant enchantment = EcoEnchants.getByName(searchName);
boolean notFound = enchantment == null;
if(notFound) {
String message = ConfigManager.getLang().getMessage("not-found").replace("%name%", searchName);
sender.sendMessage(message);
return true;
}
String name;
String color;
List<String> description;
boolean isCurse = enchantment.isCursed();
boolean isSpecial = false;
boolean isArtifact = false;
if(enchantment.getType().equals(EcoEnchant.EnchantmentType.SPECIAL)) {
isSpecial = true;
}
if(enchantment.getType().equals(EcoEnchant.EnchantmentType.ARTIFACT)) {
isArtifact = true;
}
if(isCurse) color = ChatColor.translateAlternateColorCodes('&', ConfigManager.getLang().getString("curse-color"));
else if(isSpecial) color = ChatColor.translateAlternateColorCodes('&', ConfigManager.getLang().getString("special-color"));
else if(isArtifact) color = ChatColor.translateAlternateColorCodes('&', ConfigManager.getLang().getString("artifact-color"));
else color = ChatColor.translateAlternateColorCodes('&', ConfigManager.getLang().getString("not-curse-color"));
name = enchantment.getName();
description = EcoEnchants.getFromEnchantment(enchantment).getDescription();
StringBuilder descriptionBuilder = new StringBuilder();
description.forEach((line) -> {
descriptionBuilder.append(line).append(" ");
});
String desc = descriptionBuilder.toString();
Set<String> conflictNames = new HashSet<>();
Set<Enchantment> conflicts = enchantment.getConflicts();
conflicts.forEach((enchantment1 -> {
if(EcoEnchants.getFromEnchantment(enchantment1) != null) {
conflictNames.add(EcoEnchants.getFromEnchantment(enchantment1).getName());
} else {
conflictNames.add(ConfigManager.getLang().getString("vanilla." + enchantment1.getKey().getKey() + ".name"));
}
}));
StringBuilder conflictNamesBuilder = new StringBuilder();
conflictNames.forEach((name1) -> {
conflictNamesBuilder.append(name1).append(", ");
});
String allConflicts = conflictNamesBuilder.toString();
if(allConflicts.length() >= 2) {
allConflicts = allConflicts.substring(0, allConflicts.length() -2);
} else {
allConflicts = ChatColor.translateAlternateColorCodes('&', ConfigManager.getLang().getString("no-conflicts"));
}
Set<Material> targets = enchantment.getTarget();
Set<String> applicableItemsSet = new HashSet<>();
targets.forEach(material -> {
String matName = material.toString();
matName = matName.toLowerCase();
matName = matName.replaceAll("_", " ");
matName = WordUtils.capitalize(matName);
applicableItemsSet.add(matName);
});
StringBuilder targetNamesBuilder = new StringBuilder();
applicableItemsSet.forEach((name1) -> {
targetNamesBuilder.append(name1).append(", ");
});
String allTargets = targetNamesBuilder.toString();
if(allTargets.length() >= 2) {
allTargets = allTargets.substring(0, allTargets.length() - 2);
} else {
allTargets = ChatColor.translateAlternateColorCodes('&', ConfigManager.getLang().getString("no-targets"));
}
String maxLevel = String.valueOf(enchantment.getMaxLevel());
final String finalName = color + name;
final String finalDescription = desc;
final String finalTargets = allTargets;
final String finalConflicts = allConflicts;
final String finalMaxLevel = maxLevel;
Arrays.asList(ConfigManager.getLang().getMessage("enchantinfo").split("\\r?\\n")).forEach((string -> {
string = string.replaceAll("%name%", finalName)
.replaceAll("%description%", finalDescription)
.replaceAll("%target%", finalTargets)
.replaceAll("%conflicts%", finalConflicts)
.replaceAll("%maxlevel%", finalMaxLevel);
sender.sendMessage(string);
}));
}
return false;
}
}

View File

@ -4,10 +4,10 @@ import com.comphenix.protocol.ProtocolLibrary;
import com.willfp.ecoenchants.EcoEnchantsPlugin;
import com.willfp.ecoenchants.anvil.AnvilListeners;
import com.willfp.ecoenchants.bstats.Metrics;
import com.willfp.ecoenchants.commands.CommandEcodebug;
import com.willfp.ecoenchants.commands.CommandEcoreload;
import com.willfp.ecoenchants.commands.CommandEcoskip;
import com.willfp.ecoenchants.commands.CommandEnchantinfo;
import com.willfp.ecoenchants.command.commands.CommandEcodebug;
import com.willfp.ecoenchants.command.commands.CommandEcoreload;
import com.willfp.ecoenchants.command.commands.CommandEcoskip;
import com.willfp.ecoenchants.command.commands.CommandEnchantinfo;
import com.willfp.ecoenchants.config.ConfigManager;
import com.willfp.ecoenchants.display.EnchantDisplay;
import com.willfp.ecoenchants.display.packets.PacketOpenWindowMerchant;
@ -380,10 +380,10 @@ public class Loader {
*/
Bukkit.getLogger().info("Loading Commands...");
Bukkit.getPluginCommand("ecoreload").setExecutor(new CommandEcoreload());
Bukkit.getPluginCommand("ecodebug").setExecutor(new CommandEcodebug());
Bukkit.getPluginCommand("enchantinfo").setExecutor(new CommandEnchantinfo());
Bukkit.getPluginCommand("ecoskip").setExecutor(new CommandEcoskip());
Bukkit.getPluginCommand("ecoreload").setExecutor(CommandEcoreload.getInstance());
Bukkit.getPluginCommand("ecodebug").setExecutor(CommandEcodebug.getInstance());
Bukkit.getPluginCommand("enchantinfo").setExecutor(CommandEnchantinfo.getInstance());
Bukkit.getPluginCommand("ecoskip").setExecutor(CommandEcoskip.getInstance());
Bukkit.getLogger().info("");
/*