package me.rockyhawk.commandPanels.ingameEditor; import me.rockyhawk.commandPanels.commandpanels; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import java.io.File; import java.util.*; public class cpIngameEditCommand implements CommandExecutor { commandpanels plugin; public cpIngameEditCommand(commandpanels pl) { this.plugin = pl; } @EventHandler public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { String tag = plugin.config.getString("config.format.tag") + " "; if(!sender.hasPermission("commandpanel.edit")){ sender.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.perms"))); return true; } if(Objects.requireNonNull(plugin.config.getString("config.ingame-editor")).equalsIgnoreCase("false")){ //this will cancel every /cpe command if ingame-editor is set to false sender.sendMessage(plugin.papi(tag + ChatColor.RED + "Editor disabled!")); return true; } if(!(sender instanceof Player)) { sender.sendMessage(plugin.papi( tag + ChatColor.RED + "Please execute command as a Player!")); return true; } File panelscf = new File(plugin.getDataFolder() + File.separator + "panels" + File.separator + "example.yml"); //cf == correct file YamlConfiguration cf; //this is the file to use for any panel.* requests String panels = ""; ArrayList apanels = new ArrayList(); //all panels from all files (titles of panels) ArrayList opanels = new ArrayList(); //all panels from all files (raw names of panels) String tpanels; //tpanels is the temp to check through the files //below is going to go through the files and find the right one if (args.length != 0) { //check to make sure the person hasn't just left it empty for (String filename : plugin.panelFiles) { //will loop through all the files in folder String key; YamlConfiguration temp; tpanels = ""; temp = YamlConfiguration.loadConfiguration(new File(plugin.panelsf + File.separator + filename)); if (!plugin.checkPanels(temp)) { sender.sendMessage(plugin.papi( tag + plugin.config.getString("config.format.error") + ": File with no Panels found!")); return true; } for (Iterator var10 = temp.getConfigurationSection("panels").getKeys(false).iterator(); var10.hasNext(); tpanels = tpanels + key + " ") { key = (String) var10.next(); apanels.add(temp.getString("panels." + key + ".title")); opanels.add(key); } tpanels = tpanels.trim(); //check if the requested panel is in the file boolean nfound = true; for (int i = 0; tpanels.split("\\s").length - 1 >= i; ++i) { if (args[0].equalsIgnoreCase(tpanels.split("\\s")[i])) { tpanels = tpanels.split("\\s")[i]; nfound = false; } } //if nfound is true it was not found if (!nfound) { panels = tpanels; panelscf = new File(plugin.panelsf + File.separator + filename); } } panels = panels.trim(); } cf = YamlConfiguration.loadConfiguration(panelscf); //below will start the command, once it got the right file and panel if (cmd.getName().equalsIgnoreCase("cpe") || cmd.getName().equalsIgnoreCase("commandpaneledit") || cmd.getName().equalsIgnoreCase("cpanele")) { Player p = (Player) sender; //names is a list of the titles for the Panels Set oset = new HashSet(opanels); if (oset.size() < opanels.size()) { //there are duplicate panel names p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " panels: You cannot have duplicate panel names!")); if(plugin.debug){ ArrayList opanelsTemp = new ArrayList(); for(String tempName : opanels){ if(opanelsTemp.contains(tempName)){ p.sendMessage(plugin.papi(tag + ChatColor.RED + " The duplicate panel is: " + tempName)); return true; } opanelsTemp.add(tempName); } } return true; } Set set = new HashSet(apanels); if (set.size() < apanels.size()) { //there are duplicate panel names p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " title: You cannot have duplicate title names!")); if(plugin.debug){ ArrayList apanelsTemp = new ArrayList(); for(String tempName : apanels){ if(apanelsTemp.contains(tempName)){ p.sendMessage(plugin.papi(tag + ChatColor.RED + " The duplicate title is: " + tempName)); return true; } apanelsTemp.add(tempName); } } return true; } if (args.length == 0) { plugin.openEditorGui(p,0); return true; } if (args.length == 1) { boolean nfound = true; for (int i = 0; panels.split("\\s").length - 1 >= i; ++i) { if (args[0].equalsIgnoreCase(panels.split("\\s")[i])) { panels = panels.split("\\s")[i]; nfound = false; } } if (nfound) { //if the panel was not found in the message p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.nopanel"))); return true; }else if (!checkconfig(panels, p, cf)) { //if the config is missing an element (message will be sent to user via the public boolean) return true; } //open editor window here plugin.openGui(panels, p, cf,3,0); return true; } } sender.sendMessage(plugin.papi(tag + ChatColor.RED + "Usage: /cpe ")); return true; } boolean checkconfig(String panels, Player p, YamlConfiguration pconfig) { //if it is missing a section specified it will return false String tag = plugin.config.getString("config.format.tag") + " "; if(!pconfig.contains("panels." + panels)) { p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.nopanel"))); return false; } if(!pconfig.contains("panels." + panels + ".perm")) { p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " perm: Missing config section!")); return false; } if(!pconfig.contains("panels." + panels + ".rows")) { p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " perm: Missing config section!")); return false; } if(!pconfig.contains("panels." + panels + ".title")) { p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " perm: Missing config section!")); return false; } if(!pconfig.contains("panels." + panels + ".item")) { p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " perm: Missing config section!")); return false; } return true; } }