1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем ВладМен, 18 янв 2018.

  1. Автор темы
    ВладМен

    ВладМен Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    VladMan
  2. Автор темы
    ВладМен

    ВладМен Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    VladMan
    хочу добавить голову из head database
     
  3. Автор темы
    ВладМен

    ВладМен Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    VladMan
    Например голова ютуба:
    /give @p skull 1 3 {display:{Name:"YouTube Icon"},SkullOwner:{Id:"58f58750-b269-4d3f-a88f-a30077fa9040",Properties:{textures:[{Value:"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzc1NjUxYTk0OGFhMjAzMGEyZDViNmMyZmJkZTVkNThjNGI4YTBjOGMzZjllNGMzNjBmM2Y3MmUyOTJlNTExMyJ9fX0="}]}}}
     
  4. Автор темы
    ВладМен

    ВладМен Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    VladMan
    Я нуб, поэтому прошу в коде.
     
  5. Автор темы
    ВладМен

    ВладМен Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    VladMan
    Это вводить в строку с
    playerheadmeta.setOwner ?
     
  6. Автор темы
    ВладМен

    ВладМен Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    VladMan
    подстрой пожалуйста.
     
  7. Автор темы
    ВладМен

    ВладМен Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    VladMan
    playerheadmeta.setOwner(Bukkit.getPlayer("e57c6078-0b1f-4f88-976d-977a5834717f"));
     
  8. Автор темы
    ВладМен

    ВладМен Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    VladMan
    :C
    The method setOwner(String) in the type SkullMeta is not applicable for the arguments (Player)
     
  9. Автор темы
    ВладМен

    ВладМен Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    VladMan
    Нет, а ты?
     
  10. _MasterCapeXD_

    _MasterCapeXD_ Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    main.java:31 - читать лог надо
     
  11. Автор темы
    ВладМен

    ВладМен Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    VladMan
    Ну а что в 31 строке не так?:(
     
  12. _MasterCapeXD_

    _MasterCapeXD_ Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    Я не ванга...
     
  13. Автор темы
    ВладМен

    ВладМен Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    VladMan
     
  14. _MasterCapeXD_

    _MasterCapeXD_ Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    playerheadmeta.setOwner(Bukkit.getOfflinePlayer(UUID).getName());
    попробуй.
     
  15. Cool_boy

    Cool_boy Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Head database это случаем не тот плагин платный с кучей голов? Если это сайт - тут недавно в разделе была тема как ставить голову по url скина.
     
  16. Автор темы
    ВладМен

    ВладМен Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    VladMan
    Код:
    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
     
  17. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Код:
    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);
     
  18. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Можно и без нмс
     
  19. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Не не можно. Лимит поимеет, да и в гуцище может не обновится. Нужно кешировать это дело сразу в nbt.
     
  20. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Чет не было такого никогда
     

Поделиться этой страницей