diff --git a/pom.xml b/pom.xml
index b44b198..9c7fe39 100644
--- a/pom.xml
+++ b/pom.xml
@@ -126,7 +126,7 @@
de.tr7zw
item-nbt-api
- 2.13.0
+ 2.13.1-SNAPSHOT
compile
@@ -138,7 +138,7 @@
net.kyori
adventure-text-minimessage
- 4.13.0
+ 4.17.0
provided
diff --git a/resource/config.yml b/resource/config.yml
index e6eb4b4..d9fb99f 100644
--- a/resource/config.yml
+++ b/resource/config.yml
@@ -16,7 +16,6 @@ config:
stop-sound: true
disabled-world-message: true
panel-snooper: false
- allow-unsafe-mini-message: false
enable-import-command: false
format:
tag: '&6[&bCommandPanels&6] '
diff --git a/resource/plugin.yml b/resource/plugin.yml
index 9053798..c8478c4 100644
--- a/resource/plugin.yml
+++ b/resource/plugin.yml
@@ -1,4 +1,4 @@
-version: 3.21.3.0
+version: 3.21.3.1
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 b903a91..cd56ba1 100644
--- a/src/me/rockyhawk/commandpanels/CommandPanels.java
+++ b/src/me/rockyhawk/commandpanels/CommandPanels.java
@@ -22,6 +22,7 @@ import me.rockyhawk.commandpanels.completetabs.UpdateTabComplete;
import me.rockyhawk.commandpanels.customcommands.Commandpanelcustom;
import me.rockyhawk.commandpanels.datamanager.DebugManager;
import me.rockyhawk.commandpanels.datamanager.PanelDataLoader;
+import me.rockyhawk.commandpanels.datamanager.PanelDataPlayerManager;
import me.rockyhawk.commandpanels.editor.*;
import me.rockyhawk.commandpanels.floodgatecp.OpenFloodgateGUI;
import me.rockyhawk.commandpanels.generatepanels.Commandpanelsgenerate;
@@ -90,6 +91,8 @@ public class CommandPanels extends JavaPlugin{
public CommandRunner commandRunner = new CommandRunner(this);
public PanelDataLoader panelData = new PanelDataLoader(this);
+ public PanelDataPlayerManager panelDataPlayers = new PanelDataPlayerManager(this);
+
public Placeholders placeholders = new Placeholders(this);
public DebugManager debug = new DebugManager(this);
public CreateText tex = new CreateText(this);
@@ -190,6 +193,7 @@ public class CommandPanels extends JavaPlugin{
}
this.getServer().getPluginManager().registerEvents(inputUtils, this);
+ this.getServer().getPluginManager().registerEvents(panelDataPlayers, this);
this.getServer().getPluginManager().registerEvents(new UtilsPanelsLoader(this), this);
this.getServer().getPluginManager().registerEvents(new GenUtils(this), this);
this.getServer().getPluginManager().registerEvents(new ItemFallManager(this), this);
@@ -281,6 +285,9 @@ public class CommandPanels extends JavaPlugin{
//do hotbar items
hotbar.reloadHotbarSlots();
+ //load all known players for data
+ panelDataPlayers.reloadAllPlayers();
+
//add custom charts bStats
Metrics metrics = new Metrics(this, 5097);
metrics.addCustomChart(new SingleLineChart("panels_amount", () -> {
diff --git a/src/me/rockyhawk/commandpanels/classresources/placeholders/CreateText.java b/src/me/rockyhawk/commandpanels/classresources/placeholders/CreateText.java
index 4e37ebc..e0e073a 100644
--- a/src/me/rockyhawk/commandpanels/classresources/placeholders/CreateText.java
+++ b/src/me/rockyhawk/commandpanels/classresources/placeholders/CreateText.java
@@ -74,7 +74,9 @@ public class CreateText {
//change colour
for(String temp : setpapi){
try {
- setpapi.set(tempInt, plugin.hex.translateHexColorCodes(ChatColor.translateAlternateColorCodes('&', temp)));
+ setpapi.set(tempInt,
+ plugin.hex.translateHexColorCodes(
+ ChatColor.translateAlternateColorCodes('&', temp)));
}catch(NullPointerException ignore){}
tempInt += 1;
}
@@ -84,7 +86,8 @@ public class CreateText {
//regular string papi, but only colours so Player doesn't need to be there
public String colour(String setpapi) {
try {
- setpapi = plugin.hex.translateHexColorCodes(ChatColor.translateAlternateColorCodes('&', setpapi));
+ setpapi = ChatColor.translateAlternateColorCodes('&', setpapi);
+ setpapi = plugin.hex.translateHexColorCodes(setpapi);
return setpapi;
}catch(NullPointerException e){
return setpapi;
diff --git a/src/me/rockyhawk/commandpanels/classresources/placeholders/Placeholders.java b/src/me/rockyhawk/commandpanels/classresources/placeholders/Placeholders.java
index dd426ca..d6aa405 100644
--- a/src/me/rockyhawk/commandpanels/classresources/placeholders/Placeholders.java
+++ b/src/me/rockyhawk/commandpanels/classresources/placeholders/Placeholders.java
@@ -329,7 +329,7 @@ public class Placeholders {
if(dataPoint.contains(",")){
String dataName = dataPoint.split(",")[0];
String playerName = dataPoint.split(",")[1];
- return plugin.panelData.getUserData(Bukkit.getOfflinePlayer(playerName).getUniqueId(),dataName);
+ return plugin.panelData.getUserData(plugin.panelDataPlayers.getOffline(playerName),dataName);
}else{
return plugin.panelData.getUserData(p.getUniqueId(),dataPoint);
}
@@ -338,10 +338,24 @@ public class Placeholders {
return "";
}
}
+ //returns if a player is found
+ if(identifier.startsWith("uuid-")) {
+ try {
+ String dataPoint = identifier.replace("uuid-", "");
+ //get data from other user
+ if(plugin.panelDataPlayers.getOffline(dataPoint) == null){
+ return "unknown";
+ }
+ return plugin.panelDataPlayers.getOffline(dataPoint).toString();
+ }catch (Exception ex){
+ plugin.debug(ex,p);
+ return "";
+ }
+ }
//edits data via placeholder execution (will return empty output)
if(identifier.startsWith("setdata-")) {
try {
- String point_value = identifier.replace("cp-setdata-", "");
+ String point_value = identifier.replace("setdata-", "");
String command = "set-data= " + point_value.split(",")[0] + " " + point_value.split(",")[1];
plugin.commandRunner.runCommand(panel,position,p, command);
return "";
diff --git a/src/me/rockyhawk/commandpanels/commands/Commandpanelsdata.java b/src/me/rockyhawk/commandpanels/commands/Commandpanelsdata.java
index d335b59..b3e8a3f 100644
--- a/src/me/rockyhawk/commandpanels/commands/Commandpanelsdata.java
+++ b/src/me/rockyhawk/commandpanels/commands/Commandpanelsdata.java
@@ -36,11 +36,11 @@ public class Commandpanelsdata implements CommandExecutor {
if (args[1].equalsIgnoreCase("all") || args[1].equalsIgnoreCase("online")) {
for (OfflinePlayer player : Bukkit.getOfflinePlayers()) {
if (args[1].equalsIgnoreCase("online") && !player.isOnline()) continue;
- plugin.panelData.clearData(plugin.panelData.getOffline(player.getName()));
+ plugin.panelData.clearData(plugin.panelDataPlayers.getOffline(player.getName()));
count++;
}
} else
- plugin.panelData.clearData(plugin.panelData.getOffline(args[1]));
+ plugin.panelData.clearData(plugin.panelDataPlayers.getOffline(args[1]));
if (sendPlayerMessage) {
sender.sendMessage(plugin.tex.colour(plugin.tag
+ ChatColor.GREEN + "Cleared all data for "
@@ -54,11 +54,11 @@ public class Commandpanelsdata implements CommandExecutor {
if (args[1].equalsIgnoreCase("all") || args[1].equalsIgnoreCase("online")) {
for (OfflinePlayer player : Bukkit.getOfflinePlayers()) {
if (args[1].equalsIgnoreCase("online") && !player.isOnline()) continue;
- plugin.panelData.delUserData(plugin.panelData.getOffline(player.getName()), args[2]);
+ plugin.panelData.delUserData(plugin.panelDataPlayers.getOffline(player.getName()), args[2]);
count++;
}
} else
- plugin.panelData.delUserData(plugin.panelData.getOffline(args[1]), args[2]);
+ plugin.panelData.delUserData(plugin.panelDataPlayers.getOffline(args[1]), args[2]);
if (sendPlayerMessage) {
sender.sendMessage(plugin.tex.colour(plugin.tag
+ ChatColor.GREEN + "Removed "
@@ -71,7 +71,7 @@ public class Commandpanelsdata implements CommandExecutor {
//for the get command
sender.sendMessage(plugin.tex.colour(plugin.tag
+ ChatColor.GREEN + "Value of data is "
- + ChatColor.WHITE + plugin.panelData.getUserData(plugin.panelData.getOffline(args[1]), args[2])));
+ + ChatColor.WHITE + plugin.panelData.getUserData(plugin.panelDataPlayers.getOffline(args[1]), args[2])));
return true;
}
} else if (args.length == 4) {
@@ -80,11 +80,11 @@ public class Commandpanelsdata implements CommandExecutor {
if (args[1].equalsIgnoreCase("all") || args[1].equalsIgnoreCase("online")) {
for (OfflinePlayer player : Bukkit.getOfflinePlayers()) {
if (args[1].equalsIgnoreCase("online") && !player.isOnline()) continue;
- plugin.panelData.setUserData(plugin.panelData.getOffline(player.getName()), args[2], args[3], true);
+ plugin.panelData.setUserData(plugin.panelDataPlayers.getOffline(player.getName()), args[2], args[3], true);
count++;
}
} else {
- plugin.panelData.setUserData(plugin.panelData.getOffline(args[1]), args[2], args[3], true);
+ plugin.panelData.setUserData(plugin.panelDataPlayers.getOffline(args[1]), args[2], args[3], true);
}
if (sendPlayerMessage) {
sender.sendMessage(plugin.tex.colour(plugin.tag
@@ -101,11 +101,11 @@ public class Commandpanelsdata implements CommandExecutor {
for (OfflinePlayer player : Bukkit.getOfflinePlayers()) {
if (args[1].equalsIgnoreCase("online") && !player.isOnline()) continue;
- plugin.panelData.setUserData(plugin.panelData.getOffline(player.getName()), args[2], args[3], false);
+ plugin.panelData.setUserData(plugin.panelDataPlayers.getOffline(player.getName()), args[2], args[3], false);
count++;
}
} else
- plugin.panelData.setUserData(plugin.panelData.getOffline(args[1]), args[2], args[3], false);
+ plugin.panelData.setUserData(plugin.panelDataPlayers.getOffline(args[1]), args[2], args[3], false);
if (sendPlayerMessage) {
sender.sendMessage(plugin.tex.colour(plugin.tag
+ ChatColor.GREEN + "Set "
diff --git a/src/me/rockyhawk/commandpanels/commands/Commandpanelsreload.java b/src/me/rockyhawk/commandpanels/commands/Commandpanelsreload.java
index ecbc84d..aaa968c 100644
--- a/src/me/rockyhawk/commandpanels/commands/Commandpanelsreload.java
+++ b/src/me/rockyhawk/commandpanels/commands/Commandpanelsreload.java
@@ -8,11 +8,8 @@ import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
-import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
-import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
-import org.bukkit.scheduler.BukkitRunnable;
import java.io.File;
import java.io.IOException;
@@ -40,6 +37,9 @@ public class Commandpanelsreload implements CommandExecutor {
plugin.config = YamlConfiguration.loadConfiguration(new File(plugin.getDataFolder() + File.separator + "config.yml"));
plugin.blockConfig = YamlConfiguration.loadConfiguration(new File(plugin.getDataFolder() + File.separator + "blocks.yml"));
+ //load all known player UUIDs for data
+ plugin.panelDataPlayers.reloadAllPlayers();
+
//check for duplicates
plugin.checkDuplicatePanel(sender);
diff --git a/src/me/rockyhawk/commandpanels/commandtags/tags/other/DataTags.java b/src/me/rockyhawk/commandpanels/commandtags/tags/other/DataTags.java
index 89221f7..b465ac4 100644
--- a/src/me/rockyhawk/commandpanels/commandtags/tags/other/DataTags.java
+++ b/src/me/rockyhawk/commandpanels/commandtags/tags/other/DataTags.java
@@ -16,7 +16,7 @@ public class DataTags implements Listener {
if(e.name.equalsIgnoreCase("set-data=")){
e.commandTagUsed();
if(e.args.length == 3){
- plugin.panelData.setUserData(plugin.panelData.getOffline(plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[2])),
+ plugin.panelData.setUserData(plugin.panelDataPlayers.getOffline(plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[2])),
plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[0]),
plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[1]),true);
return;
@@ -30,7 +30,7 @@ public class DataTags implements Listener {
if(e.name.equalsIgnoreCase("add-data=")){
e.commandTagUsed();
if(e.args.length == 3){
- plugin.panelData.setUserData(plugin.panelData.getOffline(plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[2])),
+ plugin.panelData.setUserData(plugin.panelDataPlayers.getOffline(plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[2])),
plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[0]),
plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[1]),false);
return;
@@ -44,7 +44,7 @@ public class DataTags implements Listener {
if(e.name.equalsIgnoreCase("math-data=")){
e.commandTagUsed();
if(e.args.length == 3){
- plugin.panelData.doDataMath(plugin.panelData.getOffline(plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[2])),
+ plugin.panelData.doDataMath(plugin.panelDataPlayers.getOffline(plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[2])),
plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[0]),
plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[1]));
return;
@@ -58,13 +58,13 @@ public class DataTags implements Listener {
if(e.name.equalsIgnoreCase("clear-data=")){
e.commandTagUsed();
//will clear all data for player clear-data= [playerName]
- plugin.panelData.clearData(plugin.panelData.getOffline(plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[0])));
+ plugin.panelData.clearData(plugin.panelDataPlayers.getOffline(plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[0])));
return;
}
if(e.name.equalsIgnoreCase("del-data=")){
e.commandTagUsed();
if(e.args.length == 2){
- plugin.panelData.delUserData(plugin.panelData.getOffline(plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[1])),
+ plugin.panelData.delUserData(plugin.panelDataPlayers.getOffline(plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[1])),
plugin.tex.placeholdersNoColour(e.panel,e.pos,e.p,e.args[0]));
return;
}
diff --git a/src/me/rockyhawk/commandpanels/commandtags/tags/standard/BasicTags.java b/src/me/rockyhawk/commandpanels/commandtags/tags/standard/BasicTags.java
index ed42c34..0f094d9 100644
--- a/src/me/rockyhawk/commandpanels/commandtags/tags/standard/BasicTags.java
+++ b/src/me/rockyhawk/commandpanels/commandtags/tags/standard/BasicTags.java
@@ -137,12 +137,8 @@ public class BasicTags implements Listener {
}
if(e.name.equalsIgnoreCase("minimessage=")){
e.commandTagUsed();
- //get checks
- boolean isVersionCompatible = plugin.legacy.MAJOR_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_18);
- boolean isPaper = Bukkit.getServer().getVersion().contains("Paper");
- boolean allowUnsafeMiniMessage = plugin.config.getBoolean("config.allow-unsafe-mini-message");
//do mini message if conditions are met
- if (isVersionCompatible && (isPaper || allowUnsafeMiniMessage)) {
+ if (plugin.legacy.MAJOR_VERSION.greaterThanOrEqualTo(MinecraftVersions.v1_18)) {
Audience player = (Audience) e.p; // Needed because the basic Player from the Event can't send Paper's Components
Component parsedText = SerializerUtils.serializeText(String.join(" ", e.args));
player.sendMessage(parsedText);
diff --git a/src/me/rockyhawk/commandpanels/completetabs/DataTabComplete.java b/src/me/rockyhawk/commandpanels/completetabs/DataTabComplete.java
index 1739db5..9ae765d 100644
--- a/src/me/rockyhawk/commandpanels/completetabs/DataTabComplete.java
+++ b/src/me/rockyhawk/commandpanels/completetabs/DataTabComplete.java
@@ -6,7 +6,6 @@ import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
-import org.bukkit.entity.Player;
import java.util.*;
@@ -47,13 +46,13 @@ public class DataTabComplete implements TabCompleter {
try {
if (!args[1].equalsIgnoreCase("all") && !args[1].equalsIgnoreCase("online"))
- return new ArrayList<>(plugin.panelData.dataConfig.getConfigurationSection("playerData." + plugin.panelData.getOffline(args[1])).getKeys(false));
+ return new ArrayList<>(plugin.panelData.dataConfig.getConfigurationSection("playerData." + plugin.panelDataPlayers.getOffline(args[1])).getKeys(false));
else {
Set set = new HashSet<>();
for (OfflinePlayer player : Bukkit.getOfflinePlayers()) {
if (!player.isOnline()&&args[1].equalsIgnoreCase("online")) continue;
- set.addAll(plugin.panelData.dataConfig.getConfigurationSection("playerData." + plugin.panelData.getOffline(player.getName())).getKeys(false));
+ set.addAll(plugin.panelData.dataConfig.getConfigurationSection("playerData." + plugin.panelDataPlayers.getOffline(player.getName())).getKeys(false));
}
String[] finalArgs = args;
diff --git a/src/me/rockyhawk/commandpanels/datamanager/PanelDataLoader.java b/src/me/rockyhawk/commandpanels/datamanager/PanelDataLoader.java
index 03e2b21..4880fbc 100644
--- a/src/me/rockyhawk/commandpanels/datamanager/PanelDataLoader.java
+++ b/src/me/rockyhawk/commandpanels/datamanager/PanelDataLoader.java
@@ -1,7 +1,6 @@
package me.rockyhawk.commandpanels.datamanager;
import me.rockyhawk.commandpanels.CommandPanels;
-import org.bukkit.Bukkit;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
@@ -96,10 +95,4 @@ public class PanelDataLoader {
dataConfig.set("playerData." + playerUUID + "." + dataPoint, output.toPlainString());
}
-
- @SuppressWarnings("deprecation")
- public UUID getOffline(String playerName){
- //making this a separate function as it is long and deprecated
- return Bukkit.getOfflinePlayer(playerName).getUniqueId();
- }
}
diff --git a/src/me/rockyhawk/commandpanels/datamanager/PanelDataPlayerManager.java b/src/me/rockyhawk/commandpanels/datamanager/PanelDataPlayerManager.java
new file mode 100644
index 0000000..b570efb
--- /dev/null
+++ b/src/me/rockyhawk/commandpanels/datamanager/PanelDataPlayerManager.java
@@ -0,0 +1,40 @@
+package me.rockyhawk.commandpanels.datamanager;
+
+import me.rockyhawk.commandpanels.CommandPanels;
+import org.bukkit.Bukkit;
+import org.bukkit.OfflinePlayer;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerJoinEvent;
+
+import java.util.HashMap;
+import java.util.UUID;
+
+public class PanelDataPlayerManager implements Listener {
+ private CommandPanels plugin;
+
+ public PanelDataPlayerManager(CommandPanels pl) {
+ this.plugin = pl;
+ }
+
+ //will return UUID if found or null
+ public UUID getOffline(String playerName){
+ return knownPlayers.getOrDefault(playerName, null);
+ }
+
+ //Bukkit.getOfflinePlayer uses MojangAPI and can be very slow if a player has never joined the server before
+ //Will get all players who have ever joined the server before and use them
+ private HashMap knownPlayers = new HashMap<>();
+ public void reloadAllPlayers(){
+ knownPlayers.clear();
+ for(OfflinePlayer p : Bukkit.getOfflinePlayers()){
+ knownPlayers.put(p.getName(), p.getUniqueId());
+ }
+ }
+
+ //Add players who have joined the server to known players
+ @EventHandler
+ public void onPlayerJoin(PlayerJoinEvent e) {
+ knownPlayers.put(e.getPlayer().getName(), e.getPlayer().getUniqueId());
+ }
+}