diff --git a/.idea/libraries/PlaceholderAPI_2_10_8.xml b/.idea/libraries/PlaceholderAPI_2_10_8.xml index 7d8b81d..8dadc91 100644 --- a/.idea/libraries/PlaceholderAPI_2_10_8.xml +++ b/.idea/libraries/PlaceholderAPI_2_10_8.xml @@ -1,7 +1,7 @@ - + diff --git a/resource/plugin.yml b/resource/plugin.yml index eaff34f..bf00e01 100644 --- a/resource/plugin.yml +++ b/resource/plugin.yml @@ -1,4 +1,4 @@ -version: 3.11.1 +version: 3.11.2 main: me.rockyhawk.commandpanels.CommandPanels name: CommandPanels author: RockyHawk diff --git a/src/me/rockyhawk/commandpanels/CommandPanels.java b/src/me/rockyhawk/commandpanels/CommandPanels.java index a544bcb..75cd970 100644 --- a/src/me/rockyhawk/commandpanels/CommandPanels.java +++ b/src/me/rockyhawk/commandpanels/CommandPanels.java @@ -1,11 +1,8 @@ package me.rockyhawk.commandpanels; import com.Ben12345rocks.VotingPlugin.UserManager.UserManager; -import com.mojang.authlib.GameProfile; -import com.mojang.authlib.properties.Property; import java.io.*; -import java.lang.reflect.Field; import java.net.InetSocketAddress; import java.net.Socket; import java.util.*; @@ -18,7 +15,7 @@ import me.rockyhawk.commandpanels.classresources.*; import me.rockyhawk.commandpanels.commands.*; import me.rockyhawk.commandpanels.completetabs.CpTabComplete; import me.rockyhawk.commandpanels.generatepanels.Commandpanelsgenerate; -import me.rockyhawk.commandpanels.generatepanels.NewGenUtils; +import me.rockyhawk.commandpanels.generatepanels.GenUtils; import me.rockyhawk.commandpanels.generatepanels.TabCompleteGenerate; import me.rockyhawk.commandpanels.ingameeditor.CpIngameEditCommand; import me.rockyhawk.commandpanels.ingameeditor.CpTabCompleteIngame; @@ -106,7 +103,7 @@ public class CommandPanels extends JavaPlugin { this.getServer().getPluginManager().registerEvents(new Utils(this), this); this.getServer().getPluginManager().registerEvents(new UtilsOpenWithItem(this), this); this.getServer().getPluginManager().registerEvents(new EditorUtils(this), this); - this.getServer().getPluginManager().registerEvents(new NewGenUtils(this), this); + this.getServer().getPluginManager().registerEvents(new GenUtils(this), this); this.getServer().getPluginManager().registerEvents(new Commandpanelcustom(this), this); this.getServer().getPluginManager().registerEvents(new CommandpanelUserInput(this), this); this.getServer().getPluginManager().registerEvents(new EditorUserInput(this), this); @@ -281,7 +278,7 @@ public class CommandPanels extends JavaPlugin { p.openInventory(i); } else if (onOpen == 0) { //onOpen 0 will just refresh the panel - p.getOpenInventory().getTopInventory().setStorageContents(i.getStorageContents()); + legacy.setStorageContents(p,legacy.getStorageContents(i)); } else if (onOpen == 2) { //will return the inventory, not opening it at all return i; @@ -446,7 +443,7 @@ public class CommandPanels extends JavaPlugin { str = str.replaceAll("%cp-player-y%", String.valueOf(Math.round(p.getLocation().getY()))); str = str.replaceAll("%cp-player-z%", String.valueOf(Math.round(p.getLocation().getZ()))); str = str.replaceAll("%cp-online-players%", Integer.toString(Bukkit.getServer().getOnlinePlayers().size())); - //placeholder to check for server availability + //placeholder to check for server availability %cp-server-IP:PORT% while (str.contains("%cp-server-")) { int start = str.indexOf("%cp-server-"); int end = str.indexOf("%", str.indexOf("%cp-server-")+1); @@ -460,6 +457,15 @@ public class CommandPanels extends JavaPlugin { str = str.replace(str.substring(start, end) + "%", papi(p, "false")); } } + //does %cp-random-MIN,MAX% + while (str.contains("%cp-random-")) { + int start = str.indexOf("%cp-random-"); + int end = str.indexOf("%", str.indexOf("%cp-random-")+1); + String min_max = str.substring(start, end).replace("%cp-random-", "").replace("%",""); + int min = Integer.parseInt(min_max.split(",")[0]); + int max = Integer.parseInt(min_max.split(",")[1]); + str = str.replace(str.substring(start, end) + "%", String.valueOf(getRandomNumberInRange(min,max))); + } while (str.contains("%cp-player-online-")) { int start = str.indexOf("%cp-player-online-"); int end = str.indexOf("-find%",str.indexOf("%cp-player-online-")+1); @@ -606,12 +612,22 @@ public class CommandPanels extends JavaPlugin { public Reader getReaderFromStream(InputStream initialStream) throws IOException { //this reads the encrypted resource files in the jar file if(Bukkit.getVersion().contains("1.13") || legacy.isLegacy()){ - return new Sequence_1_13().getReaderFromStream(initialStream); + return new Sequence_1_13(this).getReaderFromStream(initialStream); }else{ - return new Sequence_1_14().getReaderFromStream(initialStream); + return new Sequence_1_14(this).getReaderFromStream(initialStream); } } + public int getRandomNumberInRange(int min, int max) { + + if (min >= max) { + throw new IllegalArgumentException("max must be greater than min"); + } + + Random r = new Random(); + return r.nextInt((max - min) + 1) + min; + } + //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/classresources/CommandTags.java b/src/me/rockyhawk/commandpanels/classresources/CommandTags.java index fa4d176..b1d8de2 100644 --- a/src/me/rockyhawk/commandpanels/classresources/CommandTags.java +++ b/src/me/rockyhawk/commandpanels/classresources/CommandTags.java @@ -20,6 +20,7 @@ public class CommandTags { this.plugin = pl; } + @SuppressWarnings("deprecation") public void commandTags(Player p, String command) { String tag = plugin.config.getString("config.format.tag") + " "; //set cp placeholders @@ -78,10 +79,20 @@ public class CommandTags { 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]))); } + //legacy ID + byte id = 0; + if(plugin.legacy.isLegacy()) { + for (String argsTemp : command.split("\\s")) { + if (argsTemp.startsWith("id:")) { + id = Byte.parseByte(argsTemp.replace("id:", "")); + break; + } + } + } if (p.getInventory().firstEmpty() >= 0) { - p.getInventory().addItem(new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3]))); + p.getInventory().addItem(new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3]),id)); } 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]))); + Objects.requireNonNull(p.getLocation().getWorld()).dropItemNaturally(p.getLocation(), new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3]),id)); } } else { p.sendMessage(plugin.papi( tag + plugin.config.getString("config.format.needmoney"))); @@ -106,10 +117,20 @@ public class CommandTags { 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]))); } + //legacy ID + byte id = 0; + if(plugin.legacy.isLegacy()) { + for (String argsTemp : command.split("\\s")) { + if (argsTemp.startsWith("id:")) { + id = Byte.parseByte(argsTemp.replace("id:", "")); + break; + } + } + } if (p.getInventory().firstEmpty() >= 0) { - p.getInventory().addItem(new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3]))); + p.getInventory().addItem(new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3]),id)); } 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]))); + Objects.requireNonNull(p.getLocation().getWorld()).dropItemNaturally(p.getLocation(), new ItemStack(Objects.requireNonNull(Material.matchMaterial(command.split("\\s")[2])), Integer.parseInt(command.split("\\s")[3]),id)); } } else { p.sendMessage(plugin.papi( tag + plugin.config.getString("config.format.needmoney"))); @@ -134,6 +155,17 @@ public class CommandTags { for(String argsTemp : command.split("\\s")){ if(argsTemp.startsWith("potion:")){ potion = argsTemp.replace("potion:",""); + break; + } + } + //legacy ID + byte id = -1; + if(plugin.legacy.isLegacy()) { + for (String argsTemp : command.split("\\s")) { + if (argsTemp.startsWith("id:")) { + id = Byte.parseByte(argsTemp.replace("id:", "")); + break; + } } } //check to ensure any extensions are checked @@ -142,8 +174,12 @@ public class CommandTags { 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; + continue; + } + } + if (id != -1) { + if (itm.getDurability() != id) { + continue; } } }catch(Exception exc){ @@ -192,6 +228,16 @@ public class CommandTags { potion = argsTemp.replace("potion:",""); } } + //legacy ID + byte id = -1; + if(plugin.legacy.isLegacy()) { + for (String argsTemp : command.split("\\s")) { + if (argsTemp.startsWith("id:")) { + id = Byte.parseByte(argsTemp.replace("id:", "")); + break; + } + } + } //check to ensure any extensions are checked try { if (!potion.equals("false")) { @@ -202,6 +248,11 @@ public class CommandTags { return; } } + if (id != -1) { + if (itm.getDurability() != id) { + continue; + } + } }catch(Exception exc){ //skip if it cannot do unless plugin.debug is enabled plugin.debug(exc); diff --git a/src/me/rockyhawk/commandpanels/generatepanels/NewGenUtils.java b/src/me/rockyhawk/commandpanels/generatepanels/GenUtils.java similarity index 94% rename from src/me/rockyhawk/commandpanels/generatepanels/NewGenUtils.java rename to src/me/rockyhawk/commandpanels/generatepanels/GenUtils.java index d5d611b..f799d2f 100644 --- a/src/me/rockyhawk/commandpanels/generatepanels/NewGenUtils.java +++ b/src/me/rockyhawk/commandpanels/generatepanels/GenUtils.java @@ -24,10 +24,10 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Objects; -public class NewGenUtils implements Listener { +public class GenUtils implements Listener { public YamlConfiguration tempEdit; CommandPanels plugin; - public NewGenUtils(CommandPanels pl) { + public GenUtils(CommandPanels pl) { this.plugin = pl; this.tempEdit = YamlConfiguration.loadConfiguration(new File(plugin.getDataFolder() + File.separator + "temp.yml")); } @@ -123,6 +123,11 @@ public class NewGenUtils implements Listener { }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()); } diff --git a/src/me/rockyhawk/commandpanels/ingameeditor/EditorUtils.java b/src/me/rockyhawk/commandpanels/ingameeditor/EditorUtils.java index 5f28853..44f4b96 100644 --- a/src/me/rockyhawk/commandpanels/ingameeditor/EditorUtils.java +++ b/src/me/rockyhawk/commandpanels/ingameeditor/EditorUtils.java @@ -630,6 +630,11 @@ public class EditorUtils implements Listener { 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())){ diff --git a/src/me/rockyhawk/commandpanels/interactives/Commandpanelrefresher.java b/src/me/rockyhawk/commandpanels/interactives/Commandpanelrefresher.java index 24a093a..1534d27 100644 --- a/src/me/rockyhawk/commandpanels/interactives/Commandpanelrefresher.java +++ b/src/me/rockyhawk/commandpanels/interactives/Commandpanelrefresher.java @@ -88,7 +88,7 @@ public class Commandpanelrefresher implements Listener { final String fpanel = panel; final String fpanelTitle = panelTitle; ItemStack[] panelItemList = plugin.openGui(fpanel, p, cf,2, -1).getContents(); - ItemStack[] playerItemList = p.getInventory().getStorageContents(); + ItemStack[] playerItemList = plugin.legacy.getStorageContents(p.getInventory()); new BukkitRunnable(){ int c = 0; int animatecount = 0; @@ -133,7 +133,7 @@ public class Commandpanelrefresher implements Listener { //check to ensure players haven't duplicated items try { p.updateInventory(); - for (ItemStack playerContent : p.getInventory().getStorageContents()) { + for (ItemStack playerContent : plugin.legacy.getStorageContents(p.getInventory())) { for (ItemStack panelContent : panelItemList) { if (playerContent != null && panelContent != null) { if (!playerContent.getType().equals(Material.matchMaterial("AIR")) && !panelContent.getType().equals(Material.matchMaterial("AIR"))) { diff --git a/src/me/rockyhawk/commandpanels/ioclasses/GetStorageContents.java b/src/me/rockyhawk/commandpanels/ioclasses/GetStorageContents.java new file mode 100644 index 0000000..89b3e78 --- /dev/null +++ b/src/me/rockyhawk/commandpanels/ioclasses/GetStorageContents.java @@ -0,0 +1,22 @@ +package me.rockyhawk.commandpanels.ioclasses; + +import me.rockyhawk.commandpanels.CommandPanels; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +//get contents +public class GetStorageContents { + CommandPanels plugin; + public GetStorageContents(CommandPanels pl) { + this.plugin = pl; + } + + public ItemStack[] getStorageContents(Inventory i){ + return i.getContents(); + } + + public void setStorageContents(Player p, ItemStack[] i){ + p.getOpenInventory().getTopInventory().setContents(i); + } +} diff --git a/src/me/rockyhawk/commandpanels/ioclasses/GetStorageContents_Legacy.java b/src/me/rockyhawk/commandpanels/ioclasses/GetStorageContents_Legacy.java new file mode 100644 index 0000000..12b070a --- /dev/null +++ b/src/me/rockyhawk/commandpanels/ioclasses/GetStorageContents_Legacy.java @@ -0,0 +1,22 @@ +package me.rockyhawk.commandpanels.ioclasses; + +import me.rockyhawk.commandpanels.CommandPanels; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +//get contents legacy +public class GetStorageContents_Legacy { + CommandPanels plugin; + public GetStorageContents_Legacy(CommandPanels pl) { + this.plugin = pl; + } + + public ItemStack[] getStorageContents(Inventory i){ + return i.getContents(); + } + + public void setStorageContents(Player p, ItemStack[] i){ + p.getOpenInventory().getTopInventory().setContents(i); + } +} diff --git a/src/me/rockyhawk/commandpanels/ioclasses/Sequence_1_13.java b/src/me/rockyhawk/commandpanels/ioclasses/Sequence_1_13.java index 7e3612e..dddc036 100644 --- a/src/me/rockyhawk/commandpanels/ioclasses/Sequence_1_13.java +++ b/src/me/rockyhawk/commandpanels/ioclasses/Sequence_1_13.java @@ -1,14 +1,23 @@ package me.rockyhawk.commandpanels.ioclasses; -//1.13 Imports +//1.13- Imports +import me.rockyhawk.commandpanels.CommandPanels; import org.apache.commons.io.IOUtils; import org.apache.commons.io.input.CharSequenceReader; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; import java.io.IOException; import java.io.InputStream; import java.io.Reader; public class Sequence_1_13 { + CommandPanels plugin; + public Sequence_1_13(CommandPanels pl) { + this.plugin = pl; + } + public Reader getReaderFromStream(InputStream initialStream) throws IOException { //this reads the encrypted resource files in the jar file byte[] buffer = IOUtils.toByteArray(initialStream); diff --git a/src/me/rockyhawk/commandpanels/ioclasses/Sequence_1_14.java b/src/me/rockyhawk/commandpanels/ioclasses/Sequence_1_14.java index 45d9a4b..81c3901 100644 --- a/src/me/rockyhawk/commandpanels/ioclasses/Sequence_1_14.java +++ b/src/me/rockyhawk/commandpanels/ioclasses/Sequence_1_14.java @@ -1,14 +1,23 @@ package me.rockyhawk.commandpanels.ioclasses; //1.14+ Imports +import me.rockyhawk.commandpanels.CommandPanels; import org.bukkit.craftbukkit.libs.org.apache.commons.io.IOUtils; import org.bukkit.craftbukkit.libs.org.apache.commons.io.input.CharSequenceReader; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; import java.io.IOException; import java.io.InputStream; import java.io.Reader; public class Sequence_1_14 { + CommandPanels plugin; + public Sequence_1_14(CommandPanels pl) { + this.plugin = pl; + } + public Reader getReaderFromStream(InputStream initialStream) throws IOException { //this reads the encrypted resource files in the jar file byte[] buffer = IOUtils.toByteArray(initialStream); diff --git a/src/me/rockyhawk/commandpanels/legacy/LegacyVersion.java b/src/me/rockyhawk/commandpanels/legacy/LegacyVersion.java index 4cac062..f18fa4c 100644 --- a/src/me/rockyhawk/commandpanels/legacy/LegacyVersion.java +++ b/src/me/rockyhawk/commandpanels/legacy/LegacyVersion.java @@ -1,7 +1,12 @@ package me.rockyhawk.commandpanels.legacy; import me.rockyhawk.commandpanels.CommandPanels; +import me.rockyhawk.commandpanels.ioclasses.GetStorageContents_Legacy; +import me.rockyhawk.commandpanels.ioclasses.GetStorageContents; import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; import java.util.ArrayList; @@ -11,10 +16,31 @@ public class LegacyVersion { this.plugin = pl; } + //true if 1.15 or below + public boolean isLegacyStorageContents() { + boolean output = false; + ArrayList legacyVersions = new ArrayList<>(); + legacyVersions.add("1.8"); + legacyVersions.add("1.9"); + legacyVersions.add("1.10"); + legacyVersions.add("1.11"); + legacyVersions.add("1.12"); + legacyVersions.add("1.13"); + legacyVersions.add("1.14"); + legacyVersions.add("1.15"); + for(String key : legacyVersions){ + if (Bukkit.getVersion().contains(key)) { + output = true; + break; + } + } + return output; + } + //true if 1.12 or below public boolean isLegacy() { boolean output = false; - ArrayList legacyVersions = new ArrayList(); + ArrayList legacyVersions = new ArrayList<>(); legacyVersions.add("1.8"); legacyVersions.add("1.9"); legacyVersions.add("1.10"); @@ -28,4 +54,20 @@ public class LegacyVersion { } return output; } + + public ItemStack[] getStorageContents(Inventory i){ + if(plugin.legacy.isLegacy()){ + return new GetStorageContents_Legacy(plugin).getStorageContents(i); + }else{ + return new GetStorageContents(plugin).getStorageContents(i); + } + } + + public void setStorageContents(Player p, ItemStack[] i){ + if(plugin.legacy.isLegacyStorageContents()){ + new GetStorageContents_Legacy(plugin).setStorageContents(p,i); + }else{ + new GetStorageContents(plugin).setStorageContents(p,i); + } + } }