diff --git a/pom.xml b/pom.xml index 61c0d38..c200e43 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ net.t2code T2CodeLib - 16.1 + 16.2 @@ -221,6 +221,12 @@ 4.5.14 compile + + org.json + json + 20230227 + compile + diff --git a/src/main/java/net/t2code/t2codelib/SPIGOT/api/items/T2CitemBuilder.java b/src/main/java/net/t2code/t2codelib/SPIGOT/api/items/T2CitemBuilder.java index bceaed7..60b5631 100644 --- a/src/main/java/net/t2code/t2codelib/SPIGOT/api/items/T2CitemBuilder.java +++ b/src/main/java/net/t2code/t2codelib/SPIGOT/api/items/T2CitemBuilder.java @@ -3,13 +3,23 @@ package net.t2code.t2codelib.SPIGOT.api.items; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import net.t2code.t2codelib.SPIGOT.api.minecraftVersion.T2CmcVersion; +import net.t2code.t2codelib.SPIGOT.system.bstats.Metrics; +import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.SkullMeta; +import org.bukkit.profile.PlayerProfile; +import org.bukkit.profile.PlayerTextures; import java.lang.reflect.Field; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Base64; + +import org.json.JSONObject; + import java.util.List; import java.util.UUID; @@ -66,7 +76,13 @@ public class T2CitemBuilder { inventory.setItem(slot, item); } - public static ItemStack base64(String base64Value, Integer amount, String displayName, List lore) { + public static ItemStack base64(String base64Value) { + if (!T2CmcVersion.minMc1_20() || T2CmcVersion.isNms1_20_R1()) { + return base64Old(base64Value); + } else return base64New(base64Value); + } + + private static ItemStack base64Old(String base64Value) { ItemStack itemStack = new ItemStack(T2CitemVersion.getHead()); SkullMeta itemMeta = (SkullMeta) itemStack.getItemMeta(); @@ -81,11 +97,33 @@ public class T2CitemBuilder { e.printStackTrace(); } - itemMeta.setDisplayName(displayName); - itemMeta.setLore(lore); itemStack.setItemMeta(itemMeta); - - itemStack.setAmount(amount); return itemStack; } + + private static ItemStack base64New(String base64Value) { + ItemStack itemStack = new ItemStack(T2CitemVersion.getHead()); + SkullMeta itemMeta = (SkullMeta) itemStack.getItemMeta(); + + PlayerProfile profile = Bukkit.createPlayerProfile(UUID.randomUUID()); + PlayerTextures textures = profile.getTextures(); + try { + textures.setSkin(new URL(base64Convert(base64Value))); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } + profile.setTextures(textures); + itemMeta.setOwnerProfile(profile); + itemStack.setItemMeta(itemMeta); + return itemStack; + } + + private static String base64Convert(String base64Value) { + String jsonString = new String(Base64.getDecoder().decode(base64Value)); + JSONObject obj = new JSONObject(jsonString); + String output = obj.getJSONObject("textures").getJSONObject("SKIN").getString("url"); + if (output.startsWith("http://textures.minecraft.net/texture/")){ + return output; + } else return "http://textures.minecraft.net/texture/d5d20330da59c207d78352838e91a48ea1e42b45a9893226144b251fe9b9d535"; + } }