diff --git a/src/main/java/pk/ajneb97/MainCommand.java b/src/main/java/pk/ajneb97/MainCommand.java index bf6941e..e6a19f6 100644 --- a/src/main/java/pk/ajneb97/MainCommand.java +++ b/src/main/java/pk/ajneb97/MainCommand.java @@ -64,6 +64,8 @@ public class MainCommand implements CommandExecutor, TabCompleter { reset(sender,args,messagesConfig,msgManager); }else if(args[0].equalsIgnoreCase("edit")) { edit(player,args,messagesConfig,msgManager); + }else if(args[0].equalsIgnoreCase("verify")){ + verify(player,messagesConfig,msgManager); } else{ // /kit (short command) @@ -76,6 +78,10 @@ public class MainCommand implements CommandExecutor, TabCompleter { } }else{ // /kit + if(plugin.getVerifyManager().isCriticalErrors()){ + msgManager.sendMessage(player,messagesConfig.getString("pluginCriticalErrors"),true); + return true; + } plugin.getInventoryManager().openInventory(new InventoryPlayer(player,"main_inventory")); } @@ -98,10 +104,19 @@ public class MainCommand implements CommandExecutor, TabCompleter { sender.sendMessage(MessagesManager.getColoredMessage("&6/kit delete &8Deletes a kit.")); sender.sendMessage(MessagesManager.getColoredMessage("&6/kit reset &8Resets kit data for a player.")); sender.sendMessage(MessagesManager.getColoredMessage("&6/kit reload &8Reloads the config.")); + sender.sendMessage(MessagesManager.getColoredMessage("&6/kit verify &8Checks the plugin for errors.")); sender.sendMessage(MessagesManager.getColoredMessage(" ")); sender.sendMessage(MessagesManager.getColoredMessage("&7[ [ &8[&bPlayerKits&a²&8] &7] ]")); } + public void verify(Player player,FileConfiguration messagesConfig,MessagesManager msgManager){ + if(!PlayerUtils.isPlayerKitsAdmin(player)){ + msgManager.sendMessage(player,messagesConfig.getString("noPermissions"),true); + return; + } + plugin.getVerifyManager().sendVerification(player); + } + public void reload(CommandSender sender,String[] args,FileConfiguration messagesConfig,MessagesManager msgManager){ if(!PlayerUtils.isPlayerKitsAdmin(sender)){ msgManager.sendMessage(sender,messagesConfig.getString("noPermissions"),true); @@ -272,6 +287,7 @@ public class MainCommand implements CommandExecutor, TabCompleter { if(PlayerUtils.isPlayerKitsAdmin(sender)){ commands.add("give");commands.add("delete");commands.add("create"); commands.add("reload");commands.add("reset");commands.add("edit"); + commands.add("verify"); } for(String c : commands) { if(args[0].isEmpty() || c.startsWith(args[0].toLowerCase())) { diff --git a/src/main/java/pk/ajneb97/PlayerKits2.java b/src/main/java/pk/ajneb97/PlayerKits2.java index c4c59cc..64df2f9 100644 --- a/src/main/java/pk/ajneb97/PlayerKits2.java +++ b/src/main/java/pk/ajneb97/PlayerKits2.java @@ -33,6 +33,7 @@ public class PlayerKits2 extends JavaPlugin { private InventoryEditManager inventoryEditManager; private NMSManager nmsManager; private UpdateCheckerManager updateCheckerManager; + private VerifyManager verifyManager; private InventoryUpdateTaskManager inventoryUpdateTaskManager; private PlayerDataSaveTask playerDataSaveTask; @@ -56,6 +57,9 @@ public class PlayerKits2 extends JavaPlugin { this.inventoryUpdateTaskManager = new InventoryUpdateTaskManager(this); this.inventoryUpdateTaskManager.start(); + this.verifyManager = new VerifyManager(this); + this.verifyManager.verify(); + if(configsManager.getMainConfigManager().isMySQL()){ mySQLConnection = new MySQLConnection(this); mySQLConnection.setupMySql(); @@ -147,12 +151,16 @@ public class PlayerKits2 extends JavaPlugin { return updateCheckerManager; } + public VerifyManager getVerifyManager() { + return verifyManager; + } + public void updateMessage(UpdateCheckerResult result){ if(!result.isError()){ String latestVersion = result.getLatestVersion(); if(latestVersion != null){ Bukkit.getConsoleSender().sendMessage(MessagesManager.getColoredMessage("&cThere is a new version available. &e(&7"+latestVersion+"&e)")); - Bukkit.getConsoleSender().sendMessage(MessagesManager.getColoredMessage("&cYou can download it at: &fhttps://www.spigotmc.org/resources/112616/")); + Bukkit.getConsoleSender().sendMessage(MessagesManager.getColoredMessage("&cYou can download it at: &fhttps://modrinth.com/plugin/playerkits-2")); } }else{ Bukkit.getConsoleSender().sendMessage(MessagesManager.getColoredMessage(prefix+"&cError while checking update.")); diff --git a/src/main/java/pk/ajneb97/configs/ConfigsManager.java b/src/main/java/pk/ajneb97/configs/ConfigsManager.java index af3a89b..c32e438 100644 --- a/src/main/java/pk/ajneb97/configs/ConfigsManager.java +++ b/src/main/java/pk/ajneb97/configs/ConfigsManager.java @@ -66,6 +66,8 @@ public class ConfigsManager { plugin.reloadPlayerDataSaveTask(); } + plugin.getVerifyManager().verify(); + return true; } } diff --git a/src/main/java/pk/ajneb97/configs/MessagesConfigManager.java b/src/main/java/pk/ajneb97/configs/MessagesConfigManager.java index ed4a826..4b78e8c 100644 --- a/src/main/java/pk/ajneb97/configs/MessagesConfigManager.java +++ b/src/main/java/pk/ajneb97/configs/MessagesConfigManager.java @@ -18,7 +18,7 @@ public class MessagesConfigManager { this.plugin = plugin; this.configFile = new CustomConfig("messages.yml",plugin,null, false); this.configFile.registerConfig(); - + checkUpdate(); } public void configure(){ @@ -38,6 +38,10 @@ public class MessagesConfigManager { this.plugin.setMessagesManager(msgManager); } + public void saveConfig(){ + configFile.saveConfig(); + } + public boolean reloadConfig(){ if(!configFile.reloadConfig()){ return false; @@ -54,13 +58,11 @@ public class MessagesConfigManager { Path pathConfig = Paths.get(configFile.getRoute()); try{ String text = new String(Files.readAllBytes(pathConfig)); - /* - if(!text.contains("register_commands:")){ - List commands = new ArrayList<>(); - getConfig().set("Config.register_commands", commands); + if(!text.contains("pluginCriticalErrors:")){ + getConfig().set("pluginCriticalErrors", "&cThe plugin has detected some errors. Check them using &7/kit verify"); saveConfig(); } - */ + }catch(IOException e){ e.printStackTrace(); } diff --git a/src/main/java/pk/ajneb97/listeners/InventoryEditListener.java b/src/main/java/pk/ajneb97/listeners/InventoryEditListener.java index 7a83483..a2392b0 100644 --- a/src/main/java/pk/ajneb97/listeners/InventoryEditListener.java +++ b/src/main/java/pk/ajneb97/listeners/InventoryEditListener.java @@ -29,6 +29,7 @@ public class InventoryEditListener implements Listener { if(inventoryPlayer.getInventoryName().startsWith("edit_position")){ invManager.getInventoryEditPositionManager().closeInventory(inventoryPlayer); } + plugin.getVerifyManager().verify(); } plugin.getInventoryEditManager().removeInventoryPlayer(player); } diff --git a/src/main/java/pk/ajneb97/listeners/PlayerListener.java b/src/main/java/pk/ajneb97/listeners/PlayerListener.java index 5de0a07..8c8750a 100644 --- a/src/main/java/pk/ajneb97/listeners/PlayerListener.java +++ b/src/main/java/pk/ajneb97/listeners/PlayerListener.java @@ -28,7 +28,7 @@ public class PlayerListener implements Listener { String latestVersion = plugin.getUpdateCheckerManager().getLatestVersion(); if(player.isOp() && plugin.getConfigsManager().getMainConfigManager().isUpdateNotify() && !plugin.version.equals(latestVersion)){ player.sendMessage(MessagesManager.getColoredMessage(plugin.prefix+"&cThere is a new version available. &e(&7"+latestVersion+"&e)")); - player.sendMessage(MessagesManager.getColoredMessage("&cYou can download it at: &ahttps://www.spigotmc.org/resources/112616/")); + player.sendMessage(MessagesManager.getColoredMessage("&cYou can download it at: &ahttps://modrinth.com/plugin/playerkits-2")); } } diff --git a/src/main/java/pk/ajneb97/managers/VerifyManager.java b/src/main/java/pk/ajneb97/managers/VerifyManager.java new file mode 100644 index 0000000..f43caa1 --- /dev/null +++ b/src/main/java/pk/ajneb97/managers/VerifyManager.java @@ -0,0 +1,103 @@ +package pk.ajneb97.managers; + +import org.bukkit.entity.Player; +import pk.ajneb97.PlayerKits2; +import pk.ajneb97.model.Kit; +import pk.ajneb97.model.KitAction; +import pk.ajneb97.model.inventory.ItemKitInventory; +import pk.ajneb97.model.inventory.KitInventory; +import pk.ajneb97.model.verify.PKBaseError; +import pk.ajneb97.model.verify.PKInventoryInvalidKitError; +import pk.ajneb97.model.verify.PKKitActionError; +import pk.ajneb97.model.verify.PKKitDisplayItemError; + +import java.util.ArrayList; +import java.util.List; + +public class VerifyManager { + private PlayerKits2 plugin; + private ArrayList errors; + private boolean criticalErrors; + public VerifyManager(PlayerKits2 plugin) { + this.plugin = plugin; + this.errors = new ArrayList(); + this.criticalErrors = false; + } + + public void sendVerification(Player player) { + player.sendMessage(MessagesManager.getColoredMessage("&f&l- - - - - - - - &b&lPLAYERKITS 2 VERIFY &f&l- - - - - - - -")); + player.sendMessage(MessagesManager.getColoredMessage("")); + if(errors.isEmpty()) { + player.sendMessage(MessagesManager.getColoredMessage("&aThere are no errors in the plugin ;)")); + }else { + player.sendMessage(MessagesManager.getColoredMessage("&e&oHover on the errors to see more information.")); + for(PKBaseError error : errors) { + error.sendMessage(player); + } + } + player.sendMessage(MessagesManager.getColoredMessage("")); + player.sendMessage(MessagesManager.getColoredMessage("&f&l- - - - - - - - &b&lPLAYERKITS 2 VERIFY &f&l- - - - - - - -")); + } + + public void verify() { + this.errors = new ArrayList(); + this.criticalErrors = false; + + //CHECK KITS + ArrayList kits = plugin.getKitsManager().getKits(); + for(Kit kit : kits) { + verifyKit(kit); + } + + //CHECK INVENTORIES + ArrayList inventories = plugin.getInventoryManager().getInventories(); + for(KitInventory inventory : inventories){ + verifyInventory(inventory); + } + } + + public void verifyKit(Kit kit) { + String kitName = kit.getName(); + if(kit.getDisplayItemDefault() == null || kit.getDisplayItemDefault().getId() == null){ + errors.add(new PKKitDisplayItemError(kitName+".yml",null,true,kitName)); + criticalErrors = true; + } + verifyActions(kit.getClaimActions(),"claim",kitName); + verifyActions(kit.getErrorActions(),"error",kitName); + } + + public void verifyActions(ArrayList actions,String actionGroup,String kitName){ + for(int i=0;i items = inventory.getItems(); + for(ItemKitInventory item : items){ + String type = item.getType(); + if(type != null && type.startsWith("kit: ")){ + String kitName = type.replace("kit: ",""); + if(kitsManager.getKitByName(kitName) == null){ + errors.add(new PKInventoryInvalidKitError("inventory.yml",null,true,kitName, + inventory.getName(),item.getSlotsString())); + criticalErrors = true; + } + } + } + } + + public boolean isCriticalErrors() { + return criticalErrors; + } +} diff --git a/src/main/java/pk/ajneb97/managers/edit/InventoryEditDisplayManager.java b/src/main/java/pk/ajneb97/managers/edit/InventoryEditDisplayManager.java index a2fefb9..3d8c90a 100644 --- a/src/main/java/pk/ajneb97/managers/edit/InventoryEditDisplayManager.java +++ b/src/main/java/pk/ajneb97/managers/edit/InventoryEditDisplayManager.java @@ -89,7 +89,7 @@ public class InventoryEditDisplayManager { lore.add("&7inventory."); new InventoryItem(inv, 26, Material.EMERALD_BLOCK).name("&6&lSave Item").lore(lore).ready(); - if(kitItem != null){ + if(kitItem != null && kitItem.getId() != null){ inv.setItem(13,plugin.getKitItemManager().createItemFromKitItem(kitItem, inventoryPlayer.getPlayer())); } diff --git a/src/main/java/pk/ajneb97/model/verify/PKBaseError.java b/src/main/java/pk/ajneb97/model/verify/PKBaseError.java new file mode 100644 index 0000000..a4a3e4f --- /dev/null +++ b/src/main/java/pk/ajneb97/model/verify/PKBaseError.java @@ -0,0 +1,45 @@ +package pk.ajneb97.model.verify; + +import org.bukkit.entity.Player; + +import java.util.ArrayList; +import java.util.List; + +public abstract class PKBaseError { + + protected String file; + protected String errorText; + protected boolean critical; + protected String prefix; + + public PKBaseError(String file, String errorText, boolean critical){ + this.file = file; + this.errorText = errorText; + this.critical = critical; + this.prefix = "&e⚠ ";; + if(this.critical){ + this.prefix = "&c⚠ "; + } + } + + public List getFixedErrorText(){ + List sepText = new ArrayList(); + int currentPos = 0; + for(int i=0;i= 35 && errorText.charAt(i) == ' ') { + String m = errorText.substring(i-currentPos, i); + currentPos = 0; + sepText.add(m); + }else { + currentPos++; + } + if(i==errorText.length()-1) { + String m = errorText.substring(i-currentPos+1, errorText.length()); + sepText.add(m); + } + } + return sepText; + } + + public abstract void sendMessage(Player player); +} diff --git a/src/main/java/pk/ajneb97/model/verify/PKInventoryInvalidKitError.java b/src/main/java/pk/ajneb97/model/verify/PKInventoryInvalidKitError.java new file mode 100644 index 0000000..a593a91 --- /dev/null +++ b/src/main/java/pk/ajneb97/model/verify/PKInventoryInvalidKitError.java @@ -0,0 +1,33 @@ +package pk.ajneb97.model.verify; + +import org.bukkit.entity.Player; +import pk.ajneb97.utils.JSONMessage; + +import java.util.ArrayList; +import java.util.List; + +public class PKInventoryInvalidKitError extends PKBaseError{ + + private String kitName; + private String inventoryName; + private String slot; + + public PKInventoryInvalidKitError(String file, String errorText, boolean critical, String kitName, String inventoryName, String slot) { + super(file, errorText, critical); + this.kitName = kitName; + this.inventoryName = inventoryName; + this.slot = slot; + } + + @Override + public void sendMessage(Player player) { + List hover = new ArrayList(); + + JSONMessage jsonMessage = new JSONMessage(player,prefix+"&7Invalid kit named &c"+kitName+" &7on file &c"+file); + hover.add("&eTHIS IS AN ERROR!"); + hover.add("&fA kit that doesn't exists is present on"); + hover.add("&finventory &c"+inventoryName+" &fand slot &c"+slot+"&f."); + + jsonMessage.hover(hover).send(); + } +} diff --git a/src/main/java/pk/ajneb97/model/verify/PKKitActionError.java b/src/main/java/pk/ajneb97/model/verify/PKKitActionError.java new file mode 100644 index 0000000..32c094e --- /dev/null +++ b/src/main/java/pk/ajneb97/model/verify/PKKitActionError.java @@ -0,0 +1,40 @@ +package pk.ajneb97.model.verify; + +import org.bukkit.entity.Player; +import pk.ajneb97.utils.JSONMessage; + +import java.util.ArrayList; +import java.util.List; + +public class PKKitActionError extends PKBaseError{ + + private String kitName; + private String actionGroup; + private String actionId; + + public PKKitActionError(String file, String errorText, boolean critical, String kitName, String actionGroup, String actionId) { + super(file, errorText, critical); + this.kitName = kitName; + this.actionId = actionId; + this.actionGroup = actionGroup; + } + + @Override + public void sendMessage(Player player) { + List hover = new ArrayList(); + + JSONMessage jsonMessage = new JSONMessage(player,prefix+"&7Action (&c"+actionGroup+"&7,&c"+actionId+"&7)" + + " &7on kit &c"+kitName+" &7is not valid."); + hover.add("&eTHIS IS A WARNING!"); + hover.add("&fThe action defined for this event"); + hover.add("&fis probably not formatted correctly:"); + for(String m : getFixedErrorText()) { + hover.add("&c"+m); + } + hover.add(" "); + hover.add("&fRemember to use a valid action from this list:"); + hover.add("&ahttps://ajneb97.gitbook.io/playerkits-2/actions"); + + jsonMessage.hover(hover).send(); + } +} diff --git a/src/main/java/pk/ajneb97/model/verify/PKKitDisplayItemError.java b/src/main/java/pk/ajneb97/model/verify/PKKitDisplayItemError.java new file mode 100644 index 0000000..2e1ec36 --- /dev/null +++ b/src/main/java/pk/ajneb97/model/verify/PKKitDisplayItemError.java @@ -0,0 +1,29 @@ +package pk.ajneb97.model.verify; + +import org.bukkit.entity.Player; +import pk.ajneb97.utils.JSONMessage; + +import java.util.ArrayList; +import java.util.List; + +public class PKKitDisplayItemError extends PKBaseError{ + + private String kitName; + + public PKKitDisplayItemError(String file, String errorText, boolean critical, String kitName) { + super(file, errorText, critical); + this.kitName = kitName; + } + + @Override + public void sendMessage(Player player) { + List hover = new ArrayList(); + + JSONMessage jsonMessage = new JSONMessage(player,prefix+"&7Kit &c"+kitName+" &7doesn't have a default display item."); + hover.add("&eTHIS IS AN ERROR!"); + hover.add("&fAll kits must have a default display"); + hover.add("&fitem. Set one using /kit edit "+kitName); + + jsonMessage.hover(hover).send(); + } +} diff --git a/src/main/java/pk/ajneb97/utils/JSONMessage.java b/src/main/java/pk/ajneb97/utils/JSONMessage.java new file mode 100644 index 0000000..e73af42 --- /dev/null +++ b/src/main/java/pk/ajneb97/utils/JSONMessage.java @@ -0,0 +1,64 @@ +package pk.ajneb97.utils; + +import net.md_5.bungee.api.chat.BaseComponent; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.TextComponent; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; + +import java.util.List; + +public class JSONMessage { + + private Player player; + private String text; + private BaseComponent[] hover; + private String suggestCommand; + private String executeCommand; + + public JSONMessage(Player player, String text) { + this.player = player; + this.hover = null; + this.text = text; + } + + public JSONMessage hover(List list) { + hover = new BaseComponent[list.size()]; + for(int i=0;i