Помогите Добавление голов в GUI по UUID

Например голова ютуба:
/give @p skull 1 3 {display:{Name:"YouTube Icon"},SkullOwner:{Id:"58f58750-b269-4d3f-a88f-a30077fa9040",Properties:{textures:[{Value:"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzc1NjUxYTk0OGFhMjAzMGEyZDViNmMyZmJkZTVkNThjNGI4YTBjOGMzZjllNGMzNjBmM2Y3MmUyOTJlNTExMyJ9fX0="}]}}}
 
Написал: playerheadmeta.setOwner(Bukkit.getPlayer("e57c6078-0b1f-4f88-976d-977a5834717f").getName());
В eclipse ошибок нет
Но ошибки при включении сервера:
Код:
[23:58:34] [Server thread/ERROR]: Could not load 'plugins\Plugin123456.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: java.lang.ExceptionInInitializerError
    at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:135) ~[server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:329) ~[server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:251) [server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugins(CraftServer.java:292) [server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:202) [server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:561) [server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_144]
Caused by: java.lang.ExceptionInInitializerError
    at java.lang.Class.forName0(Native Method) ~[?:1.8.0_144]
    at java.lang.Class.forName(Unknown Source) ~[?:1.8.0_144]
    at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:64) ~[server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:131) ~[server.jar:git-PaperSpigot-0d986bb-18fbb24]
    ... 6 more
Caused by: java.lang.NullPointerException
    at ru.amin.sp.main.<clinit>(main.java:31) ~[?:?]
    at java.lang.Class.forName0(Native Method) ~[?:1.8.0_144]
    at java.lang.Class.forName(Unknown Source) ~[?:1.8.0_144]
    at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:64) ~[server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:131) ~[server.jar:git-PaperSpigot-0d986bb-18fbb24]
    ... 6 more
main.java:31 - читать лог надо
 
playerheadmeta.setOwner(Bukkit.getOfflinePlayer(UUID).getName());
попробуй.
Код:
Could not load 'plugins\Plugin123456.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: java.lang.ExceptionInInitializerError
    at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:135) ~[server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:329) ~[server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:251) [server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugins(CraftServer.java:292) [server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at net.minecraft.server.v1_8_R3.DedicatedServer.init(DedicatedServer.java:202) [server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:561) [server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_144]
Caused by: java.lang.ExceptionInInitializerError
    at java.lang.Class.forName0(Native Method) ~[?:1.8.0_144]
    at java.lang.Class.forName(Unknown Source) ~[?:1.8.0_144]
    at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:64) ~[server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:131) ~[server.jar:git-PaperSpigot-0d986bb-18fbb24]
    ... 6 more
Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(Unknown Source) ~[?:1.8.0_144]
    at java.util.ArrayList.get(Unknown Source) ~[?:1.8.0_144]
    at org.bukkit.craftbukkit.v1_8_R3.CraftOfflinePlayer.<init>(CraftOfflinePlayer.java:34) ~[server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at org.bukkit.craftbukkit.v1_8_R3.CraftServer.getOfflinePlayer(CraftServer.java:1338) ~[server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at org.bukkit.craftbukkit.v1_8_R3.CraftServer.getOfflinePlayer(CraftServer.java:1307) ~[server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at org.bukkit.Bukkit.getOfflinePlayer(Bukkit.java:745) ~[server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at ru.artem.sp.main.<clinit>(main.java:31) ~[?:?]
    at java.lang.Class.forName0(Native Method) ~[?:1.8.0_144]
    at java.lang.Class.forName(Unknown Source) ~[?:1.8.0_144]
    at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:64) ~[server.jar:git-PaperSpigot-0d986bb-18fbb24]
    at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:131) ~[server.jar:git-PaperSpigot-0d986bb-18fbb24]
    ... 6 more
 
Код:
package Example;

import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.UUID;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.craftbukkit.v1_12_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack;
import org.*********ventory.ItemStack;

import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import net.minecraft.server.v1_12_R1.BlockPosition;
import net.minecraft.server.v1_12_R1.MojangsonParseException;
import net.minecraft.server.v1_12_R1.MojangsonParser;
import net.minecraft.server.v1_12_R1.NBTTagCompound;
import net.minecraft.server.v1_12_R1.TileEntity;

public class NBTExample {

    public static ItemStack setSkullSkin(ItemStack item, String name) {
        NBTTagCompound tag = new NBTTagCompound();
        try {
            String uuid = getUUID(name);
            try {
                tag = MojangsonParser.parse(nbt(getSkinProfile(uuid)));
            } catch (MojangsonParseException e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        NBTTagCompound nbt = new NBTTagCompound();
        CraftItemStack.asNMSCopy(item).save(nbt);
        nbt.set("tag", tag);
        return CraftItemStack.asBukkitCopy(new net.minecraft.server.v1_12_R1.ItemStack(nbt));
    }

    public static void setSkullSkin(Block block, Location loc, String name) {
        try {
            String uuid = getUUID(name);
            CraftWorld cw = (CraftWorld) loc.getWorld();
            TileEntity tile = cw.getHandle().getTileEntity(new BlockPosition(loc.getX(), loc.getY(), loc.getZ()));
            NBTTagCompound NBT = new NBTTagCompound();
            tile.save(NBT);
            NBT = MojangsonParser.parse(nbt(getSkinProfile(uuid), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(),
                    NBT.get("Rot").toString()));
            tile.load(NBT);
            block.getState().update();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static String nbt(JsonElement jsone) {
        JsonElement prop = jsone.getAsJsonObject().get("properties");
        JsonObject json = prop.getAsJsonArray().get(0).getAsJsonObject();
        String id = jsone.getAsJsonObject().get("id").getAsString();
        String name = jsone.getAsJsonObject().get("name").toString();
        String value = json.get("value").toString();
        BigInteger b = new BigInteger(id, 16);
        String tmp = "{SkullOwner:{Id:\"" + new UUID(b.shiftRight(64).longValue(), b.longValue())
                + "\",Properties:{textures:[{Value:" + value + "}]},Name:" + name + "}}";
        return tmp;
    }

    private static String nbt(JsonElement jsone, int x, int y, int z, String rot) {
        JsonElement prop = jsone.getAsJsonObject().get("properties");
        JsonObject json = prop.getAsJsonArray().get(0).getAsJsonObject();
        String id = jsone.getAsJsonObject().get("id").getAsString();
        String name = jsone.getAsJsonObject().get("name").toString();
        String value = json.get("value").toString();
        BigInteger b = new BigInteger(id, 16);
        String tmp = "{Owner:{Id:\"" + new UUID(b.shiftRight(64).longValue(), b.longValue())
                + "\",Properties:{textures:[{Value:" + value + "}]},Name:" + name + "}" + ",Rot:" + rot + ",x:" + x
                + ",y:" + y + ",z:" + z + ",id:\"minecraft:skull\",SkullType:3b}";
        return tmp;
    }

    public static String getUUID(String name) throws IOException {
        File file = new File("./uuids/"+name+".json");
        file.getParentFile().mkdirs();
        if(file.exists()) {
            return FileUtils.readFileToString(file, Charset.defaultCharset());
        }
        HttpURLConnection connection = (HttpURLConnection) setupConnection(
                new URL("https://api.mojang.com/profiles/minecraft"));
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", "application/json");
        DataOutputStream writer = new DataOutputStream(connection.getOutputStream());
        writer.write(new Gson().toJson(Arrays.asList(new String[] { name })).getBytes(StandardCharsets.UTF_8));
        writer.flush();
        writer.close();
        InputStream is = connection.getInputStream();
        JsonParser parse = new JsonParser();
        String result = IOUtils.toString(is, StandardCharsets.UTF_8);
        if (result.length() > 2) {
            JsonElement jsone = parse.parse(result).getAsJsonArray().get(0);
            FileUtils.writeStringToFile(file, jsone.getAsJsonObject().get("id").getAsString(), Charset.defaultCharset());
            return jsone.getAsJsonObject().get("id").getAsString();
        } else {
            return null;
        }
    }

    public static JsonElement getSkinProfile(String id) throws IOException {
        File file = new File("./profile/"+id+".json");
        file.getParentFile().mkdirs();
        JsonParser parse = new JsonParser();
        if(file.exists()) {
            return parse.parse(FileUtils.readFileToString(file, Charset.defaultCharset()));
        }
        HttpURLConnection connection = (HttpURLConnection) setupConnection(
                new URL("https://sessionserver.mojang.com/session/minecraft/profile/" + id.replace("-", "")
                        + "?unsigned=true"));
        if (connection.getResponseCode() == 429) {
            throw new IOException("RATE LIMITED");
        }
        InputStream is = connection.getInputStream();
        String result = IOUtils.toString(is, StandardCharsets.UTF_8);
        FileUtils.writeStringToFile(file, result ,Charset.defaultCharset());
        return parse.parse(result);
    }

    private static URLConnection setupConnection(URL url) throws IOException {
        URLConnection connection = url.openConnection();
        connection.setConnectTimeout(10000);
        connection.setReadTimeout(10000);
        connection.setUseCaches(false);
        connection.setDoInput(true);
        connection.setDoOutput(true);
        return connection;
    }
}
Сперва запиши все нужные кеши, ибо там лимит в обращение на моджанг апи.
NBTExample.getSkinProfile(NBTExample.getUUID("username"));
Дальше можешь спокойно юзаеть
ItemStack stack = NBTExample.setSkullSkin(item, name);
 
Код:
package Example;

import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.UUID;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.craftbukkit.v1_12_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack;
import org.*********ventory.ItemStack;

import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import net.minecraft.server.v1_12_R1.BlockPosition;
import net.minecraft.server.v1_12_R1.MojangsonParseException;
import net.minecraft.server.v1_12_R1.MojangsonParser;
import net.minecraft.server.v1_12_R1.NBTTagCompound;
import net.minecraft.server.v1_12_R1.TileEntity;

public class NBTExample {

    public static ItemStack setSkullSkin(ItemStack item, String name) {
        NBTTagCompound tag = new NBTTagCompound();
        try {
            String uuid = getUUID(name);
            try {
                tag = MojangsonParser.parse(nbt(getSkinProfile(uuid)));
            } catch (MojangsonParseException e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        NBTTagCompound nbt = new NBTTagCompound();
        CraftItemStack.asNMSCopy(item).save(nbt);
        nbt.set("tag", tag);
        return CraftItemStack.asBukkitCopy(new net.minecraft.server.v1_12_R1.ItemStack(nbt));
    }

    public static void setSkullSkin(Block block, Location loc, String name) {
        try {
            String uuid = getUUID(name);
            CraftWorld cw = (CraftWorld) loc.getWorld();
            TileEntity tile = cw.getHandle().getTileEntity(new BlockPosition(loc.getX(), loc.getY(), loc.getZ()));
            NBTTagCompound NBT = new NBTTagCompound();
            tile.save(NBT);
            NBT = MojangsonParser.parse(nbt(getSkinProfile(uuid), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ(),
                    NBT.get("Rot").toString()));
            tile.load(NBT);
            block.getState().update();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static String nbt(JsonElement jsone) {
        JsonElement prop = jsone.getAsJsonObject().get("properties");
        JsonObject json = prop.getAsJsonArray().get(0).getAsJsonObject();
        String id = jsone.getAsJsonObject().get("id").getAsString();
        String name = jsone.getAsJsonObject().get("name").toString();
        String value = json.get("value").toString();
        BigInteger b = new BigInteger(id, 16);
        String tmp = "{SkullOwner:{Id:\"" + new UUID(b.shiftRight(64).longValue(), b.longValue())
                + "\",Properties:{textures:[{Value:" + value + "}]},Name:" + name + "}}";
        return tmp;
    }

    private static String nbt(JsonElement jsone, int x, int y, int z, String rot) {
        JsonElement prop = jsone.getAsJsonObject().get("properties");
        JsonObject json = prop.getAsJsonArray().get(0).getAsJsonObject();
        String id = jsone.getAsJsonObject().get("id").getAsString();
        String name = jsone.getAsJsonObject().get("name").toString();
        String value = json.get("value").toString();
        BigInteger b = new BigInteger(id, 16);
        String tmp = "{Owner:{Id:\"" + new UUID(b.shiftRight(64).longValue(), b.longValue())
                + "\",Properties:{textures:[{Value:" + value + "}]},Name:" + name + "}" + ",Rot:" + rot + ",x:" + x
                + ",y:" + y + ",z:" + z + ",id:\"minecraft:skull\",SkullType:3b}";
        return tmp;
    }

    public static String getUUID(String name) throws IOException {
        File file = new File("./uuids/"+name+".json");
        file.getParentFile().mkdirs();
        if(file.exists()) {
            return FileUtils.readFileToString(file, Charset.defaultCharset());
        }
        HttpURLConnection connection = (HttpURLConnection) setupConnection(
                new URL("https://api.mojang.com/profiles/minecraft"));
        connection.setRequestMethod("POST");
        connection.setRequestProperty("Content-Type", "application/json");
        DataOutputStream writer = new DataOutputStream(connection.getOutputStream());
        writer.write(new Gson().toJson(Arrays.asList(new String[] { name })).getBytes(StandardCharsets.UTF_8));
        writer.flush();
        writer.close();
        InputStream is = connection.getInputStream();
        JsonParser parse = new JsonParser();
        String result = IOUtils.toString(is, StandardCharsets.UTF_8);
        if (result.length() > 2) {
            JsonElement jsone = parse.parse(result).getAsJsonArray().get(0);
            FileUtils.writeStringToFile(file, jsone.getAsJsonObject().get("id").getAsString(), Charset.defaultCharset());
            return jsone.getAsJsonObject().get("id").getAsString();
        } else {
            return null;
        }
    }

    public static JsonElement getSkinProfile(String id) throws IOException {
        File file = new File("./profile/"+id+".json");
        file.getParentFile().mkdirs();
        JsonParser parse = new JsonParser();
        if(file.exists()) {
            return parse.parse(FileUtils.readFileToString(file, Charset.defaultCharset()));
        }
        HttpURLConnection connection = (HttpURLConnection) setupConnection(
                new URL("https://sessionserver.mojang.com/session/minecraft/profile/" + id.replace("-", "")
                        + "?unsigned=true"));
        if (connection.getResponseCode() == 429) {
            throw new IOException("RATE LIMITED");
        }
        InputStream is = connection.getInputStream();
        String result = IOUtils.toString(is, StandardCharsets.UTF_8);
        FileUtils.writeStringToFile(file, result ,Charset.defaultCharset());
        return parse.parse(result);
    }

    private static URLConnection setupConnection(URL url) throws IOException {
        URLConnection connection = url.openConnection();
        connection.setConnectTimeout(10000);
        connection.setReadTimeout(10000);
        connection.setUseCaches(false);
        connection.setDoInput(true);
        connection.setDoOutput(true);
        return connection;
    }
}
Сперва запиши все нужные кеши, ибо там лимит в обращение на моджанг апи.
NBTExample.getSkinProfile(NBTExample.getUUID("username"));
Дальше можешь спокойно юзаеть
ItemStack stack = NBTExample.setSkullSkin(item, name);
Можно и без нмс
 
Назад
Верх