- Баллы
- 46
- Имя в Minecraft
- VladMan
Подскажите пожалуйста как в GUI добавить голову по UUID?
Код: https://hastebin.com/pusofemici.cs
Код: https://hastebin.com/pusofemici.cs
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
хочу добавить голову из head databaseА зачем по UUID ?
Например голова ютуба:А зачем по UUID ?
Я нуб, поэтому прошу в коде.лел, так получи имя по UUID
Это вводить в строку сBukkit.getPlayer(UUID); ?
подстрой пожалуйста.Bukkit.getPlayer(UUID); ?
playerheadmeta.setOwner(Bukkit.getPlayer("e57c6078-0b1f-4f88-976d-977a5834717f"));playerheadmeta.setOwner(Bukkit.getPlayer("UUID"));
:CПссс... не улетай в мут за оскорбления пж)
Нет, а ты?Ты дибил?
main.java:31 - читать лог надоНаписал: 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
Ну а что в 31 строке не так?☹️main.java:31 - читать лог надо
Я не ванга...Ну а что в 31 строке не так?☹️
playerheadmeta.setOwner(Bukkit.getPlayer("e57c6078-0b1f-4f88-976d-977a5834717f"));
Я не ванга...
Head database это случаем не тот плагин платный с кучей голов? Если это сайт - тут недавно в разделе была тема как ставить голову по url скина.хочу добавить голову из head database
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;
}
}
Можно и без нмсСперва запиши все нужные кеши, ибо там лимит в обращение на моджанг апи.Код: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);
Не не можно. Лимит поимеет, да и в гуцище может не обновится. Нужно кешировать это дело сразу в nbt.Можно и без нмс
Чет не было такого никогдаНе не можно. Лимит поимеет, да и в гуцище может не обновится. Нужно кешировать это дело сразу в nbt.