- Баллы
- 66
Добрый день. Недавно ( вчера) начал изучать АПИ spigot'a и bukkit'a и вот не могу найти библиотеку которая помогает выводить сообщения над слотами которые снизу.. Как к примеру titlemanager или action bar.
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Не понял намека.. Я имею в виду какой класс или метод отвечает за вывод сообщения над слотами.Может тебе пригодится этот сайт.
Декомпилируй этот плагин и посмотри, там это реализовано по разному.Не понял намека.. Я имею в виду какой класс или метод отвечает за вывод сообщения над слотами.
Причем тут MOTD ?Декомпилируй этот плагин и посмотри, там это реализовано по разному.
я имею ввиду такие сообщения http://dev.bukkit.org/bukkit-plugins/actionbar/Декомпилируй этот плагин и посмотри, там это реализовано по разному.
Ааа, не так понял. Так декомпилируй плагин и посмотри как там сделано или посмотри исходники, если они есть.
Да я плохо еще разбираюсь.. и прямого намека не библиотеки там не вижу.Ааа, не так понял. Так декомпилируй плагин и посмотри как там сделано или посмотри исходники, если они есть.
Скидываю TitleAPI Код:Да я плохо еще разбираюсь.. и прямого намека не библиотеки там не вижу.
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);
}
}
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;
}
уууу какой ужас.Скидываю 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 умеет это делать и без пакетов
Protocol это ProtocolLib?уууу какой ужас.
Может лучше таки подключить протокол?
Алсо, последняя версия API умеет это делать и без пакетов
Ну, либо TinyProtocol. По ситуацииProtocol это ProtocolLib?