Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Сообщения над слотами

VolanDeVovan

Активный участник
Пользователь
Баллы
66
Добрый день. Недавно ( вчера) начал изучать АПИ spigot'a и bukkit'a и вот не могу найти библиотеку которая помогает выводить сообщения над слотами которые снизу.. Как к примеру titlemanager или action bar.
 
Декомпилируй этот плагин и посмотри, там это реализовано по разному.
Причем тут MOTD ?
Декомпилируй этот плагин и посмотри, там это реализовано по разному.
я имею ввиду такие сообщения http://dev.bukkit.org/bukkit-plugins/actionbar/
 
Ааа, не так понял. Так декомпилируй плагин и посмотри как там сделано или посмотри исходники, если они есть.
Да я плохо еще разбираюсь.. и прямого намека не библиотеки там не вижу.
 
Да я плохо еще разбираюсь.. и прямого намека не библиотеки там не вижу.
Скидываю TitleAPI Код:
JavaScript:
package Тут Твой Пакет

import java.lang.reflect.Field;

import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

import net.minecraft.server.v1_8_R3.IChatBaseComponent;
import net.minecraft.server.v1_8_R3.IChatBaseComponent.ChatSerializer;
import net.minecraft.server.v1_8_R3.PacketPlayOutChat;
import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerListHeaderFooter;
import net.minecraft.server.v1_8_R3.PacketPlayOutTitle;
import net.minecraft.server.v1_8_R3.PacketPlayOutTitle.EnumTitleAction;
import net.minecraft.server.v1_8_R3.PlayerConnection;

public class TitleAPI extends JavaPlugin implements Listener {
 
    public static void sendTitle(Player player, String title, String subtitle) {
        CraftPlayer craftplayer = (CraftPlayer) player;
        PlayerConnection connection = craftplayer.getHandle().playerConnection;
        IChatBaseComponent titleJSON = ChatSerializer.a("{'text': '" + title + "'}");
        IChatBaseComponent subtitleJSON = ChatSerializer.a("{'text': '" + subtitle + "'}");
        PacketPlayOutTitle titlePacket = new PacketPlayOutTitle(EnumTitleAction.TITLE, titleJSON);
        PacketPlayOutTitle subtitlePacket = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, subtitleJSON);
        connection.sendPacket(titlePacket);
        connection.sendPacket(subtitlePacket);
    }

    public static void sendTabHF(Player player, String header, String footer){
     
        CraftPlayer craftplayer = (CraftPlayer) player;
        PlayerConnection connection = craftplayer.getHandle().playerConnection;
        IChatBaseComponent headerJSON = ChatSerializer.a("{\"text\": \"" + header +"\"}");
        IChatBaseComponent footerJSON = ChatSerializer.a("{\"text\": \"" + footer +"\"}");
        PacketPlayOutPlayerListHeaderFooter packet = new PacketPlayOutPlayerListHeaderFooter();
   
        try {
            Field headerField = packet.getClass().getDeclaredField("a");
            headerField.setAccessible(true);
            headerField.set(packet, headerJSON);
            headerField.setAccessible(!headerField.isAccessible());
       
            Field footerField = packet.getClass().getDeclaredField("b");
            footerField.setAccessible(true);
            footerField.set(packet, footerJSON);
            footerField.setAccessible(!footerField.isAccessible());
        } catch (Exception e) {
            e.printStackTrace();
        }
     
        connection.sendPacket(packet);
    
     
    }
 
 
 
    public static void sendActionBar(Player p, String message){
        IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + message +"\"}");
        PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc,(byte) 2);
        ((CraftPlayer) p).getHandle().playerConnection.sendPacket(ppoc);
}

}

Вот ещё хотел менять с помощью команды таб, вот набросок:
JavaScript:
public boolean onCommand1(CommandSender sender, Command cmd, String label, String[] args) {
      
        Player p = (Player) sender;
      
        if(label.equalsIgnoreCase("example")) {
            if(!p.hasPermission("example.tab"))
                sender.sendMessage(ChatColor.DARK_RED + "У вас Нету Прав Чтобы Использовать Данную Команду!");
                    return true;
            }
          
            if(args.length != 0) {
              
                sender.sendMessage(ChatColor.RED + "Внимание! " + ChatColor.GOLD + "Меню 'Таб' Было Успешно Изменено! :3");
                TitleAPI.sendTabHF(p, args[0], args[1]);
              
            }
 
        return false;
      
    }

Кстати, чтобы создать Таб, надо написать: /example RuBukkit NiceForum
Вместо РуБаккит и NiceForum, можно писать разные слова.
 
Последнее редактирование:
Скидываю TitleAPI Код:
JavaScript:
package Тут Твой Пакет

import java.lang.reflect.Field;

import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

import net.minecraft.server.v1_8_R3.IChatBaseComponent;
import net.minecraft.server.v1_8_R3.IChatBaseComponent.ChatSerializer;
import net.minecraft.server.v1_8_R3.PacketPlayOutChat;
import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerListHeaderFooter;
import net.minecraft.server.v1_8_R3.PacketPlayOutTitle;
import net.minecraft.server.v1_8_R3.PacketPlayOutTitle.EnumTitleAction;
import net.minecraft.server.v1_8_R3.PlayerConnection;

public class TitleAPI extends JavaPlugin implements Listener {

    public static void sendTitle(Player player, String title, String subtitle) {
        CraftPlayer craftplayer = (CraftPlayer) player;
        PlayerConnection connection = craftplayer.getHandle().playerConnection;
        IChatBaseComponent titleJSON = ChatSerializer.a("{'text': '" + title + "'}");
        IChatBaseComponent subtitleJSON = ChatSerializer.a("{'text': '" + subtitle + "'}");
        PacketPlayOutTitle titlePacket = new PacketPlayOutTitle(EnumTitleAction.TITLE, titleJSON);
        PacketPlayOutTitle subtitlePacket = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, subtitleJSON);
        connection.sendPacket(titlePacket);
        connection.sendPacket(subtitlePacket);
    }

    public static void sendTabHF(Player player, String header, String footer){
    
        CraftPlayer craftplayer = (CraftPlayer) player;
        PlayerConnection connection = craftplayer.getHandle().playerConnection;
        IChatBaseComponent headerJSON = ChatSerializer.a("{\"text\": \"" + header +"\"}");
        IChatBaseComponent footerJSON = ChatSerializer.a("{\"text\": \"" + footer +"\"}");
        PacketPlayOutPlayerListHeaderFooter packet = new PacketPlayOutPlayerListHeaderFooter();
  
        try {
            Field headerField = packet.getClass().getDeclaredField("a");
            headerField.setAccessible(true);
            headerField.set(packet, headerJSON);
            headerField.setAccessible(!headerField.isAccessible());
      
            Field footerField = packet.getClass().getDeclaredField("b");
            footerField.setAccessible(true);
            footerField.set(packet, footerJSON);
            footerField.setAccessible(!footerField.isAccessible());
        } catch (Exception e) {
            e.printStackTrace();
        }
    
        connection.sendPacket(packet);
   
    
    }



    public static void sendActionBar(Player p, String message){
        IChatBaseComponent cbc = ChatSerializer.a("{\"text\": \"" + message +"\"}");
        PacketPlayOutChat ppoc = new PacketPlayOutChat(cbc,(byte) 2);
        ((CraftPlayer) p).getHandle().playerConnection.sendPacket(ppoc);
}

}

Вот ещё хотел менять с помощью команды таб, вот набросок:
JavaScript:
public boolean onCommand1(CommandSender sender, Command cmd, String label, String[] args) {
     
        Player p = (Player) sender;
     
        if(label.equalsIgnoreCase("example")) {
            if(!p.hasPermission("example.tab"))
                sender.sendMessage(ChatColor.DARK_RED + "У вас Нету Прав Чтобы Использовать Данную Команду!");
                    return true;
            }
         
            if(args.length != 0) {
             
                sender.sendMessage(ChatColor.RED + "Внимание! " + ChatColor.GOLD + "Меню 'Таб' Было Успешно Изменено! :3");
                TitleAPI.sendTabHF(p, args[0], args[1]);
             
            }

        return false;
     
    }

Кстати, чтобы создать Таб, надо написать: /example RuBukkit NiceForum
Вместо РуБаккит и NiceForum, можно писать разные слова.
уууу какой ужас.
Может лучше таки подключить протокол?
Алсо, последняя версия API умеет это делать и без пакетов
 
уууу какой ужас.
Может лучше таки подключить протокол?
Алсо, последняя версия API умеет это делать и без пакетов
Ну не все же топ кодеры)
Он ещё только учится, как и вы.
 

Поделиться этой страницей

Назад
Верх