Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class BossMessage {
- private Plugin plugin;
- private static int MOB_ID = 1234;
- public BossMessage(Plugin plugin) {
- this.plugin = plugin;
- }
- @SuppressWarnings("deprecation")
- public boolean display(Player player, String message, int ticks) {
- try {
- Location loc = player.getLocation().add(player.getLocation().getDirection().multiply(3));
- Object packetOb = getEntitySpawnPacket();
- setField(packetOb, "a", MOB_ID);
- setField(packetOb, "b", (int) EntityType.WITHER.getTypeId());
- setField(packetOb, "c", (int) Math.floor(loc.getBlockX() * 32.0D));
- setField(packetOb, "d", (int) Math.floor(loc.getBlockY() * 32.0D));
- setField(packetOb, "e", (int) Math.floor(loc.getBlockZ() * 32.0D));
- setField(packetOb, "f", (int) 0);
- setField(packetOb, "g", (int) 0);
- setField(packetOb, "h", (int) 0);
- setField(packetOb, "i", (byte) 0);
- setField(packetOb, "j", (byte) 0);
- setField(packetOb, "k", (byte) 0);
- setField(packetOb, "l", buildDataWatcher(message));
- sendPacket(player, packetOb);
- } catch(Exception e) {
- e.printStackTrace();
- }
- return true;
- }
- private String getPackage() {
- return "net.minecraft.server." + Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
- }
- private Object getEntitySpawnPacket() throws Exception {
- String packageName = getPackage();
- Class<?> c = null;
- if (packageName.contains("v1_7_R1")) {
- c = Class.forName(packageName + ".PacketPlayOutSpawnEntityLiving");
- } else {
- c = Class.forName(packageName + ".Packet24MobSpawn");
- }
- return c.getConstructors()[0].newInstance();
- }
- private void setField(Object object, String fieldName, Object what) throws Exception {
- Field f = object.getClass().getDeclaredField(fieldName);
- f.setAccessible(true);
- f.set(object, what);
- }
- private Object buildDataWatcher(String entityName) throws Exception {
- Class<?> c = Class.forName(getPackage() + ".DataWatcher");
- Object dataWatcher = null;
- for (Constructor<?> con : c.getConstructors()) {
- if (con.getParameterTypes().length == 1) {
- Object ob = null;
- dataWatcher = con.newInstance(ob);
- break;
- }
- }
- Method m = c.getMethod("a", int.class, Object.class);
- m.invoke(dataWatcher, 0, (Byte) (byte) 0x20);
- m.invoke(dataWatcher, 6, (Float) (float) 1);
- m.invoke(dataWatcher, 10, (String) entityName);
- m.invoke(dataWatcher, 11, (Byte) (byte) 1);
- return dataWatcher;
- }
- private void sendPacket(Player player, Object packet) throws Exception {
- Object nmsPlayer = player.getClass().getMethod("getHandle").invoke(player);
- Object playerCon = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer);
- Method send = null;
- for (Method m : playerCon.getClass().getMethods()) {
- if (m.getName().equals("sendPacket") && m.getParameterTypes().length == 1) {
- send = m;
- break;
- }
- }
- send.invoke(playerCon, packet);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement