This commit is contained in:
rockyhawk64 2020-09-30 11:43:19 +10:00
parent 5e5b4a723c
commit 5104d8e93f
10 changed files with 492 additions and 195 deletions

View File

@ -1,7 +1,7 @@
<component name="libraryTable">
<library name="PlaceholderAPI-2.10.8">
<CLASSES>
<root url="jar://$APPLICATION_HOME_DIR$/Tools/Build Tools/Jar Libraries/PlaceholderAPI-2.10.8.jar!/" />
<root url="jar://$PROJECT_DIR$/../../Tools/Build Tools/Jar Libraries/PlaceholderAPI-2.10.8.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />

View File

@ -12,8 +12,8 @@
<orderEntry type="library" name="TokenManager-3.2.4" level="project" />
<orderEntry type="library" name="Vault" level="project" />
<orderEntry type="library" name="VotingPlugin" level="project" />
<orderEntry type="library" name="PlaceholderAPI-2.10.8" level="project" />
<orderEntry type="library" name="spigot-1.16.1" level="project" />
<orderEntry type="library" name="spigot-1.13.2" level="project" />
<orderEntry type="library" name="PlaceholderAPI-2.10.8" level="project" />
</component>
</module>

View File

@ -9,7 +9,6 @@ panels:
rows: 4
title: '&6[&bExample Panel&6]&f Welcome!'
command: example
sound-on-open: NOTE_PLING
empty: STAINED_GLASS_PANE
emptyID: 15
disabled-worlds:

View File

@ -1,4 +1,4 @@
version: 3.11.2
version: 3.12.0
main: me.rockyhawk.commandpanels.CommandPanels
name: CommandPanels
author: RockyHawk

View File

@ -3,9 +3,13 @@ package me.rockyhawk.commandpanels.classresources;
import me.arcaniax.hdb.api.HeadDatabaseAPI;
import me.rockyhawk.commandpanels.CommandPanels;
import org.bukkit.*;
import org.bukkit.block.banner.Pattern;
import org.bukkit.block.banner.PatternType;
import org.bukkit.configuration.ConfigurationSection;
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.*;
@ -17,6 +21,8 @@ import org.bukkit.potion.PotionType;
import javax.swing.*;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
@ -195,6 +201,20 @@ public class ItemCreation {
customMeta.setCustomModelData(Integer.parseInt(Objects.requireNonNull(itemSection.getString("customdata"))));
s.setItemMeta(customMeta);
}
try {
if (itemSection.contains("banner")) {
BannerMeta bannerMeta = (BannerMeta) s.getItemMeta();
List<Pattern> patterns = new ArrayList<>(); //Load patterns in order top to bottom
for (String temp : itemSection.getStringList("banner")) {
String[] dyePattern = temp.split(",");
patterns.add(new Pattern(DyeColor.valueOf(dyePattern[0]), PatternType.valueOf(dyePattern[1]))); //load patterns in config: RED:STRIPE_TOP
}
bannerMeta.setPatterns(patterns);
s.setItemMeta(bannerMeta);
}
}catch(Exception ignore){
//not a banner or error
}
if (itemSection.contains("leatherarmor")) {
//if the item is leather armor, change the colour to this
try {
@ -375,4 +395,72 @@ public class ItemCreation {
}
return "";
}
@SuppressWarnings("deprecation")
public YamlConfiguration generatePanelFile(String panelName, Inventory inv, YamlConfiguration file){
ItemStack cont;
for(int i = 0; inv.getSize() > i; i++){
cont = inv.getItem(i);
//repeat through all the items in the editor
try{
//make the item here
if(cont == null){
//remove if items have been removed
if(file.contains("panels." + panelName + ".item." + i)){
file.set("panels." + panelName + ".item." + i, null);
continue;
}
}
if(plugin.legacy.isLegacy()){
if (cont.getDurability() != 0 && !cont.getType().toString().equals("SKULL_ITEM")) {
file.set("panels." + panelName + ".item." + i + ".ID", cont.getDurability());
}
}
if(file.contains("panels." + panelName + ".item." + i + ".material")){
if(Objects.requireNonNull(file.getString("panels." + panelName + ".item." + i + ".material")).contains("%") || Objects.requireNonNull(file.getString("panels." + panelName + ".item." + i + ".material")).contains("=")){
if(!plugin.getHeads.ifSkullOrHead(cont.getType().toString())){
file.set("panels." + panelName + ".item." + i + ".material", cont.getType().toString());
}
}else{
file.set("panels." + panelName + ".item." + i + ".material", cont.getType().toString());
}
}else{
file.set("panels." + panelName + ".item." + i + ".material", cont.getType().toString());
}
if(plugin.getHeads.ifSkullOrHead(cont.getType().toString())){
SkullMeta meta = (SkullMeta) cont.getItemMeta();
//disable for legacy as is broken
if(!plugin.legacy.isLegacy()) {
if (plugin.customHeads.getHeadBase64(cont) != null) {
//inject base64 here
file.set("panels." + panelName + ".item." + i + ".material", "cps= " + plugin.customHeads.getHeadBase64(cont));
} else if (meta.hasOwner()) {
//check for skull owner
file.set("panels." + panelName + ".item." + i + ".material", "cps= " + meta.getOwner());
}
}
}
try {
BannerMeta bannerMeta = (BannerMeta) cont.getItemMeta();
List<String> dyePattern = new ArrayList<>();
for(Pattern pattern : bannerMeta.getPatterns()) { //sublist to skip first value
dyePattern.add(pattern.getColor().toString() + "," + pattern.getPattern().toString());
}
file.set("panels." + panelName + ".item." + i + ".banner", dyePattern);
}catch(Exception ignore){
//not a banner
file.set("panels." + panelName + ".item." + i + ".banner", null);
}
file.set("panels." + panelName + ".item." + i + ".stack", cont.getAmount());
if(!cont.getEnchantments().isEmpty()){
file.set("panels." + panelName + ".item." + i + ".enchanted", "true");
}
file.set("panels." + panelName + ".item." + i + ".name", Objects.requireNonNull(cont.getItemMeta()).getDisplayName());
file.set("panels." + panelName + ".item." + i + ".lore", Objects.requireNonNull(cont.getItemMeta()).getLore());
}catch(Exception n){
//skip over an item that spits an error
}
}
return file;
}
}

View File

@ -1,19 +1,14 @@
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.ConfigurationSection;
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;
@ -181,6 +176,22 @@ public class OpenEditorGuis {
plugin.setName(temp, ChatColor.WHITE + "Panel Rows", lore, p,true, true);
i.setItem(23, temp);
temp = new ItemStack(Material.STONE, 1);
lore.clear();
lore.add(ChatColor.GRAY + "Worlds that cannot access the panel");
lore.add(ChatColor.GRAY + "- Left click to add world");
lore.add(ChatColor.GRAY + "- Right click to remove world");
if (cf.contains("panels." + panelName + ".disabled-worlds")) {
lore.add(ChatColor.WHITE + "-----------------------------");
int count = 1;
for (String tempLore : cf.getStringList("panels." + panelName + ".disabled-worlds")) {
lore.add(ChatColor.WHITE + Integer.toString(count) + ") " + tempLore);
count += 1;
}
}
plugin.setName(temp, ChatColor.WHITE + "Disabled Worlds", lore, p,true, true);
i.setItem(25, temp);
temp = new ItemStack(Material.GLASS, 1);
lore.clear();
lore.add(ChatColor.GRAY + "Fill empty slots with an item");
@ -304,7 +315,8 @@ public class OpenEditorGuis {
p.openInventory(i);
}
public void openItemSettings(Player p, String panelName, YamlConfiguration cf, int itemNumber) {
//section is similar to hassection, but with the slot eg, 1.hasperm.hasvalue
public void openItemSettings(Player p, String panelName, ConfigurationSection cf, String section) {
Inventory i = Bukkit.createInventory(null, 36, ChatColor.stripColor("Item Settings: " + panelName));
List<String> lore = new ArrayList();
ItemStack temp;
@ -318,10 +330,10 @@ public class OpenEditorGuis {
//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"), "")) {
if (cf.contains("name")) {
if (!Objects.equals(cf.getString("name"), "")) {
lore.add(ChatColor.WHITE + "--------------------------------");
lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".item." + itemNumber + ".name"));
lore.add(ChatColor.WHITE + cf.getString("name"));
}
}
plugin.setName(temp, ChatColor.WHITE + "Item Name", lore, p,true, true);
@ -332,10 +344,10 @@ public class OpenEditorGuis {
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")) {
if (cf.contains("commands")) {
lore.add(ChatColor.WHITE + "-----------------------------");
int count = 1;
for (String tempLore : cf.getStringList("panels." + panelName + ".item." + itemNumber + ".commands")) {
for (String tempLore : cf.getStringList("commands")) {
lore.add(ChatColor.WHITE + Integer.toString(count) + ") " + tempLore);
count += 1;
}
@ -346,10 +358,10 @@ public class OpenEditorGuis {
temp = new ItemStack(Material.ENCHANTED_BOOK, 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"), "")) {
if (cf.contains("enchanted")) {
if (!Objects.equals(cf.getString("name"), "")) {
lore.add(ChatColor.WHITE + "--------------------------------");
lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".item." + itemNumber + ".enchanted"));
lore.add(ChatColor.WHITE + cf.getString("enchanted"));
}
} else {
lore.add(ChatColor.WHITE + "--------------------------------");
@ -361,10 +373,10 @@ public class OpenEditorGuis {
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"), "")) {
if (cf.contains("potion")) {
if (!Objects.equals(cf.getString("potion"), "")) {
lore.add(ChatColor.WHITE + "--------------------------------");
lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".item." + itemNumber + ".potion"));
lore.add(ChatColor.WHITE + cf.getString("potion"));
}
}
plugin.setName(temp, ChatColor.WHITE + "Item Potion Effect", lore, p,true, true);
@ -375,10 +387,10 @@ public class OpenEditorGuis {
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")) {
if (cf.contains("lore")) {
lore.add(ChatColor.WHITE + "-----------------------------");
int count = 1;
for (String tempLore : cf.getStringList("panels." + panelName + ".item." + itemNumber + ".lore")) {
for (String tempLore : cf.getStringList("lore")) {
lore.add(ChatColor.WHITE + Integer.toString(count) + ") " + tempLore);
count += 1;
}
@ -389,14 +401,14 @@ public class OpenEditorGuis {
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"), "")) {
if (cf.contains("stack")) {
if (!Objects.equals(cf.getString("stack"), "")) {
try {
temp.setAmount(Integer.parseInt(Objects.requireNonNull(cf.getString("panels." + panelName + ".item." + itemNumber + ".stack"))));
temp.setAmount(Integer.parseInt(Objects.requireNonNull(cf.getString("stack"))));
} catch (Exception ignored) {
}
lore.add(ChatColor.WHITE + "--------------------------------");
lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".item." + itemNumber + ".stack"));
lore.add(ChatColor.WHITE + cf.getString("stack"));
}
}
plugin.setName(temp, ChatColor.WHITE + "Item Stack Size", lore, p, true, true);
@ -406,24 +418,38 @@ public class OpenEditorGuis {
temp = new ItemStack(Material.PAINTING, 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"), "")) {
if (cf.contains("customdata")) {
if (!Objects.equals(cf.getString("customdata"), "")) {
lore.add(ChatColor.WHITE + "--------------------------------");
lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".item." + itemNumber + ".customdata"));
lore.add(ChatColor.WHITE + cf.getString("customdata"));
}
}
plugin.setName(temp, ChatColor.WHITE + "Custom Model Data", lore, p, true, true);
i.setItem(23, temp);
}
/*show the compass that opens the viewer for the sections..
it will only show the sections immidiatly under the other, so
if there is a hasperm inside another hasperm, it will not appear
until the other hasperm is opened.
*/
temp = new ItemStack(Material.COMPASS, 1);
lore.clear();
lore.add(ChatColor.GRAY + "View the items different");
lore.add(ChatColor.GRAY + "Sections and add complex values.");
lore.add(ChatColor.WHITE + "--------------------------------");
lore.add(ChatColor.WHITE + section);
plugin.setName(temp, ChatColor.WHITE + "Item Sections", lore, p, true, true);
i.setItem(31, 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"), "")) {
if (cf.contains("leatherarmor")) {
if (!Objects.equals(cf.getString("leatherarmor"), "")) {
lore.add(ChatColor.WHITE + "--------------------------------");
lore.add(ChatColor.WHITE + cf.getString("panels." + panelName + ".item." + itemNumber + ".leatherarmor"));
lore.add(ChatColor.WHITE + cf.getString("leatherarmor"));
}
}
plugin.setName(temp, ChatColor.WHITE + "Leather Armor Colour", lore, p, true, true);
@ -433,13 +459,73 @@ public class OpenEditorGuis {
plugin.setName(temp, ChatColor.RED + "Back", null, p, true, true);
i.setItem(27, temp);
temp = plugin.itemCreate.makeItemFromConfig(cf.getConfigurationSection("panels." + panelName + ".item." + itemNumber),p,false,false);
temp = plugin.itemCreate.makeItemFromConfig(cf,p,false,false);
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);
plugin.setName(temp, ChatColor.WHITE + "Item Section " + section + " Preview", lore, p, true, true);
i.setItem(35, temp);
p.openInventory(i);
}
//section is similar to hassection, but with the slot eg, 1.hasperm.hasvalue
public void openItemSections(Player p, String panelName, ConfigurationSection cf, String itemSection) {
Inventory i = Bukkit.createInventory(null, 45, ChatColor.stripColor("Item Sections: " + panelName));
ItemStack temp;
int slot = 0;
for(String section : cf.getKeys(false)){
//get list of item sections
if(slot > 35){
break;
}
if(section.contains("hasperm") || section.contains("hasvalue") || section.contains("hasgreater")){
List<String> lore = new ArrayList<>();
lore.add(ChatColor.GRAY + "Left click to open item");
lore.add(ChatColor.GRAY + "Right click to change below settings");
if(cf.contains(section + ".output")) {
lore.add(ChatColor.WHITE + "Output: " + ChatColor.GRAY + cf.getString(section + ".output"));
}else{
lore.add(ChatColor.WHITE + "Output: " + ChatColor.GRAY + "true");
}
if(cf.contains(section + ".perm")) {
lore.add(ChatColor.WHITE + "Perm: " + ChatColor.GRAY + cf.getString(section + ".perm"));
}
if(cf.contains(section + ".value")) {
lore.add(ChatColor.WHITE + "Value: " + ChatColor.GRAY + cf.getString(section + ".value"));
}
if(cf.contains(section + ".compare")) {
lore.add(ChatColor.WHITE + "Compare: " + ChatColor.GRAY + cf.getString(section + ".compare"));
}
temp = plugin.itemCreate.makeItemFromConfig(cf.getConfigurationSection(section),p,false,false);
plugin.setName(temp, ChatColor.AQUA + section, lore, p,false, true);
i.setItem(slot, temp);
slot++;
}
}
temp = new ItemStack(Material.REDSTONE, 1);
plugin.setName(temp, ChatColor.WHITE + "Remove Section", null, p, true, true);
i.setItem(38, temp);
temp = new ItemStack(Material.SLIME_BALL, 1);
plugin.setName(temp, ChatColor.WHITE + "Add Section", null, p, true, true);
i.setItem(42, temp);
temp = new ItemStack(Material.BARRIER, 1);
plugin.setName(temp, ChatColor.RED + "Back", null, p, true, true);
i.setItem(36, temp);
temp = new ItemStack(Material.BOOK, 1);
List<String> lore = new ArrayList<>();
lore.add(ChatColor.GRAY + "Section Types:");
lore.add(ChatColor.GRAY + "- hasperm");
lore.add(ChatColor.GRAY + "- hasvalue");
lore.add(ChatColor.GRAY + "- hasgreater");
plugin.setName(temp, ChatColor.WHITE + "Item Section " + itemSection, lore, p, true, true);
i.setItem(44, temp);
p.openInventory(i);
}
}

View File

@ -21,10 +21,8 @@ public class Commandpanelsreload implements CommandExecutor {
if (label.equalsIgnoreCase("cpr") || label.equalsIgnoreCase("commandpanelreload") || label.equalsIgnoreCase("cpanelr")) {
if (sender.hasPermission("commandpanel.reload")) {
plugin.reloadPanelFiles();
try {
YamlConfiguration.loadConfiguration(new File(plugin.getDataFolder() + File.separator + "temp.yml")).save(new File(plugin.getDataFolder() + File.separator + "temp.yml"));
} catch (IOException e) {
//skip clearing temp
if(new File(plugin.getDataFolder() + File.separator + "temp.yml").delete()){
//empty
}
plugin.config = YamlConfiguration.loadConfiguration(new File(plugin.getDataFolder() + File.separator + "config.yml"));
tag = plugin.config.getString("config.format.tag") + " ";

View File

@ -3,7 +3,6 @@ package me.rockyhawk.commandpanels.generatepanels;
import me.rockyhawk.commandpanels.CommandPanels;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.Chest;
import org.bukkit.block.DoubleChest;
import org.bukkit.configuration.file.YamlConfiguration;
@ -15,8 +14,6 @@ import org.bukkit.event.inventory.*;
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;
@ -94,59 +91,19 @@ public class GenUtils implements Listener {
}
File folder = new File(plugin.getDataFolder() + File.separator + "panels");
file = YamlConfiguration.loadConfiguration(new File(folder + File.separator + date + ".yml"));
file.addDefault("panels." + date + ".perm", "default");
file.addDefault("panels." + date + ".panelType", "default");
file.addDefault("panels." + date + ".rows", inv.getSize()/9);
file.addDefault("panels." + date + ".title", "&8Generated " + date);
file.set("panels." + date + ".perm", "default");
file.set("panels." + date + ".panelType", "default");
file.set("panels." + date + ".rows", inv.getSize()/9);
file.set("panels." + date + ".title", "&8Generated " + date);
file.addDefault("panels." + date + ".command", date);
if(plugin.legacy.isLegacy()) {
file.addDefault("panels." + date + ".empty", "STAINED_GLASS_PANE");
file.addDefault("panels." + date + ".emptyID", "15");
file.set("panels." + date + ".empty", "STAINED_GLASS_PANE");
file.set("panels." + date + ".emptyID", "15");
}else{
file.addDefault("panels." + date + ".empty", "BLACK_STAINED_GLASS_PANE");
file.set("panels." + date + ".empty", "BLACK_STAINED_GLASS_PANE");
}
for(int i = 0; cont.length > i; i++){
//repeat through all the items in the chest
try{
//make the item here
if(plugin.getHeads.ifSkullOrHead(cont[i].getType().toString())){
SkullMeta meta = (SkullMeta) cont[i].getItemMeta();
if(plugin.customHeads.getHeadBase64(cont[i]) != null){
//check for base64
file.addDefault("panels." + date + ".item." + i + ".material", "cps= " + plugin.customHeads.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());
}
}else {
file.addDefault("panels." + date + ".item." + i + ".material", cont[i].getType().toString());
}
if(plugin.legacy.isLegacy()){
if (cont[i].getDurability() != 0 && !cont[i].getType().toString().equals("SKULL_ITEM") && !cont[i].getType().toString().equals("SKULL_ITEM")) {
file.addDefault("panels." + date + ".item." + i + ".ID", cont[i].getDurability());
}
}
if(cont[i].getAmount() != 1){
file.addDefault("panels." + date + ".item." + i + ".stack", cont[i].getAmount());
}
if(!cont[i].getEnchantments().isEmpty()){
file.addDefault("panels." + date + ".item." + i + ".enchanted", "true");
}
try {
PotionMeta potionMeta = (PotionMeta) cont[i].getItemMeta();
file.addDefault("panels." + date + ".item." + i + ".potion", potionMeta.getBasePotionData().getType().name());
} catch (Exception er) {
//don't add the effect
}
file.addDefault("panels." + date + ".item." + i + ".name", Objects.requireNonNull(cont[i].getItemMeta()).getDisplayName());
file.addDefault("panels." + date + ".item." + i + ".lore", Objects.requireNonNull(cont[i].getItemMeta()).getLore());
}catch(Exception n){
//skip over an item that spits an error
}
}
file.options().copyDefaults(true);
//add items
file = plugin.itemCreate.generatePanelFile(date,inv,file);
try {
file.save(new File(plugin.panelsf + File.separator + date + ".yml"));

View File

@ -4,6 +4,7 @@ import me.rockyhawk.commandpanels.CommandPanels;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@ -61,8 +62,10 @@ public class EditorUserInput implements Listener {
}
if(section.startsWith("panel.")) {
panelSectionCheck(p, section, panelName, panelTitle, cf, panelFile, e);
}else if(section.startsWith("item.")){
}else if(section.startsWith("item:")){
itemSectionCheck(p, section, panelName, cf, panelFile, e);
}else if(section.startsWith("section.")){
itemSectionSectionCheck(p, section, panelName, cf, panelFile, e);
}
plugin.editorInputStrings.remove(temp);
plugin.reloadPanelFiles();
@ -72,13 +75,31 @@ public class EditorUserInput implements Listener {
plugin.editorGuis.openEditorGui(p, 0); //I have to do this to run regular Bukkit voids in an ASYNC Event
}
});
}else if(section.startsWith("item.")) {
}else if(section.startsWith("item:")) {
final YamlConfiguration finalCF = cf;
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
public void run() {
plugin.openGui(panelName, p, finalCF, 3,0); //I have to do this to run regular Bukkit voids in an ASYNC Event
}
});
}else if(section.startsWith("section.")){
String itemSection = ChatColor.stripColor(section.replace("section." + section.split("\\.")[1] + ".", ""));
final ConfigurationSection finalCF = cf.getConfigurationSection("panels." + panelName + ".item." + itemSection);
if(section.contains("change")){
final String changeItemSection = itemSection.substring(0, itemSection.lastIndexOf("."));
final ConfigurationSection changeFinalCF = cf.getConfigurationSection("panels." + panelName + ".item." + changeItemSection);
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
public void run() {
plugin.editorGuis.openItemSections(p,panelName,changeFinalCF,changeItemSection);
}
});
}else{
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
public void run() {
plugin.editorGuis.openItemSections(p,panelName,finalCF,itemSection);
}
});
}
}
return;
}
@ -92,6 +113,7 @@ public class EditorUserInput implements Listener {
return false;
}
}
void panelSectionCheck(Player p, String section, String panelName, String panelTitle, YamlConfiguration cf, File panelFile, AsyncPlayerChatEvent e){
String tag = plugin.config.getString("config.format.tag") + " ";
switch (section) {
@ -240,6 +262,38 @@ public class EditorUserInput implements Listener {
savePanelFile(cf, panelFile);
p.sendMessage(plugin.papi( tag + ChatColor.GREEN + "Removed command line " + e.getMessage()));
break;
case "panel.disabled-worlds.add":
List<String> disabledWorldsAdd = new ArrayList<>();
if(cf.contains("panels." + panelName + ".disabled-worlds")){
disabledWorldsAdd = cf.getStringList("panels." + panelName + ".disabled-worlds");
}
disabledWorldsAdd.add(e.getMessage());
cf.set("panels." + panelName + ".disabled-worlds", disabledWorldsAdd);
savePanelFile(cf, panelFile);
p.sendMessage(plugin.papi( tag + ChatColor.GREEN + "Added new World: " + e.getMessage()));
break;
case "panel.disabled-worlds.remove":
List<String> disabledWorldsRemove;
if(cf.contains("panels." + panelName + ".disabled-worlds")){
disabledWorldsRemove = cf.getStringList("panels." + panelName + ".disabled-worlds");
}else{
p.sendMessage(plugin.papi( tag + ChatColor.RED + "No Worlds found to remove!"));
break;
}
try {
disabledWorldsRemove.remove(Integer.parseInt(e.getMessage())-1);
}catch (Exception ex){
p.sendMessage(plugin.papi( tag + ChatColor.RED + "Could not find World!"));
break;
}
if(disabledWorldsRemove.size() == 0){
cf.set("panels." + panelName + ".disabled-worlds", null);
}else{
cf.set("panels." + panelName + ".disabled-worlds", disabledWorldsRemove);
}
savePanelFile(cf, panelFile);
p.sendMessage(plugin.papi( tag + ChatColor.GREEN + "Removed World line " + e.getMessage()));
break;
case "panel.hotbar.material":
if(e.getMessage().trim().equalsIgnoreCase("remove")){
cf.set("panels." + panelName + ".open-with-item", null);
@ -320,10 +374,11 @@ public class EditorUserInput implements Listener {
break;
}
}
void itemSectionCheck(Player p, String section, String panelName, YamlConfiguration cf, File panelFile, AsyncPlayerChatEvent e){
String tag = plugin.config.getString("config.format.tag") + " ";
String itemSlot = section.split("\\.")[1];
String sectionChange = section.replace("item." + itemSlot + ".","");
String itemSlot = section.split("\\:")[1];
String sectionChange = section.replace("item:" + itemSlot + ":","");
switch (sectionChange) {
case "name":
if(e.getMessage().trim().equalsIgnoreCase("remove")){
@ -478,4 +533,40 @@ public class EditorUserInput implements Listener {
break;
}
}
void itemSectionSectionCheck(Player p, String section, String panelName, YamlConfiguration cf, File panelFile, AsyncPlayerChatEvent e){
String tag = plugin.config.getString("config.format.tag") + " ";
String secondValue = section.split("\\.")[1];
//section includes slot at front eg, 1.hasvalue
String itemSection = ChatColor.stripColor(section.replace("section." + secondValue + ".", ""));
String playerMessage = ChatColor.stripColor(e.getMessage()).toLowerCase();
switch (secondValue) {
case "add":
cf.set("panels." + panelName + ".item." + itemSection + "." + playerMessage + ".output", "true");
if(playerMessage.equals("hasperm")) {
cf.set("panels." + panelName + ".item." + itemSection + "." + playerMessage + ".perm", "admin");
}else{
cf.set("panels." + panelName + ".item." + itemSection + "." + playerMessage + ".value", "10");
cf.set("panels." + panelName + ".item." + itemSection + "." + playerMessage + ".compare", "%cp-player-balance%");
}
cf.set("panels." + panelName + ".item." + itemSection + "." + playerMessage + ".material", "DIRT");
cf.set("panels." + panelName + ".item." + itemSection + "." + playerMessage + ".name", "");
savePanelFile(cf, panelFile);
plugin.reloadPanelFiles();
p.sendMessage(plugin.papi( tag + ChatColor.GREEN + "Added Section " + ChatColor.WHITE + playerMessage));
break;
case "remove":
cf.set("panels." + panelName + ".item." + itemSection + "." + playerMessage, null);
savePanelFile(cf, panelFile);
plugin.reloadPanelFiles();
p.sendMessage(plugin.papi( tag + ChatColor.GREEN + "Removed Section " + ChatColor.WHITE + playerMessage));
break;
case "change":
cf.set("panels." + panelName + ".item." + itemSection + "." + playerMessage.split("\\:")[0], playerMessage.split("\\:")[1]);
savePanelFile(cf, panelFile);
plugin.reloadPanelFiles();
p.sendMessage(plugin.papi( tag + ChatColor.GREEN + "Set " + playerMessage.split("\\:")[0] + " to " + ChatColor.WHITE + playerMessage.split("\\:")[1]));
break;
}
}
}

View File

@ -3,6 +3,7 @@ package me.rockyhawk.commandpanels.ingameeditor;
import me.rockyhawk.commandpanels.CommandPanels;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@ -10,8 +11,6 @@ import org.bukkit.event.Listener;
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;
@ -243,14 +242,15 @@ public class EditorUtils implements Listener {
Save temp item if the item is picked up from inside the panel
*/
if(e.getClick().isShiftClick() && e.getClickedInventory() == e.getView().getTopInventory()){
if(e.getCurrentItem() == null) {
if(e.getInventory().getItem(e.getSlot()) == null) {
return;
}
onEditPanelClose(p,e.getInventory(),e.getView());
inventoryItemSettingsOpening.add(p.getName());
//refresh the yaml config
file = YamlConfiguration.loadConfiguration(new File(plugin.panelsf + File.separator + fileName));
plugin.editorGuis.openItemSettings(p,panelName,file,e.getSlot());
plugin.editorGuis.openItemSettings(p,panelName,file.getConfigurationSection("panels." + panelName + ".item." + e.getSlot()), String.valueOf(e.getSlot()));
p.updateInventory();
return;
}
if(tempEdit.contains("panels." + panelName + ".temp." + p.getName() + ".material")) {
@ -261,14 +261,19 @@ public class EditorUtils implements Listener {
}
}
}
if(e.getSlotType() != InventoryType.SlotType.CONTAINER){
return;
}
if(e.getAction() == InventoryAction.CLONE_STACK){
saveTempItem(e, p, file, panelName);
saveFile(fileName,file,true);
}else if(e.getAction() == InventoryAction.PLACE_ALL){
loadTempItem(e, p, file, fileName, panelName);
clearTemp(p, panelName);
saveFile(fileName,file,true);
}else if(e.getAction() == InventoryAction.COLLECT_TO_CURSOR){
//e.setCancelled(true);
saveTempItem(e, p, file, panelName);
saveFile(fileName,file,true);
}else if(e.getAction() == InventoryAction.DROP_ALL_CURSOR){
e.setCancelled(true);
}else if(e.getAction() == InventoryAction.DROP_ALL_SLOT){
@ -285,18 +290,24 @@ public class EditorUtils implements Listener {
e.setCancelled(true);
}else if(e.getAction() == InventoryAction.PLACE_SOME){
loadTempItem(e, p, file, fileName, panelName);
saveFile(fileName,file,true);
}else if(e.getAction() == InventoryAction.SWAP_WITH_CURSOR){
e.setCancelled(true);
}else if(e.getAction() == InventoryAction.PICKUP_ALL){
saveTempItem(e, p, file, panelName);
saveFile(fileName,file,true);
}else if(e.getAction() == InventoryAction.PICKUP_HALF){
saveTempItem(e, p, file, panelName);
saveFile(fileName,file,true);
}else if(e.getAction() == InventoryAction.PICKUP_ONE){
saveTempItem(e, p, file, panelName);
saveFile(fileName,file,true);
}else if(e.getAction() == InventoryAction.PICKUP_SOME){
saveTempItem(e, p, file, panelName);
saveFile(fileName,file,true);
}else if(e.getAction() == InventoryAction.PLACE_ONE){
loadTempItem(e, p, file, fileName, panelName);
saveFile(fileName,file,true);
}
}
@EventHandler
@ -354,53 +365,64 @@ public class EditorUtils implements Listener {
}
if(e.getSlot() == 1){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"panel.perm"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter New Permission"));
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New Permission"));
p.closeInventory();
}
if(e.getSlot() == 3){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"panel.title"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter New Title"));
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New Title"));
p.closeInventory();
}
if(e.getSlot() == 5){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"panel.sound-on-open"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter New Sound ID"));
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New Sound ID"));
p.closeInventory();
}
if(e.getSlot() == 7){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"panel.command"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter New Command"));
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New Command"));
p.closeInventory();
}
if(e.getSlot() == 21){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"panel.delete"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Are you sure? (yes/no)"));
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Are you sure? (yes/no)"));
p.closeInventory();
}
if(e.getSlot() == 23){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"panel.rows"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter Row Amount (1 to 6)"));
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter Row Amount (1 to 6)"));
p.closeInventory();
}
if(e.getSlot() == 13){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"panel.empty"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter New Material ID"));
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New Material ID"));
p.closeInventory();
}
if(e.getSlot() == 15){
//adds abilities to add and remove lines
if(e.getClick().isLeftClick()) {
plugin.editorInputStrings.add(new String[]{p.getName(), panelName, "panel.commands-on-open.add"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter New Command"));
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New Command"));
}else{
plugin.editorInputStrings.add(new String[]{p.getName(), panelName, "panel.commands-on-open.remove"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter command line to remove (must be an integer)"));
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter Command line to remove (must be an integer)"));
}
p.closeInventory();
}
if(e.getSlot() == 25){
//adds abilities to add and remove lines
if(e.getClick().isLeftClick()) {
plugin.editorInputStrings.add(new String[]{p.getName(), panelName, "panel.disabled-worlds.add"});
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New World Name"));
}else{
plugin.editorInputStrings.add(new String[]{p.getName(), panelName, "panel.disabled-worlds.remove"});
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter World line to remove (must be an integer)"));
}
p.closeInventory();
}
if(e.getSlot() == 11){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"panel.name"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter New Name"));
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New Name"));
p.closeInventory();
}
if(e.getSlot() == 18){
@ -409,31 +431,32 @@ public class EditorUtils implements Listener {
}
if(e.getSlot() == 40){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"panel.hotbar.material"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter New Material"));
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New Material"));
p.closeInventory();
}
if(e.getSlot() == 38 && hotbarItems){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"panel.hotbar.name"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter New Name"));
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New Name"));
p.closeInventory();
}
if(e.getSlot() == 36 && hotbarItems){
//adds abilities to add and remove lines
if(e.getClick().isLeftClick()) {
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"panel.hotbar.lore.add"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter New Item Lore"));
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New Item Lore"));
}else{
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"panel.hotbar.lore.remove"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter lore line to remove (must be an integer)"));
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter lore line to remove (must be an integer)"));
}
p.closeInventory();
}
if(e.getSlot() == 42 && hotbarItems){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"panel.hotbar.stationary"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter Location (1 to 9)"));
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter Location (1 to 9)"));
p.closeInventory();
}
}
@EventHandler
public void onItemSettings(InventoryClickEvent e) {
Player p = (Player)e.getWhoClicked();
@ -454,7 +477,7 @@ public class EditorUtils implements Listener {
YamlConfiguration panelYaml = null; //all panels from ALL files (panel names)
boolean found = false;
try {
//neew to loop through files to get file names
//loop through files to get file names
for(String fileName : plugin.panelFiles) { //will loop through all the files in folder
YamlConfiguration temp = YamlConfiguration.loadConfiguration(new File(plugin.panelsf + File.separator + fileName));
if(!plugin.checkPanels(temp)){
@ -468,6 +491,9 @@ public class EditorUtils implements Listener {
break;
}
}
if(found){
break;
}
}
}catch(Exception fail){
//could not fetch all panel names (probably no panels exist)
@ -477,76 +503,181 @@ public class EditorUtils implements Listener {
if(!found){
return;
}
int itemSlot;
String itemSlot;
try {
itemSlot = Integer.parseInt(Objects.requireNonNull(Objects.requireNonNull(e.getView().getTopInventory().getItem(35)).getItemMeta()).getDisplayName().split("\\s")[2]);
itemSlot = ChatColor.stripColor(e.getView().getTopInventory().getItem(35).getItemMeta().getDisplayName().split("\\s")[2]);
}catch(Exception ex){
plugin.getServer().getConsoleSender().sendMessage("[CommandPanels] Could not get item slot");
plugin.debug(ex);
return;
}
if(e.getSlot() == 1){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"item." + itemSlot + ".name"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter New Item Name"));
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"item:" + itemSlot + ":name"});
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New Item Name"));
p.closeInventory();
}
if(e.getSlot() == 3){
//adds abilities to add and remove lines
if(e.getClick().isLeftClick()) {
plugin.editorInputStrings.add(new String[]{p.getName(), panelName, "item." + itemSlot + ".commands.add"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter New Item Command"));
plugin.editorInputStrings.add(new String[]{p.getName(), panelName, "item:" + itemSlot + ":commands:add"});
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New Item Command"));
}else{
plugin.editorInputStrings.add(new String[]{p.getName(), panelName, "item." + itemSlot + ".commands.remove"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter command line to remove (must be an integer)"));
plugin.editorInputStrings.add(new String[]{p.getName(), panelName, "item:" + itemSlot + ":commands:remove"});
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter command line to remove (must be an integer)"));
}
p.closeInventory();
}
if(e.getSlot() == 5){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"item." + itemSlot + ".enchanted"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter New Item Enchantment"));
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"item:" + itemSlot + ":enchanted"});
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New Item Enchantment"));
p.closeInventory();
}
if(e.getSlot() == 7){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"item." + itemSlot + ".potion"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter New Item Potion Effect"));
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"item:" + itemSlot + ":potion"});
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New Item Potion Effect"));
p.closeInventory();
}
if(e.getSlot() == 19){
//adds abilities to add and remove lines
if(e.getClick().isLeftClick()) {
plugin.editorInputStrings.add(new String[]{p.getName(), panelName, "item." + itemSlot + ".lore.add"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter New Item Lore"));
plugin.editorInputStrings.add(new String[]{p.getName(), panelName, "item:" + itemSlot + ":lore:add"});
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New Item Lore"));
}else{
plugin.editorInputStrings.add(new String[]{p.getName(), panelName, "item." + itemSlot + ".lore.remove"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter lore line to remove (must be an integer)"));
plugin.editorInputStrings.add(new String[]{p.getName(), panelName, "item:" + itemSlot + ":lore:remove"});
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter lore line to remove (must be an integer)"));
}
p.closeInventory();
}
if(e.getSlot() == 21){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"item." + itemSlot + ".stack"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter New Item Stack (must be an integer)"));
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"item:" + itemSlot + ":stack"});
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New Item Stack (must be an integer)"));
p.closeInventory();
}
if(e.getSlot() == 23){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"item." + itemSlot + ".customdata"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter New Custom Model Data"));
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"item:" + itemSlot + ":customdata"});
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New Custom Model Data"));
p.closeInventory();
}
if(e.getSlot() == 25){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"item." + itemSlot + ".leatherarmor"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter New Leather Armor Colour"));
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"item:" + itemSlot + ":leatherarmor"});
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New Leather Armor Colour"));
p.closeInventory();
}
if(e.getSlot() == 31){
//section includes the slot number at the front
plugin.editorGuis.openItemSections(p,panelName,panelYaml.getConfigurationSection("panels." + panelName + ".item." + itemSlot), itemSlot);
p.updateInventory();
}
if(e.getSlot() == 35){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"item." + itemSlot + ".head"});
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Enter New Custom Material (eg. cps= self)"));
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"item:" + itemSlot + ":head"});
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter New Custom Material (eg. cps= self)"));
p.closeInventory();
}
if(e.getSlot() == 27){
plugin.openGui(panelName, p, panelYaml,3,0);
if(itemSlot.contains(".")){
String newSection = itemSlot.substring(0, itemSlot.lastIndexOf("."));
plugin.editorGuis.openItemSections(p,panelName,panelYaml.getConfigurationSection("panels." + panelName + ".item." + newSection), newSection);
}else {
plugin.openGui(panelName, p, panelYaml, 3, 0);
}
p.updateInventory();
}
}
//item section viewer click event
@EventHandler
public void onItemSection(InventoryClickEvent e) {
Player p = (Player)e.getWhoClicked();
String tag = plugin.config.getString("config.format.tag") + " ";
try {
if (Objects.requireNonNull(e.getClickedInventory()).getType() != InventoryType.CHEST) {
return;
}
}catch(Exception outOf){
//skip as player clicked outside the inventory
return;
}
if(!p.getOpenInventory().getTitle().contains("Item Sections:")){
return;
}
e.setCancelled(true);
String panelName = ""; //all panels from ALL files (panel names)
YamlConfiguration panelYaml = null;
ConfigurationSection itemConfSection; //all panels from ALL files (panel names)
boolean found = false;
try {
//loop through files to get file names
YamlConfiguration temp;
for(String fileName : plugin.panelFiles) { //will loop through all the files in folder
temp = YamlConfiguration.loadConfiguration(new File(plugin.panelsf + File.separator + fileName));
if(!plugin.checkPanels(temp)){
continue;
}
for (String key : Objects.requireNonNull(temp.getConfigurationSection("panels")).getKeys(false)){
if(e.getView().getTitle().equals("Item Sections: " + key)){
panelName = key;
panelYaml = temp;
found = true;
break;
}
}
if(found){
break;
}
}
}catch(Exception fail){
//could not fetch all panel names (probably no panels exist)
plugin.debug(fail);
return;
}
if(!found){
return;
}
//this section includes slot at front
String section;
try {
section = ChatColor.stripColor(Objects.requireNonNull(Objects.requireNonNull(e.getView().getTopInventory().getItem(44)).getItemMeta()).getDisplayName().split("\\s")[2]);
}catch(Exception ex){
plugin.getServer().getConsoleSender().sendMessage("[CommandPanels] Could not get item slot");
plugin.debug(ex);
return;
}
itemConfSection = panelYaml.getConfigurationSection("panels." + panelName + ".item." + section);
if(e.getSlot() <= 35){
if(e.getInventory().getItem(e.getSlot()) != null){
if(e.getClick().isLeftClick()) {
String newSection = section + "." + ChatColor.stripColor(e.getInventory().getItem(e.getSlot()).getItemMeta().getDisplayName());
plugin.editorGuis.openItemSettings(p, panelName, itemConfSection.getConfigurationSection(ChatColor.stripColor(e.getInventory().getItem(e.getSlot()).getItemMeta().getDisplayName())), newSection);
p.updateInventory();
}else{
String itemNameSection = "." + ChatColor.stripColor(e.getInventory().getItem(e.getSlot()).getItemMeta().getDisplayName());
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"section.change." + section + itemNameSection});
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter Setting to change, eg, value:500"));
p.closeInventory();
}
}
}
if(e.getSlot() == 38){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"section.remove." + section});
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter Section name to remove, eg, hasperm or hasperm0"));
p.closeInventory();
}
if(e.getSlot() == 42){
plugin.editorInputStrings.add(new String[]{p.getName(),panelName,"section.add." + section});
p.sendMessage(plugin.papi(tag + ChatColor.WHITE + "Enter Section name to add, eg, hasperm or hasperm0"));
p.closeInventory();
}
if(e.getSlot() == 36){
plugin.editorGuis.openItemSettings(p,panelName,itemConfSection, section);
p.updateInventory();
}
}
public void saveTempItem(InventoryClickEvent e, Player p, YamlConfiguration file, String panelName){
//saves item to temp, using getslot
tempEdit.set("panels." + panelName + ".temp." + p.getName(),file.get("panels." + panelName + ".item." + e.getSlot()));
@ -617,60 +748,7 @@ public class EditorUtils implements Listener {
return;
}
//save items as they appear
ItemStack cont;
for(int i = 0; inv.getSize() > i; i++){
cont = inv.getItem(i);
//repeat through all the items in the editor
try{
//make the item here
if(cont == null){
//remove if items have been removed
if(file.contains("panels." + panelName + ".item." + i)){
file.set("panels." + panelName + ".item." + i, null);
continue;
}
}
if(plugin.legacy.isLegacy()){
if (cont.getDurability() != 0 && !cont.getType().toString().equals("SKULL_ITEM") && !cont.getType().toString().equals("SKULL_ITEM")) {
file.addDefault("panels." + panelName + ".item." + i + ".ID", cont.getDurability());
}
}
if(file.contains("panels." + panelName + ".item." + i + ".material")){
if(Objects.requireNonNull(file.getString("panels." + panelName + ".item." + i + ".material")).contains("%") || Objects.requireNonNull(file.getString("panels." + panelName + ".item." + i + ".material")).contains("=")){
if(!plugin.getHeads.ifSkullOrHead(cont.getType().toString())){
file.set("panels." + panelName + ".item." + i + ".material", cont.getType().toString());
}
}else{
file.set("panels." + panelName + ".item." + i + ".material", cont.getType().toString());
}
}else{
file.set("panels." + panelName + ".item." + i + ".material", cont.getType().toString());
}
if(plugin.getHeads.ifSkullOrHead(cont.getType().toString())){
SkullMeta meta = (SkullMeta) cont.getItemMeta();
//disable for legacy as is broken
if(!plugin.legacy.isLegacy()) {
if (plugin.customHeads.getHeadBase64(cont) != null) {
//inject base64 here
file.set("panels." + panelName + ".item." + i + ".material", "cps= " + plugin.customHeads.getHeadBase64(cont));
} else if (meta.hasOwner()) {
//check for skull owner
file.set("panels." + panelName + ".item." + i + ".material", "cps= " + meta.getOwner());
}
}
}
if(cont.getAmount() != 1){
file.set("panels." + panelName + ".item." + i + ".stack", cont.getAmount());
}
if(!cont.getEnchantments().isEmpty()){
file.set("panels." + panelName + ".item." + i + ".enchanted", "true");
}
file.set("panels." + panelName + ".item." + i + ".name", Objects.requireNonNull(cont.getItemMeta()).getDisplayName());
file.set("panels." + panelName + ".item." + i + ".lore", Objects.requireNonNull(cont.getItemMeta()).getLore());
}catch(Exception n){
//skip over an item that spits an error
}
}
file = plugin.itemCreate.generatePanelFile(panelName,inv,file);
try {
file.save(new File(plugin.panelsf + File.separator + fileName));
p.sendMessage(plugin.papi(tag + ChatColor.GREEN + "Saved Changes!"));