mirror of
https://github.com/LordBoos/boosCooldowns.git
synced 2025-02-16 12:31:27 +01:00
Make NMSHook class prettier
This commit is contained in:
parent
f38f62a2c9
commit
0b6b6cd637
@ -29,7 +29,11 @@ public class NMS {
|
||||
return new NMSSetupResponse(null, false);
|
||||
}
|
||||
|
||||
hook = new NMSHook();
|
||||
try {
|
||||
hook = new NMSHook();
|
||||
} catch (ClassNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
return new NMSSetupResponse(version, true);
|
||||
|
||||
|
@ -2,6 +2,7 @@ package nms;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -14,27 +15,26 @@ import org.bukkit.entity.Player;
|
||||
public class NMSHook
|
||||
implements INMSHook {
|
||||
|
||||
private String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
|
||||
private Class<?> chatSerializer = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent$ChatSerializer");
|
||||
private Class<?> chatComponent = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent");
|
||||
private Class<?> packet = Class.forName("net.minecraft.server." + version + ".PacketPlayOutChat");
|
||||
|
||||
public NMSHook() throws ClassNotFoundException {
|
||||
}
|
||||
|
||||
public void sendJSON(String json, Player player) {
|
||||
try {
|
||||
String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
|
||||
Object nmsPlayer = player.getClass().getMethod("getHandle").invoke(player);
|
||||
Object connection = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer);
|
||||
Class<?> chatSerializer = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent$ChatSerializer");
|
||||
Class<?> chatComponent = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent");
|
||||
Class<?> packet = Class.forName("net.minecraft.server." + version + ".PacketPlayOutChat");
|
||||
Object nmsPlayer = getNmsPlayer(player);
|
||||
Object connection = getConnection(nmsPlayer);
|
||||
|
||||
Constructor constructor = packet.getConstructor(chatComponent);
|
||||
|
||||
Object text = chatSerializer.getMethod("a", String.class).invoke(chatSerializer, json);
|
||||
Object text = getText(json);
|
||||
|
||||
Object packetFinal = constructor.newInstance(text);
|
||||
|
||||
Field field = packetFinal.getClass().getDeclaredField("a");
|
||||
field.setAccessible(true);
|
||||
field.set(packetFinal, text);
|
||||
connection
|
||||
.getClass()
|
||||
.getMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet"))
|
||||
.invoke(connection, packetFinal);
|
||||
|
||||
sendPacket(packetFinal, text, connection);
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
@ -42,27 +42,41 @@ public class NMSHook
|
||||
|
||||
public void sendActionBar(String json, Player player) {
|
||||
try {
|
||||
String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
|
||||
Object nmsPlayer = player.getClass().getMethod("getHandle").invoke(player);
|
||||
Object connection = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer);
|
||||
Class<?> chatSerializer = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent$ChatSerializer");
|
||||
Class<?> chatComponent = Class.forName("net.minecraft.server." + version + ".IChatBaseComponent");
|
||||
Class<?> packet = Class.forName("net.minecraft.server." + version + ".PacketPlayOutChat");
|
||||
Object nmsPlayer = getNmsPlayer(player);
|
||||
Object connection = getConnection(nmsPlayer);
|
||||
|
||||
Constructor constructor = packet.getConstructor(chatComponent, byte.class);
|
||||
|
||||
Object text = chatSerializer.getMethod("a", String.class).invoke(chatSerializer, json);
|
||||
Object text = getText(json);
|
||||
|
||||
Object packetFinal = constructor.newInstance(text, (byte) 2);
|
||||
|
||||
Field field = packetFinal.getClass().getDeclaredField("a");
|
||||
field.setAccessible(true);
|
||||
field.set(packetFinal, text);
|
||||
connection
|
||||
.getClass()
|
||||
.getMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet"))
|
||||
.invoke(connection, packetFinal);
|
||||
|
||||
sendPacket(packetFinal, text, connection);
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void sendPacket(Object packetFinal, Object text, Object connection) throws IllegalAccessException, NoSuchFieldException,
|
||||
ClassNotFoundException, NoSuchMethodException, InvocationTargetException {
|
||||
Field field = packetFinal.getClass().getDeclaredField("a");
|
||||
field.setAccessible(true);
|
||||
field.set(packetFinal, text);
|
||||
connection
|
||||
.getClass()
|
||||
.getMethod("sendPacket", Class.forName("net.minecraft.server." + version + ".Packet"))
|
||||
.invoke(connection, packetFinal);
|
||||
}
|
||||
|
||||
private Object getNmsPlayer(Player player) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
|
||||
return player.getClass().getMethod("getHandle").invoke(player);
|
||||
}
|
||||
|
||||
private Object getConnection(Object nmsPlayer) throws NoSuchFieldException, IllegalAccessException {
|
||||
return nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer);
|
||||
}
|
||||
|
||||
private Object getText(String json) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
|
||||
return chatSerializer.getMethod("a", String.class).invoke(chatSerializer, json);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user