diff --git a/resource/plugin.yml b/resource/plugin.yml index b1fe31c..b410d9b 100644 --- a/resource/plugin.yml +++ b/resource/plugin.yml @@ -1,4 +1,4 @@ -version: 3.10.2 +version: 3.10.3 main: me.rockyhawk.commandPanels.commandpanels name: CommandPanels author: RockyHawk diff --git a/src/me/rockyhawk/commandPanels/ClassResources/CommandTags.java b/src/me/rockyhawk/commandPanels/ClassResources/CommandTags.java new file mode 100644 index 0000000..a8eb967 --- /dev/null +++ b/src/me/rockyhawk/commandPanels/ClassResources/CommandTags.java @@ -0,0 +1,464 @@ +package me.rockyhawk.commandPanels.ClassResources; + +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteStreams; +import me.realized.tokenmanager.api.TokenManager; +import me.rockyhawk.commandPanels.commandpanels; +import org.bukkit.*; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.scheduler.BukkitRunnable; + +import java.io.File; +import java.util.Objects; + +public class CommandTags { + commandpanels plugin; + public CommandTags(commandpanels pl) { + this.plugin = pl; + } + + public void commandTags(Player p, String command) { + String tag = plugin.config.getString("config.format.tag") + " "; + //set cp placeholders + command = plugin.papi(p, plugin.setCpPlaceholders(p, command)); + if (command.split("\\s")[0].equalsIgnoreCase("server=")) { + //this contacts bungee and tells it to send the server change command + ByteArrayDataOutput out = ByteStreams.newDataOutput(); + out.writeUTF("Connect"); + out.writeUTF(command.split("\\s")[1]); + Player player = Bukkit.getPlayerExact(p.getName()); + assert player != null; + player.sendPluginMessage(plugin, "BungeeCord", out.toByteArray()); + } else if (command.split("\\s")[0].equalsIgnoreCase("open=")) { + //if player uses open= it will open the panel forced + String panelName = command.split("\\s")[1]; + for(String[] tempName : plugin.panelNames){ + if(tempName[0].equals(panelName)){ + YamlConfiguration panelConfig = YamlConfiguration.loadConfiguration(new File(plugin.panelsf + File.separator + plugin.panelFiles.get(Integer.parseInt(tempName[1])))); + plugin.openGui(panelName, p, panelConfig, 1, 0); + return; + } + } + }else if (command.split("\\s")[0].equalsIgnoreCase("op=")) { + //if player uses op= it will perform command as op + boolean isop = p.isOp(); + try { + p.setOp(true); + Bukkit.dispatchCommand(p,plugin.papi(p, command.replace("op=", "").trim())); + p.setOp(isop); + } catch (Exception exc) { + p.setOp(isop); + plugin.debug(exc); + p.sendMessage(tag + plugin.papi( plugin.config.getString("config.format.error") + " op=: Error in op command!")); + } + }else if (command.split("\\s")[0].equalsIgnoreCase("delay=")) { + //if player uses op= it will perform command as op + final int delaySeconds = Integer.parseInt(command.split("\\s")[1]); + String finalCommand = command.split("\\s",3)[2]; + new BukkitRunnable() { + @Override + public void run() { + commandTags(p, finalCommand); + this.cancel(); + } + }.runTaskTimer(plugin, 20*delaySeconds, 20); //20 ticks == 1 second + } else if (command.split("\\s")[0].equalsIgnoreCase("console=")) { + //if player uses console= it will perform command in the console + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), plugin.papi(p, command.replace("console=", "").trim())); + } else if (command.split("\\s")[0].equalsIgnoreCase("buy=")) { + //if player uses buy= it will be eg. buy= + try { + if (plugin.econ != null) { + if (plugin.econ.getBalance(p) >= Double.parseDouble(command.split("\\s")[1])) { + plugin.econ.withdrawPlayer(p, Double.parseDouble(command.split("\\s")[1])); + //if the message is empty don't send + if(!Objects.requireNonNull(plugin.config.getString("config.format.bought")).isEmpty()){ + p.sendMessage(plugin.papi( tag + Objects.requireNonNull(plugin.config.getString("config.format.bought")).replaceAll("%cp-args%", command.split("\\s")[1]))); + } + if (p.getInventory().firstEmpty() >= 0) { + p.getInventory().addItem(new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3]))); + } else { + Objects.requireNonNull(p.getLocation().getWorld()).dropItemNaturally(p.getLocation(), new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3]))); + } + } else { + p.sendMessage(plugin.papi( tag + plugin.config.getString("config.format.needmoney"))); + } + } else { + p.sendMessage(plugin.papi( tag + ChatColor.RED + "Buying Requires Vault and an Economy to work!")); + } + } catch (Exception buy) { + plugin.debug(buy); + p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " " + "commands: " + command)); + } + } else if (command.split("\\s")[0].equalsIgnoreCase("tokenbuy=")) { + //if player uses tokenbuy= it will be eg. tokenbuy= + try { + if (plugin.getServer().getPluginManager().isPluginEnabled("TokenManager")) { + TokenManager api = (TokenManager) Bukkit.getServer().getPluginManager().getPlugin("TokenManager"); + assert api != null; + int balance = Integer.parseInt(Long.toString(api.getTokens(p).orElse(0))); + if (balance >= Double.parseDouble(command.split("\\s")[1])) { + api.removeTokens(p, Long.parseLong(command.split("\\s")[1])); + //if the message is empty don't send + if(!Objects.requireNonNull(plugin.config.getString("config.format.bought")).isEmpty()) { + p.sendMessage(plugin.papi( tag + Objects.requireNonNull(plugin.config.getString("config.format.bought")).replaceAll("%cp-args%", command.split("\\s")[1]))); + } + if (p.getInventory().firstEmpty() >= 0) { + p.getInventory().addItem(new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3]))); + } else { + Objects.requireNonNull(p.getLocation().getWorld()).dropItemNaturally(p.getLocation(), new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3]))); + } + } else { + p.sendMessage(plugin.papi( tag + plugin.config.getString("config.format.needmoney"))); + } + } else { + p.sendMessage(plugin.papi( tag + ChatColor.RED + "Buying Requires TokenManager to work!")); + } + } catch (Exception buy) { + plugin.debug(buy); + p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " " + "commands: " + command)); + } + } else if (command.split("\\s")[0].equalsIgnoreCase("sell=")) { + //if player uses sell= it will be eg. sell= [enchanted:KNOCKBACK:1] [potion:JUMP] + try { + if (plugin.econ != null) { + boolean sold = false; + for (int f = 0; f < p.getInventory().getSize(); f++) { + ItemStack itm = p.getInventory().getItem(f); + if (itm != null && itm.getType().equals(Material.matchMaterial(command.split("\\s")[2]))) { + //determine if the command contains parameters for extensions + String potion = "false"; + for(String argsTemp : command.split("\\s")){ + if(argsTemp.startsWith("potion:")){ + potion = argsTemp.replace("potion:",""); + } + } + //check to ensure any extensions are checked + try { + if (!potion.equals("false")) { + PotionMeta potionMeta = (PotionMeta) itm.getItemMeta(); + assert potionMeta != null; + if (!potionMeta.getBasePotionData().getType().name().equalsIgnoreCase(potion)) { + p.sendMessage(plugin.papi( tag + ChatColor.RED + "Your item has the wrong potion effect")); + return; + } + } + }catch(Exception exc){ + //skip unless plugin.debug enabled + plugin.debug(exc); + } + if (itm.getAmount() >= new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3])).getAmount()) { + int amt = itm.getAmount() - new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3])).getAmount(); + itm.setAmount(amt); + p.getInventory().setItem(f, amt > 0 ? itm : null); + plugin.econ.depositPlayer(p, Double.parseDouble(command.split("\\s")[1])); + sold = true; + p.updateInventory(); + break; + } + } + } + if (!sold) { + p.sendMessage(plugin.papi( tag + plugin.config.getString("config.format.needitems"))); + } else { + //if the message is empty don't send + if(!Objects.requireNonNull(plugin.config.getString("config.format.sold")).isEmpty()) { + p.sendMessage(plugin.papi( tag + Objects.requireNonNull(plugin.config.getString("config.format.sold")).replaceAll("%cp-args%", command.split("\\s")[1]))); + } + } + } else { + p.sendMessage(plugin.papi( tag + ChatColor.RED + "Selling Requires Vault and an Economy to work!")); + } + } catch (Exception sell) { + plugin.debug(sell); + p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " " + "commands: " + command)); + } + } else if (command.split("\\s")[0].equalsIgnoreCase("tokensell=")) { + //if player uses tokensell= it will be eg. tokensell= [enchanted:KNOCKBACK:1] [potion:JUMP] + try { + if (plugin.getServer().getPluginManager().isPluginEnabled("TokenManager")) { + TokenManager api = (TokenManager) Bukkit.getServer().getPluginManager().getPlugin("TokenManager"); + boolean sold = false; + for (int f = 0; f < p.getInventory().getSize(); f++) { + ItemStack itm = p.getInventory().getItem(f); + if (itm != null && itm.getType().equals(Material.matchMaterial(command.split("\\s")[2]))) { + //determine if the command contains parameters for extensions + String potion = "false"; + for(String argsTemp : command.split("\\s")){ + if(argsTemp.startsWith("potion:")){ + potion = argsTemp.replace("potion:",""); + } + } + //check to ensure any extensions are checked + try { + if (!potion.equals("false")) { + PotionMeta potionMeta = (PotionMeta) itm.getItemMeta(); + assert potionMeta != null; + if (!potionMeta.getBasePotionData().getType().name().equalsIgnoreCase(potion)) { + p.sendMessage(plugin.papi( tag + ChatColor.RED + "Your item has the wrong potion effect")); + return; + } + } + }catch(Exception exc){ + //skip if it cannot do unless plugin.debug is enabled + plugin.debug(exc); + } + if (itm.getAmount() >= new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3])).getAmount()) { + int amt = itm.getAmount() - new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3])).getAmount(); + itm.setAmount(amt); + p.getInventory().setItem(f, amt > 0 ? itm : null); + plugin.econ.depositPlayer(p, Double.parseDouble(command.split("\\s")[1])); + assert api != null; + api.addTokens(p, Long.parseLong(command.split("\\s")[1])); + sold = true; + p.updateInventory(); + break; + } + } + } + if (!sold) { + p.sendMessage(plugin.papi( tag + plugin.config.getString("config.format.needitems"))); + } else { + //if the message is empty don't send + if(!Objects.requireNonNull(plugin.config.getString("config.format.sold")).isEmpty()) { + p.sendMessage(plugin.papi( tag + Objects.requireNonNull(plugin.config.getString("config.format.sold")).replaceAll("%cp-args%", command.split("\\s")[1]))); + } + } + } else { + p.sendMessage(plugin.papi( tag + ChatColor.RED + "Selling Requires TokenManager to work!")); + } + } catch (Exception sell) { + plugin.debug(sell); + p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " " + "commands: " + command)); + } + } else if (command.split("\\s")[0].equalsIgnoreCase("msg=")) { + //if player uses msg= it will send the player a message + p.sendMessage(plugin.papi(p, command.replace("msg=", "").trim())); + } else if (command.split("\\s")[0].equalsIgnoreCase("sound=")) { + //if player uses sound= it will play a sound (sound= [sound]) + try { + p.playSound(p.getLocation(), Sound.valueOf(command.split("\\s")[1]), 1F, 1F); + } catch (Exception s) { + plugin.debug(s); + p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " " + "commands: " + command)); + } + } else if (command.split("\\s")[0].equalsIgnoreCase("tokenbuycommand=")) { + //if player uses tokenbuycommand [price] [command] + try { + if (plugin.getServer().getPluginManager().isPluginEnabled("TokenManager")) { + TokenManager api = (TokenManager) Bukkit.getServer().getPluginManager().getPlugin("TokenManager"); + assert api != null; + int balance = Integer.parseInt(Long.toString(api.getTokens(p).orElse(0))); + if (balance >= Double.parseDouble(command.split("\\s")[1])) { + api.removeTokens(p, Long.parseLong(command.split("\\s")[1])); + //execute command under here + String commandp = command; + commandp = commandp.replace("tokenbuycommand=", "").trim(); + String price = commandp.split(" ", 2)[0]; + commandp = commandp.split(" ", 2)[1]; + commandTags(p,plugin.papi(p, commandp)); + //if the message is empty don't send + if(!Objects.requireNonNull(plugin.config.getString("config.format.bought")).isEmpty()) { + p.sendMessage(plugin.papi( tag + Objects.requireNonNull(plugin.config.getString("config.format.bought")).replaceAll("%cp-args%", price))); + } + } else { + p.sendMessage(plugin.papi( tag + plugin.config.getString("config.format.needmoney"))); + } + } else { + p.sendMessage(plugin.papi( tag + ChatColor.RED + "Buying Requires Vault and an Economy to work!")); + } + } catch (Exception buyc) { + plugin.debug(buyc); + p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " " + "commands: " + command)); + } + } else if (command.split("\\s")[0].equalsIgnoreCase("buycommand=")) { + //if player uses buycommand [price] [command] + try { + if (plugin.econ != null) { + if (plugin.econ.getBalance(p) >= Double.parseDouble(command.split("\\s")[1])) { + plugin.econ.withdrawPlayer(p, Double.parseDouble(command.split("\\s")[1])); + //execute command under here + String commandp = command; + commandp = commandp.replace("buycommand=", "").trim(); + String price = commandp.split(" ", 2)[0]; + commandp = commandp.split(" ", 2)[1]; + commandTags(p,plugin.papi(p, commandp)); + //if the message is empty don't send + if(!Objects.requireNonNull(plugin.config.getString("config.format.bought")).isEmpty()) { + p.sendMessage(plugin.papi( tag + Objects.requireNonNull(plugin.config.getString("config.format.bought")).replaceAll("%cp-args%", price))); + } + } else { + p.sendMessage(plugin.papi( tag + plugin.config.getString("config.format.needmoney"))); + } + } else { + p.sendMessage(plugin.papi( tag + ChatColor.RED + "Buying Requires Vault and an Economy to work!")); + } + } catch (Exception buyc) { + plugin.debug(buyc); + p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " " + "commands: " + command)); + } + } else if (command.split("\\s")[0].equalsIgnoreCase("teleport=")) { + //if player uses teleport= x y z (optional other player) + if (command.split("\\s").length == 6) { + float x, y, z, yaw, pitch; //pitch is the heads Y axis and yaw is the X axis + x = Float.parseFloat(plugin.papi(p, command.split("\\s")[1])); + y = Float.parseFloat(plugin.papi(p, command.split("\\s")[2])); + z = Float.parseFloat(plugin.papi(p, command.split("\\s")[3])); + yaw = Float.parseFloat(plugin.papi(p, command.split("\\s")[4])); + pitch = Float.parseFloat(plugin.papi(p, command.split("\\s")[5])); + p.teleport(new Location(p.getWorld(), x, y, z, yaw, pitch)); + } else if (command.split("\\s").length <= 4) { + float x, y, z; + x = Float.parseFloat(plugin.papi(p, command.split("\\s")[1])); + y = Float.parseFloat(plugin.papi(p, command.split("\\s")[2])); + z = Float.parseFloat(plugin.papi(p, command.split("\\s")[3])); + p.teleport(new Location(p.getWorld(), x, y, z)); + } else { + try { + Player otherplayer = Bukkit.getPlayer(plugin.papi(p, command.split("\\s")[4])); + float x, y, z; + x = Float.parseFloat(plugin.papi(p, command.split("\\s")[1])); + y = Float.parseFloat(plugin.papi(p, command.split("\\s")[2])); + z = Float.parseFloat(plugin.papi(p, command.split("\\s")[3])); + assert otherplayer != null; + otherplayer.teleport(new Location(otherplayer.getWorld(), x, y, z)); + } catch (Exception tpe) { + p.sendMessage(tag + plugin.config.getString("config.format.notitem")); + } + } + } else if (command.split("\\s")[0].equalsIgnoreCase("stopsound=")) { + //if player uses stopsound= [sound] + try { + p.stopSound(Sound.valueOf(command.split("\\s")[1])); + } catch (Exception ss) { + plugin.debug(ss); + p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " " + "commands: " + command)); + } + } else if (command.split("\\s")[0].equalsIgnoreCase("sudo=")) { + //if player uses sudo= [command] + p.chat(plugin.papi(p, "/" + command.replaceAll("sudo=", "").trim())); + } else { + Bukkit.dispatchCommand(p, plugin.papi(p, command)); + } + } + + public int commandPayWall(Player p, String command) { //return 0 means no funds, 1 is they passed and 2 means paywall is not this command + String tag = plugin.config.getString("config.format.tag") + " "; + if (command.split("\\s")[0].equalsIgnoreCase("paywall=")) { + //if player uses paywall= [price] + try { + if (plugin.econ != null) { + if (plugin.econ.getBalance(p) >= Double.parseDouble(command.split("\\s")[1])) { + plugin.econ.withdrawPlayer(p, Double.parseDouble(command.split("\\s")[1])); + //if the message is empty don't send + if(!plugin.config.getString("config.format.bought").isEmpty()) { + p.sendMessage(plugin.papi( tag + Objects.requireNonNull(plugin.config.getString("config.format.bought")).replaceAll("%cp-args%", command.split("\\s")[1]))); + } + return 1; + } else { + p.sendMessage(plugin.papi( tag + plugin.config.getString("config.format.needmoney"))); + return 0; + } + } else { + p.sendMessage(plugin.papi( tag + ChatColor.RED + "Paying Requires Vault and an Economy to work!")); + return 0; + } + } catch (Exception buyc) { + plugin.debug(buyc); + p.sendMessage(plugin.papi(p, tag + plugin.config.getString("config.format.error") + " " + "commands: " + command)); + return 0; + } + } else if (command.split("\\s")[0].equalsIgnoreCase("tokenpaywall=")) { + //if player uses tokenpaywall= [price] + try { + if (plugin.getServer().getPluginManager().isPluginEnabled("TokenManager")) { + TokenManager api = (TokenManager) Bukkit.getServer().getPluginManager().getPlugin("TokenManager"); + assert api != null; + int balance = Integer.parseInt(Long.toString(api.getTokens(p).orElse(0))); + if (balance >= Double.parseDouble(command.split("\\s")[1])) { + api.removeTokens(p, Long.parseLong(command.split("\\s")[1])); + //if the message is empty don't send + if(!Objects.requireNonNull(plugin.config.getString("config.format.bought")).isEmpty()) { + p.sendMessage(plugin.papi( tag + Objects.requireNonNull(plugin.config.getString("config.format.bought")).replaceAll("%cp-args%", command.split("\\s")[1]))); + } + return 1; + } else { + p.sendMessage(plugin.papi( tag + plugin.config.getString("config.format.needmoney"))); + return 0; + } + } else { + p.sendMessage(plugin.papi( tag + ChatColor.RED + "Paying TokenManager to work!")); + return 0; + } + } catch (Exception buyc) { + plugin.debug(buyc); + p.sendMessage(plugin.papi(p, tag + plugin.config.getString("config.format.error") + " " + "commands: " + command)); + return 0; + } + }else if (command.split("\\s")[0].equalsIgnoreCase("item-paywall=")) { + //if player uses item-paywall= [Material] [Amount] + try { + ItemStack sellItem = new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[1])),Integer.parseInt(command.split("\\s")[2])); + int sellItemAmount = sellItem.getAmount(); + sellItem.setAmount(1); + int removedItem = 0; + for(ItemStack content : p.getInventory().getContents()){ + int contentAmount; + try { + contentAmount = content.getAmount(); + }catch(NullPointerException skip){ + //item is air + continue; + } + content.setAmount(1); + if(content.isSimilar(sellItem)){ + if(sellItemAmount <= contentAmount){ + content.setAmount(contentAmount-sellItemAmount); + p.updateInventory(); + removedItem = 1; + break; + } + } + content.setAmount(contentAmount); + } + if(removedItem == 0){ + p.sendMessage(plugin.papi( tag + plugin.config.getString("config.format.needmoney"))); + }else{ + if(!Objects.requireNonNull(plugin.config.getString("config.format.sold")).isEmpty()) { + p.sendMessage(plugin.papi( tag + plugin.config.getString("config.format.sold"))); + } + } + return removedItem; + } catch (Exception buyc) { + plugin.debug(buyc); + p.sendMessage(plugin.papi(p, tag + plugin.config.getString("config.format.error") + " " + "commands: " + command)); + return 0; + } + }else if (command.split("\\s")[0].equalsIgnoreCase("xp-paywall=")) { + //if player uses xp-paywall= [price] + try { + int balance = p.getLevel(); + if (balance >= Integer.parseInt(command.split("\\s")[1])) { + p.setLevel(p.getLevel() - Integer.parseInt(command.split("\\s")[1])); + //if the message is empty don't send + if(!Objects.requireNonNull(plugin.config.getString("config.format.bought")).isEmpty()) { + p.sendMessage(plugin.papi( tag + Objects.requireNonNull(plugin.config.getString("config.format.bought")).replaceAll("%cp-args%", command.split("\\s")[1]))); + } + return 1; + } else { + p.sendMessage(plugin.papi( tag + plugin.config.getString("config.format.needmoney"))); + return 0; + } + } catch (Exception buyc) { + plugin.debug(buyc); + p.sendMessage(plugin.papi(p, tag + plugin.config.getString("config.format.error") + " " + "commands: " + command)); + return 0; + } + } else { + return 2; + } + } +} diff --git a/src/me/rockyhawk/commandPanels/ClassResources/ExecuteOpenVoids.java b/src/me/rockyhawk/commandPanels/ClassResources/ExecuteOpenVoids.java new file mode 100644 index 0000000..2e9dc16 --- /dev/null +++ b/src/me/rockyhawk/commandPanels/ClassResources/ExecuteOpenVoids.java @@ -0,0 +1,139 @@ +package me.rockyhawk.commandPanels.ClassResources; + +import me.rockyhawk.commandPanels.commandpanels; +import org.bukkit.ChatColor; +import org.bukkit.Sound; +import org.bukkit.command.CommandSender; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.List; +import java.util.Objects; + +public class ExecuteOpenVoids { + commandpanels plugin; + public ExecuteOpenVoids(commandpanels pl) { + this.plugin = pl; + } + + //this is the main method to open a panel + public void openCommandPanel(CommandSender sender, Player p, String panels, YamlConfiguration cf, boolean sendOpenedMessage){ + String tag = plugin.config.getString("config.format.tag") + " "; + if (sender.hasPermission("commandpanel.panel." + cf.getString("panels." + panels + ".perm"))) { + //if the sender has OTHER perms, or if sendOpenedMessage is false, implying it is not for another person + if(sender.hasPermission("commandpanel.other") || !sendOpenedMessage) { + try { + if (cf.contains("panels." + panels + ".disabled-worlds")) { + List disabledWorlds = cf.getStringList("panels." + panels + ".disabled-worlds"); + if (disabledWorlds.contains(p.getWorld().getName())) { + //panel cannot be used in the players world! + if (Objects.requireNonNull(plugin.config.getString("config.disabled-world-message")).equalsIgnoreCase("true")) { + sender.sendMessage(plugin.papi(tag + ChatColor.RED + "Panel is disabled in the world!")); + } + return; + } + } + }catch(NullPointerException offlinePlayer){ + //SKIP because player is offline + sender.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.notitem"))); + return; + } + try { + if (cf.contains("panels." + panels + ".sound-on-open")) { + //play sound when panel is opened + if(!Objects.requireNonNull(cf.getString("panels." + panels + ".sound-on-open")).equalsIgnoreCase("off")) { + try { + p.playSound(p.getLocation(), Sound.valueOf(Objects.requireNonNull(cf.getString("panels." + panels + ".sound-on-open")).toUpperCase()), 1F, 1F); + } catch (Exception s) { + p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " " + "sound-on-open: " + cf.getString("panels." + panels + ".sound-on-open"))); + } + } + } + if (cf.contains("panels." + panels + ".commands-on-open")) { + //execute commands on panel open + try { + List commands = cf.getStringList("panels." + panels + ".commands-on-open"); + for (int i = 0; commands.size() - 1 >= i; i++) { + int val = plugin.commandTags.commandPayWall(p,commands.get(i)); + if(val == 0){ + break; + } + if(val == 2){ + plugin.commandTags.commandTags(p, commands.get(i)); + } + } + }catch(Exception s){ + p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " " + "commands-on-open: " + cf.getString("panels." + panels + ".commands-on-open"))); + } + } + plugin.openGui(panels, p, cf,1,0); + if(sendOpenedMessage) { + sender.sendMessage(plugin.papi( tag + ChatColor.GREEN + "Panel Opened for " + p.getDisplayName())); + } + } catch (Exception r) { + plugin.debug(r); + sender.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.notitem"))); + } + }else{ + sender.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.perms"))); + } + return; + } + sender.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.perms"))); + } + + //this will give a hotbar item to a player + public void giveHotbarItem(CommandSender sender, Player p, String panels, YamlConfiguration cf, boolean sendGiveMessage){ + String tag = plugin.config.getString("config.format.tag") + " "; + if (sender.hasPermission("commandpanel.item." + cf.getString("panels." + panels + ".perm")) && cf.contains("panels." + panels + ".open-with-item")) { + try { + if (cf.contains("panels." + panels + ".disabled-worlds")) { + List disabledWorlds = cf.getStringList("panels." + panels + ".disabled-worlds"); + if (disabledWorlds.contains(p.getWorld().getName())) { + //panel cannot be used in the players world! + if (Objects.requireNonNull(plugin.config.getString("config.disabled-world-message")).equalsIgnoreCase("true")) { + sender.sendMessage(plugin.papi(tag + ChatColor.RED + "Panel is disabled in the world!")); + } + return; + } + } + }catch(NullPointerException offlinePlayer){ + //SKIP because player is offline + sender.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.notitem"))); + return; + } + ItemStack s; + try { + s = plugin.itemCreate.makeItemFromConfig(Objects.requireNonNull(cf.getConfigurationSection("panels." + panels + ".open-with-item")), p, false, true); + }catch(Exception n){ + sender.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " open-with-item: material")); + return; + } + plugin.setName(s, cf.getString("panels." + panels + ".open-with-item.name"), cf.getStringList("panels." + panels + ".open-with-item.lore"),p,false, true); + //if the sender has OTHER perms, or if sendGiveMessage is false, implying it is not for another person + if(sender.hasPermission("commandpanel.other") || !sendGiveMessage) { + try { + if(cf.contains("panels." + panels + ".open-with-item.stationary")) { + p.getInventory().setItem(Integer.parseInt(Objects.requireNonNull(cf.getString("panels." + panels + ".open-with-item.stationary"))), s); + }else{ + p.getInventory().addItem(s); + } + if(sendGiveMessage) { + sender.sendMessage(plugin.papi( tag + ChatColor.GREEN + "Item Given to " + p.getDisplayName())); + } + } catch (Exception r) { + sender.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.notitem"))); + } + }else{ + sender.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.perms"))); + } + return; + } + if (!cf.contains("panels." + panels + ".open-with-item")) { + sender.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.noitem"))); + return; + } + sender.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.perms"))); + } +} diff --git a/src/me/rockyhawk/commandPanels/GetCustomHeads.java b/src/me/rockyhawk/commandPanels/ClassResources/GetCustomHeads.java similarity index 96% rename from src/me/rockyhawk/commandPanels/GetCustomHeads.java rename to src/me/rockyhawk/commandPanels/ClassResources/GetCustomHeads.java index 6e9c42d..708d254 100644 --- a/src/me/rockyhawk/commandPanels/GetCustomHeads.java +++ b/src/me/rockyhawk/commandPanels/ClassResources/GetCustomHeads.java @@ -1,8 +1,9 @@ -package me.rockyhawk.commandPanels; +package me.rockyhawk.commandPanels.ClassResources; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import com.mojang.authlib.properties.PropertyMap; +import me.rockyhawk.commandPanels.commandpanels; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; diff --git a/src/me/rockyhawk/commandPanels/ClassResources/ItemCreation.java b/src/me/rockyhawk/commandPanels/ClassResources/ItemCreation.java new file mode 100644 index 0000000..3967d95 --- /dev/null +++ b/src/me/rockyhawk/commandPanels/ClassResources/ItemCreation.java @@ -0,0 +1,354 @@ +package me.rockyhawk.commandPanels.ClassResources; + +import me.arcaniax.hdb.api.HeadDatabaseAPI; +import me.rockyhawk.commandPanels.commandpanels; +import org.bukkit.*; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.*; +import org.bukkit.map.MapCanvas; +import org.bukkit.map.MapRenderer; +import org.bukkit.map.MapView; +import org.bukkit.potion.PotionData; +import org.bukkit.potion.PotionType; + +import javax.swing.*; +import java.io.File; +import java.util.Objects; +import java.util.UUID; + +public class ItemCreation { + commandpanels plugin; + public ItemCreation(commandpanels pl) { + plugin = pl; + } + + public ItemStack makeItemFromConfig(ConfigurationSection itemSection, Player p, boolean placeholders, boolean colours){ + String tag = plugin.config.getString("config.format.tag") + " "; + String material = itemSection.getString("material"); + try { + if (Objects.requireNonNull(itemSection.getString("material")).equalsIgnoreCase("AIR")) { + return null; + } + }catch(NullPointerException e){ + plugin.debug(e); + p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " material: could not load material!")); + return null; + } + ItemStack s; + String mat; + String matskull; + String skullname; + //this will convert the %cp-player-online-1-find% into cps= NAME + assert material != null; + if (material.contains("%cp-player-online-")) { + int start = material.indexOf("%cp-player-online-"); + int end = material.lastIndexOf("-find%"); + String playerLocation = material.substring(start, end).replace("%cp-player-online-", ""); + Player[] playerFind = Bukkit.getOnlinePlayers().toArray(new Player[Bukkit.getOnlinePlayers().size()]); + if (Integer.parseInt(playerLocation) > playerFind.length) { + material = material.replace(material.substring(start, end) + "-find%", "cps= " + plugin.config.getString("config.format.offlineHeadValue")); + } else { + material = material.replace(material.substring(start, end) + "-find%", "cpo= " + playerFind[Integer.parseInt(playerLocation) - 1].getName()); + //cpo is to get the skull of the player online. It is fine since the plugin knows the player is online + } + } + try { + mat = material.toUpperCase(); + matskull = material; + skullname = "no skull"; + if (matskull.split("\\s")[0].toLowerCase().equals("cps=") || matskull.split("\\s")[0].toLowerCase().equals("cpo=")) { + skullname = p.getUniqueId().toString(); + mat = "PLAYER_HEAD"; + } + + if (matskull.split("\\s")[0].toLowerCase().equals("hdb=")) { + skullname = "hdb"; + mat = "PLAYER_HEAD"; + } + + s = new ItemStack(Objects.requireNonNull(Material.matchMaterial(mat)), 1); + + if (!skullname.equals("no skull") && !skullname.equals("hdb") && !matskull.split("\\s")[0].equalsIgnoreCase("cpo=")) { + try { + SkullMeta meta; + if (matskull.split("\\s")[1].equalsIgnoreCase("self")) { + //if cps= self + meta = (SkullMeta) s.getItemMeta(); + try { + assert meta != null; + meta.setOwningPlayer(Bukkit.getOfflinePlayer(UUID.fromString(skullname))); + } catch (Exception var23) { + p.sendMessage(plugin.papi( tag + plugin.config.getString("config.format.error") + " material: cps= self")); + plugin.debug(var23); + } + s.setItemMeta(meta); + }else if (plugin.papiNoColour(p,matskull.split("\\s")[1]).length() <= 16) { + //if cps= username + s = plugin.customHeads.getPlayerHead(plugin.papiNoColour(p,matskull.split("\\s")[1])); + } else { + //custom data cps= base64 + s = plugin.customHeads.getCustomHead(plugin.papiNoColour(p,matskull.split("\\s")[1])); + } + } catch (Exception var32) { + p.sendMessage(plugin.papi( tag + plugin.config.getString("config.format.error") + " head material: Could not load skull")); + plugin.debug(var32); + } + } + if (!skullname.equals("no skull") && matskull.split("\\s")[0].equalsIgnoreCase("cpo=")) { + SkullMeta cpoMeta = (SkullMeta) s.getItemMeta(); + assert cpoMeta != null; + cpoMeta.setOwningPlayer(Bukkit.getOfflinePlayer(Objects.requireNonNull(Bukkit.getPlayer(matskull.split("\\s")[1])).getUniqueId())); + s.setItemMeta(cpoMeta); + } + if (skullname.equals("hdb")) { + if (plugin.getServer().getPluginManager().isPluginEnabled("HeadDatabase")) { + HeadDatabaseAPI api; + api = new HeadDatabaseAPI(); + + try { + s = api.getItemHead(matskull.split("\\s")[1].trim()); + } catch (Exception var22) { + p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " hdb: could not load skull!")); + plugin.debug(var22); + } + } else { + p.sendMessage(plugin.papi(tag + "Download HeadDatabaseHook from Spigot to use this feature!")); + } + } + if (itemSection.contains("map")) { + /* + This will do maps from custom images + the maps will be in the 'maps' folder, so + CommandPanels/maps/image.png <-- here + Commandpanels/panels/example.yml + The images should be 128x128 + */ + try{ + @SuppressWarnings("deprecation") + MapView map = Bukkit.getServer().getMap(0); + try { + map.getRenderers().clear(); + map.setCenterX(30000000); + map.setCenterZ(30000000); + }catch(NullPointerException ignore){ + //ignore catch + } + if(new File(plugin.getDataFolder().getPath() + File.separator + "maps" + File.separator + itemSection.getString("map")).exists()) { + map.addRenderer(new MapRenderer() { + public void render(MapView view, MapCanvas canvas, Player player) { + canvas.drawImage(0, 0, new ImageIcon(plugin.getDataFolder().getPath() + File.separator + "maps" + File.separator + itemSection.getString("map")).getImage()); + } + }); + MapMeta meta = (MapMeta) s.getItemMeta(); + meta.setMapView(map); + s.setItemMeta(meta); + }else{ + p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " map: File not found.")); + } + }catch(Exception map){ + p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " map: " + itemSection.getString("map"))); + plugin.debug(map); + } + } + if (itemSection.contains("enchanted")) { + try { + ItemMeta EnchantMeta; + if (Objects.requireNonNull(itemSection.getString("enchanted")).trim().equalsIgnoreCase("true")) { + EnchantMeta = s.getItemMeta(); + assert EnchantMeta != null; + EnchantMeta.addEnchant(Enchantment.KNOCKBACK, 1, false); + EnchantMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + s.setItemMeta(EnchantMeta); + } else if (!Objects.requireNonNull(itemSection.getString("enchanted")).trim().equalsIgnoreCase("false")) { + EnchantMeta = s.getItemMeta(); + assert EnchantMeta != null; + EnchantMeta.addEnchant(Objects.requireNonNull(Enchantment.getByKey(NamespacedKey.minecraft(Objects.requireNonNull(itemSection.getString("enchanted")).split("\\s")[0].toLowerCase()))), Integer.parseInt(Objects.requireNonNull(itemSection.getString("enchanted")).split("\\s")[1]), true); + s.setItemMeta(EnchantMeta); + } + } catch (Exception ench) { + p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " enchanted: " + itemSection.getString("enchanted"))); + plugin.debug(ench); + } + } + if (itemSection.contains("customdata")) { + ItemMeta customMeta = s.getItemMeta(); + assert customMeta != null; + customMeta.setCustomModelData(Integer.parseInt(Objects.requireNonNull(itemSection.getString("customdata")))); + s.setItemMeta(customMeta); + } + if (itemSection.contains("leatherarmor")) { + //if the item is leather armor, change the colour to this + try { + if (s.getType() == Material.LEATHER_BOOTS || s.getType() == Material.LEATHER_LEGGINGS || s.getType() == Material.LEATHER_CHESTPLATE || s.getType() == Material.LEATHER_HELMET) { + LeatherArmorMeta leatherMeta = (LeatherArmorMeta) s.getItemMeta(); + String colourCode = itemSection.getString("leatherarmor"); + assert colourCode != null; + if (!colourCode.contains(",")) { + //use a color name + assert leatherMeta != null; + leatherMeta.setColor(plugin.colourCodes.get(colourCode.toUpperCase())); + } else { + //use RGB sequence + int[] colorRGB = {255, 255, 255}; + int count = 0; + for (String colourNum : colourCode.split(",")) { + colorRGB[count] = Integer.parseInt(colourNum); + count += 1; + } + assert leatherMeta != null; + leatherMeta.setColor(Color.fromRGB(colorRGB[0], colorRGB[1], colorRGB[2])); + } + s.setItemMeta(leatherMeta); + } + } catch (Exception er) { + //don't colour the armor + plugin.debug(er); + p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " leatherarmor: " + itemSection.getString("leatherarmor"))); + } + } + if (itemSection.contains("potion")) { + //if the item is a potion, give it an effect + try { + PotionMeta potionMeta = (PotionMeta)s.getItemMeta(); + String effectType = itemSection.getString("potion"); + assert potionMeta != null; + assert effectType != null; + potionMeta.setBasePotionData(new PotionData(PotionType.valueOf(effectType.toUpperCase()))); + potionMeta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); + s.setItemMeta(potionMeta); + } catch (Exception er) { + //don't add the effect + plugin.debug(er); + p.sendMessage(plugin.papi(tag + ChatColor.RED + plugin.config.getString("config.format.error") + " potion: " + itemSection.getString("potion"))); + } + } + if (itemSection.contains("damage")) { + //change the damage amount (placeholders accepted) + try { + Damageable itemDamage = (Damageable) s.getItemMeta(); + itemDamage.setDamage(Integer.parseInt(Objects.requireNonNull(plugin.papi(p, itemSection.getString("damage"))))); + s.setItemMeta((ItemMeta) itemDamage); + }catch(Exception e){ + plugin.debug(e); + p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " damage: " + itemSection.getString("damage"))); + } + } + if (itemSection.contains("stack")) { + //change the stack amount (placeholders accepted) + s.setAmount(Integer.parseInt(Objects.requireNonNull(plugin.papi(p,itemSection.getString("stack"))))); + } + } catch (IllegalArgumentException | NullPointerException var33) { + plugin.debug(var33); + p.sendMessage(plugin.papi(tag + plugin.config.getString("config.format.error") + " material: " + itemSection.getString("material"))); + return null; + } + plugin.setName(s, itemSection.getString("name"), itemSection.getStringList("lore"), p, placeholders, colours); + return s; + } + + //hasperm hasvalue, etc sections will be done here + public String hasSection(ConfigurationSection cf, Player p){ + if (cf.contains("hasvalue")) { + //this will do the hasvalue without any numbers + boolean outputValue = true; + //outputValue will default to true + if (cf.contains("hasvalue.output")) { + //if output is true, and values match it will be this item, vice versa + outputValue = cf.getBoolean("hasvalue.output"); + } + String value = cf.getString("hasvalue.value"); + String compare = ChatColor.stripColor(plugin.papi(p,plugin.setCpPlaceholders(p,cf.getString("hasvalue.compare")))); + if (compare.equals(value) == outputValue) { + //onOpen being 3 means it is the editor panel.. hasvalue items cannot be included to avoid item breaking + String section = hasSection(Objects.requireNonNull(cf.getConfigurationSection("hasvalue")), p); + //string section, it executes itself to check for subsections + return ".hasvalue" + section; + } + //loop through possible hasvalue 1,2,3,etc + for (int count = 0; cf.getKeys(false).size() > count; count++) { + if (cf.contains("hasvalue" + count)) { + outputValue = true; + //outputValue will default to true + if (cf.contains("hasvalue" + count + ".output")) { + //if output is true, and values match it will be this item, vice versa + outputValue = cf.getBoolean("hasvalue" + count + ".output"); + } + value = cf.getString("hasvalue" + count + ".value"); + compare = ChatColor.stripColor(plugin.papi(p,plugin.setCpPlaceholders(p,cf.getString("hasvalue" + count + ".compare")))); + if (compare.equals(value) == outputValue) { + //onOpen being 3 means it is the editor panel.. hasvalue items cannot be included to avoid item breaking + String section = hasSection(Objects.requireNonNull(cf.getConfigurationSection("hasvalue" + count)), p); + //string section, it executes itself to check for subsections + return ".hasvalue" + count + section; + } + } + } + } + if (cf.contains("hasgreater")) { + //this will do the hasgreater without any numbers + boolean outputValue = true; + //outputValue will default to true + if (cf.contains("hasgreater.output")) { + //if output is true, and values match it will be this item, vice versa + outputValue = cf.getBoolean("hasgreater.output"); + } + int value = cf.getInt("hasgreater.value"); + double compare = Double.parseDouble(ChatColor.stripColor(plugin.papi(p,plugin.setCpPlaceholders(p,cf.getString("hasgreater.compare"))))); + if ((compare >= value) == outputValue) { + //onOpen being 3 means it is the editor panel.. hasgreater items cannot be included to avoid item breaking + String section = hasSection(Objects.requireNonNull(cf.getConfigurationSection("hasgreater")), p); + return ".hasgreater" + section; + } + //loop through possible hasgreater 1,2,3,etc + for (int count = 0; cf.getKeys(false).size() > count; count++) { + if (cf.contains("hasgreater" + count)) { + outputValue = true; + //outputValue will default to true + if (cf.contains("hasgreater" + count + ".output")) { + //if output is true, and values match it will be this item, vice versa + outputValue = cf.getBoolean("hasgreater" + count + ".output"); + } + value = cf.getInt("hasgreater" + count + ".value"); + compare = Double.parseDouble(ChatColor.stripColor(plugin.papi(p,plugin.setCpPlaceholders(p,cf.getString("hasgreater" + count + ".compare"))))); + if ((compare >= value) == outputValue) { + //onOpen being 3 means it is the editor panel.. hasgreater items cannot be included to avoid item breaking + String section = hasSection(Objects.requireNonNull(cf.getConfigurationSection("hasgreater" + count)), p); + return ".hasgreater" + count + section; + } + } + } + } + if (cf.contains("hasperm")) { + //this will do hasperm with no numbers + boolean outputValue = true; + //outputValue will default to true + if (cf.contains("output")) { + //if output is true, and values match it will be this item, vice versa + outputValue = cf.getBoolean("output"); + } + if (p.hasPermission(Objects.requireNonNull(cf.getString("hasperm.perm"))) == outputValue) { + String section = hasSection(Objects.requireNonNull(cf.getConfigurationSection("hasperm")), p); + return ".hasperm" + section; + } + for(int count = 0; cf.getKeys(false).size() > count; count++){ + if (cf.contains("hasperm" + count) && cf.contains("hasperm" + count + ".perm")) { + outputValue = true; + //outputValue will default to true + if (cf.contains("hasperm" + count + ".output")) { + //if output is true, and values match it will be this item, vice versa + outputValue = cf.getBoolean("hasperm" + count + ".output"); + } + if (p.hasPermission(Objects.requireNonNull(cf.getString("hasperm" + count + ".perm"))) == outputValue) { + String section = hasSection(Objects.requireNonNull(cf.getConfigurationSection("hasperm" + count)), p); + return ".hasperm" + count + section; + } + } + } + } + return ""; + } +} diff --git a/src/me/rockyhawk/commandPanels/ClassResources/OpenEditorGuis.java b/src/me/rockyhawk/commandPanels/ClassResources/OpenEditorGuis.java new file mode 100644 index 0000000..e37b5fd --- /dev/null +++ b/src/me/rockyhawk/commandPanels/ClassResources/OpenEditorGuis.java @@ -0,0 +1,485 @@ +package me.rockyhawk.commandPanels.ClassResources; + +import me.arcaniax.hdb.api.HeadDatabaseAPI; +import me.rockyhawk.commandPanels.commandpanels; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.SkullMeta; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class OpenEditorGuis { + commandpanels plugin; + public OpenEditorGuis(commandpanels pl) { + plugin = pl; + } + + public void openEditorGui(Player p, int pageChange) { + Inventory i = Bukkit.createInventory(null, 54, "Command Panels Editor"); + ArrayList panelNames = new ArrayList(); //all panels from ALL files (panel names) + ArrayList panelTitles = new ArrayList(); //all panels from ALL files (panel titles) + ArrayList panelItems = new ArrayList(); //all panels from ALL files (panel materials) + try { + for(String fileName : plugin.panelFiles) { //will loop through all the files in folder + YamlConfiguration temp = YamlConfiguration.loadConfiguration(new File(plugin.panelsf + File.separator + fileName)); + String key; + if (!plugin.checkPanels(temp)) { + continue; + } + for (String s : Objects.requireNonNull(temp.getConfigurationSection("panels")).getKeys(false)) { + key = s; + panelNames.add(plugin.papi( key)); + panelTitles.add(plugin.papi( Objects.requireNonNull(temp.getString("panels." + key + ".title")))); + if (temp.contains("panels." + key + ".open-with-item.material")) { + panelItems.add(plugin.itemCreate.makeItemFromConfig(temp.getConfigurationSection("panels." + key + ".open-with-item"), p, false, true)); + } else { + panelItems.add(new ItemStack(Material.FILLED_MAP)); + } + } + } + } catch (Exception fail) { + //could not fetch all panel names (probably no panels exist) + plugin.debug(fail); + return; + } + + int pageNumber = 1; + if (p.getOpenInventory().getTitle().equals("Command Panels Editor")) { + pageNumber = Integer.parseInt(ChatColor.stripColor(Objects.requireNonNull(Objects.requireNonNull(p.getOpenInventory().getItem(49)).getItemMeta()).getDisplayName()).replace("Page ", "")); + } + //will add the difference + pageNumber = pageNumber + pageChange; + if (pageNumber <= 0) { + //double check page number IS NOT under 1 + pageNumber = 1; + } + //get amount of pages total + int pagesAmount = (int) Math.ceil(panelNames.size() / 45.0); + //make all the bottom bar items + ItemStack temp; + temp = new ItemStack(Material.SUNFLOWER, 1); + plugin.setName(temp, ChatColor.WHITE + "Page " + pageNumber, null, p, true, true); + i.setItem(49, temp); + temp = new ItemStack(Material.BARRIER, 1); + plugin.setName(temp, ChatColor.RED + "Exit Menu", null, p, true, true); + i.setItem(45, temp); + temp = new ItemStack(Material.BOOK, 1); + List lore = new ArrayList(); + lore.add(ChatColor.GRAY + "- Click on a panel to edit items."); + lore.add(ChatColor.GRAY + "- Right click on a panel to edit settings."); + lore.add(ChatColor.GRAY + "- To edit an item in a panel, shift click"); + lore.add(ChatColor.GRAY + " on the item of choice."); + lore.add(ChatColor.GRAY + "- When entering a value,"); + lore.add(ChatColor.GRAY + " type 'remove' to set a"); + lore.add(ChatColor.GRAY + " value to default, and use"); + lore.add(ChatColor.GRAY + " '" + plugin.config.getString("config.input-cancel") + "' to cancel."); + plugin.setName(temp, ChatColor.WHITE + "Panel Editor Tips", lore, p, true, true); + i.setItem(53, temp); + if (pageNumber != 1) { + //only show previous page button if number is not one + temp = new ItemStack(Material.PAPER, 1); + plugin.setName(temp, ChatColor.WHITE + "Previous Page", null, p, true, true); + i.setItem(48, temp); + } + if (pageNumber < pagesAmount) { + //if page number is under pages amount + temp = new ItemStack(Material.PAPER, 1); + plugin.setName(temp, ChatColor.WHITE + "Next Page", null, p, true, true); + i.setItem(50, temp); + } + int count = 0; + int slot = 0; + lore.clear(); + for (String panelName : panelNames) { + //count is +1 because count starts at 0 not 1 + if ((pageNumber * 45 - 45) < (count + 1) && (pageNumber * 45) > (count)) { + temp = panelItems.get(count); + plugin.setName(temp, ChatColor.WHITE + panelName, lore, p, false, true); + i.setItem(slot, temp); + slot += 1; + } + count += 1; + } + p.openInventory(i); + } + + public void openPanelSettings(Player p, String panelName, YamlConfiguration cf) { + Inventory i = Bukkit.createInventory(null, 45, "Panel Settings: " + panelName); + List lore = new ArrayList(); + ItemStack temp; + //remove if the player already had a string from previously + for (int o = 0; plugin.editorInputStrings.size() > o; o++) { + if (plugin.editorInputStrings.get(o)[0].equals(p.getName())) { + plugin.editorInputStrings.remove(o); + o = o - 1; + } + } + //make all the items + temp = new ItemStack(Material.WRITABLE_BOOK, 1); + lore.add(ChatColor.GRAY + "Permission required to open panel"); + lore.add(ChatColor.GRAY + "commandpanel.panel.[insert]"); + if (cf.contains("panels." + panelName + ".perm")) { + lore.add(ChatColor.WHITE + "--------------------------------"); + lore.add(ChatColor.WHITE + "commandpanel.panel." + cf.getString("panels." + panelName + ".perm")); + } + plugin.setName(temp, ChatColor.WHITE + "Panel Permission", lore, p,true, true); + i.setItem(1, temp); + + temp = new ItemStack(Material.NAME_TAG, 1); + lore.clear(); + lore.add(ChatColor.GRAY + "Title of the Panel"); + if (cf.contains("panels." + panelName + ".title")) { + lore.add(ChatColor.WHITE + "------------------"); + lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".title")); + } + plugin.setName(temp, ChatColor.WHITE + "Panel Title", lore, p,true, true); + i.setItem(3, temp); + + temp = new ItemStack(Material.JUKEBOX, 1); + lore.clear(); + lore.add(ChatColor.GRAY + "Sound when opening panel"); + if (cf.contains("panels." + panelName + ".sound-on-open")) { + lore.add(ChatColor.WHITE + "------------------------"); + lore.add(ChatColor.WHITE + Objects.requireNonNull(cf.getString("panels." + panelName + ".sound-on-open")).toUpperCase()); + } + plugin.setName(temp, ChatColor.WHITE + "Panel Sound", lore, p,true, true); + i.setItem(5, temp); + + temp = new ItemStack(Material.IRON_DOOR, 1); + lore.clear(); + lore.add(ChatColor.GRAY + "Custom command to open panel"); + if (cf.contains("panels." + panelName + ".command")) { + lore.add(ChatColor.WHITE + "----------------------------"); + lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".command")); + } + plugin.setName(temp, ChatColor.WHITE + "Panel Command", lore, p,true, true); + i.setItem(7, temp); + + temp = new ItemStack(Material.LAVA_BUCKET, 1); + lore.clear(); + lore.add(ChatColor.DARK_RED + "Permanently delete Panel"); + plugin.setName(temp, ChatColor.RED + "Delete Panel", lore, p,true, true); + i.setItem(21, temp); + + temp = new ItemStack(Material.PISTON, 1); + lore.clear(); + lore.add(ChatColor.GRAY + "How many rows the panel will be"); + lore.add(ChatColor.GRAY + "choose an integer from 1 to 6"); + plugin.setName(temp, ChatColor.WHITE + "Panel Rows", lore, p,true, true); + i.setItem(23, temp); + + temp = new ItemStack(Material.BLACK_STAINED_GLASS, 1); + lore.clear(); + lore.add(ChatColor.GRAY + "Fill empty slots with an item"); + if (cf.contains("panels." + panelName + ".empty")) { + lore.add(ChatColor.WHITE + "-----------------------"); + lore.add(ChatColor.WHITE + Objects.requireNonNull(cf.getString("panels." + panelName + ".empty")).toUpperCase()); + } + plugin.setName(temp, ChatColor.WHITE + "Panel Empty Item", lore, p,true, true); + i.setItem(13, temp); + + temp = new ItemStack(Material.COMMAND_BLOCK, 1); + lore.clear(); + lore.add(ChatColor.GRAY + "Execute commands when opening"); + lore.add(ChatColor.GRAY + "- Left click to add command"); + lore.add(ChatColor.GRAY + "- Right click to remove command"); + if (cf.contains("panels." + panelName + ".commands-on-open")) { + lore.add(ChatColor.WHITE + "-----------------------------"); + int count = 1; + for (String tempLore : cf.getStringList("panels." + panelName + ".commands-on-open")) { + lore.add(ChatColor.WHITE + Integer.toString(count) + ") " + tempLore); + count += 1; + } + } + plugin.setName(temp, ChatColor.WHITE + "Panel Commands", lore, p,true, true); + i.setItem(15, temp); + + temp = new ItemStack(Material.ITEM_FRAME, 1); + lore.clear(); + lore.add(ChatColor.GRAY + "Code name to open panel"); + lore.add(ChatColor.GRAY + "/cp [name]"); + lore.add(ChatColor.WHITE + "-----------------------"); + lore.add(ChatColor.WHITE + panelName); + plugin.setName(temp, ChatColor.WHITE + "Panel Name", lore, p,true, true); + i.setItem(11, temp); + + temp = new ItemStack(Material.BARRIER, 1); + plugin.setName(temp, ChatColor.RED + "Back", null, p,true, true); + i.setItem(18, temp); + + //This will create a wall of glass panes, separating panel settings with hotbar settings + temp = new ItemStack(Material.BLACK_STAINED_GLASS_PANE, 1); + plugin.setName(temp, ChatColor.WHITE + "", null, p,false, true); + for(int d = 27; d < 36; d++){ + i.setItem(d, temp); + } + //This is the items for hotbar items (open-with-item) + boolean hotbarItems = false; + + if(cf.contains("panels." + panelName + ".open-with-item.material")){ + hotbarItems = true; + temp = plugin.itemCreate.makeItemFromConfig(cf.getConfigurationSection("panels." + panelName + ".open-with-item"), p, false, true); + }else{ + temp = new ItemStack(Material.REDSTONE_BLOCK, 1); + } + lore.clear(); + lore.add(ChatColor.GRAY + "Current Item"); + if (cf.contains("panels." + panelName + ".open-with-item.material")) { + lore.add(ChatColor.WHITE + "-----------------------"); + lore.add(ChatColor.WHITE + Objects.requireNonNull(cf.getString("panels." + panelName + ".open-with-item.material")).toUpperCase()); + }else{ + lore.add(ChatColor.WHITE + "-----------------------"); + lore.add(ChatColor.RED + "DISABLED"); + } + plugin.setName(temp, ChatColor.WHITE + "Panel Hotbar Item", lore, p,true, true); + i.setItem(40, temp); + + if(hotbarItems) { + temp = new ItemStack(Material.NAME_TAG, 1); + lore.clear(); + lore.add(ChatColor.GRAY + "Name for Hotbar item"); + if (cf.contains("panels." + panelName + ".open-with-item.name")) { + lore.add(ChatColor.WHITE + "----------"); + lore.add(ChatColor.WHITE + Objects.requireNonNull(cf.getString("panels." + panelName + ".open-with-item.name"))); + } + plugin.setName(temp, ChatColor.WHITE + "Hotbar Item Name", lore, p, true, true); + i.setItem(38, temp); + + temp = new ItemStack(Material.SPRUCE_SIGN, 1); + lore.clear(); + lore.add(ChatColor.GRAY + "Display a lore under the Hotbar item"); + lore.add(ChatColor.GRAY + "- Left click to add lore"); + lore.add(ChatColor.GRAY + "- Right click to remove lore"); + if (cf.contains("panels." + panelName + ".open-with-item.lore")) { + lore.add(ChatColor.WHITE + "-------------------------------"); + int count = 1; + for (String tempLore : cf.getStringList("panels." + panelName + ".open-with-item.lore")) { + lore.add(ChatColor.WHITE + Integer.toString(count) + ") " + tempLore); + count += 1; + } + } + plugin.setName(temp, ChatColor.WHITE + "Hotbar Lore", lore, p,true, true); + i.setItem(36, temp); + + temp = new ItemStack(Material.BEDROCK, 1); + lore.clear(); + lore.add(ChatColor.GRAY + "Hotbar location for the item"); + lore.add(ChatColor.GRAY + "choose a number from 1 to 9"); + if (cf.contains("panels." + panelName + ".open-with-item.stationary")) { + lore.add(ChatColor.WHITE + "-------------------------"); + //in the editor, change the value of 0-8 to 1-9 for simplicity + int location = cf.getInt("panels." + panelName + ".open-with-item.stationary") + 1; + lore.add(ChatColor.WHITE + String.valueOf(location)); + } + plugin.setName(temp, ChatColor.WHITE + "Hotbar Item Location", lore, p, true, true); + i.setItem(42, temp); + + temp = new ItemStack(Material.BOOK, 1); + lore.clear(); + lore.add(ChatColor.GRAY + "- To refresh changes use"); + lore.add(ChatColor.GRAY + " /cp " + panelName + " item"); + lore.add(ChatColor.GRAY + "- Hotbar items will need a"); + lore.add(ChatColor.GRAY + " name to work properly."); + plugin.setName(temp, ChatColor.WHITE + "Hotbar Item Tips", lore, p, true, true); + i.setItem(44, temp); + } + + p.openInventory(i); + } + + public void openItemSettings(Player p, String panelName, YamlConfiguration cf, int itemNumber) { + Inventory i = Bukkit.createInventory(null, 36, "Item Settings: " + panelName); + List lore = new ArrayList(); + ItemStack temp; + //remove if the player already had a string from previously + for (int o = 0; plugin.editorInputStrings.size() > o; o++) { + if (plugin.editorInputStrings.get(o)[0].equals(p.getName())) { + plugin.editorInputStrings.remove(o); + o = o - 1; + } + } + //make all the items + temp = new ItemStack(Material.NAME_TAG, 1); + lore.add(ChatColor.GRAY + "Display name of the item in the Panel"); + if (cf.contains("panels." + panelName + ".item." + itemNumber + ".name")) { + if (!Objects.equals(cf.getString("panels." + panelName + ".item." + itemNumber + ".name"), "")) { + lore.add(ChatColor.WHITE + "--------------------------------"); + lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".item." + itemNumber + ".name")); + } + } + plugin.setName(temp, ChatColor.WHITE + "Item Name", lore, p,true, true); + i.setItem(1, temp); + + temp = new ItemStack(Material.COMMAND_BLOCK, 1); + lore.clear(); + lore.add(ChatColor.GRAY + "Execute commands when item is clicked"); + lore.add(ChatColor.GRAY + "- Left click to add command"); + lore.add(ChatColor.GRAY + "- Right click to remove command"); + if (cf.contains("panels." + panelName + ".item." + itemNumber + ".commands")) { + lore.add(ChatColor.WHITE + "-----------------------------"); + int count = 1; + for (String tempLore : cf.getStringList("panels." + panelName + ".item." + itemNumber + ".commands")) { + lore.add(ChatColor.WHITE + Integer.toString(count) + ") " + tempLore); + count += 1; + } + } + plugin.setName(temp, ChatColor.WHITE + "Item Commands", lore, p,true, true); + i.setItem(3, temp); + + temp = new ItemStack(Material.EXPERIENCE_BOTTLE, 1); + lore.clear(); + lore.add(ChatColor.GRAY + "Display enchantment of the item in the Panel"); + if (cf.contains("panels." + panelName + ".item." + itemNumber + ".enchanted")) { + if (!Objects.equals(cf.getString("panels." + panelName + ".item." + itemNumber + ".name"), "")) { + lore.add(ChatColor.WHITE + "--------------------------------"); + lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".item." + itemNumber + ".enchanted")); + } + } else { + lore.add(ChatColor.WHITE + "--------------------------------"); + lore.add(ChatColor.WHITE + "false"); + } + plugin.setName(temp, ChatColor.WHITE + "Item Enchantment", lore, p,true, true); + i.setItem(5, temp); + + temp = new ItemStack(Material.POTION, 1); + lore.clear(); + lore.add(ChatColor.GRAY + "Display potion effect of the item in the Panel"); + if (cf.contains("panels." + panelName + ".item." + itemNumber + ".potion")) { + if (!Objects.equals(cf.getString("panels." + panelName + ".item." + itemNumber + ".potion"), "")) { + lore.add(ChatColor.WHITE + "--------------------------------"); + lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".item." + itemNumber + ".potion")); + } + } + plugin.setName(temp, ChatColor.WHITE + "Item Potion Effect", lore, p,true, true); + i.setItem(7, temp); + + temp = new ItemStack(Material.SPRUCE_SIGN, 1); + lore.clear(); + lore.add(ChatColor.GRAY + "Display a lore under the item name"); + lore.add(ChatColor.GRAY + "- Left click to add lore line"); + lore.add(ChatColor.GRAY + "- Right click to remove lore line"); + if (cf.contains("panels." + panelName + ".item." + itemNumber + ".lore")) { + lore.add(ChatColor.WHITE + "-----------------------------"); + int count = 1; + for (String tempLore : cf.getStringList("panels." + panelName + ".item." + itemNumber + ".lore")) { + lore.add(ChatColor.WHITE + Integer.toString(count) + ") " + tempLore); + count += 1; + } + } + plugin.setName(temp, ChatColor.WHITE + "Item Lores", lore, p, true, true); + i.setItem(19, temp); + + temp = new ItemStack(Material.ITEM_FRAME, 2); + lore.clear(); + lore.add(ChatColor.GRAY + "How many of the item will be stacked"); + if (cf.contains("panels." + panelName + ".item." + itemNumber + ".stack")) { + if (!Objects.equals(cf.getString("panels." + panelName + ".item." + itemNumber + ".stack"), "")) { + try { + temp.setAmount(Integer.parseInt(Objects.requireNonNull(cf.getString("panels." + panelName + ".item." + itemNumber + ".stack")))); + } catch (Exception ignored) { + } + lore.add(ChatColor.WHITE + "--------------------------------"); + lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".item." + itemNumber + ".stack")); + } + } + plugin.setName(temp, ChatColor.WHITE + "Item Stack Size", lore, p, true, true); + i.setItem(21, temp); + + temp = new ItemStack(Material.ANVIL, 1); + lore.clear(); + lore.add(ChatColor.GRAY + "Add Custom Model Data here"); + if (cf.contains("panels." + panelName + ".item." + itemNumber + ".customdata")) { + if (!Objects.equals(cf.getString("panels." + panelName + ".item." + itemNumber + ".customdata"), "")) { + lore.add(ChatColor.WHITE + "--------------------------------"); + lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".item." + itemNumber + ".customdata")); + } + } + plugin.setName(temp, ChatColor.WHITE + "Custom Model Data", lore, p, true, true); + i.setItem(23, temp); + + temp = new ItemStack(Material.LEATHER_HELMET, 1); + lore.clear(); + lore.add(ChatColor.GRAY + "Choose a colour for the armor"); + lore.add(ChatColor.GRAY + "use r,g,b or a spigot API color"); + if (cf.contains("panels." + panelName + ".item." + itemNumber + ".leatherarmor")) { + if (!Objects.equals(cf.getString("panels." + panelName + ".item." + itemNumber + ".leatherarmor"), "")) { + lore.add(ChatColor.WHITE + "--------------------------------"); + lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".item." + itemNumber + ".leatherarmor")); + } + } + plugin.setName(temp, ChatColor.WHITE + "Leather Armor Colour", lore, p, true, true); + i.setItem(25, temp); + + temp = new ItemStack(Material.BARRIER, 1); + plugin.setName(temp, ChatColor.RED + "Back", null, p, true, true); + i.setItem(27, temp); + + if(Objects.requireNonNull(cf.getString("panels." + panelName + ".item." + itemNumber + ".material")).startsWith("cps=")){ + temp = new ItemStack(Material.PLAYER_HEAD, 1); + if(Objects.requireNonNull(cf.getString("panels." + panelName + ".item." + itemNumber + ".material")).equalsIgnoreCase("cps= self")){ + //if self + SkullMeta meta = (SkullMeta) temp.getItemMeta(); + try { + assert meta != null; + meta.setOwningPlayer(Bukkit.getOfflinePlayer(p.getUniqueId())); + } catch (Exception var23) { + plugin.debug(var23); + } + temp.setItemMeta(meta); + }else{ + //custom head + temp = plugin.customHeads.getCustomHead(Objects.requireNonNull(cf.getString("panels." + panelName + ".item." + itemNumber + ".material")).replace("cps=", "").trim()); + } + }else if (Objects.requireNonNull(cf.getString("panels." + panelName + ".item." + itemNumber + ".material")).startsWith("%cp-player-online-")){ + //leave default for the find material tag + temp = new ItemStack(Material.PLAYER_HEAD, 1); + }else if (Objects.requireNonNull(cf.getString("panels." + panelName + ".item." + itemNumber + ".material")).startsWith("hdb=")){ + //head database head + temp = new ItemStack(Material.PLAYER_HEAD, 1); + if (plugin.getServer().getPluginManager().isPluginEnabled("HeadDatabase")) { + HeadDatabaseAPI api; + api = new HeadDatabaseAPI(); + try { + temp = api.getItemHead(Objects.requireNonNull(cf.getString("panels." + panelName + ".item." + itemNumber + ".material")).replace("hdb=", "").trim()); + } catch (Exception var22) { + plugin.debug(var22); + } + } + }else{ + temp = new ItemStack(Objects.requireNonNull(Material.matchMaterial(Objects.requireNonNull(cf.getString("panels." + panelName + ".item." + itemNumber + ".material")))), 1); + } + try { + temp.setAmount(Integer.parseInt(Objects.requireNonNull(cf.getString("panels." + panelName + ".item." + itemNumber + ".stack")))); + } catch (Exception ex) { + //skip + } + if (cf.contains("panels." + panelName + ".item." + itemNumber + ".enchanted")) { + if (!Objects.equals(cf.getString("panels." + panelName + ".item." + itemNumber + ".enchanted"), "false")) { + ItemMeta EnchantMeta; + EnchantMeta = temp.getItemMeta(); + assert EnchantMeta != null; + EnchantMeta.addEnchant(Enchantment.KNOCKBACK, 1, true); + EnchantMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + temp.setItemMeta(EnchantMeta); + } + } + lore.clear(); + lore.add(ChatColor.GRAY + "Click to set custom material"); + lore.add(ChatColor.GRAY + "typically for custom heads"); + plugin.setName(temp, ChatColor.WHITE + "Item Slot " + itemNumber + " Preview", lore, p, true, true); + i.setItem(35, temp); + + p.openInventory(i); + } +} diff --git a/src/me/rockyhawk/commandPanels/commandpanels.java b/src/me/rockyhawk/commandPanels/commandpanels.java index c6e0658..824073c 100644 --- a/src/me/rockyhawk/commandPanels/commandpanels.java +++ b/src/me/rockyhawk/commandPanels/commandpanels.java @@ -1,8 +1,6 @@ package me.rockyhawk.commandPanels; import com.Ben12345rocks.VotingPlugin.UserManager.UserManager; -import com.google.common.io.ByteArrayDataOutput; -import com.google.common.io.ByteStreams; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; @@ -16,9 +14,9 @@ import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; -import me.arcaniax.hdb.api.HeadDatabaseAPI; import me.clip.placeholderapi.PlaceholderAPI; import me.realized.tokenmanager.api.TokenManager; +import me.rockyhawk.commandPanels.ClassResources.*; import me.rockyhawk.commandPanels.commands.*; import me.rockyhawk.commandPanels.completeTabs.cpTabComplete; import me.rockyhawk.commandPanels.generatePanels.commandpanelsgenerate; @@ -41,26 +39,15 @@ import me.rockyhawk.commandPanels.premium.commandpanelrefresher; import net.milkbowl.vault.economy.Economy; import org.bukkit.*; import org.bukkit.command.CommandSender; -import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.inventory.meta.Damageable; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.*; -import org.bukkit.map.MapCanvas; -import org.bukkit.map.MapRenderer; -import org.bukkit.map.MapView; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.java.JavaPlugin; -import org.bukkit.potion.PotionData; -import org.bukkit.potion.PotionType; -import org.bukkit.scheduler.BukkitRunnable; - -import javax.swing.*; public class commandpanels extends JavaPlugin { public YamlConfiguration config; @@ -76,6 +63,13 @@ public class commandpanels extends JavaPlugin { public List panelFiles = new ArrayList<>(); //names of all the files in the panels folder including extension public List panelNames = new ArrayList<>(); //this will return something like {"mainMenuPanel","4"} which means the 4 is for panelFiles.get(4). So you know which file it is for + //get alternate classes + public CommandTags commandTags = new CommandTags(this); + public OpenEditorGuis editorGuis = new OpenEditorGuis(this); + public ExecuteOpenVoids openVoids = new ExecuteOpenVoids(this); + public ItemCreation itemCreate = new ItemCreation(this); + public GetCustomHeads customHeads = new GetCustomHeads(this); + public File panelsf; public YamlConfiguration blockConfig; //where panel block locations are stored @@ -189,7 +183,7 @@ public class commandpanels extends JavaPlugin { String section = ""; //onOpen needs to not be 3 so the editor won't include hasperm and hasvalue, etc items if (onOpen != 3) { - section = hasSection(pconfig.getConfigurationSection("panels." + panels + ".item." + Integer.parseInt(item.split("\\s")[c])), p); + section = itemCreate.hasSection(pconfig.getConfigurationSection("panels." + panels + ".item." + Integer.parseInt(item.split("\\s")[c])), p); //This section is for animations below here: VISUAL ONLY //check for if there is animations inside the items section @@ -200,7 +194,7 @@ public class commandpanels extends JavaPlugin { } } } - ItemStack s = makeItemFromConfig(Objects.requireNonNull(pconfig.getConfigurationSection("panels." + panels + ".item." + item.split("\\s")[c] + section)), p, onOpen != 3, onOpen != 3); + ItemStack s = itemCreate.makeItemFromConfig(Objects.requireNonNull(pconfig.getConfigurationSection("panels." + panels + ".item." + item.split("\\s")[c] + section)), p, onOpen != 3, onOpen != 3); try { i.setItem(Integer.parseInt(item.split("\\s")[c]), s); } catch (ArrayIndexOutOfBoundsException var24) { @@ -444,341 +438,6 @@ public class commandpanels extends JavaPlugin { return setpapi; } - public void commandTags(Player p, String command) { - String tag = config.getString("config.format.tag") + " "; - //set cp placeholders - command = papi(p, setCpPlaceholders(p, command)); - if (command.split("\\s")[0].equalsIgnoreCase("server=")) { - //this contacts bungee and tells it to send the server change command - ByteArrayDataOutput out = ByteStreams.newDataOutput(); - out.writeUTF("Connect"); - out.writeUTF(command.split("\\s")[1]); - Player player = Bukkit.getPlayerExact(p.getName()); - assert player != null; - player.sendPluginMessage(this, "BungeeCord", out.toByteArray()); - } else if (command.split("\\s")[0].equalsIgnoreCase("op=")) { - //if player uses op= it will perform command as op - boolean isop = p.isOp(); - try { - p.setOp(true); - Bukkit.dispatchCommand(p,papi(p, command.replace("op=", "").trim())); - p.setOp(isop); - } catch (Exception exc) { - p.setOp(isop); - debug(exc); - p.sendMessage(tag + papi( config.getString("config.format.error") + " op=: Error in op command!")); - } - }else if (command.split("\\s")[0].equalsIgnoreCase("delay=")) { - //if player uses op= it will perform command as op - final int delaySeconds = Integer.parseInt(command.split("\\s")[1]); - String finalCommand = command.split("\\s",3)[2]; - new BukkitRunnable() { - @Override - public void run() { - commandTags(p, finalCommand); - this.cancel(); - } - }.runTaskTimer(this, 20*delaySeconds, 20); //20 ticks == 1 second - } else if (command.split("\\s")[0].equalsIgnoreCase("console=")) { - //if player uses console= it will perform command in the console - Bukkit.dispatchCommand(Bukkit.getConsoleSender(), papi(p, command.replace("console=", "").trim())); - } else if (command.split("\\s")[0].equalsIgnoreCase("buy=")) { - //if player uses buy= it will be eg. buy= - try { - if (econ != null) { - if (econ.getBalance(p) >= Double.parseDouble(command.split("\\s")[1])) { - econ.withdrawPlayer(p, Double.parseDouble(command.split("\\s")[1])); - //if the message is empty don't send - if(!Objects.requireNonNull(config.getString("config.format.bought")).isEmpty()){ - p.sendMessage(papi( tag + Objects.requireNonNull(config.getString("config.format.bought")).replaceAll("%cp-args%", command.split("\\s")[1]))); - } - if (p.getInventory().firstEmpty() >= 0) { - p.getInventory().addItem(new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3]))); - } else { - Objects.requireNonNull(p.getLocation().getWorld()).dropItemNaturally(p.getLocation(), new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3]))); - } - } else { - p.sendMessage(papi( tag + config.getString("config.format.needmoney"))); - } - } else { - p.sendMessage(papi( tag + ChatColor.RED + "Buying Requires Vault and an Economy to work!")); - } - } catch (Exception buy) { - debug(buy); - p.sendMessage(papi(tag + config.getString("config.format.error") + " " + "commands: " + command)); - } - } else if (command.split("\\s")[0].equalsIgnoreCase("tokenbuy=")) { - //if player uses tokenbuy= it will be eg. tokenbuy= - try { - if (this.getServer().getPluginManager().isPluginEnabled("TokenManager")) { - TokenManager api = (TokenManager) Bukkit.getServer().getPluginManager().getPlugin("TokenManager"); - assert api != null; - int balance = Integer.parseInt(Long.toString(api.getTokens(p).orElse(0))); - if (balance >= Double.parseDouble(command.split("\\s")[1])) { - api.removeTokens(p, Long.parseLong(command.split("\\s")[1])); - //if the message is empty don't send - if(!Objects.requireNonNull(config.getString("config.format.bought")).isEmpty()) { - p.sendMessage(papi( tag + Objects.requireNonNull(config.getString("config.format.bought")).replaceAll("%cp-args%", command.split("\\s")[1]))); - } - if (p.getInventory().firstEmpty() >= 0) { - p.getInventory().addItem(new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3]))); - } else { - Objects.requireNonNull(p.getLocation().getWorld()).dropItemNaturally(p.getLocation(), new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3]))); - } - } else { - p.sendMessage(papi( tag + config.getString("config.format.needmoney"))); - } - } else { - p.sendMessage(papi( tag + ChatColor.RED + "Buying Requires TokenManager to work!")); - } - } catch (Exception buy) { - debug(buy); - p.sendMessage(papi(tag + config.getString("config.format.error") + " " + "commands: " + command)); - } - } else if (command.split("\\s")[0].equalsIgnoreCase("sell=")) { - //if player uses sell= it will be eg. sell= [enchanted:KNOCKBACK:1] [potion:JUMP] - try { - if (econ != null) { - boolean sold = false; - for (int f = 0; f < p.getInventory().getSize(); f++) { - ItemStack itm = p.getInventory().getItem(f); - if (itm != null && itm.getType().equals(Material.matchMaterial(command.split("\\s")[2]))) { - //determine if the command contains parameters for extensions - //String enchanted[] = {"false","0"}; - String potion = "false"; - for(String argsTemp : command.split("\\s")){ - /*if(argsTemp.startsWith("enchanted:")){ - enchanted = argsTemp.replace("enchanted:","").split(":"); - }*/ - if(argsTemp.startsWith("potion:")){ - potion = argsTemp.replace("potion:",""); - } - } - //check to ensure any extensions are checked - try { - /*if (!enchanted[0].equals("false")) { - EnchantmentStorageMeta enchMeta = (EnchantmentStorageMeta) itm.getItemMeta(); - enchMeta.addStoredEnchant(Enchantment.getByKey(NamespacedKey.minecraft(enchanted[0].toLowerCase())), Integer.parseInt(enchanted[1]), false); - if (enchMeta.getStoredEnchants().equals(itm.getEnchantments())) { - p.sendMessage("TRUE"); - } - if (itm.getEnchantments().containsKey(Enchantment.getByKey(NamespacedKey.minecraft(enchanted[0].toLowerCase())))) { - if (itm.getEnchantmentLevel(Enchantment.getByKey(NamespacedKey.minecraft(enchanted[0].toLowerCase()))) != Integer.parseInt(enchanted[1])) { - p.sendMessage(papi(p, tag + ChatColor.RED + "Your item needs Enchantment level " + enchanted[1])); - return; - } - } else { - p.sendMessage(papi(p, tag + ChatColor.RED + "Your item has the wrong enchantment")); - return; - } - }*/ - if (!potion.equals("false")) { - PotionMeta potionMeta = (PotionMeta) itm.getItemMeta(); - assert potionMeta != null; - if (!potionMeta.getBasePotionData().getType().name().equalsIgnoreCase(potion)) { - p.sendMessage(papi( tag + ChatColor.RED + "Your item has the wrong potion effect")); - return; - } - } - }catch(Exception exc){ - //skip unless debug enabled - debug(exc); - } - if (itm.getAmount() >= new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3])).getAmount()) { - int amt = itm.getAmount() - new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3])).getAmount(); - itm.setAmount(amt); - p.getInventory().setItem(f, amt > 0 ? itm : null); - econ.depositPlayer(p, Double.parseDouble(command.split("\\s")[1])); - sold = true; - p.updateInventory(); - break; - } - } - } - if (!sold) { - p.sendMessage(papi( tag + config.getString("config.format.needitems"))); - } else { - //if the message is empty don't send - if(!Objects.requireNonNull(config.getString("config.format.sold")).isEmpty()) { - p.sendMessage(papi( tag + Objects.requireNonNull(config.getString("config.format.sold")).replaceAll("%cp-args%", command.split("\\s")[1]))); - } - } - } else { - p.sendMessage(papi( tag + ChatColor.RED + "Selling Requires Vault and an Economy to work!")); - } - } catch (Exception sell) { - debug(sell); - p.sendMessage(papi(tag + config.getString("config.format.error") + " " + "commands: " + command)); - } - } else if (command.split("\\s")[0].equalsIgnoreCase("tokensell=")) { - //if player uses tokensell= it will be eg. tokensell= [enchanted:KNOCKBACK:1] [potion:JUMP] - try { - if (this.getServer().getPluginManager().isPluginEnabled("TokenManager")) { - TokenManager api = (TokenManager) Bukkit.getServer().getPluginManager().getPlugin("TokenManager"); - boolean sold = false; - for (int f = 0; f < p.getInventory().getSize(); f++) { - ItemStack itm = p.getInventory().getItem(f); - if (itm != null && itm.getType().equals(Material.matchMaterial(command.split("\\s")[2]))) { - //determine if the command contains parameters for extensions - String potion = "false"; - for(String argsTemp : command.split("\\s")){ - if(argsTemp.startsWith("potion:")){ - potion = argsTemp.replace("potion:",""); - } - } - //check to ensure any extensions are checked - try { - if (!potion.equals("false")) { - PotionMeta potionMeta = (PotionMeta) itm.getItemMeta(); - assert potionMeta != null; - if (!potionMeta.getBasePotionData().getType().name().equalsIgnoreCase(potion)) { - p.sendMessage(papi( tag + ChatColor.RED + "Your item has the wrong potion effect")); - return; - } - } - }catch(Exception exc){ - //skip if it cannot do unless debug is enabled - debug(exc); - } - if (itm.getAmount() >= new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3])).getAmount()) { - int amt = itm.getAmount() - new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3])).getAmount(); - itm.setAmount(amt); - p.getInventory().setItem(f, amt > 0 ? itm : null); - econ.depositPlayer(p, Double.parseDouble(command.split("\\s")[1])); - assert api != null; - api.addTokens(p, Long.parseLong(command.split("\\s")[1])); - sold = true; - p.updateInventory(); - break; - } - } - } - if (!sold) { - p.sendMessage(papi( tag + config.getString("config.format.needitems"))); - } else { - //if the message is empty don't send - if(!Objects.requireNonNull(config.getString("config.format.sold")).isEmpty()) { - p.sendMessage(papi( tag + Objects.requireNonNull(config.getString("config.format.sold")).replaceAll("%cp-args%", command.split("\\s")[1]))); - } - } - } else { - p.sendMessage(papi( tag + ChatColor.RED + "Selling Requires TokenManager to work!")); - } - } catch (Exception sell) { - debug(sell); - p.sendMessage(papi(tag + config.getString("config.format.error") + " " + "commands: " + command)); - } - } else if (command.split("\\s")[0].equalsIgnoreCase("msg=")) { - //if player uses msg= it will send the player a message - p.sendMessage(papi(p, command.replace("msg=", "").trim())); - } else if (command.split("\\s")[0].equalsIgnoreCase("sound=")) { - //if player uses sound= it will play a sound (sound= [sound]) - try { - p.playSound(p.getLocation(), Sound.valueOf(command.split("\\s")[1]), 1F, 1F); - } catch (Exception s) { - debug(s); - p.sendMessage(papi(tag + config.getString("config.format.error") + " " + "commands: " + command)); - } - } else if (command.split("\\s")[0].equalsIgnoreCase("tokenbuycommand=")) { - //if player uses tokenbuycommand [price] [command] - try { - if (this.getServer().getPluginManager().isPluginEnabled("TokenManager")) { - TokenManager api = (TokenManager) Bukkit.getServer().getPluginManager().getPlugin("TokenManager"); - assert api != null; - int balance = Integer.parseInt(Long.toString(api.getTokens(p).orElse(0))); - if (balance >= Double.parseDouble(command.split("\\s")[1])) { - api.removeTokens(p, Long.parseLong(command.split("\\s")[1])); - //execute command under here - String commandp = command; - commandp = commandp.replace("tokenbuycommand=", "").trim(); - String price = commandp.split(" ", 2)[0]; - commandp = commandp.split(" ", 2)[1]; - commandTags(p,papi(p, commandp)); - //if the message is empty don't send - if(!Objects.requireNonNull(config.getString("config.format.bought")).isEmpty()) { - p.sendMessage(papi( tag + Objects.requireNonNull(config.getString("config.format.bought")).replaceAll("%cp-args%", price))); - } - } else { - p.sendMessage(papi( tag + config.getString("config.format.needmoney"))); - } - } else { - p.sendMessage(papi( tag + ChatColor.RED + "Buying Requires Vault and an Economy to work!")); - } - } catch (Exception buyc) { - debug(buyc); - p.sendMessage(papi(tag + config.getString("config.format.error") + " " + "commands: " + command)); - } - } else if (command.split("\\s")[0].equalsIgnoreCase("buycommand=")) { - //if player uses buycommand [price] [command] - try { - if (econ != null) { - if (econ.getBalance(p) >= Double.parseDouble(command.split("\\s")[1])) { - econ.withdrawPlayer(p, Double.parseDouble(command.split("\\s")[1])); - //execute command under here - String commandp = command; - commandp = commandp.replace("buycommand=", "").trim(); - String price = commandp.split(" ", 2)[0]; - commandp = commandp.split(" ", 2)[1]; - commandTags(p,papi(p, commandp)); - //if the message is empty don't send - if(!Objects.requireNonNull(config.getString("config.format.bought")).isEmpty()) { - p.sendMessage(papi( tag + Objects.requireNonNull(config.getString("config.format.bought")).replaceAll("%cp-args%", price))); - } - } else { - p.sendMessage(papi( tag + config.getString("config.format.needmoney"))); - } - } else { - p.sendMessage(papi( tag + ChatColor.RED + "Buying Requires Vault and an Economy to work!")); - } - } catch (Exception buyc) { - debug(buyc); - p.sendMessage(papi(tag + config.getString("config.format.error") + " " + "commands: " + command)); - } - } else if (command.split("\\s")[0].equalsIgnoreCase("teleport=")) { - //if player uses teleport= x y z (optional other player) - if (command.split("\\s").length == 6) { - float x, y, z, yaw, pitch; //pitch is the heads Y axis and yaw is the X axis - x = Float.parseFloat(papi(p, command.split("\\s")[1])); - y = Float.parseFloat(papi(p, command.split("\\s")[2])); - z = Float.parseFloat(papi(p, command.split("\\s")[3])); - yaw = Float.parseFloat(papi(p, command.split("\\s")[4])); - pitch = Float.parseFloat(papi(p, command.split("\\s")[5])); - p.teleport(new Location(p.getWorld(), x, y, z, yaw, pitch)); - } else if (command.split("\\s").length <= 4) { - float x, y, z; - x = Float.parseFloat(papi(p, command.split("\\s")[1])); - y = Float.parseFloat(papi(p, command.split("\\s")[2])); - z = Float.parseFloat(papi(p, command.split("\\s")[3])); - p.teleport(new Location(p.getWorld(), x, y, z)); - } else { - try { - Player otherplayer = Bukkit.getPlayer(papi(p, command.split("\\s")[4])); - float x, y, z; - x = Float.parseFloat(papi(p, command.split("\\s")[1])); - y = Float.parseFloat(papi(p, command.split("\\s")[2])); - z = Float.parseFloat(papi(p, command.split("\\s")[3])); - assert otherplayer != null; - otherplayer.teleport(new Location(otherplayer.getWorld(), x, y, z)); - } catch (Exception tpe) { - p.sendMessage(tag + config.getString("config.format.notitem")); - } - } - } else if (command.split("\\s")[0].equalsIgnoreCase("stopsound=")) { - //if player uses stopsound= [sound] - try { - p.stopSound(Sound.valueOf(command.split("\\s")[1])); - } catch (Exception ss) { - debug(ss); - p.sendMessage(papi(tag + config.getString("config.format.error") + " " + "commands: " + command)); - } - } else if (command.split("\\s")[0].equalsIgnoreCase("sudo=")) { - //if player uses sudo= [command] - p.chat(papi(p, "/" + command.replaceAll("sudo=", "").trim())); - } else { - Bukkit.dispatchCommand(p, papi(p, command)); - } - } - public String setCpPlaceholders(Player p, String str) { String tag = config.getString("config.format.tag") + " "; //replace nodes with PlaceHolders @@ -849,123 +508,6 @@ public class commandpanels extends JavaPlugin { return str; } - public int commandPayWall(Player p, String command) { //return 0 means no funds, 1 is they passed and 2 means paywall is not this command - String tag = config.getString("config.format.tag") + " "; - if (command.split("\\s")[0].equalsIgnoreCase("paywall=")) { - //if player uses paywall= [price] - try { - if (econ != null) { - if (econ.getBalance(p) >= Double.parseDouble(command.split("\\s")[1])) { - econ.withdrawPlayer(p, Double.parseDouble(command.split("\\s")[1])); - //if the message is empty don't send - if(!config.getString("config.format.bought").isEmpty()) { - p.sendMessage(papi( tag + Objects.requireNonNull(config.getString("config.format.bought")).replaceAll("%cp-args%", command.split("\\s")[1]))); - } - return 1; - } else { - p.sendMessage(papi( tag + config.getString("config.format.needmoney"))); - return 0; - } - } else { - p.sendMessage(papi( tag + ChatColor.RED + "Paying Requires Vault and an Economy to work!")); - return 0; - } - } catch (Exception buyc) { - debug(buyc); - p.sendMessage(papi(p, tag + config.getString("config.format.error") + " " + "commands: " + command)); - return 0; - } - } else if (command.split("\\s")[0].equalsIgnoreCase("tokenpaywall=")) { - //if player uses tokenpaywall= [price] - try { - if (getServer().getPluginManager().isPluginEnabled("TokenManager")) { - TokenManager api = (TokenManager) Bukkit.getServer().getPluginManager().getPlugin("TokenManager"); - assert api != null; - int balance = Integer.parseInt(Long.toString(api.getTokens(p).orElse(0))); - if (balance >= Double.parseDouble(command.split("\\s")[1])) { - api.removeTokens(p, Long.parseLong(command.split("\\s")[1])); - //if the message is empty don't send - if(!Objects.requireNonNull(config.getString("config.format.bought")).isEmpty()) { - p.sendMessage(papi( tag + Objects.requireNonNull(config.getString("config.format.bought")).replaceAll("%cp-args%", command.split("\\s")[1]))); - } - return 1; - } else { - p.sendMessage(papi( tag + config.getString("config.format.needmoney"))); - return 0; - } - } else { - p.sendMessage(papi( tag + ChatColor.RED + "Paying TokenManager to work!")); - return 0; - } - } catch (Exception buyc) { - debug(buyc); - p.sendMessage(papi(p, tag + config.getString("config.format.error") + " " + "commands: " + command)); - return 0; - } - }else if (command.split("\\s")[0].equalsIgnoreCase("item-paywall=")) { - //if player uses item-paywall= [Material] [Amount] - try { - ItemStack sellItem = new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[1])),Integer.parseInt(command.split("\\s")[2])); - int sellItemAmount = sellItem.getAmount(); - sellItem.setAmount(1); - int removedItem = 0; - for(ItemStack content : p.getInventory().getContents()){ - int contentAmount; - try { - contentAmount = content.getAmount(); - }catch(NullPointerException skip){ - //item is air - continue; - } - content.setAmount(1); - if(content.isSimilar(sellItem)){ - if(sellItemAmount <= contentAmount){ - content.setAmount(contentAmount-sellItemAmount); - p.updateInventory(); - removedItem = 1; - break; - } - } - content.setAmount(contentAmount); - } - if(removedItem == 0){ - p.sendMessage(papi( tag + config.getString("config.format.needmoney"))); - }else{ - if(!Objects.requireNonNull(config.getString("config.format.sold")).isEmpty()) { - p.sendMessage(papi( tag + config.getString("config.format.sold"))); - } - } - return removedItem; - } catch (Exception buyc) { - debug(buyc); - p.sendMessage(papi(p, tag + config.getString("config.format.error") + " " + "commands: " + command)); - return 0; - } - }else if (command.split("\\s")[0].equalsIgnoreCase("xp-paywall=")) { - //if player uses xp-paywall= [price] - try { - int balance = p.getLevel(); - if (balance >= Integer.parseInt(command.split("\\s")[1])) { - p.setLevel(p.getLevel() - Integer.parseInt(command.split("\\s")[1])); - //if the message is empty don't send - if(!Objects.requireNonNull(config.getString("config.format.bought")).isEmpty()) { - p.sendMessage(papi( tag + Objects.requireNonNull(config.getString("config.format.bought")).replaceAll("%cp-args%", command.split("\\s")[1]))); - } - return 1; - } else { - p.sendMessage(papi( tag + config.getString("config.format.needmoney"))); - return 0; - } - } catch (Exception buyc) { - debug(buyc); - p.sendMessage(papi(p, tag + config.getString("config.format.error") + " " + "commands: " + command)); - return 0; - } - } else { - return 2; - } - } - //look through all files in all folders public void fileNamesFromDirectory(File directory) { for (String fileName : Objects.requireNonNull(directory.list())) { @@ -1063,463 +605,6 @@ public class commandpanels extends JavaPlugin { put("YELLOW", Color.YELLOW); }}; - public void openEditorGui(Player p, int pageChange) { - Inventory i = Bukkit.createInventory(null, 54, "Command Panels Editor"); - ArrayList panelNames = new ArrayList(); //all panels from ALL files (panel names) - ArrayList panelTitles = new ArrayList(); //all panels from ALL files (panel titles) - ArrayList panelItems = new ArrayList(); //all panels from ALL files (panel materials) - try { - for(String fileName : panelFiles) { //will loop through all the files in folder - YamlConfiguration temp = YamlConfiguration.loadConfiguration(new File(panelsf + File.separator + fileName)); - String key; - if (!checkPanels(temp)) { - continue; - } - for (String s : Objects.requireNonNull(temp.getConfigurationSection("panels")).getKeys(false)) { - key = s; - panelNames.add(papi( key)); - panelTitles.add(papi( Objects.requireNonNull(temp.getString("panels." + key + ".title")))); - if (temp.contains("panels." + key + ".open-with-item.material")) { - panelItems.add(makeItemFromConfig(temp.getConfigurationSection("panels." + key + ".open-with-item"), p, false, true)); - } else { - panelItems.add(new ItemStack(Material.FILLED_MAP)); - } - } - } - } catch (Exception fail) { - //could not fetch all panel names (probably no panels exist) - debug(fail); - return; - } - - int pageNumber = 1; - if (p.getOpenInventory().getTitle().equals("Command Panels Editor")) { - pageNumber = Integer.parseInt(ChatColor.stripColor(Objects.requireNonNull(Objects.requireNonNull(p.getOpenInventory().getItem(49)).getItemMeta()).getDisplayName()).replace("Page ", "")); - } - //will add the difference - pageNumber = pageNumber + pageChange; - if (pageNumber <= 0) { - //double check page number IS NOT under 1 - pageNumber = 1; - } - //get amount of pages total - int pagesAmount = (int) Math.ceil(panelNames.size() / 45.0); - //make all the bottom bar items - ItemStack temp; - temp = new ItemStack(Material.SUNFLOWER, 1); - setName(temp, ChatColor.WHITE + "Page " + pageNumber, null, p, true, true); - i.setItem(49, temp); - temp = new ItemStack(Material.BARRIER, 1); - setName(temp, ChatColor.RED + "Exit Menu", null, p, true, true); - i.setItem(45, temp); - temp = new ItemStack(Material.BOOK, 1); - List lore = new ArrayList(); - lore.add(ChatColor.GRAY + "- Click on a panel to edit items."); - lore.add(ChatColor.GRAY + "- Right click on a panel to edit settings."); - lore.add(ChatColor.GRAY + "- To edit an item in a panel, shift click"); - lore.add(ChatColor.GRAY + " on the item of choice."); - lore.add(ChatColor.GRAY + "- When entering a value,"); - lore.add(ChatColor.GRAY + " type 'remove' to set a"); - lore.add(ChatColor.GRAY + " value to default, and use"); - lore.add(ChatColor.GRAY + " '" + config.getString("config.input-cancel") + "' to cancel."); - setName(temp, ChatColor.WHITE + "Panel Editor Tips", lore, p, true, true); - i.setItem(53, temp); - if (pageNumber != 1) { - //only show previous page button if number is not one - temp = new ItemStack(Material.PAPER, 1); - setName(temp, ChatColor.WHITE + "Previous Page", null, p, true, true); - i.setItem(48, temp); - } - if (pageNumber < pagesAmount) { - //if page number is under pages amount - temp = new ItemStack(Material.PAPER, 1); - setName(temp, ChatColor.WHITE + "Next Page", null, p, true, true); - i.setItem(50, temp); - } - int count = 0; - int slot = 0; - for (String panelName : panelNames) { - //count is +1 because count starts at 0 not 1 - if ((pageNumber * 45 - 45) < (count + 1) && (pageNumber * 45) > (count)) { - temp = panelItems.get(count); - setName(temp, ChatColor.WHITE + panelName, null, p, false, true); - i.setItem(slot, temp); - slot += 1; - } - count += 1; - } - p.openInventory(i); - } - - public void openPanelSettings(Player p, String panelName, YamlConfiguration cf) { - Inventory i = Bukkit.createInventory(null, 45, "Panel Settings: " + panelName); - List lore = new ArrayList(); - ItemStack temp; - //remove if the player already had a string from previously - for (int o = 0; editorInputStrings.size() > o; o++) { - if (editorInputStrings.get(o)[0].equals(p.getName())) { - editorInputStrings.remove(o); - o = o - 1; - } - } - //make all the items - temp = new ItemStack(Material.WRITABLE_BOOK, 1); - lore.add(ChatColor.GRAY + "Permission required to open panel"); - lore.add(ChatColor.GRAY + "commandpanel.panel.[insert]"); - if (cf.contains("panels." + panelName + ".perm")) { - lore.add(ChatColor.WHITE + "--------------------------------"); - lore.add(ChatColor.WHITE + "commandpanel.panel." + cf.getString("panels." + panelName + ".perm")); - } - setName(temp, ChatColor.WHITE + "Panel Permission", lore, p,true, true); - i.setItem(1, temp); - - temp = new ItemStack(Material.NAME_TAG, 1); - lore.clear(); - lore.add(ChatColor.GRAY + "Title of the Panel"); - if (cf.contains("panels." + panelName + ".title")) { - lore.add(ChatColor.WHITE + "------------------"); - lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".title")); - } - setName(temp, ChatColor.WHITE + "Panel Title", lore, p,true, true); - i.setItem(3, temp); - - temp = new ItemStack(Material.JUKEBOX, 1); - lore.clear(); - lore.add(ChatColor.GRAY + "Sound when opening panel"); - if (cf.contains("panels." + panelName + ".sound-on-open")) { - lore.add(ChatColor.WHITE + "------------------------"); - lore.add(ChatColor.WHITE + Objects.requireNonNull(cf.getString("panels." + panelName + ".sound-on-open")).toUpperCase()); - } - setName(temp, ChatColor.WHITE + "Panel Sound", lore, p,true, true); - i.setItem(5, temp); - - temp = new ItemStack(Material.IRON_DOOR, 1); - lore.clear(); - lore.add(ChatColor.GRAY + "Custom command to open panel"); - if (cf.contains("panels." + panelName + ".command")) { - lore.add(ChatColor.WHITE + "----------------------------"); - lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".command")); - } - setName(temp, ChatColor.WHITE + "Panel Command", lore, p,true, true); - i.setItem(7, temp); - - temp = new ItemStack(Material.LAVA_BUCKET, 1); - lore.clear(); - lore.add(ChatColor.DARK_RED + "Permanently delete Panel"); - setName(temp, ChatColor.RED + "Delete Panel", lore, p,true, true); - i.setItem(21, temp); - - temp = new ItemStack(Material.PISTON, 1); - lore.clear(); - lore.add(ChatColor.GRAY + "How many rows the panel will be"); - lore.add(ChatColor.GRAY + "choose an integer from 1 to 6"); - setName(temp, ChatColor.WHITE + "Panel Rows", lore, p,true, true); - i.setItem(23, temp); - - temp = new ItemStack(Material.BLACK_STAINED_GLASS, 1); - lore.clear(); - lore.add(ChatColor.GRAY + "Fill empty slots with an item"); - if (cf.contains("panels." + panelName + ".empty")) { - lore.add(ChatColor.WHITE + "-----------------------"); - lore.add(ChatColor.WHITE + Objects.requireNonNull(cf.getString("panels." + panelName + ".empty")).toUpperCase()); - } - setName(temp, ChatColor.WHITE + "Panel Empty Item", lore, p,true, true); - i.setItem(13, temp); - - temp = new ItemStack(Material.COMMAND_BLOCK, 1); - lore.clear(); - lore.add(ChatColor.GRAY + "Execute commands when opening"); - lore.add(ChatColor.GRAY + "- Left click to add command"); - lore.add(ChatColor.GRAY + "- Right click to remove command"); - if (cf.contains("panels." + panelName + ".commands-on-open")) { - lore.add(ChatColor.WHITE + "-----------------------------"); - int count = 1; - for (String tempLore : cf.getStringList("panels." + panelName + ".commands-on-open")) { - lore.add(ChatColor.WHITE + Integer.toString(count) + ") " + tempLore); - count += 1; - } - } - setName(temp, ChatColor.WHITE + "Panel Commands", lore, p,true, true); - i.setItem(15, temp); - - temp = new ItemStack(Material.ITEM_FRAME, 1); - lore.clear(); - lore.add(ChatColor.GRAY + "Code name to open panel"); - lore.add(ChatColor.GRAY + "/cp [name]"); - lore.add(ChatColor.WHITE + "-----------------------"); - lore.add(ChatColor.WHITE + panelName); - setName(temp, ChatColor.WHITE + "Panel Name", lore, p,true, true); - i.setItem(11, temp); - - temp = new ItemStack(Material.BARRIER, 1); - setName(temp, ChatColor.RED + "Back", null, p,true, true); - i.setItem(18, temp); - - //This will create a wall of glass panes, separating panel settings with hotbar settings - temp = new ItemStack(Material.BLACK_STAINED_GLASS_PANE, 1); - setName(temp, ChatColor.WHITE + "", null, p,false, true); - for(int d = 27; d < 36; d++){ - i.setItem(d, temp); - } - //This is the items for hotbar items (open-with-item) - boolean hotbarItems = false; - - if(cf.contains("panels." + panelName + ".open-with-item.material")){ - hotbarItems = true; - temp = makeItemFromConfig(cf.getConfigurationSection("panels." + panelName + ".open-with-item"), p, false, true); - }else{ - temp = new ItemStack(Material.REDSTONE_BLOCK, 1); - } - lore.clear(); - lore.add(ChatColor.GRAY + "Current Item"); - if (cf.contains("panels." + panelName + ".open-with-item.material")) { - lore.add(ChatColor.WHITE + "-----------------------"); - lore.add(ChatColor.WHITE + Objects.requireNonNull(cf.getString("panels." + panelName + ".open-with-item.material")).toUpperCase()); - }else{ - lore.add(ChatColor.WHITE + "-----------------------"); - lore.add(ChatColor.RED + "DISABLED"); - } - setName(temp, ChatColor.WHITE + "Panel Hotbar Item", lore, p,true, true); - i.setItem(40, temp); - - if(hotbarItems) { - temp = new ItemStack(Material.NAME_TAG, 1); - lore.clear(); - lore.add(ChatColor.GRAY + "Name for Hotbar item"); - if (cf.contains("panels." + panelName + ".open-with-item.name")) { - lore.add(ChatColor.WHITE + "----------"); - lore.add(ChatColor.WHITE + Objects.requireNonNull(cf.getString("panels." + panelName + ".open-with-item.name"))); - } - setName(temp, ChatColor.WHITE + "Hotbar Item Name", lore, p, true, true); - i.setItem(38, temp); - - temp = new ItemStack(Material.SPRUCE_SIGN, 1); - lore.clear(); - lore.add(ChatColor.GRAY + "Display a lore under the Hotbar item"); - lore.add(ChatColor.GRAY + "- Left click to add lore"); - lore.add(ChatColor.GRAY + "- Right click to remove lore"); - if (cf.contains("panels." + panelName + ".open-with-item.lore")) { - lore.add(ChatColor.WHITE + "-------------------------------"); - int count = 1; - for (String tempLore : cf.getStringList("panels." + panelName + ".open-with-item.lore")) { - lore.add(ChatColor.WHITE + Integer.toString(count) + ") " + tempLore); - count += 1; - } - } - setName(temp, ChatColor.WHITE + "Hotbar Lore", lore, p,true, true); - i.setItem(36, temp); - - temp = new ItemStack(Material.BEDROCK, 1); - lore.clear(); - lore.add(ChatColor.GRAY + "Hotbar location for the item"); - lore.add(ChatColor.GRAY + "choose a number from 1 to 9"); - if (cf.contains("panels." + panelName + ".open-with-item.stationary")) { - lore.add(ChatColor.WHITE + "-------------------------"); - //in the editor, change the value of 0-8 to 1-9 for simplicity - int location = cf.getInt("panels." + panelName + ".open-with-item.stationary") + 1; - lore.add(ChatColor.WHITE + String.valueOf(location)); - } - setName(temp, ChatColor.WHITE + "Hotbar Item Location", lore, p, true, true); - i.setItem(42, temp); - - temp = new ItemStack(Material.BOOK, 1); - lore.clear(); - lore.add(ChatColor.GRAY + "- To refresh changes use"); - lore.add(ChatColor.GRAY + " /cp " + panelName + " item"); - lore.add(ChatColor.GRAY + "- Hotbar items will need a"); - lore.add(ChatColor.GRAY + " name to work properly."); - setName(temp, ChatColor.WHITE + "Hotbar Item Tips", lore, p, true, true); - i.setItem(44, temp); - } - - p.openInventory(i); - } - - public void openItemSettings(Player p, String panelName, YamlConfiguration cf, int itemNumber) { - Inventory i = Bukkit.createInventory(null, 36, "Item Settings: " + panelName); - List lore = new ArrayList(); - ItemStack temp; - //remove if the player already had a string from previously - for (int o = 0; editorInputStrings.size() > o; o++) { - if (editorInputStrings.get(o)[0].equals(p.getName())) { - editorInputStrings.remove(o); - o = o - 1; - } - } - //make all the items - temp = new ItemStack(Material.NAME_TAG, 1); - lore.add(ChatColor.GRAY + "Display name of the item in the Panel"); - if (cf.contains("panels." + panelName + ".item." + itemNumber + ".name")) { - if (!Objects.equals(cf.getString("panels." + panelName + ".item." + itemNumber + ".name"), "")) { - lore.add(ChatColor.WHITE + "--------------------------------"); - lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".item." + itemNumber + ".name")); - } - } - setName(temp, ChatColor.WHITE + "Item Name", lore, p,true, true); - i.setItem(1, temp); - - temp = new ItemStack(Material.COMMAND_BLOCK, 1); - lore.clear(); - lore.add(ChatColor.GRAY + "Execute commands when item is clicked"); - lore.add(ChatColor.GRAY + "- Left click to add command"); - lore.add(ChatColor.GRAY + "- Right click to remove command"); - if (cf.contains("panels." + panelName + ".item." + itemNumber + ".commands")) { - lore.add(ChatColor.WHITE + "-----------------------------"); - int count = 1; - for (String tempLore : cf.getStringList("panels." + panelName + ".item." + itemNumber + ".commands")) { - lore.add(ChatColor.WHITE + Integer.toString(count) + ") " + tempLore); - count += 1; - } - } - setName(temp, ChatColor.WHITE + "Item Commands", lore, p,true, true); - i.setItem(3, temp); - - temp = new ItemStack(Material.EXPERIENCE_BOTTLE, 1); - lore.clear(); - lore.add(ChatColor.GRAY + "Display enchantment of the item in the Panel"); - if (cf.contains("panels." + panelName + ".item." + itemNumber + ".enchanted")) { - if (!Objects.equals(cf.getString("panels." + panelName + ".item." + itemNumber + ".name"), "")) { - lore.add(ChatColor.WHITE + "--------------------------------"); - lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".item." + itemNumber + ".enchanted")); - } - } else { - lore.add(ChatColor.WHITE + "--------------------------------"); - lore.add(ChatColor.WHITE + "false"); - } - setName(temp, ChatColor.WHITE + "Item Enchantment", lore, p,true, true); - i.setItem(5, temp); - - temp = new ItemStack(Material.POTION, 1); - lore.clear(); - lore.add(ChatColor.GRAY + "Display potion effect of the item in the Panel"); - if (cf.contains("panels." + panelName + ".item." + itemNumber + ".potion")) { - if (!Objects.equals(cf.getString("panels." + panelName + ".item." + itemNumber + ".potion"), "")) { - lore.add(ChatColor.WHITE + "--------------------------------"); - lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".item." + itemNumber + ".potion")); - } - } - setName(temp, ChatColor.WHITE + "Item Potion Effect", lore, p,true, true); - i.setItem(7, temp); - - temp = new ItemStack(Material.SPRUCE_SIGN, 1); - lore.clear(); - lore.add(ChatColor.GRAY + "Display a lore under the item name"); - lore.add(ChatColor.GRAY + "- Left click to add lore line"); - lore.add(ChatColor.GRAY + "- Right click to remove lore line"); - if (cf.contains("panels." + panelName + ".item." + itemNumber + ".lore")) { - lore.add(ChatColor.WHITE + "-----------------------------"); - int count = 1; - for (String tempLore : cf.getStringList("panels." + panelName + ".item." + itemNumber + ".lore")) { - lore.add(ChatColor.WHITE + Integer.toString(count) + ") " + tempLore); - count += 1; - } - } - setName(temp, ChatColor.WHITE + "Item Lores", lore, p, true, true); - i.setItem(19, temp); - - temp = new ItemStack(Material.ITEM_FRAME, 2); - lore.clear(); - lore.add(ChatColor.GRAY + "How many of the item will be stacked"); - if (cf.contains("panels." + panelName + ".item." + itemNumber + ".stack")) { - if (!Objects.equals(cf.getString("panels." + panelName + ".item." + itemNumber + ".stack"), "")) { - try { - temp.setAmount(Integer.parseInt(Objects.requireNonNull(cf.getString("panels." + panelName + ".item." + itemNumber + ".stack")))); - } catch (Exception ignored) { - } - lore.add(ChatColor.WHITE + "--------------------------------"); - lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".item." + itemNumber + ".stack")); - } - } - setName(temp, ChatColor.WHITE + "Item Stack Size", lore, p, true, true); - i.setItem(21, temp); - - temp = new ItemStack(Material.ANVIL, 1); - lore.clear(); - lore.add(ChatColor.GRAY + "Add Custom Model Data here"); - if (cf.contains("panels." + panelName + ".item." + itemNumber + ".customdata")) { - if (!Objects.equals(cf.getString("panels." + panelName + ".item." + itemNumber + ".customdata"), "")) { - lore.add(ChatColor.WHITE + "--------------------------------"); - lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".item." + itemNumber + ".customdata")); - } - } - setName(temp, ChatColor.WHITE + "Custom Model Data", lore, p, true, true); - i.setItem(23, temp); - - temp = new ItemStack(Material.LEATHER_HELMET, 1); - lore.clear(); - lore.add(ChatColor.GRAY + "Choose a colour for the armor"); - lore.add(ChatColor.GRAY + "use r,g,b or a spigot API color"); - if (cf.contains("panels." + panelName + ".item." + itemNumber + ".leatherarmor")) { - if (!Objects.equals(cf.getString("panels." + panelName + ".item." + itemNumber + ".leatherarmor"), "")) { - lore.add(ChatColor.WHITE + "--------------------------------"); - lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".item." + itemNumber + ".leatherarmor")); - } - } - setName(temp, ChatColor.WHITE + "Leather Armor Colour", lore, p, true, true); - i.setItem(25, temp); - - temp = new ItemStack(Material.BARRIER, 1); - setName(temp, ChatColor.RED + "Back", null, p, true, true); - i.setItem(27, temp); - - if(Objects.requireNonNull(cf.getString("panels." + panelName + ".item." + itemNumber + ".material")).startsWith("cps=")){ - temp = new ItemStack(Material.PLAYER_HEAD, 1); - if(Objects.requireNonNull(cf.getString("panels." + panelName + ".item." + itemNumber + ".material")).equalsIgnoreCase("cps= self")){ - //if self - SkullMeta meta = (SkullMeta) temp.getItemMeta(); - try { - assert meta != null; - meta.setOwningPlayer(Bukkit.getOfflinePlayer(p.getUniqueId())); - } catch (Exception var23) { - debug(var23); - } - temp.setItemMeta(meta); - }else{ - //custom head - temp = new GetCustomHeads(this).getCustomHead(Objects.requireNonNull(cf.getString("panels." + panelName + ".item." + itemNumber + ".material")).replace("cps=", "").trim()); - } - }else if (Objects.requireNonNull(cf.getString("panels." + panelName + ".item." + itemNumber + ".material")).startsWith("%cp-player-online-")){ - //leave default for the find material tag - temp = new ItemStack(Material.PLAYER_HEAD, 1); - }else if (Objects.requireNonNull(cf.getString("panels." + panelName + ".item." + itemNumber + ".material")).startsWith("hdb=")){ - //head database head - temp = new ItemStack(Material.PLAYER_HEAD, 1); - if (this.getServer().getPluginManager().isPluginEnabled("HeadDatabase")) { - HeadDatabaseAPI api; - api = new HeadDatabaseAPI(); - try { - temp = api.getItemHead(Objects.requireNonNull(cf.getString("panels." + panelName + ".item." + itemNumber + ".material")).replace("hdb=", "").trim()); - } catch (Exception var22) { - debug(var22); - } - } - }else{ - temp = new ItemStack(Objects.requireNonNull(Material.matchMaterial(Objects.requireNonNull(cf.getString("panels." + panelName + ".item." + itemNumber + ".material")))), 1); - } - try { - temp.setAmount(Integer.parseInt(Objects.requireNonNull(cf.getString("panels." + panelName + ".item." + itemNumber + ".stack")))); - } catch (Exception ex) { - //skip - } - if (cf.contains("panels." + panelName + ".item." + itemNumber + ".enchanted")) { - if (!Objects.equals(cf.getString("panels." + panelName + ".item." + itemNumber + ".enchanted"), "false")) { - ItemMeta EnchantMeta; - EnchantMeta = temp.getItemMeta(); - assert EnchantMeta != null; - EnchantMeta.addEnchant(Enchantment.KNOCKBACK, 1, true); - EnchantMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); - temp.setItemMeta(EnchantMeta); - } - } - lore.clear(); - lore.add(ChatColor.GRAY + "Click to set custom material"); - lore.add(ChatColor.GRAY + "typically for custom heads"); - setName(temp, ChatColor.WHITE + "Item Slot " + itemNumber + " Preview", lore, p, true, true); - i.setItem(35, temp); - - p.openInventory(i); - } - public Reader getReaderFromStream(InputStream initialStream) throws IOException { //this reads the encrypted resource files in the jar file if(Bukkit.getVersion().contains("1.13")){ @@ -1567,452 +652,6 @@ public class commandpanels extends JavaPlugin { return null; } - public ItemStack makeItemFromConfig(ConfigurationSection itemSection, Player p, boolean placeholders, boolean colours){ - String tag = this.config.getString("config.format.tag") + " "; - String material = itemSection.getString("material"); - try { - if (Objects.requireNonNull(itemSection.getString("material")).equalsIgnoreCase("AIR")) { - return null; - } - }catch(NullPointerException e){ - debug(e); - p.sendMessage(papi(tag + this.config.getString("config.format.error") + " material: could not load material!")); - return null; - } - ItemStack s; - String mat; - String matskull; - String skullname; - //this will convert the %cp-player-online-1-find% into cps= NAME - assert material != null; - if (material.contains("%cp-player-online-")) { - int start = material.indexOf("%cp-player-online-"); - int end = material.lastIndexOf("-find%"); - String playerLocation = material.substring(start, end).replace("%cp-player-online-", ""); - Player[] playerFind = Bukkit.getOnlinePlayers().toArray(new Player[Bukkit.getOnlinePlayers().size()]); - if (Integer.parseInt(playerLocation) > playerFind.length) { - material = material.replace(material.substring(start, end) + "-find%", "cps= " + config.getString("config.format.offlineHeadValue")); - } else { - material = material.replace(material.substring(start, end) + "-find%", "cpo= " + playerFind[Integer.parseInt(playerLocation) - 1].getName()); - //cpo is to get the skull of the player online. It is fine since the plugin knows the player is online - } - } - try { - mat = material.toUpperCase(); - matskull = material; - skullname = "no skull"; - if (matskull.split("\\s")[0].toLowerCase().equals("cps=") || matskull.split("\\s")[0].toLowerCase().equals("cpo=")) { - skullname = p.getUniqueId().toString(); - mat = "PLAYER_HEAD"; - } - - if (matskull.split("\\s")[0].toLowerCase().equals("hdb=")) { - skullname = "hdb"; - mat = "PLAYER_HEAD"; - } - - s = new ItemStack(Objects.requireNonNull(Material.matchMaterial(mat)), 1); - - if (!skullname.equals("no skull") && !skullname.equals("hdb") && !matskull.split("\\s")[0].equalsIgnoreCase("cpo=")) { - try { - SkullMeta meta; - if (matskull.split("\\s")[1].equalsIgnoreCase("self")) { - //if cps= self - meta = (SkullMeta) s.getItemMeta(); - try { - assert meta != null; - meta.setOwningPlayer(Bukkit.getOfflinePlayer(UUID.fromString(skullname))); - } catch (Exception var23) { - p.sendMessage(papi( tag + this.config.getString("config.format.error") + " material: cps= self")); - debug(var23); - } - s.setItemMeta(meta); - }else if (papiNoColour(p,matskull.split("\\s")[1]).length() <= 16) { - //if cps= username - s = new GetCustomHeads(this).getPlayerHead(papiNoColour(p,matskull.split("\\s")[1])); - } else { - //custom data cps= base64 - s = new GetCustomHeads(this).getCustomHead(papiNoColour(p,matskull.split("\\s")[1])); - } - } catch (Exception var32) { - p.sendMessage(papi( tag + this.config.getString("config.format.error") + " head material: Could not load skull")); - debug(var32); - } - } - if (!skullname.equals("no skull") && matskull.split("\\s")[0].equalsIgnoreCase("cpo=")) { - SkullMeta cpoMeta = (SkullMeta) s.getItemMeta(); - assert cpoMeta != null; - cpoMeta.setOwningPlayer(Bukkit.getOfflinePlayer(Objects.requireNonNull(Bukkit.getPlayer(matskull.split("\\s")[1])).getUniqueId())); - s.setItemMeta(cpoMeta); - } - if (skullname.equals("hdb")) { - if (this.getServer().getPluginManager().isPluginEnabled("HeadDatabase")) { - HeadDatabaseAPI api; - api = new HeadDatabaseAPI(); - - try { - s = api.getItemHead(matskull.split("\\s")[1].trim()); - } catch (Exception var22) { - p.sendMessage(papi(tag + this.config.getString("config.format.error") + " hdb: could not load skull!")); - debug(var22); - } - } else { - p.sendMessage(papi(tag + "Download HeadDatabaseHook from Spigot to use this feature!")); - } - } - if (itemSection.contains("map")) { - /* - This will do maps from custom images - the maps will be in the 'maps' folder, so - CommandPanels/maps/image.png <-- here - Commandpanels/panels/example.yml - The images should be 128x128 - */ - try{ - @SuppressWarnings("deprecation") - MapView map = Bukkit.getServer().getMap(0); - try { - map.getRenderers().clear(); - map.setCenterX(30000000); - map.setCenterZ(30000000); - }catch(NullPointerException ignore){ - //ignore catch - } - if(new File(getDataFolder().getPath() + File.separator + "maps" + File.separator + itemSection.getString("map")).exists()) { - map.addRenderer(new MapRenderer() { - public void render(MapView view, MapCanvas canvas, Player player) { - canvas.drawImage(0, 0, new ImageIcon(getDataFolder().getPath() + File.separator + "maps" + File.separator + itemSection.getString("map")).getImage()); - } - }); - MapMeta meta = (MapMeta) s.getItemMeta(); - meta.setMapView(map); - s.setItemMeta(meta); - }else{ - p.sendMessage(papi(tag + this.config.getString("config.format.error") + " map: File not found.")); - } - }catch(Exception map){ - p.sendMessage(papi(tag + this.config.getString("config.format.error") + " map: " + itemSection.getString("map"))); - debug(map); - } - } - if (itemSection.contains("enchanted")) { - try { - ItemMeta EnchantMeta; - if (Objects.requireNonNull(itemSection.getString("enchanted")).trim().equalsIgnoreCase("true")) { - EnchantMeta = s.getItemMeta(); - assert EnchantMeta != null; - EnchantMeta.addEnchant(Enchantment.KNOCKBACK, 1, false); - EnchantMeta.addItemFlags(ItemFlag.HIDE_ENCHANTS); - s.setItemMeta(EnchantMeta); - } else if (!Objects.requireNonNull(itemSection.getString("enchanted")).trim().equalsIgnoreCase("false")) { - EnchantMeta = s.getItemMeta(); - assert EnchantMeta != null; - EnchantMeta.addEnchant(Objects.requireNonNull(Enchantment.getByKey(NamespacedKey.minecraft(Objects.requireNonNull(itemSection.getString("enchanted")).split("\\s")[0].toLowerCase()))), Integer.parseInt(Objects.requireNonNull(itemSection.getString("enchanted")).split("\\s")[1]), true); - s.setItemMeta(EnchantMeta); - } - } catch (Exception ench) { - p.sendMessage(papi(tag + this.config.getString("config.format.error") + " enchanted: " + itemSection.getString("enchanted"))); - debug(ench); - } - } - if (itemSection.contains("customdata")) { - ItemMeta customMeta = s.getItemMeta(); - assert customMeta != null; - customMeta.setCustomModelData(Integer.parseInt(Objects.requireNonNull(itemSection.getString("customdata")))); - s.setItemMeta(customMeta); - } - if (itemSection.contains("leatherarmor")) { - //if the item is leather armor, change the colour to this - try { - if (s.getType() == Material.LEATHER_BOOTS || s.getType() == Material.LEATHER_LEGGINGS || s.getType() == Material.LEATHER_CHESTPLATE || s.getType() == Material.LEATHER_HELMET) { - LeatherArmorMeta leatherMeta = (LeatherArmorMeta) s.getItemMeta(); - String colourCode = itemSection.getString("leatherarmor"); - assert colourCode != null; - if (!colourCode.contains(",")) { - //use a color name - assert leatherMeta != null; - leatherMeta.setColor(colourCodes.get(colourCode.toUpperCase())); - } else { - //use RGB sequence - int[] colorRGB = {255, 255, 255}; - int count = 0; - for (String colourNum : colourCode.split(",")) { - colorRGB[count] = Integer.parseInt(colourNum); - count += 1; - } - assert leatherMeta != null; - leatherMeta.setColor(Color.fromRGB(colorRGB[0], colorRGB[1], colorRGB[2])); - } - s.setItemMeta(leatherMeta); - } - } catch (Exception er) { - //don't colour the armor - debug(er); - p.sendMessage(papi(tag + this.config.getString("config.format.error") + " leatherarmor: " + itemSection.getString("leatherarmor"))); - } - } - if (itemSection.contains("potion")) { - //if the item is a potion, give it an effect - try { - PotionMeta potionMeta = (PotionMeta)s.getItemMeta(); - String effectType = itemSection.getString("potion"); - assert potionMeta != null; - assert effectType != null; - potionMeta.setBasePotionData(new PotionData(PotionType.valueOf(effectType.toUpperCase()))); - potionMeta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS); - s.setItemMeta(potionMeta); - } catch (Exception er) { - //don't add the effect - debug(er); - p.sendMessage(papi(tag + ChatColor.RED + this.config.getString("config.format.error") + " potion: " + itemSection.getString("potion"))); - } - } - if (itemSection.contains("damage")) { - //change the damage amount (placeholders accepted) - try { - Damageable itemDamage = (Damageable) s.getItemMeta(); - itemDamage.setDamage(Integer.parseInt(Objects.requireNonNull(papi(p, itemSection.getString("damage"))))); - s.setItemMeta((ItemMeta) itemDamage); - }catch(Exception e){ - debug(e); - p.sendMessage(papi(tag + this.config.getString("config.format.error") + " damage: " + itemSection.getString("damage"))); - } - } - if (itemSection.contains("stack")) { - //change the stack amount (placeholders accepted) - s.setAmount(Integer.parseInt(Objects.requireNonNull(papi(p,itemSection.getString("stack"))))); - } - } catch (IllegalArgumentException | NullPointerException var33) { - debug(var33); - p.sendMessage(papi(tag + this.config.getString("config.format.error") + " material: " + itemSection.getString("material"))); - return null; - } - this.setName(s, itemSection.getString("name"), itemSection.getStringList("lore"), p, placeholders, colours); - return s; - } - - //hasperm hasvalue, etc sections will be done here - public String hasSection(ConfigurationSection cf, Player p){ - if (cf.contains("hasvalue")) { - //this will do the hasvalue without any numbers - boolean outputValue = true; - //outputValue will default to true - if (cf.contains("hasvalue.output")) { - //if output is true, and values match it will be this item, vice versa - outputValue = cf.getBoolean("hasvalue.output"); - } - String value = cf.getString("hasvalue.value"); - String compare = ChatColor.stripColor(papi(p,setCpPlaceholders(p,cf.getString("hasvalue.compare")))); - if (compare.equals(value) == outputValue) { - //onOpen being 3 means it is the editor panel.. hasvalue items cannot be included to avoid item breaking - String section = hasSection(Objects.requireNonNull(cf.getConfigurationSection("hasvalue")), p); - //string section, it executes itself to check for subsections - return ".hasvalue" + section; - } - //loop through possible hasvalue 1,2,3,etc - for (int count = 0; cf.getKeys(false).size() > count; count++) { - if (cf.contains("hasvalue" + count)) { - outputValue = true; - //outputValue will default to true - if (cf.contains("hasvalue" + count + ".output")) { - //if output is true, and values match it will be this item, vice versa - outputValue = cf.getBoolean("hasvalue" + count + ".output"); - } - value = cf.getString("hasvalue" + count + ".value"); - compare = ChatColor.stripColor(papi(p,setCpPlaceholders(p,cf.getString("hasvalue" + count + ".compare")))); - if (compare.equals(value) == outputValue) { - //onOpen being 3 means it is the editor panel.. hasvalue items cannot be included to avoid item breaking - String section = hasSection(Objects.requireNonNull(cf.getConfigurationSection("hasvalue" + count)), p); - //string section, it executes itself to check for subsections - return ".hasvalue" + count + section; - } - } - } - } - if (cf.contains("hasgreater")) { - //this will do the hasgreater without any numbers - boolean outputValue = true; - //outputValue will default to true - if (cf.contains("hasgreater.output")) { - //if output is true, and values match it will be this item, vice versa - outputValue = cf.getBoolean("hasgreater.output"); - } - int value = cf.getInt("hasgreater.value"); - double compare = Double.parseDouble(ChatColor.stripColor(papi(p,setCpPlaceholders(p,cf.getString("hasgreater.compare"))))); - if ((compare >= value) == outputValue) { - //onOpen being 3 means it is the editor panel.. hasgreater items cannot be included to avoid item breaking - String section = hasSection(Objects.requireNonNull(cf.getConfigurationSection("hasgreater")), p); - return ".hasgreater" + section; - } - //loop through possible hasgreater 1,2,3,etc - for (int count = 0; cf.getKeys(false).size() > count; count++) { - if (cf.contains("hasgreater" + count)) { - outputValue = true; - //outputValue will default to true - if (cf.contains("hasgreater" + count + ".output")) { - //if output is true, and values match it will be this item, vice versa - outputValue = cf.getBoolean("hasgreater" + count + ".output"); - } - value = cf.getInt("hasgreater" + count + ".value"); - compare = Double.parseDouble(ChatColor.stripColor(papi(p,setCpPlaceholders(p,cf.getString("hasgreater" + count + ".compare"))))); - if ((compare >= value) == outputValue) { - //onOpen being 3 means it is the editor panel.. hasgreater items cannot be included to avoid item breaking - String section = hasSection(Objects.requireNonNull(cf.getConfigurationSection("hasgreater" + count)), p); - return ".hasgreater" + count + section; - } - } - } - } - if (cf.contains("hasperm")) { - //this will do hasperm with no numbers - boolean outputValue = true; - //outputValue will default to true - if (cf.contains("output")) { - //if output is true, and values match it will be this item, vice versa - outputValue = cf.getBoolean("output"); - } - if (p.hasPermission(Objects.requireNonNull(cf.getString("hasperm.perm"))) == outputValue) { - String section = hasSection(Objects.requireNonNull(cf.getConfigurationSection("hasperm")), p); - return ".hasperm" + section; - } - for(int count = 0; cf.getKeys(false).size() > count; count++){ - if (cf.contains("hasperm" + count) && cf.contains("hasperm" + count + ".perm")) { - outputValue = true; - //outputValue will default to true - if (cf.contains("hasperm" + count + ".output")) { - //if output is true, and values match it will be this item, vice versa - outputValue = cf.getBoolean("hasperm" + count + ".output"); - } - if (p.hasPermission(Objects.requireNonNull(cf.getString("hasperm" + count + ".perm"))) == outputValue) { - String section = hasSection(Objects.requireNonNull(cf.getConfigurationSection("hasperm" + count)), p); - return ".hasperm" + count + section; - } - } - } - } - return ""; - } - - //this is the main method to open a panel - public void openCommandPanel(CommandSender sender, Player p, String panels, YamlConfiguration cf, boolean sendOpenedMessage){ - String tag = config.getString("config.format.tag") + " "; - if (sender.hasPermission("commandpanel.panel." + cf.getString("panels." + panels + ".perm"))) { - //if the sender has OTHER perms, or if sendOpenedMessage is false, implying it is not for another person - if(sender.hasPermission("commandpanel.other") || !sendOpenedMessage) { - try { - if (cf.contains("panels." + panels + ".disabled-worlds")) { - List disabledWorlds = cf.getStringList("panels." + panels + ".disabled-worlds"); - if (disabledWorlds.contains(p.getWorld().getName())) { - //panel cannot be used in the players world! - if (Objects.requireNonNull(config.getString("config.disabled-world-message")).equalsIgnoreCase("true")) { - sender.sendMessage(papi(tag + ChatColor.RED + "Panel is disabled in the world!")); - } - return; - } - } - }catch(NullPointerException offlinePlayer){ - //SKIP because player is offline - sender.sendMessage(papi(tag + config.getString("config.format.notitem"))); - return; - } - try { - if (cf.contains("panels." + panels + ".sound-on-open")) { - //play sound when panel is opened - if(!Objects.requireNonNull(cf.getString("panels." + panels + ".sound-on-open")).equalsIgnoreCase("off")) { - try { - p.playSound(p.getLocation(), Sound.valueOf(Objects.requireNonNull(cf.getString("panels." + panels + ".sound-on-open")).toUpperCase()), 1F, 1F); - } catch (Exception s) { - p.sendMessage(papi(tag + config.getString("config.format.error") + " " + "sound-on-open: " + cf.getString("panels." + panels + ".sound-on-open"))); - } - } - } - if (cf.contains("panels." + panels + ".commands-on-open")) { - //execute commands on panel open - try { - List commands = cf.getStringList("panels." + panels + ".commands-on-open"); - for (int i = 0; commands.size() - 1 >= i; i++) { - int val = commandPayWall(p,commands.get(i)); - if(val == 0){ - break; - } - if(val == 2){ - commandTags(p, commands.get(i)); - } - } - }catch(Exception s){ - p.sendMessage(papi(tag + config.getString("config.format.error") + " " + "commands-on-open: " + cf.getString("panels." + panels + ".commands-on-open"))); - } - } - openGui(panels, p, cf,1,0); - if(sendOpenedMessage) { - sender.sendMessage(papi( tag + ChatColor.GREEN + "Panel Opened for " + p.getDisplayName())); - } - } catch (Exception r) { - debug(r); - sender.sendMessage(papi(tag + config.getString("config.format.notitem"))); - } - }else{ - sender.sendMessage(papi(tag + config.getString("config.format.perms"))); - } - return; - } - sender.sendMessage(papi(tag + config.getString("config.format.perms"))); - } - - //this will give a hotbar item to a player - public void giveHotbarItem(CommandSender sender, Player p, String panels, YamlConfiguration cf, boolean sendGiveMessage){ - String tag = config.getString("config.format.tag") + " "; - if (sender.hasPermission("commandpanel.item." + cf.getString("panels." + panels + ".perm")) && cf.contains("panels." + panels + ".open-with-item")) { - try { - if (cf.contains("panels." + panels + ".disabled-worlds")) { - List disabledWorlds = cf.getStringList("panels." + panels + ".disabled-worlds"); - if (disabledWorlds.contains(p.getWorld().getName())) { - //panel cannot be used in the players world! - if (Objects.requireNonNull(config.getString("config.disabled-world-message")).equalsIgnoreCase("true")) { - sender.sendMessage(papi(tag + ChatColor.RED + "Panel is disabled in the world!")); - } - return; - } - } - }catch(NullPointerException offlinePlayer){ - //SKIP because player is offline - sender.sendMessage(papi(tag + config.getString("config.format.notitem"))); - return; - } - ItemStack s; - try { - s = makeItemFromConfig(Objects.requireNonNull(cf.getConfigurationSection("panels." + panels + ".open-with-item")), p, false, true); - }catch(Exception n){ - sender.sendMessage(papi(tag + config.getString("config.format.error") + " open-with-item: material")); - return; - } - setName(s, cf.getString("panels." + panels + ".open-with-item.name"), cf.getStringList("panels." + panels + ".open-with-item.lore"),p,false, true); - //if the sender has OTHER perms, or if sendGiveMessage is false, implying it is not for another person - if(sender.hasPermission("commandpanel.other") || !sendGiveMessage) { - try { - if(cf.contains("panels." + panels + ".open-with-item.stationary")) { - p.getInventory().setItem(Integer.parseInt(Objects.requireNonNull(cf.getString("panels." + panels + ".open-with-item.stationary"))), s); - }else{ - p.getInventory().addItem(s); - } - if(sendGiveMessage) { - sender.sendMessage(papi( tag + ChatColor.GREEN + "Item Given to " + p.getDisplayName())); - } - } catch (Exception r) { - sender.sendMessage(papi(tag + config.getString("config.format.notitem"))); - } - }else{ - sender.sendMessage(papi(tag + config.getString("config.format.perms"))); - } - return; - } - if (!cf.contains("panels." + panels + ".open-with-item")) { - sender.sendMessage(papi(tag + config.getString("config.format.noitem"))); - return; - } - sender.sendMessage(papi(tag + config.getString("config.format.perms"))); - } - //used to translate hex colours into ChatColors public String translateHexColorCodes(String message) { final Pattern hexPattern = Pattern.compile("#" + "([A-Fa-f0-9]{6})"); diff --git a/src/me/rockyhawk/commandPanels/commands/commandpanel.java b/src/me/rockyhawk/commandPanels/commands/commandpanel.java index b03604e..e0bbde3 100644 --- a/src/me/rockyhawk/commandPanels/commands/commandpanel.java +++ b/src/me/rockyhawk/commandPanels/commands/commandpanel.java @@ -74,7 +74,7 @@ public class commandpanel implements CommandExecutor { //do console command command if(args.length == 2){ if(!args[1].equals("item")){ - plugin.openCommandPanel(sender,plugin.getServer().getPlayer(args[1]),panels,cf,true); + plugin.openVoids.openCommandPanel(sender,plugin.getServer().getPlayer(args[1]),panels,cf,true); return true; }else{ sender.sendMessage(plugin.papi(tag + ChatColor.RED + "Usage: /cp [item] [player]")); @@ -82,7 +82,7 @@ public class commandpanel implements CommandExecutor { } }else if(args.length == 3){ if (args[1].equals("item")) { - plugin.giveHotbarItem(sender,plugin.getServer().getPlayer(args[2]),panels,cf,true); + plugin.openVoids.giveHotbarItem(sender,plugin.getServer().getPlayer(args[2]),panels,cf,true); return true; }else{ sender.sendMessage(plugin.papi(tag + ChatColor.RED + "Usage: /cp item [player]")); @@ -97,17 +97,17 @@ public class commandpanel implements CommandExecutor { Player p = (Player) sender; //do player command if (args.length == 1) { - plugin.openCommandPanel(sender, p, panels, cf,false); + plugin.openVoids.openCommandPanel(sender, p, panels, cf,false); return true; }else if(args.length == 2){ if (args[1].equals("item")) { - plugin.giveHotbarItem(sender, p, panels, cf, false); + plugin.openVoids.giveHotbarItem(sender, p, panels, cf, false); }else{ - plugin.openCommandPanel(sender, plugin.getServer().getPlayer(args[1]), panels, cf,true); + plugin.openVoids.openCommandPanel(sender, plugin.getServer().getPlayer(args[1]), panels, cf,true); } return true; }else if(args.length == 3){ - plugin.giveHotbarItem(sender, plugin.getServer().getPlayer(args[2]), panels, cf,true); + plugin.openVoids.giveHotbarItem(sender, plugin.getServer().getPlayer(args[2]), panels, cf,true); return true; } } diff --git a/src/me/rockyhawk/commandPanels/commands/commandpanelcustom.java b/src/me/rockyhawk/commandPanels/commands/commandpanelcustom.java index 5f1f058..6f630bb 100644 --- a/src/me/rockyhawk/commandPanels/commands/commandpanelcustom.java +++ b/src/me/rockyhawk/commandPanels/commands/commandpanelcustom.java @@ -67,7 +67,7 @@ public class commandpanelcustom implements Listener { } e.setCancelled(true); try { - plugin.openCommandPanel(p,p,panel,cf,false); + plugin.openVoids.openCommandPanel(p,p,panel,cf,false); }catch(Exception er){ //do nothing p.sendMessage(plugin.papi(tag + ChatColor.RED + "Error opening panel!")); diff --git a/src/me/rockyhawk/commandPanels/generatePanels/newGenUtils.java b/src/me/rockyhawk/commandPanels/generatePanels/newGenUtils.java index 640365b..41196d3 100644 --- a/src/me/rockyhawk/commandPanels/generatePanels/newGenUtils.java +++ b/src/me/rockyhawk/commandPanels/generatePanels/newGenUtils.java @@ -16,6 +16,7 @@ import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.PotionMeta; +import org.bukkit.inventory.meta.SkullMeta; import java.io.File; import java.io.IOException; @@ -52,6 +53,7 @@ public class newGenUtils implements Listener { } } } + @EventHandler public void onInventoryOpenEvent(InventoryOpenEvent e) { HumanEntity h = e.getPlayer(); @@ -61,6 +63,8 @@ public class newGenUtils implements Listener { generatePanel(p,e.getInventory()); } } + + @SuppressWarnings("deprecation") void generatePanel(Player p, Inventory inv){ ItemStack[] cont = inv.getContents(); String tag = plugin.config.getString("config.format.tag") + " "; @@ -101,8 +105,13 @@ public class newGenUtils implements Listener { try{ //make the item here if(cont[i].getType() == Material.PLAYER_HEAD){ + SkullMeta meta = (SkullMeta) cont[i].getItemMeta(); if(plugin.getHeadBase64(cont[i]) != null){ + //check for base64 file.addDefault("panels." + date + ".item." + i + ".material", "cps= " + plugin.getHeadBase64(cont[i])); + }else if(meta.hasOwner()){ + //check for skull owner + file.addDefault("panels." + date + ".item." + i + ".material", "cps= " + meta.getOwner()); }else{ file.addDefault("panels." + date + ".item." + i + ".material", cont[i].getType().toString()); } diff --git a/src/me/rockyhawk/commandPanels/ingameEditor/cpIngameEditCommand.java b/src/me/rockyhawk/commandPanels/ingameEditor/cpIngameEditCommand.java index 5554924..f093342 100644 --- a/src/me/rockyhawk/commandPanels/ingameEditor/cpIngameEditCommand.java +++ b/src/me/rockyhawk/commandPanels/ingameEditor/cpIngameEditCommand.java @@ -111,7 +111,7 @@ public class cpIngameEditCommand implements CommandExecutor { return true; } if (args.length == 0) { - plugin.openEditorGui(p,0); + plugin.editorGuis.openEditorGui(p,0); return true; } if (args.length == 1) { diff --git a/src/me/rockyhawk/commandPanels/ingameEditor/editorUserInput.java b/src/me/rockyhawk/commandPanels/ingameEditor/editorUserInput.java index 04660bf..c17ca5a 100644 --- a/src/me/rockyhawk/commandPanels/ingameEditor/editorUserInput.java +++ b/src/me/rockyhawk/commandPanels/ingameEditor/editorUserInput.java @@ -69,7 +69,7 @@ public class editorUserInput implements Listener { if(section.startsWith("panel.")){ plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { public void run() { - plugin.openEditorGui(p, 0); //I have to do this to run regular Bukkit voids in an ASYNC Event + plugin.editorGuis.openEditorGui(p, 0); //I have to do this to run regular Bukkit voids in an ASYNC Event } }); }else if(section.startsWith("item.")) { diff --git a/src/me/rockyhawk/commandPanels/ingameEditor/editorUtils.java b/src/me/rockyhawk/commandPanels/ingameEditor/editorUtils.java index 9f817a7..9cb7ff1 100644 --- a/src/me/rockyhawk/commandPanels/ingameEditor/editorUtils.java +++ b/src/me/rockyhawk/commandPanels/ingameEditor/editorUtils.java @@ -11,6 +11,7 @@ import org.bukkit.event.inventory.*; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.InventoryView; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.SkullMeta; import java.io.File; import java.io.IOException; @@ -67,7 +68,7 @@ public class editorUtils implements Listener { //previous page button try { if (Objects.requireNonNull(e.getCurrentItem()).getType() == Material.PAPER) { - plugin.openEditorGui(p, -1); + plugin.editorGuis.openEditorGui(p, -1); p.updateInventory(); return; } @@ -84,7 +85,7 @@ public class editorUtils implements Listener { //next page button try{ if(Objects.requireNonNull(e.getCurrentItem()).getType() == Material.PAPER){ - plugin.openEditorGui(p, 1); + plugin.editorGuis.openEditorGui(p, 1); p.updateInventory(); return; } @@ -115,7 +116,7 @@ public class editorUtils implements Listener { int count = 0; for(String panelName : panelNames){ if(panelName.equals(ChatColor.stripColor(Objects.requireNonNull(e.getCurrentItem().getItemMeta()).getDisplayName()))){ - plugin.openPanelSettings(p,panelName,panelYaml.get(count)); + plugin.editorGuis.openPanelSettings(p,panelName,panelYaml.get(count)); return; } count +=1; @@ -251,7 +252,7 @@ public class editorUtils implements Listener { inventoryItemSettingsOpening.add(p.getName()); //refresh the yaml config file = YamlConfiguration.loadConfiguration(new File(plugin.panelsf + File.separator + fileName)); - plugin.openItemSettings(p,panelName,file,e.getSlot()); + plugin.editorGuis.openItemSettings(p,panelName,file,e.getSlot()); return; } if(tempEdit.contains("panels." + panelName + ".temp." + p.getName() + ".material")) { @@ -405,7 +406,7 @@ public class editorUtils implements Listener { p.closeInventory(); } if(e.getSlot() == 18){ - plugin.openEditorGui(p,0); + plugin.editorGuis.openEditorGui(p,0); p.updateInventory(); } if(e.getSlot() == 40){ @@ -576,6 +577,8 @@ public class editorUtils implements Listener { plugin.debug(s); } } + + @SuppressWarnings("deprecation") public void onEditPanelClose(Player p, Inventory inv, InventoryView invView) { String tag = plugin.config.getString("config.format.tag") + " "; if(inv.getType() != InventoryType.CHEST){ @@ -645,6 +648,11 @@ public class editorUtils implements Listener { if(plugin.getHeadBase64(cont) != null){ file.set("panels." + panelName + ".item." + i + ".material", "cps= " + plugin.getHeadBase64(cont)); } + //check for skull owner + SkullMeta meta = (SkullMeta) cont.getItemMeta(); + if(meta.hasOwner()){ + file.set("panels." + panelName + ".item." + i + ".material", "cps= " + meta.getOwner()); + } } if(cont.getAmount() != 1){ file.set("panels." + panelName + ".item." + i + ".stack", cont.getAmount()); diff --git a/src/me/rockyhawk/commandPanels/openWithItem/utilsOpenWithItem.java b/src/me/rockyhawk/commandPanels/openWithItem/utilsOpenWithItem.java index 3a64374..53a51b2 100644 --- a/src/me/rockyhawk/commandPanels/openWithItem/utilsOpenWithItem.java +++ b/src/me/rockyhawk/commandPanels/openWithItem/utilsOpenWithItem.java @@ -43,14 +43,14 @@ public class utilsOpenWithItem implements Listener { if(tempFile.contains("panels." + tempName + ".open-with-item") && Objects.requireNonNull(e.getClickedInventory()).getType() == InventoryType.PLAYER) { try{ assert clicked != null; - if (clicked.getType() == new ItemStack(Objects.requireNonNull(plugin.makeItemFromConfig(Objects.requireNonNull(tempFile.getConfigurationSection("panels." + tempName + ".open-with-item")), p, false, true).getType()), 1).getType()) { + if (clicked.getType() == new ItemStack(Objects.requireNonNull(plugin.itemCreate.makeItemFromConfig(Objects.requireNonNull(tempFile.getConfigurationSection("panels." + tempName + ".open-with-item")), p, false, true).getType()), 1).getType()) { if ((plugin.papi( Objects.requireNonNull(clicked.getItemMeta()).getDisplayName()).equals(plugin.papi( Objects.requireNonNull(tempFile.getString("panels." + tempName + ".open-with-item.name")))))) { //cancel the click item event if (tempFile.contains("panels." + tempName + ".open-with-item.stationary")) { if (e.getSlot() == Integer.parseInt(Objects.requireNonNull(tempFile.getString("panels." + tempName + ".open-with-item.stationary")))) { e.setCancelled(true); p.updateInventory(); - plugin.openCommandPanel(p,p,tempName,tempFile,false); + plugin.openVoids.openCommandPanel(p,p,tempName,tempFile,false); return; } } @@ -90,7 +90,7 @@ public class utilsOpenWithItem implements Listener { if(tempFile.contains("panels." + tempName + ".open-with-item")) { try{ assert clicked != null; - if (clicked.getType() == new ItemStack(Objects.requireNonNull(plugin.makeItemFromConfig(Objects.requireNonNull(tempFile.getConfigurationSection("panels." + tempName + ".open-with-item")), p, false, true).getType()), 1).getType()) { + if (clicked.getType() == new ItemStack(Objects.requireNonNull(plugin.itemCreate.makeItemFromConfig(Objects.requireNonNull(tempFile.getConfigurationSection("panels." + tempName + ".open-with-item")), p, false, true).getType()), 1).getType()) { if ((plugin.papi( Objects.requireNonNull(clicked.getItemMeta()).getDisplayName()).equals(plugin.papi(Objects.requireNonNull(tempFile.getString("panels." + tempName + ".open-with-item.name")))))) { //cancel the click item event if (tempFile.contains("panels." + tempName + ".open-with-item.stationary")) { @@ -100,7 +100,7 @@ public class utilsOpenWithItem implements Listener { } e.setCancelled(true); p.updateInventory(); - plugin.openCommandPanel(p,p,tempName,tempFile,false); + plugin.openVoids.openCommandPanel(p,p,tempName,tempFile,false); return; } } @@ -152,7 +152,7 @@ public class utilsOpenWithItem implements Listener { } } if (p.hasPermission("commandpanel.panel." + temp.getString("panels." + key + ".perm")) && temp.contains("panels." + key + ".open-with-item")) { - ItemStack s = plugin.makeItemFromConfig(Objects.requireNonNull(temp.getConfigurationSection("panels." + key + ".open-with-item")), p, false, true); + ItemStack s = plugin.itemCreate.makeItemFromConfig(Objects.requireNonNull(temp.getConfigurationSection("panels." + key + ".open-with-item")), p, false, true); if(temp.contains("panels." + key + ".open-with-item.stationary")) { if (0 <= Integer.parseInt(Objects.requireNonNull(temp.getString("panels." + key + ".open-with-item.stationary"))) && 8 >= Integer.parseInt(Objects.requireNonNull(temp.getString("panels." + key + ".open-with-item.stationary")))) { p.getInventory().setItem(Integer.parseInt(Objects.requireNonNull(temp.getString("panels." + key + ".open-with-item.stationary"))), s); @@ -194,7 +194,7 @@ public class utilsOpenWithItem implements Listener { } } if (p.hasPermission("commandpanel.panel." + temp.getString("panels." + key + ".perm")) && temp.contains("panels." + key + ".open-with-item")) { - ItemStack s = plugin.makeItemFromConfig(Objects.requireNonNull(temp.getConfigurationSection("panels." + key + ".open-with-item")), p, false, true); + ItemStack s = plugin.itemCreate.makeItemFromConfig(Objects.requireNonNull(temp.getConfigurationSection("panels." + key + ".open-with-item")), p, false, true); if(temp.contains("panels." + key + ".open-with-item.stationary") && 0 <= Integer.parseInt(Objects.requireNonNull(temp.getString("panels." + key + ".open-with-item.stationary"))) && 8 >= Integer.parseInt(Objects.requireNonNull(temp.getString("panels." + key + ".open-with-item.stationary")))){ p.getInventory().setItem(Integer.parseInt(Objects.requireNonNull(temp.getString("panels." + key + ".open-with-item.stationary"))), s); } @@ -228,7 +228,7 @@ public class utilsOpenWithItem implements Listener { key = (String) var10.next(); if (p.hasPermission("commandpanel.panel." + temp.getString("panels." + key + ".perm")) && temp.contains("panels." + key + ".open-with-item")) { if(temp.contains("panels." + key + ".open-with-item.stationary")){ - ItemStack s = plugin.makeItemFromConfig(Objects.requireNonNull(temp.getConfigurationSection("panels." + key + ".open-with-item")), p, false, true); + ItemStack s = plugin.itemCreate.makeItemFromConfig(Objects.requireNonNull(temp.getConfigurationSection("panels." + key + ".open-with-item")), p, false, true); e.getDrops().remove(s); } } @@ -266,7 +266,7 @@ public class utilsOpenWithItem implements Listener { continue; } } - ItemStack s = plugin.makeItemFromConfig(Objects.requireNonNull(temp.getConfigurationSection("panels." + key + ".open-with-item")), p, false, true); + ItemStack s = plugin.itemCreate.makeItemFromConfig(Objects.requireNonNull(temp.getConfigurationSection("panels." + key + ".open-with-item")), p, false, true); if(temp.contains("panels." + key + ".open-with-item.stationary") && 0 <= Integer.parseInt(Objects.requireNonNull(temp.getString("panels." + key + ".open-with-item.stationary"))) && 8 >= Integer.parseInt(Objects.requireNonNull(temp.getString("panels." + key + ".open-with-item.stationary")))){ p.getInventory().setItem(Integer.parseInt(Objects.requireNonNull(temp.getString("panels." + key + ".open-with-item.stationary"))), s); } @@ -314,7 +314,7 @@ public class utilsOpenWithItem implements Listener { if(tempFile.contains("panels." + tempName + ".open-with-item")) { try{ assert clicked != null; - if (clicked.getType() == new ItemStack(Objects.requireNonNull(plugin.makeItemFromConfig(Objects.requireNonNull(tempFile.getConfigurationSection("panels." + tempName + ".open-with-item")), p, false, true).getType()), 1).getType()) { + if (clicked.getType() == new ItemStack(Objects.requireNonNull(plugin.itemCreate.makeItemFromConfig(Objects.requireNonNull(tempFile.getConfigurationSection("panels." + tempName + ".open-with-item")), p, false, true).getType()), 1).getType()) { if ((plugin.papi( Objects.requireNonNull(clicked.getItemMeta()).getDisplayName()).equals(plugin.papi( Objects.requireNonNull(tempFile.getString("panels." + tempName + ".open-with-item.name")))))) { //cancel the click item event if (tempFile.contains("panels." + tempName + ".open-with-item.stationary")) { diff --git a/src/me/rockyhawk/commandPanels/panelBlocks/panelBlockOnClick.java b/src/me/rockyhawk/commandPanels/panelBlocks/panelBlockOnClick.java index bb715b2..291582e 100644 --- a/src/me/rockyhawk/commandPanels/panelBlocks/panelBlockOnClick.java +++ b/src/me/rockyhawk/commandPanels/panelBlocks/panelBlockOnClick.java @@ -46,7 +46,7 @@ public class panelBlockOnClick implements Listener { cf = YamlConfiguration.loadConfiguration(new File(plugin.panelsf + File.separator + plugin.panelFiles.get(Integer.parseInt(temp[1])))); } } - plugin.openCommandPanel(p,p,panelName,cf,false); + plugin.openVoids.openCommandPanel(p,p,panelName,cf,false); return; } } diff --git a/src/me/rockyhawk/commandPanels/premium/commandpanelUserInput.java b/src/me/rockyhawk/commandPanels/premium/commandpanelUserInput.java index a156800..5fd111a 100644 --- a/src/me/rockyhawk/commandPanels/premium/commandpanelUserInput.java +++ b/src/me/rockyhawk/commandPanels/premium/commandpanelUserInput.java @@ -1,7 +1,7 @@ package me.rockyhawk.commandPanels.premium; +import me.rockyhawk.commandPanels.ClassResources.CommandTags; import me.rockyhawk.commandPanels.commandpanels; -import org.bukkit.ChatColor; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.AsyncPlayerChatEvent; @@ -35,7 +35,7 @@ public class commandpanelUserInput implements Listener { e.setCancelled(true); plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { public void run() { - plugin.commandTags(e.getPlayer(), command); //I have to do this to run regular Bukkit voids in an ASYNC Event + new CommandTags(plugin).commandTags(e.getPlayer(), command); //I have to do this to run regular Bukkit voids in an ASYNC Event } }); } diff --git a/src/me/rockyhawk/commandPanels/utils.java b/src/me/rockyhawk/commandPanels/utils.java index 9cb104d..ee213cf 100644 --- a/src/me/rockyhawk/commandPanels/utils.java +++ b/src/me/rockyhawk/commandPanels/utils.java @@ -90,7 +90,7 @@ public class utils implements Listener { return; } //loop through possible hasvalue/hasperm 1,2,3,etc - String section = plugin.hasSection(cf.getConfigurationSection("panels." + panel + ".item." + e.getSlot()), p); + String section = plugin.itemCreate.hasSection(cf.getConfigurationSection("panels." + panel + ".item." + e.getSlot()), p); //this will remove any pending user inputs, if there is already something there from a previous item for(int o = 0; plugin.userInputStrings.size() > o; o++){ if(plugin.userInputStrings.get(o)[0].equals(p.getName())){ @@ -157,12 +157,12 @@ public class utils implements Listener { commands.set(i, commands.get(i).replaceAll("%cp-clicked%", "Air")); } //end custom PlaceHolders - int val = plugin.commandPayWall(p,commands.get(i)); + int val = plugin.commandTags.commandPayWall(p,commands.get(i)); if(val == 0){ return; } if(val == 2){ - plugin.commandTags(p, commands.get(i)); + plugin.commandTags.commandTags(p, commands.get(i)); } } } @@ -193,6 +193,7 @@ public class utils implements Listener { for(String[] tempName : plugin.panelNames){ if(tempName[0].equals(panelName)){ panelConfig = YamlConfiguration.loadConfiguration(new File(plugin.panelsf + File.separator + plugin.panelFiles.get(Integer.parseInt(tempName[1])))); + break; } } if(panelConfig == null){ @@ -218,7 +219,7 @@ public class utils implements Listener { if(forced){ plugin.openGui(panelName, p, panelConfig, 1, 0); }else{ - plugin.openCommandPanel(p, p, panelName, panelConfig, false); + plugin.openVoids.openCommandPanel(p, p, panelName, panelConfig, false); } } }