forked from Upstream/CommandPanels
3.19.0.1
This commit is contained in:
parent
bc998407a2
commit
131065eca3
@ -1,4 +1,4 @@
|
|||||||
version: 3.19.0.0
|
version: 3.19.0.1
|
||||||
main: me.rockyhawk.commandpanels.CommandPanels
|
main: me.rockyhawk.commandpanels.CommandPanels
|
||||||
name: CommandPanels
|
name: CommandPanels
|
||||||
author: RockyHawk
|
author: RockyHawk
|
||||||
|
@ -9,9 +9,18 @@ import org.bukkit.Material;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.bukkit.inventory.meta.SkullMeta;
|
import org.bukkit.inventory.meta.SkullMeta;
|
||||||
|
import org.json.simple.JSONArray;
|
||||||
|
import org.json.simple.JSONObject;
|
||||||
|
import org.json.simple.parser.JSONParser;
|
||||||
|
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.Reader;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.net.URLConnection;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@ -21,6 +30,10 @@ public class GetCustomHeads {
|
|||||||
this.plugin = pl;
|
this.plugin = pl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//contains cached player name and then base64 value (clears on /cpr reload)
|
||||||
|
//also will clear if the map reaches a length of 1000 which is roughly 135 KB RAM usage
|
||||||
|
public HashMap<String, String> playerHeadTextures = new HashMap<>();
|
||||||
|
|
||||||
public String getHeadBase64(ItemStack head) {
|
public String getHeadBase64(ItemStack head) {
|
||||||
if (plugin.getHeads.ifSkullOrHead(head.getType().toString()) && head.hasItemMeta()) {
|
if (plugin.getHeads.ifSkullOrHead(head.getType().toString()) && head.hasItemMeta()) {
|
||||||
try {
|
try {
|
||||||
@ -45,15 +58,48 @@ public class GetCustomHeads {
|
|||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
public ItemStack getPlayerHead(String name) {
|
public ItemStack getPlayerHead(String name) {
|
||||||
byte id = 0;
|
byte id = 0;
|
||||||
if(plugin.legacy.LOCAL_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_15)){
|
if (plugin.legacy.LOCAL_VERSION.lessThanOrEqualTo(MinecraftVersions.v1_15)) {
|
||||||
id = 3;
|
id = 3;
|
||||||
}
|
}
|
||||||
ItemStack itemStack = new ItemStack(Material.matchMaterial(plugin.getHeads.playerHeadString()), 1,id);
|
|
||||||
|
//get texture if already cached
|
||||||
|
if(playerHeadTextures.containsKey(name)) {
|
||||||
|
return getCustomHead(playerHeadTextures.get(name));
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Fetch the player UUID from the Mojang API
|
||||||
|
URL uuidUrl = new URL("https://api.mojang.com/users/profiles/minecraft/" + name);
|
||||||
|
URLConnection uuidConnection = uuidUrl.openConnection();
|
||||||
|
uuidConnection.setConnectTimeout(2000); // Set connection timeout to 2 seconds
|
||||||
|
uuidConnection.setReadTimeout(2000); // Set read timeout to 2 seconds
|
||||||
|
Reader uuidReader = new InputStreamReader(uuidConnection.getInputStream(), StandardCharsets.UTF_8);
|
||||||
|
JSONObject uuidResponse = (JSONObject) new JSONParser().parse(uuidReader);
|
||||||
|
String uuid = (String) uuidResponse.get("id");
|
||||||
|
|
||||||
|
// Fetch the skin texture from the Mojang API using the player UUID
|
||||||
|
URL texturesUrl = new URL("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid);
|
||||||
|
URLConnection texturesConnection = texturesUrl.openConnection();
|
||||||
|
texturesConnection.setConnectTimeout(2000); // Set connection timeout to 2 seconds
|
||||||
|
texturesConnection.setReadTimeout(2000); // Set read timeout to 2 seconds
|
||||||
|
Reader texturesReader = new InputStreamReader(texturesConnection.getInputStream(), StandardCharsets.UTF_8);
|
||||||
|
JSONObject texturesResponse = (JSONObject) new JSONParser().parse(texturesReader);
|
||||||
|
JSONArray propertiesArray = (JSONArray) texturesResponse.get("properties");
|
||||||
|
JSONObject texturesProperty = (JSONObject) propertiesArray.get(0);
|
||||||
|
String base64Texture = (String) texturesProperty.get("value");
|
||||||
|
playerHeadTextures.put(name, base64Texture);
|
||||||
|
|
||||||
|
// Create a custom head using the Base64 texture string
|
||||||
|
return getCustomHead(base64Texture);
|
||||||
|
} catch (Exception e) {
|
||||||
|
// Fallback to setting the owner if the Mojang API request fails
|
||||||
|
ItemStack itemStack = new ItemStack(Material.matchMaterial(plugin.getHeads.playerHeadString()), 1, id);
|
||||||
SkullMeta meta = (SkullMeta) itemStack.getItemMeta();
|
SkullMeta meta = (SkullMeta) itemStack.getItemMeta();
|
||||||
meta.setOwner(name);
|
meta.setOwner(name);
|
||||||
itemStack.setItemMeta(meta);
|
itemStack.setItemMeta(meta);
|
||||||
return itemStack;
|
return itemStack;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//used to get heads from Base64 Textures
|
//used to get heads from Base64 Textures
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
|
@ -51,6 +51,9 @@ public class Commandpanelsreload implements CommandExecutor {
|
|||||||
registerCommands();
|
registerCommands();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//clear cached head textures
|
||||||
|
plugin.customHeads.playerHeadTextures.clear();
|
||||||
|
|
||||||
sender.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.reload")));
|
sender.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.reload")));
|
||||||
}else{
|
}else{
|
||||||
sender.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.perms")));
|
sender.sendMessage(plugin.tex.colour(plugin.tag + plugin.config.getString("config.format.perms")));
|
||||||
|
@ -175,11 +175,7 @@ public class OpenGUI {
|
|||||||
} else if (openType == PanelOpenType.Refresh) {
|
} else if (openType == PanelOpenType.Refresh) {
|
||||||
//openType 0 will just refresh the panel
|
//openType 0 will just refresh the panel
|
||||||
if(position == PanelPosition.Top) {
|
if(position == PanelPosition.Top) {
|
||||||
Inventory topInventory = p.getOpenInventory().getTopInventory();
|
plugin.legacy.setStorageContents(p, plugin.legacy.getStorageContents(i));
|
||||||
ItemStack[] items = p.getOpenInventory().getTopInventory().getContents();
|
|
||||||
for (int slot = 0; slot < items.length; ++slot) {
|
|
||||||
topInventory.setItem(slot, items[slot]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else if (openType == PanelOpenType.Return) {
|
} else if (openType == PanelOpenType.Return) {
|
||||||
//will return the inventory, not opening it at all
|
//will return the inventory, not opening it at all
|
||||||
|
@ -71,6 +71,11 @@ public class UtilsPanelsLoader implements Listener {
|
|||||||
|
|
||||||
//close panels and run commands for Top panel
|
//close panels and run commands for Top panel
|
||||||
plugin.openPanels.closePanelForLoader(e.getPlayer().getName(),PanelPosition.Top);
|
plugin.openPanels.closePanelForLoader(e.getPlayer().getName(),PanelPosition.Top);
|
||||||
|
|
||||||
|
//clear cached textures list on length limit
|
||||||
|
if(plugin.customHeads.playerHeadTextures.size() > 1000) {
|
||||||
|
plugin.customHeads.playerHeadTextures.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
@ -48,7 +48,7 @@ public class UtilsOpenWithItem implements Listener {
|
|||||||
}
|
}
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerUse(PlayerInteractEvent e){
|
public void onPlayerUse(PlayerInteractEvent e){
|
||||||
//item right clicked only (not left because that causes issues when things are interacted with)
|
//item right-clicked only (not left because that causes issues when things are interacted with)
|
||||||
if(!plugin.openWithItem){
|
if(!plugin.openWithItem){
|
||||||
//if none of the panels have open-with-item
|
//if none of the panels have open-with-item
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user