Ich versuche, Paket (in Bukkit API) zu machen. Aber ich bekomme eine NoSuchFieldException.Java NoSuchFieldError bei Verwendung von Reflection, BukkitAPI
public class PacketPlayOutPlayerInfo {
private static final Class<?> packetClass = Reflections.getCraftClass("PacketPlayOutPlayerInfo");
private static final Class<?>[] typesClass = new Class<?>[]{ String.class, boolean.class, int.class };
private static int type = 0;
static {
try {
if (packetClass.getConstructor(typesClass) == null) {
type = 1;
}
} catch (Exception e) {
type = 1;
}
}
public static Object getPacket(String s, boolean b, int i) {
try {
if (type == 0) {
return packetClass.getConstructor(typesClass).newInstance(s, b, i);
}
else if (type == 1) {
Class<?> clazz = Reflections.getCraftClass("PacketPlayOutPlayerInfo");
Object packet = packetClass.getConstructor().newInstance();
Reflections.getPrivateField(clazz, "username").set(packet, s);
Reflections.getPrivateField(clazz, "gamemode").set(packet, 1);
Reflections.getPrivateField(clazz, "ping").set(packet, i);
Reflections.getPrivateField(clazz, "player").set(packet, new OfflineUser(s).getProfile());
if (!b) {
Reflections.getPrivateField(clazz, "action").set(packet, 4);
}
return packet;
}
} catch (Exception e) {
if (FunnyGuilds.exception(e.getCause())) {
e.printStackTrace();
}
}
return null;
}
}
Hier `s voller Fehler:
[20:25:43] [IndependentThread/WARN]: java.lang.NoSuchFieldException: username [20:25:43] [IndependentThread/WARN]: at java.lang.Class.getDeclaredField(Unknown Source) [20:25:43] [IndependentThread/WARN]: at net.dzikoysk.funnyguilds.util.reflect.Reflections.getPrivateField(Reflections.java:123) [20:25:43] [IndependentThread/WARN]: at net.dzikoysk.funnyguilds.util.reflect.transition.PacketPlayOutPlayerInfo.getPacket(PacketPlayOutPlayerInfo.java:31) [20:25:43] [IndependentThread/WARN]: at net.dzikoysk.funnyguilds.util.element.PlayerListManager.packets(PlayerListManager.java:88) [20:25:43] [IndependentThread/WARN]: at net.dzikoysk.funnyguilds.util.element.PlayerListManager.send(PlayerListManager.java:67) [20:25:43] [IndependentThread/WARN]: at net.dzikoysk.funnyguilds.util.element.PlayerList.send(PlayerList.java:160) [20:25:43] [IndependentThread/WARN]: at net.dzikoysk.funnyguilds.util.element.PlayerListManager.updatePlayers(PlayerListManager.java:24) [20:25:43] [IndependentThread/WARN]: at net.dzikoysk.funnyguilds.util.thread.Action.execute(Action.java:37) [20:25:43] [IndependentThread/WARN]: at net.dzikoysk.funnyguilds.util.thread.IndependentThread.execute(IndependentThread.java:43) [20:25:43] [IndependentThread/WARN]: at net.dzikoysk.funnyguilds.util.thread.IndependentThread.run(IndependentThread.java:28) [20:25:43] [IndependentThread/WARN]: java.lang.NullPointerException [20:25:43] [IndependentThread/WARN]: at net.dzikoysk.funnyguilds.util.reflect.transition.PacketPlayOutPlayerInfo.getPacket(PacketPlayOutPlayerInfo.java:31) [20:25:43] [IndependentThread/WARN]: at net.dzikoysk.funnyguilds.util.element.PlayerListManager.packets(PlayerListManager.java:88) [20:25:43] [IndependentThread/WARN]: at net.dzikoysk.funnyguilds.util.element.PlayerListManager.send(PlayerListManager.java:67) [20:25:43] [IndependentThread/WARN]: at net.dzikoysk.funnyguilds.util.element.PlayerList.send(PlayerList.java:160) [20:25:43] [IndependentThread/WARN]: at net.dzikoysk.funnyguilds.util.element.PlayerListManager.updatePlayers(PlayerListManager.java:24) [20:25:43] [IndependentThread/WARN]: at net.dzikoysk.funnyguilds.util.thread.Action.execute(Action.java:37) [20:25:43] [IndependentThread/WARN]: at net.dzikoysk.funnyguilds.util.thread.IndependentThread.execute(IndependentThread.java:43) [20:25:43] [IndependentThread/WARN]: at net.dzikoysk.funnyguilds.util.thread.IndependentThread.run(IndependentThread.java:28)
PS: Sorry für mein schlechtes Englisch.
In älteren Versionen von Bukkitapi (1.6-1.7) funktioniert dieser Code sehr gut. – PrzemoVi
Um ProtocolLib zu verwenden, muss ich viele Code bearbeiten. Thic Ausnahme wird von dieser Klasse oder anderen verursacht? – PrzemoVi
@PrzemoVi Nicht genug Zeichen, um dies zu einem Kommentar zu machen, ich füge meine Antwort oben hinzu. – Frelling