Ir para conteúdo

(API) ActionBar em menos de 100 linhas FREE


RebasGFX

Posts Recomendados

Hoje irei liberar uma apizinha de ActionBar e.e

Estou liberando pq muita gente tem preguiça ou não sabe fazer pois mexe com Packets.

 

Assim, com ela não precisa usar ActionBarAPI :)

 

Pastebin com os códigos: https://pastebin.com/fJtrpEa6

 

API:

package api.actionbar

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;

public class ActionBar
{
  private static Class<?> CRAFTPLAYERCLASS;
  private static Class<?> PACKET_PLAYER_CHAT_CLASS;
  private static Class<?> ICHATCOMP;
  private static Class<?> CHATMESSAGE;
  private static Class<?> PACKET_CLASS;
  private static Constructor<?> PACKET_PLAYER_CHAT_CONSTRUCTOR;
  private static Constructor<?> CHATMESSAGE_CONSTRUCTOR;
  private static final String SERVER_VERSION;
 
  static
  {
    String name = Bukkit.getServer().getClass().getName();
    name = name.substring(name.indexOf("craftbukkit.") + "craftbukkit.".length());
    name = name.substring(0, name.indexOf("."));
    SERVER_VERSION = name;
    try
    {
      CRAFTPLAYERCLASS = Class.forName("org.bukkit.craftbukkit." + SERVER_VERSION + ".entity.CraftPlayer");
      PACKET_PLAYER_CHAT_CLASS = Class.forName("net.minecraft.server." + SERVER_VERSION + ".PacketPlayOutChat");
      PACKET_CLASS = Class.forName("net.minecraft.server." + SERVER_VERSION + ".Packet");
      ICHATCOMP = Class.forName("net.minecraft.server." + SERVER_VERSION + ".IChatBaseComponent");
      PACKET_PLAYER_CHAT_CONSTRUCTOR = PACKET_PLAYER_CHAT_CLASS.getConstructor(new Class[] { ICHATCOMP, Byte.TYPE });
      
      CHATMESSAGE = Class.forName("net.minecraft.server." + SERVER_VERSION + ".ChatMessage");
      
      CHATMESSAGE_CONSTRUCTOR = CHATMESSAGE.getDeclaredConstructor(new Class[] { String.class, Object[].class });
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }
 
  public static void sendActionBarMessage(Player player, String message)
  {
    try
    {
      Object icb = CHATMESSAGE_CONSTRUCTOR.newInstance(new Object[] { message, new Object[0] });
      
      Object packet = PACKET_PLAYER_CHAT_CONSTRUCTOR.newInstance(new Object[] { icb, Byte.valueOf((byte) 2) });
      
      Object craftplayerInst = CRAFTPLAYERCLASS.cast(player);
      
      Method methodHandle = CRAFTPLAYERCLASS.getMethod("getHandle", new Class[0]);
      
      Object methodhHandle = methodHandle.invoke(craftplayerInst, new Object[0]);
      
      Object playerConnection = methodhHandle.getClass().getField("playerConnection").get(methodhHandle);
      
      playerConnection.getClass().getMethod("sendPacket", new Class[] { PACKET_CLASS }).invoke(playerConnection, new Object[] { packet });
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }
}

 

 

MODO DE USO (EXEMPLO)

 

 

    @EventHandler
    public void Entrou(PlayerJoinEvent e) {
        Player p = e.getPlayer();
        ActionBar.sendActionBarMessage(p, "§aVocê entrou no servidor!");
    }

 

 

Atenciosamente,

They.

Editado por TheyAlwaysz
Link para o comentário
Compartilhar em outros sites

Participe da Conversa

Você pode postar agora e se cadastrar mais tarde. Se você tiver uma conta, a class='ipsType_brandedLink' href='https://gamersboard.com.br/login/' data-ipsDialog data-ipsDialog-size='medium' data-ipsDialog-title='Sign In Now'>acesse agora para postar com sua conta.
Observação: sua postagem exigirá aprovação do moderador antes de ficar visível.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.

Processando...
×
×
  • Criar Novo...