Ir para conteúdo
  • 0

Enviar ActionBar


FelipeDye

Pergunta

6 respostass a esta questão

Posts Recomendados

  • 0

 

Crie uma classe com este código

    public static void sendAction(Player p, String message) {
        Class<?> playOutChat, baseComponent, chatMsg;
        Constructor<?> chatConstructor, playOutConstructor;

        try {

            message = ChatColor.translateAlternateColorCodes('&', message);

            playOutChat = getNMSClass("PacketPlayOutChat");
            baseComponent = getNMSClass("IChatBaseComponent");
            chatMsg = getNMSClass("ChatMessage");

            chatConstructor = chatMsg.getDeclaredConstructor(String.class, Object[].class);
            playOutConstructor = playOutChat.getConstructor(baseComponent, Byte.TYPE);

            Object ichatbc = chatConstructor.newInstance(message, new Object[0]);
            Object packet = playOutConstructor.newInstance(ichatbc, (byte) 2);
            sendPacket(p, packet);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void sendPacket(Player p, Object packet) {
        try {
            Object handle = p.getClass().getMethod("getHandle").invoke(p);
            Object playerConnection = handle.getClass().getField("playerConnection").get(handle);
            playerConnection.getClass().getMethod("sendPacket", getNMSClass("Packet")).invoke(playerConnection, packet);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Class<?> getNMSClass(String name) {
        String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];

        try {
            return Class.forName("net.minecraft.server." + version + "." + name);

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            return null;
        }
    }

Caso precise das imports

import java.lang.reflect.Constructor;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;

Agora em outra classe (na classe que você irá utilizar o action) use

NomeDaClasseQueTáComOCódigoQueTeMandei.sendAction(p, "MENSAGEM");

Muito G0D, obrigado mano <3 ! Resolvido

Link para o comentário
Compartilhar em outros sites

  • 0

 

Muito G0D, obrigado mano <3 ! Resolvido

 

 

Use esse código muito mais pequeno e é a mesma coisa

	public static void sendActionBar(Player p, String msg) {
		String s = ChatColor.translateAlternateColorCodes('&', msg);
		IChatBaseComponent icbc = ChatSerializer.a("{\"text\": \"" + s + "\"}");
		PacketPlayOutChat bar = new PacketPlayOutChat(icbc, (byte) 2);
		((CraftPlayer) p).getHandle().playerConnection.sendPacket(bar);
	}
Link para o comentário
Compartilhar em outros sites

  • 0

 

 

Use esse código muito mais pequeno e é a mesma coisa

public static void sendActionBar(Player p, String msg) {
		String s = ChatColor.translateAlternateColorCodes('&', msg);
		IChatBaseComponent icbc = ChatSerializer.a("{\"text\": \"" + s + "\"}");
		PacketPlayOutChat bar = new PacketPlayOutChat(icbc, (byte) 2);
		((CraftPlayer) p).getHandle().playerConnection.sendPacket(bar);
	}

 

Não é a mesma coisa. O outro código foi feito com reflection, então funciona com qualquer versão, já esse aí só funciona em 1 versão.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...