Как вывести сообщение в консоль bukkit

Обновлено: 19.05.2024

В основном данная апи предназначена для написания плагинов, различных систем и игр в сфере Minecraft.

Теперь создавать, регистрировать и использовать команды стало куда проще! В данной разработке доступна реализации как для мелких, так и для больших команд, которые содержат огромное количество данных, алиасов и подкоманд.

Для начала создадим обычную команду при помощи BaseCommand , использовать которую может ТОЛЬКО игрок:

Ранее я говорил о создании больших команд, которые помогут сэкономить множество проверок и большого количества кода. Речь шла о BaseMegaCommand :

Каждый метод - это отдельная подкоманда, а аннотация @CommandArgument обозначает нужный метод подкомандой и избавит Вас от костылей, duplicated-кода, создав для определенной подкоманды указанные алиасы.

Весь менеджмент над Bukkit API происходит через один класс - ru.stonlex.bukkit.StonlexBukkitApi

Исходя из этого, регистрация команд происходит тоже через этот класс:

Для начала попробуем создать обычную конфигурацию, которая ничего не загружает и не воспроизводит на основе ru.stonlex.bukkit.configuration.BaseConfiguration :

Хранить и использовать конфигурацию можно хоть как и хоть где, но мы так до сих пор и не уточнили, как ее создавать, инициализировать, и в прицнипе работать с ней.

В данном куске кода мы создали (или скопировали из ресурсов плагина) конфигурацию, инициализировали в ней данные, и можем спокойно пользоваться!

Неужели HolographicDisplays теперь окончательно устарел?

По сути, так оно и есть, потому что StonlexAPI содержит в себе даже API для удобного создания голограмм с различными анимациями, обновлениями и типами строк.

Для начала попробуем понять, как вообще создаются голограммы:

Строчки с предметами:

И даже строчки с головами по нику или текстуре:

Так как голограмма является пакетной, то ей можно манипулировать как угодно, пример тому является функционал спавна и удаления этих голограм, взаимодействуя с игроками сервера:

Holographics

Такая заезжая, но такая актуальная тема. Многим даже сейчас сложно писать кликабельные, мультистраничные, автообновляющиеся, или с какими-то другими фишками, но GUI-интерфейсы

Рассмотрим вариант создания самого обычного инвентаря при помощи ru.stonlex.bukkit.inventory.impl.BaseSimpleInventory :

Теперь добавим парочку кликабельных предметов в слоты 5 и 6.
Важно знать, что подсчет слотов в данной API начинается не с 0, а с 1

< player.sendMessage("§eКлик прошел, закрываю инвентарь"); player.closeInventory(); >); addItem(6, ItemUtil.newBuilder(Material.CHEST) .setName("§aОбновить инвентарь") .build(), (player1, event) -> updateInventory(player)); > >">

Также нельзя не вставить то, что инвентари поддерживают внедрение своих обработчиков событий:

На данном моменте можно было бы и закончить список функционала инвентарей, однако, этим они не ограничиваются.

Помимо обычных инвентарей были написаны и мультистраничные, которые поддерживают удобную разметку предметов на каждой странице!

Для начала попробуем создать обычный страничный инвентарь, наследуя ru.stonlex.bukkit.inventory.impl.BasePaginatedInventory :

Затем выставим разметку страничных предметов в виде квадрата (одного из шаблонных разметок):

Теперь можно и добавить предметы в разметку страницы:

P.S: API автоматически рассортирует их по необходимым слотам и страницам

player.closeInventory()); addItemToMarkup(new ItemStack(Material.DIAMOND), (player1, event) -> player.closeInventory()); addItemToMarkup(new ItemStack(Material.BANNER), (player1, event) -> player.closeInventory()); addItemToMarkup(new ItemStack(Material.BARRIER), (player1, event) -> player.closeInventory()); addItemToMarkup(new ItemStack(Material.CACTUS), (player1, event) -> player.closeInventory()); //. > >">

После чего уже можно добавлять свои различные предметы, которые будут независимо отображаться на всех страницах инвентаря.

В моем случае выставлен предмет без клика, который показывает текущую страницу, на которой находится игрок:

Также, как и с ru.stonlex.bukkit.inventory.impl.BaseSimpleInventory , страничные инвентари поддерживают внедрение своих обработчиков событий:

С одной стороны, библиотека ProtocolLib и без лишнего кода является вполне себе юзабельной и удобной, для реализации конкректных задач.

Однако упрощение этих задач никто не запрещал :)

Функционал у данной API достаточно немаленький, но в то же время и небольшой, пройдемся по порядку:

StonlexAPI позволяет создавать своих пакетных Entity с полной кастомизацией, управлением и настройкой.

Первый мой туториал, просто хочу донести инфу до людей которые хотят этим заниматься, но не знают где начать. Не судите строго.

Стоит отметить что навыки работы с серверами, так же как и опыт в программировании это очень хорошо и поможет вам в дальнейшем. Если нет, будет чуть сложнее это все понимать.

Писать наши плагины мы будем на Java, так что начать стоит с выбора среды разработки (IDE). Лично я начинал с Eclipse, потом перешел на IntelliJ IDEA. Просто качаем Eclipse и не паримся.

После запуска Eclipse предлагает нам создать рабочее пространство (workspace), размещаем где угодно, я оставлю как есть.


Ну, мы тут плагины писать собирались, так что давайте создадим наш проект. Снизу от Package Explorer нажимаем на Create a Java project.


Вписываем в Project name имя вашего плагина. Далее - Finish. Теперь у нас есть проект, уже что-то. Смотрим версию нашего сервера, я лично буду писать на 1.12.2, вы можете учиться на любой другой версии. Некоторые моменты в написании кода под разные версии отличаются.

Для теста наших плагинов нам нужен локальный сервер, идём качать ядро. Bukkit или Spigot - значения не имеет, нам просто плагины потестить. Тестовый сервер в особой настройке не нуждается, просто выдаём себе опку и радуемся жизни.

Возвращаемся в Eclipse. На данный момент мы можем просто писать на Java и не париться, но нам нужно писать плагины. Нам нужно подключить библиотеку, наше ядро сервера. Прожимаем Alt + Enter, видим вот это.


Add External JARs, выбираем наше ядро, Apply and Close.

Снова прожимаем Alt +Enter, Java Compiler, убираем галочку под JDK Compliance, и ставим Compieler Compliance Level на 1.8, это важно.


Всё, библиотеку мы подключили, теперь надо создать пакеты.

Пакеты в Java позволяют организовать классы логически в наборы. Кроме того, пакеты могут иметь вложенные пакеты ( можно создать пакет в пакете который в пакете, ы). ПКМ по src, new, Package. При названии пакета можете писать me. .


Далее нужно создать главный класс. Я не могу тут объяснять что такое классы в Java, советую почитать об этом либо сейчас, либо позже. Для создания класса в нашем пакете, ПКМ по пакету, new, Class. Название главного класса должно совпадать с Plugin name.


После этого вы должны увидеть примерно это.


Время писать код. В коде ниже мы наследуемся от класса JavaPlugin. Это значит что мы добавляем свой код, который будет отвечать за наш плагин.


Резонный вопрос: почему оно подчёркнуто? Все просто, мы не импортировали класс JavaPlugin. Если навести на ошибку, Eclipse предложит возможные варианты решения, первый из них, это и есть импорт.


Теперь наш код выглядит так:


name: Имя плагина
main: Главный класс
version: Версия

Для экспорта кликаем File, Export, Java, JAR File. Указываем путь для экспорта, можете ставить сразу папку с плагинами на локальном сервере, ну и кликаем Finish.



Это только начало, и я буду писать ещё статьи на эту тему, если это кому-то интересно.

This Wiki is home to Bukkit's documentation and regulations surrounding the Bukkit Project and it's services. Want to help out? We would love to have you! Signup to get started!

Данная страница содержит команды, доступные по-умолчанию в CraftBukkit администратору сервера или администратору в игре. Кроме команд оригинального сервера имеются 4 дополнительные команды, добавленные CraftBukkit. CraftBukkit предоставляет встроенные права, которые могут быть использованы в плагине, разграничивающем полномочия игроков. Для этих прав указано, кто имеет к ним доступ по-умолчанию. Также существуют дополнительные права, объединяющие вместе несколько прав, выполняющих близкие функции.

Наверно каждый, кто включал русский язык в майнкрафте, обращал внимание на то, что при попытке набрать что-то в чат на сервер отправлялись какие-то кракозяблики их же можно было увидеть в книгах, а на табличках вместо русских букв появлялись непонятные знаки вопросов. Причина всего это проста. В стандартный клиент майнкрафта включена устаревшая версия библиотеки LWJGL, при вводе символов с клавиатуры, кодирует их не в кодировке UTF-8, а в какой-то безумной смеси: один байт от кодировки UTF-8, а второй - обычный символ в кодировке CP1251. Полученные символы и явлются теми кракозябликами, которые так сильно нас раздражают. Казалось бы, решение простое: нужно обновить библиотеку LWJGL (последняя версия доступна по адресу: http://lwjgl.org/download.php), однако разработчики Minecraft'а не спешат с таким обновлением (как я понимаю из-за каких-то проблем в новой версии библиотеки с Mac'ами), а всех пользователей вручную сменить библиотеку не заставишь. В результате то тут, то там на серверах появляются таблички с "кривыми" символами, а все благодаря тому, что традиционная руссификация методом "подстановки" файла font.txt на самом деле не решает проблемы, а маскирует её: в клиентах, руссифицированных посредством font.txt (и соответствующего графического файла) на самом деле кодировка не исправлена, исправлено только её отображение, а на сервер символы попадают во все том же кривом отображении. Таким образом, у потенциальных игроков на сервере может быть:

  1. Стандартный клиент со стандартной руссификацией и старой версией LWJGL (Windows) — если не прилагать каких-то усилий, то он в принципе не сможет писать на русском.
  2. Стандартный клиент со стандартной руссификацией и старой версией LWJGL (Linux) — насколько знаю тут всё хорошо, UTF-8 в чате, на табличках и вообще. То что он пишет видят все.
  3. Стандартный клиент c руссификатором методом font.txt и старой версией LWJGL (Windows) — клиент пишет в чат на русском. Его не понимают клиенты из п.1 и п.2, но понимают все клиенты из п.3
  4. Стандартный клиент c обновленной версией LWJGL (Windows) — собственно всё нормально текст принимается в UTF-8, игрок видит, что он пишет и его текст понятен всем.

Как с этим бороться

Естественно самым координальным и верным решением было бы устранение изначальной проблемы - внедрением исправленной версией LWJGL в клиент Minecraft'а. Но пока это не сделают разработчики, это решение будет неэффективным. Придется контроллировать игроков, заставлять их либо самостоятельно обновлять злосчастную LWJGL или же усиленно "впаривать" собственный клиент (с обновленной библиотекой). В ряде случаев второй вариант может решить проблему, но по тем или иным причинам ограничивать игроков каким-то специальным клиентом не всегда представляется возможным (да и удобным). Поэтому, при текущей ситуации, сервер направленный на полноценную поддержку кириллицы в игре должен уметь приводить к нормальному виду текст в "кривой" кодировке поступаемый от клиента. Процедура "руссфикации" сервера в этом случае будет выглядеть следующим образом.

Что нужно для организации поддержки русского языка

Собственно, для организации поддержки русского языка нужно не так уж и много:

  1. Убедиться, что при вызове Java для старта сервера, включена поддержка UTF-8 для файлов. Для этого при запуске должен использоваться ключ: -Dfile.encoding=UTF-8
  2. Необходимо внедрить "русский" файл font.txt в craftbukkit.jar. Это необходимо для того, чтобы русский язык начал поддерживаться в табличках (в чате он и так воспринимается нормально).
  3. Установить плагин CPFix, который необходим для того чтобы приводить весь поступающий в чат, таблички, книги текст в едино-верную кодировку UTF-8. С этим плагином даже клиенты под Windows с устаревшей LWJGL смогут с горем пополам писать на русском языке. К примеру, слово "ïðèâåò", поступившее от такого клиента, после перекодировки превратится в "привет".

А как же консоль?

После этого, сервер будет поддерживать вывод текста на русском языке (и кстати в цвете - тоже). Однако остается одно огромное "но": Windows-консоль не поддерживает ввод текста в кодировке UTF-8! То есть не поддерживает ВООБЩЕ! То есть текст вы на русском читать сможете, а писать нет. Лично меня это устраивает: на домашне-тестовом сервере писать что-то с консоли на русском не приходится, а на активном игровом сервере вряд ли будет использоваться Windows.

Однако если уж очень хочется, то можно и заставить консоль "принимать" русский текст. Для этого придется устроить небольшую чехарду с кодировками. Во-первых, надо будет отказаться от кодировки UTF8 в консоли. Т.е. убрать chcp 65001 из командного файла, которым запускается сервер. Также необходимо будет отключить поддержку UTF-8 для файлов (т.е. убрать из строки запуска Java ключ -Dfile.encoding=UTF-8). В результате мы получим вот такой файл:

Все эти опции отключены по умолчанию, но в файле настроек присутствуют - нужно включить и перезагрузить сервер. Кстати, если вы используете в консоли какую-то другую кодировку, то можете подставить и её. Ну и кстати, кодировку журнального файла (server-log) может отличаться от кодировки консоли: в консоль текст может выводиться в CP866, а в server.log при желании можно вести в UTF8.

Собственно после этого можно будет вводить в консоли текст на русском и сервером, а также плагинами он будет восприниматься адекватно. И команда /say Привет! будет понята всеми :)

Читайте также: