Bukkit yml где найти майнкрафт
Перейти к содержимому

Bukkit yml где найти майнкрафт

  • автор:

BukkitWiki

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!

Don’t have an account?
Don’t have an account?
Advertisement

Plugin YAML/ru

При загрузке плагина Bukkit’ом, ему нужна базовая информация о нём, он считывает её из YAML файла: ‘plugin.yml’. В этом файле находится некий ряд аттрибутов, каждый из которых находится на новой строке.

  • Может содержать только латиницу, цифры и символ подчёркивания (a-z,A-Z,0-9, _)
  • Используется для определения названия папки со сведениями в папке плагинов. Папка плагинов по умолчанию — plugins в корне сервера.
  • Хорошим тоном считается называть jar файл также, как и плагин. Например: ‘MyPlugin.jar’
  • Значение версии является сторокой, наиболее используемый формат: ОсновнойРелиз.ДополнительныйРелиз.Сборка (Пример: 1.4.1).
  • Обычно вы должны увеличивать значение каждый новый выпуск, не важно что он содержит.
  • Отображается при вводе команды /version НазваниеПлагина
  • Можыт быть многострочным
  • Выводится при вводе игроком /version НазваниеПлагина
  • STARTUP — при загрузке сервера (рекомендую для генераторов чанков)
  • POSTWORLD — значение по умолчанию, после загрузки мира
  • Используется для связи с разработчиком в случае возникновении ошибок.
  • Логин на форуме bukkit.org или e-mail рекомендуется.
  • Отображается когда игрок вводит /version НазваниеПлагина
  • Можно написать нескольких авторов и все они будут помещены в один список.
  • Если нет сайта, рекомендуется давать ссылку на форум bukkit.org, со страницей этого плагина.
  • Отображается, когда игрок вводит /version НазваниеПлагина
  • Должна содержать полный путь к классу, начиная с пакета и заканчивая названием класса.
  • Если пакет называется org.bukkit.plugin , и класс плагина MyPlugin , тогда ссылка должна быть такой: org.bukkit.plugin.MyPlugin
  • Прикрепить базу данных — не тривиально, рекомендую поискать статью.
  • Должен быть в формате YAML списков (смотри http://en.wikipedia.org/wiki/YAML#Lists )
  • В качестве элемента списка нужно использовать «name» параметр требуемого плагина.
  • Если хоть один плагин из списка отсутствует — Ваш не загрузится.
  • Если плагины из списка будут тоже с подобными списками и хоть один из них не будет подгружен — Ваш тоже не будет запущен.
  • (Смотри Wiki: Plugin_Dependencies)
  • Должен быть в формате YAML списков (смотри http://en.wikipedia.org/wiki/YAML#Lists )
  • В качестве элемента списка нужно использовать «name» параметр требуемого плагина.
  • Ваш плагин будет загружен после плагинов из этого списка.
  • Цикличные зависимости подгружаются хаотично.
  • (Смотри Wiki: Plugin_Dependencies)
  • Должен быть в формате YAML списков (смотри http://en.wikipedia.org/wiki/YAML#Lists)
  • В качестве элемента списка нужно использовать «name» параметр требуемого плагина.
  • Работает также, как и softdepend
  • Ваш плагин будет загружен до всех плагинов из списка
  • Цикличные зависимости подгружаются хаотично.
  • (Смотри Wiki: Plugin_Dependencies)
commands: flagrate: [возможный подсписок параметров] 
  • Название команды не должно содержать символа ‘/’.
  • Можно выбрать любое название команды, даже уже зарезервированное, такое как: /kick . Используйте ‘alias’ для использования альтернативных команд.
permissions: inferno.*: [возможный подсписок параметров] inferno.flagate: [возможный подсписок параметров] inferno.burningdeaths: [возможный подсписок параметров]
  • Также Permissions можно зарегистрировать из кода и не делать этого здесь.
  • Permission тут могут обладать наборами параметров, такими как: родственные связи и описания.
  • Хорошим тоном считается использовать такие имена: .[Категория].[Категория].

Блок с описанием той или иной команды начинается с её названия, а затем идут её параметры.

  • Может быть использовано для получения описания при помощи /help
aliases: kill_admin ИЛИ aliases: [kill_admin, killAdmin] 
  • Можно использовать любое количество различных псевдонимов.
  • Если используется более 1-го псевдонима, то список должен быть в формате YAML списка (смотри http://en.wikipedia.org/wiki/YAML#Lists )
permission: myplugin.kill.admin 
  • Если у игрока отсутствуют права на команду, то она будет скрыта от него.
  • Можно использовать для создания персональных /help меню.
  • — это макрос, выводящий название разрешений, которые должны быть, для использования команды.
  • Можно использовать пустые ковычки, чтобы ничего не отображалось.
  • Отображается, когда команда введена не правильно или когда командный метод(onCommand) возвращает не true.
  • — это макрос, выводящий название команды.
  • Чтобы использовать слово «Usage:» (например usage: Usage: /god [player] ) текст нужно взять в двойные ковычки:
    usage: «Usage: /god [player]»

Блок разрешения начинается с его названия, а зетем продолжается записями

description: Разрешает загрызть админа кавайными няшками
  • Открывает программный доступ и помогает администрации сервера.
default: true
  • Если отсутствует, то значение по умолчанию false
  • Принимает значения: true, false, op, not op.
  • Оператор по умолчанию получит true, если значение op.
  • no op — прямая противоположность значению op.
children: inferno.flagrate: true inferno.burningdeaths: true
  • Каждое дочернее разрешение должно принимать значение true или false
    • Если true, то наследует родительское разрешение.
    • Если false, то наследует противоположное родительскому, разрешение.
    name: Inferno version: 1.4.1 description: This plugin is so 31337. You can set yourself on fire. author: CaptainInflamo authors: [Cogito, verrier, EvilSeph] website: http://forums.bukkit.org/threads/MyPlugin.31337/ main: com.captaininflamo.bukkit.inferno.Inferno database: false depend: [NewFire, FlameWire] commands: flagrate: description: Set yourself on fire. aliases: [combust_me, combustMe] permission: inferno.flagrate usage: Syntax error! Simply type / to ignite yourself. burningdeaths: description: List how many times you have died by fire. aliases: [burning_deaths, burningDeaths] permission: inferno.burningdeaths usage: | / [player] Example: / - see how many times you have burned to death Example: / CaptainIce - see how many times CaptainIce has burned to death permissions: inferno.*: description: Gives access to all Inferno commands children: inferno.flagrate: true inferno.burningdeaths: true inferno.burningdeaths.others: true inferno.flagrate: description: Allows you to ignite yourself default: true inferno.burningdeaths: description: Allows you to see how many times you have burned to death default: true inferno.burningdeaths.others: description: Allows you to see how many times others have burned to death default: op children: inferno.burningdeaths: true
    Language English • беларуская • Deutsch • español • suomi • français • italiano • 한국어 • Nederlands • norsk • polski • português • русский • lietuvių • čeština

    Написание Paper/Bukkit плагина LiteSMT #1 — Основа понятий и окружение

    Всем привет! Это серия постов будет иметь много различных тем, но и я так-же не забыл о написании ядра на Rust, скоро будут продолжения).

    Немного понятий

    Я думаю, что стоит начать с некоторой основной информацией по созданию плагинов, а именно:

    1. Все плагины основываются на Bukkit — API для плагинов, которая может немного отличаться в зависимости от версий.
    2. Плагины пишутся в основном на Java или иногда на Kotlin .
    3. Некоторая информация плагина исключительно для ядра храниться в plugin.yml, где можно найти версию плагина, главный класс плагина и многое другое.
    4. В стандартных случаях плагинам хватает обычного, но существуют моменты, где могут понадобится NMS — net.minecraft.server или же API к самому Minecraft.
    5. Плагины без труда могут использовать API других плагинов, если имеется такая возможность, например PlaceholderAPI и Vault.
    6. Почти всегда, когда ядро обращается к плагину — выполняется в синхронном потоке сервера.

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

    Подготавливаем наш тестовый сервер

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

    Для начала нам стоит выбрать основную версию и ядро, я выбрал 1.16.5 версию так-как сейчас она как основа для версий выше.

    Статистика bStats

    Из статистики выше видно, что большинство серверов на 1.16.5 и выше, а ядро Paper и следовательно как изначально планировалось было выбрано ядро Paper. Скачать его версии 1.16.5 можно по этой ссылке.

    Скачанный файл по ссылке выше я помещаю в отдельную директорию рядом со своим Start.sh файлом:

    java -Xms512M -Xmx1G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:InitiatingHeapOccupancyPercent=15 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper-1.16.5-794.jar nogui

    После первого запуска будет скачан кеш и создан eula.txt( в котором надо будет установить true вместо false ):

    Что будет показано после первого запуска

    После изменения eula.txt будет такой вывод с полным запуском:

    Сервер полностью создаст все нужные файлы

    Как я настроил некоторые файлы при разработке

    settings: allow-end: false warn-on-overload: true permissions-file: permissions.yml update-folder: update plugin-profiling: false connection-throttle: 0 query-plugins: false deprecated-verbose: default shutdown-message: Server closed minimum-api: none spawn-limits: monsters: 10 animals: 10 water-animals: 5 water-ambient: 10 ambient: 5 chunk-gc: period-in-ticks: 900 ticks-per: animal-spawns: 1 monster-spawns: 1 water-spawns: 1 water-ambient-spawns: 1 ambient-spawns: 1 autosave: 12000 aliases: now-in-commands.yml
    enable-jmx-monitoring=false rcon.port=25575 level-seed= gamemode=survival enable-command-block=false enable-query=false generator-settings= level-name=world motd=Test Server query.port=25565 pvp=true generate-structures=false difficulty=easy network-compression-threshold=256 max-tick-time=60000 max-players=20 use-native-transport=true online-mode=false enable-status=true allow-flight=false broadcast-rcon-to-ops=true view-distance=6 max-build-height=256 server-ip= allow-nether=false server-port=25565 enable-rcon=false sync-chunk-writes=true op-permission-level=4 prevent-proxy-connections=false resource-pack= entity-broadcast-range-percentage=100 rcon.password= player-idle-timeout=0 debug=false force-gamemode=false rate-limit=0 hardcore=false white-list=false broadcast-console-to-ops=true spawn-npcs=true spawn-animals=true snooper-enabled=true function-permission-level=2 level-type=flat text-filtering-config= spawn-monsters=true enforce-whitelist=false resource-pack-sha1= spawn-protection=16 max-world-size=500

    После изменений конфигурации я удалил все миры, чтобы был создан только world с плоской генерацией. И теперь консоль после запуска выглядит так:

    Теперь для начала нам надо загрузить важны плагины:

    • PlaceholderAPI — API для плейсхолдеров.
    • PlugManX — форк оригинального PlugMan для работы с плагинами(перезагрузка, загрузка, выгрузка и тд).
    • Auto Reload — автоматическая перезагрузка плагинов в случае изменений.

    После загрузки можно перезагрузить частично сервер используя reload confirm. И потом плагины загрузятся и некоторые создадут конфигурации.

    plugins/PlugManX/config.yml

    ignored-plugins: [PlugManX] notify-on-broken-command-removal: true auto-load: enabled: true check-every-seconds: 2 auto-unload: enabled: true check-every-seconds: 2 auto-reload: enabled: false check-every-seconds: 2

    plugins/PlaceholderAPI/config.yml

    # PlaceholderAPI # Version: 2.11.1 # Created by: extended_clip # Contributors: https://github.com/PlaceholderAPI/PlaceholderAPI/graphs/contributors # Issues: https://github.com/PlaceholderAPI/PlaceholderAPI/issues # Expansions: https://api.extendedclip.com/all/ # Wiki: https://github.com/PlaceholderAPI/PlaceholderAPI/wiki # Discord: https://helpch.at/discord # No placeholders are provided with this plugin by default. # Download placeholders: /papi ecloud check_updates: true cloud_enabled: true cloud_sorting: "name" cloud_allow_unverified_expansions: true boolean: 'true': 'yes' 'false': 'no' date_format: MM/dd/yy HH:mm:ss debug: true

    plugins/bStats/config.yml

    enabled: false serverUuid: 00000-00000 logFailedRequests: false

    После сделанных изменений надо снова перезагрузить сервер, а после полной перезагрузки мы можем спокойно зайти на наш тестовый сервер с любого клиента, который поддерживает версию 1.16.5, так-же стоит выдать себе все права используя op .

    Подготовка нашего плагина

    Так-как плагин будет написан на стандартном Java, то нам надо подумать о сборщике нашего плагина, есть несколько вариантов: IDE компилятор, Maven и Gradle. Давайте посмотрим основные плюсы и минусы, которые я выделил как основные:

    • Компилятор IDE(IDEA, Eclipse и др)
      Плюсы:
      1) Все зависимости и компиляция настроены прямо в настройках редактора.
      2) Может быть быстрым но зависит от настроек компиляции.
      Минусы:
      1) Для редактирования может потребоваться конкретный редактор или его поддержка в другом редакторе.
      2) Часто ограничен возможностями самого редактора.
      3) Компиляция часто может идти тяжелее нежели на Maven или Gradle.
    • Maven
      Плюсы:
      1) Возможно настроить и форматирование файлов , все зависимости и репозитори, а так-же плагины компиляции.
      2) Не зависит от конкретного редактора.
      3) Быстро компилирует, но хуже Gradle.
      Минусы:
      1) Для компиляции каждый раз запускается новый процесс, который каждый раз заново читает и собирает информацию.
    • Gradle
      Плюсы:
      1) Есть настройки форматирования файлов, зависимостей, репозиторий и различных дополнений(например Lombok).
      2) Запускает компиляцию в фоновом процессе, который считывает конфиги и другое после изменений или при другой нужде.
      3) Не зависит от редактора как и Maven.
      4) Можно писать конфигурацию компиляции на языке Groovy или Kotlin DSL
      5) Запуск компиляции проходит с помощью запуска фонового процесса(если не запущен) или обращение к нему.
      Минусы:
      1) Фоновый процесс постоянно требует некоторое количество ОЗУ.

    Вы конечно можете сами выбрать сборщик под себя, но я выбрал Gradle и из-за чего дальше будет информация связанная с ним. Так-же выбрал редактор Intellij IDEA от JetBrains так-как он очень замечательно работает с Java.

    Первым делом нужно инициализировать Gradle проект:

    Создание Gradle проекта в IDEA

    После создания проекта я в первую очередь удалил папку test и изменил build.gradle под проект:

    plugins < id 'java' >group 'xyz.distemi' version '1.0-SNAPSHOT' repositories < mavenCentral() maven < name = "PaperMC" url = "https://repo.papermc.io/repository/maven-public/" >maven < name = "PlaceholderAPI" url = 'https://repo.extendedclip.com/content/repositories/placeholderapi/' >> dependencies < compileOnly 'com.destroystokyo.paper:paper-api:1.16.5-R0.1-SNAPSHOT' // PaperMC compileOnly 'me.clip:placeholderapi:2.11.1' // API плагина PlaceholderAPI compileOnly 'org.projectlombok:lombok:1.18.24' // Lombok API annotationProcessor 'org.projectlombok:lombok:1.18.24' // Lombok процессор >

    И следом я нажал на кнопку синхронизации в своей IDEA.

    Теперь нам надо сделать главный класс плагина, который у меня будет xyz.distemi.litesmt.LiteSMT:

    Базовый код главного класса плагина LiteSMT

    package xyz.distemi.litesmt; // Объявляем наш пакет // Импортируем Getter из ломбок, абстрактный класс JavaPlugin и // интерфейс логгера. import lombok.Getter; import org.bukkit.plugin.java.JavaPlugin; import java.util.logging.Logger; public class LiteSMT extends JavaPlugin < // Создаём две статичные переменные: @Getter private static LiteSMT instance; // Класс плагина. @Getter private static Logger jlogger; // Логгер. @Override public void onEnable() < // Устанавливаем наши статичные переменные: instance = this; jlogger = super.getLogger(); // Выводим в консоль сообщение Hello from LiteSMT // от имени плагина. jlogger.info("Hello from LiteSMT!"); >>

    Для людей, которые не знают Java или хотящие подробное объяснение

    В классе выше мы создали файл в папке src/main/xyz/distemi/litesmt файл LiteSMT.java с содержанием выше.

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

    public class позволяет нам показать класс как главный в этом файле, а это значит, что никто не мешает создать рядом просто class без public.

    private является областью видимости поля, которая может быть применена как на метод, так и на переменную.

    static — модификатор, говорящий, что данное поле может быть использовано, инициализировано и тд без конструирования самого класса( new Class() ).

    Аннотация @Override позволяет нам перезаписать метод из класса-предка(у нас это абстрактный класс JavaPlugin)
    Аннотация @Getter из Lombok указывает, что должен будет сгенерироваться дополнительный код, используя процессор аннотаций Lombok-а.

    Метод onEnable работает как конструктор, но только вот он исключительно для нашего плагина. Метод возвращает тип void, а именно ничего.

    Внутри перезаписанного метода onEnable мы устанавливаем глобальные переменные instance и jlogger, но если с первым случаем ясно, что ссылаемся на сконструированный класс, то во втором случае используем super уже для обращению к «предку», а именно JavaPlugin.
    Следом выводим в консоль сообщение из аргумента.

    Чтож, главный класс у нас имеется, но для работы плагина этого недостаточно!
    Серверу нужно знать какой же класс главный и другую информацию, для этого нам нужно создать файл plugin.yml, но уже не в качестве кода, а файл-ресурса, в Gradle такие файлы можно создать в директории проекта src/main/resources/, где файлы внутри не могут быть скомпилированы, а копируются в наш jar «сырыми», но есть например возможность некоторого форматирования, однако пока думаю можно будет обойтись и без него.

    В папке ресурсов я создаю файл plugin.yml, который по умолчанию не имеет ничего я записываю содержимое ниже:

    name: LiteSMT main: xyz.distemi.litesmt.LiteSMT version: 1.0 author: Distemi prefix: LSMT depend: - PlaceholderAPI

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

    name (Обязательно) — даёт знать ядру о «имени» плагина, которое может использоваться как в некоторых командах сервера, так и других плагинах по типу того же PlugManX.

    main (Обязательно) — указывает класс в нашем jar, который становиться главным в работе плагина, 1 jar = 1 плагин.

    version (Обязательно) — атрибут, означающий версию нашего плагина, может быть как 1.0 так и 1.0.0.

    author — указывает автора плагина.

    prefix — префикс в логе вместо названия плагина.

    depend — обязательные зависимости для плагина, если каких-то нету, то плагин не будет загружен, в списке указываются «имена» плагинов.

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

    Всё почти готово, однако теперь нам нужно собрать плагин и перекинуть в папку с сервером, можно конечно это делать руками, но я больше предпочитаю делать это автоматически, используя свои задачи в Gradle, для чего нам нужно в build.gradle добавить следующее:

    task copyToDevEnv_1_16_5() < doLast < copy < from "build/libs/LiteSMT-1.0-SNAPSHOT.jar" into "../test-server1.16.5/plugins/" >> > build.finalizedBy copyToDevEnv_1_16_5

    Тут мы объявляем задачу, которая копирует готовый jar плагина в папку указанную из into, а build.finalizedBy означает, что задачу build мы всегда заканчиваем с copyToDevEnv_1_16_5. Давайте теперь мы впишем ./gradlew build —offline -x test, где мы запускаем компиляцию без доступа к интернету (—offline) и исключаем задачу(-x) тестов(test). Теперь смотрим в нашу папку с плагинами и видим:

    Ура! Наш плагин успешно собрался и сам был помещён в директорию с плагинами. Теперь пробуем запустить наш сервер и видим.

    Да! Плагин наш был успешно запущен и при запуске вывел в консоль наше сообщение, однако для проверки автоматической перезагрузки плагина в случае изменений я могу чуть изменить сообщение в коде и заново собрать плагин прошлой командой в консоль/терминал и увидеть уже в консоли сервера:

    Всё-таки я добавил «Changed from me!» в строку вывода и после сборки плагин AutoReload сам увидел изменение и перезагрузил плагин, ну не удобство ли, когда надо бывает частенько и главный класс изменить?)

    Так-же как вы могли бы заметить, то наш префикс из plugin.yml тоже показывает результат так-как без того атрибута у нас выводился бы LiteSMT.

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

    Обработка событий в плагине или как можно приукрасить чат.

    Сейчас мы будем работать лишь с тремя из большого количества событий, а именно вход игрока, выход и написание сообщений в чат. Наверное многим не нравиться стандартный формат чата из и игры из-за чего скачивают и устанавливают плагины по типу Chatty и другого, но сейчас мы сделаем некую свою мини альтернативу, правда не всё, но хоть что-то)

    Для событий в плагинах используют отдельные классы, которые просто помимо своего существования должны наследовать один из интерфейсов от Bukkit и быть зарегистрированы в событиях Bukkit-а.

    Для событий чата будет у меня отдельный пакет в моём jar, а именно xyz.distemi.litesmt.listeners.chat, который в IDEA создаётся в два клика:

    В нашем новом пакете создадим класс с именем MainChatListener, который по началу имеет только публикацию класса и пакет . И после его имени мы должны прописать implements Listener, однако как я говорил раньше, то нужно и импортировать классы, чтобы сборщик мог знать какой класс нам нужен и JVM тоже, поэтому IDEA предлагает выбрать Listener из нескольких пакетов, но нам нужен именно с org.bukkit.event и следом появиться импорт org.bukkit.event.Listener. Теперь данный класс для ядра считается неким слушателем событий, однако он не зарегистрирован и пусть, а это значит, что от него нету толка, для этого в главном классе, в onEnable мы прописываем:

    Bukkit.getPluginManager().registerEvents(new MainChatListener(), this);

    И теперь для bukkit наш слушатель зарегистрирован на все типы событий, а в качестве второго аргумента мы передаём плагин, это означает, что этот слушатель принадлежит нашему плагин.

    — Тогда получается возможно регистрировать слушатели и из других плагинов?
    — Верно! Однако не стоит так делать.

    Если мы и попробуем сейчас собрать плагин и протестировать его, то у нас не будет никаких отличий так-как слушатель хоть и существует, но он пустой. Давайте попробуем создать в нём функцию для форматирования сообщений из чата, а именно установка своего формата сообщений:

    import io.papermc.paper.event.player.AsyncChatEvent; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.TextColor; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; public class MainChatListener implements Listener < @EventHandler public void onChat(AsyncChatEvent event) < event.renderer((source, sourceDisplayName, message, viewer) ->Component.text() .append(sourceDisplayName.color(TextColor.fromHexString("#a8a432"))) .append(Component.text(" : ")) .append(message) .build()); > >

    Объяснение кода

    Все методы событий обязательно должны иметь аннотацию EventHandler от org.bukkit, чтобы было ясно, что этот метод точно является слушателем событий, а именно AsyncChatEvent так-как именно он указан в аргументе. Далее для форматирования не используется устаревший метод formatter, а новый — renderer, который имеет больше возможностей. Для нашего renderer мы используем так называемый функциональные интерфейсы, в данном случае ChatRenderer и спасибо Java, что тут получилось так сокращённо, ведь иначе вышло бы на несколько строк больше.

    Для форматирования мы создаём наш новый чат-компонент Component, но для всего связанного с чатом сейчас используется пакет net.kyori.adventure.text. Component.text() создаёт нам конструктор, который мы используем для связки трёх других компонентов: ник, разделитель для сообщения( : ) и самого сообщения.

    Метод TextColor.fromHexString даёт возможность получить нам цвет для чат-компонента из HEX строки c нужным цветом, в моём случае #a8a432. Этот цвет я применяю на переменную компонента sourceDisplayName и добавляю получившейся компонент в конструктор.

    Далее я добавляю в конструктор разделитель в сообщении » : «, который можно получить используя Component.text(» : «).

    Последнее добавление в конструктор — само сообщение игрока.

    Заканчивается создание форматированного компонента методом build.

    Теперь если мы попробуем набрать в консоль любое сообщение, то увидим:

    Как выглядит итог форматирования.

    Далее я бы убрал сообщение выхода с сервера таким кодом:

    @EventHandler public void onQuit(PlayerQuitEvent event)

    Теперь при повторной сборке и следующей проверки выхода мы не увидим сообщения в консоли о выходе игрока, кроме того, что является от самого ядра.

    Можно и приукрасить сообщение о входе:

    @EventHandler public void onJoin(PlayerJoinEvent event)

    И после сборки этого кода, то при заходе будет данное сообщение:

    Итог

    Вот и была сделана небольшая основа для плагина, которая дальше будет дополняться всё большим функционалом в следующих частях!

    Готовый сходный код доступен по этой ссылке.

    BukkitWiki

    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!

    Don’t have an account?
    Don’t have an account?
    Advertisement

    Bukkit.yml/ru

    Contents

    • 1 Разделы YAML
      • 1.1 settings
        • 1.1.1 allow-end
        • 1.1.2 warn-on-overload
        • 1.1.3 permissions-file
        • 1.1.4 update-folder
        • 1.1.5 ping-packet-limit
        • 1.1.6 use-exact-login-location
        • 1.1.7 world-container
        • 1.1.8 plugin-profiling
        • 1.1.9 connection-throttle
        • 1.1.10 query-plugins
        • 1.1.11 deprecated-verbose
        • 1.1.12 shutdown-message
        • 1.2.1 monsters
        • 1.2.2 animals
        • 1.2.3 water-animals
        • 1.2.4 ambient
        • 1.3.1 period-in-ticks
        • 1.3.2 load-threshold
        • 1.4.1 animal-spawns
        • 1.4.2 monster-spawns
        • 1.4.3 autosave

        Разделы YAML [ ]

        Заголовки, перечисленные ниже, являются ключами верхнего уровня в файле YAML.

        settings [ ]

        Общие параметры сервера CraftBukkit

        allow-end [ ]

        Включен Эндер-Мир. (boolean)

        По умолчанию: true

        warn-on-overload [ ]

        Показывает ли сервер «[ПРЕДУПРЕЖДЕНИЕ] Не успевает! Системное время изменилось или сервер перегружен?» Сообщения. (boolean)

        По умолчанию: true

        permissions-file [ ]

        Имя файла пользовательских разрешений. (string, filename)

        По умолчанию: permissions.yml

        update-folder [ ]

        Имя папки для размещения обновленных плагинов, которая будет перемещена при перезагрузке. (строка, имя папки) ПРИМЕЧАНИЕ: Папка ДОЛЖНА находиться в папке подключаемых модулей. Абсолютные пути НЕ работают.

        По умолчанию: update.

        ping-packet-limit [ ]

        В настоящее время нетрудоспособен. Ранее: Максимальное количество пакетов в секунду, которое может использовать список запросов в игре. (целое число, пакеты/сек)

        По умолчанию: 100

        use-exact-login-location [ ]

        С тех пор как Minecraft добавил возможность выталкивания объектов из блока, игроки часто оказывались выше того места, откуда они вышли при входе в систему (особенно если они находились в пещере). Эта настройка позволяет серверам отключать или включать такое поведение. Если это так, мы будем обходить поведение Ванили, проверяя столкновения и перемещая игрока, если это необходимо, когда он входит в систему. Если сообщение ложное, мы будем продолжать следить за поведением Ванили и перемещать игроков, которые «сталкиваются» с объектами при входе в систему.

        По умолчанию: false

        world-container [ ]

        Имя папки, в которой будут храниться все мировые каталоги. Если он не включен в ваш файл, по умолчанию используется текущая рабочая директория. (string, foldername)

        plugin-profiling [ ]

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

        По умолчанию: false

        connection-throttle [ ]

        Задержка перед подключением клиента разрешена после последней попытки подключения. Значение 0 отключает дроссель соединения, но делает ваш сервер уязвимым для атак (рекомендуется только для тестовых серверов). (долго, миллисекунды)

        По умолчанию: 4000

        query-plugins [ ]

        Возвращает ли сервер список подключаемых модулей при удаленном запросе. (boolean)

        По умолчанию: true

        deprecated-verbose [ ]

        Показывает ли сервер предупреждения, когда подключаемый модуль регистрирует устаревшее событие. Значение true’/’false’ работает как переключатель для этих предупреждений, в то время как ‘default’ всегда будет показывать предупреждение, если только данное событие не отмечено разработчиком как не требующее предупреждения при регистрации. (строка)

        По умолчанию: default

        shutdown-message [ ]

        Это сообщение отображается клиентам, когда сервер останавливается.

        По умолчанию: Server closed

        spawn-limits [ ]

        Опции сервера CraftBukkit, которые определяют, сколько животных или толпы может нереститься в мире.

        monsters [ ]

        Этот параметр bukkit.yml позволяет серверам устанавливать количество монстров, которые могут нереститься в мире.

        По умолчанию в Minecraft: 70.

        animals [ ]

        Этот параметр bukkit.yml позволяет серверам устанавливать количество животных, которые могут нереститься в мире.

        По умолчанию в Minecraft: 15.

        water-animals [ ]

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

        По умолчанию в Minecraft: 5.

        ambient [ ]

        Этот параметр bukkit.yml позволяет серверам задавать количество окружающих существ (также известный как летучие мыши), которые могут нереститься в мире.

        По умолчанию в Minecraft: 15.

        Примечание: Мобильные породистые животные или монстры не следуют этим ограничениям. У них есть свои пределы, которым они следуют.

        Примечание: Эти ограничения распространяются только на животных или монстров в «загруженных» кусках — они не учитывают сущности, хранящиеся в разгруженных кусках.

        chunk-gc [ ]

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

        period-in-ticks [ ]

        Отметки между рассмотрением каждого случая сбора мусора. Если установлено значение 0, блок gc будет отключен.

        По умолчанию в Bukkit: 600.

        load-threshold [ ]

        Количество кусков мусора, которые необходимо загрузить с момента последней уборки мусора перед рассмотрением вопроса о вывозе мусора. Если установлено значение 0, блок gc будет отключен.

        По умолчанию в Bukkit: 0.

        ticks-per [ ]

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

        animal-spawns [ ]

        Эта настройка bukkit.yml позволяет серверам устанавливать задержку срабатывания клещей для порождений животных.

        Пример использования:

        • Значение 1 будет означать, что сервер будет пытаться нерестить животных каждый тик.
        • Значение 400 будет означать, что сервер будет пытаться нерестить животных каждые 400 тиков.
        • Значение ниже 0 будет сброшено на значение по умолчанию Minecraft’s default.

        Примечание: Если установлено значение 0, нерест животных будет отключен. Вместо этого мы рекомендуем использовать нерестящихся животных для контроля этого.

        По умолчанию в Minecraft: 400.

        monster-spawns [ ]

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

        Пример использования:

        • Значение 1 будет означать, что сервер будет пытаться порождать монстров каждый тик.
        • Значение 400 будет означать, что сервер будет пытаться порождать монстров каждые 400 тиков.
        • Значение ниже 0 будет сброшено на значение по умолчанию Minecraft’s default.

        Примечание: Если установлено значение 0, нерест монстров будет отключен. Вместо этого мы рекомендуем использовать икру монстров для контроля.

        По умолчанию в Minecraft: 1.

        autosave [ ]

        Данная настройка bukkit.yml позволяет серверам задавать количество тиков для каждого события сохранения

        Пример использования:

        • Значение 1 будет означать, что сервер будет пытаться автоматически сохранять мир каждый тик.
        • Значение 6000 будет означать, что сервер будет пытаться автоматически сохранять мир каждые 5 минут.
        • Значение ниже 0 будет возвращено к заводским настройкам Bukkit’а по умолчанию.

        По умолчанию в Minecraft: 6000.

        По умолчанию в Bukkit: 0.

        Примечание: На многих серверах Bukkit’а уже установлены плагины автосохранения, которые генерируют все задачи сохранения, поэтому было решено отключить эту функцию в Bukkit’е, поскольку настройка Minecraft’а по умолчанию вызывала значительное отставание у многих серверов, и была признана избыточной. Если вы хотите включить эту функцию, помните, что настройка установлена на один тик и поэтому должна быть установлена на достаточно высокое число (6000 = 5 минут при максимальной эффективности сервера).

        auto-updater [ ]

        Управляет встроенной функцией проверки обновлений.

        • включен: Включена ли функция проверки обновлений. По умолчанию: true
        • на сломанной. * (строковый массив) Что делать, если известно, что версия сервера содержит большую ошибку или эксплойт. Может быть «предупреждение-опс» и/или «предупреждение-консоль». По умолчанию [предупреждение-консоль, предупреждение-опс]
        • on-update: (string array) Что делать, если версия сервера устарела. Может быть «предупреждение-опс» и/или «предупреждение-консоль». По умолчанию [предупреждение-консоль, предупреждение-опс]
        • предпочтительнее канал. * (строка) Какой канал выпуска предпочтительнее для данного сервера. Может быть «rb», «beta» или «dev». По умолчанию: rb
        • host: (string) The update checker location. Тебе, наверное, никогда не стоит это менять, если ты не знаешь, что делаешь. По умолчанию: dl.bukkit.org

        aliases [ ]

        Этот раздел позволяет сопоставлять псевдонимы с командами. Пример:

        aliases: # Создается новая команда под названием "canihasbukkkit", которая при использовании на самом деле выполняет команду "version". canihasbukkit: version # И это выполнит и "спасти всех", и "остановиться", когда ты наберешь "спасти всех". savestop: [save-all, stop] # Если команда уже существует под названием "give", она будет переписана. Это удобно, если у вас есть два плагина. # сражаясь за одно и то же имя. # give: somepluginsgive

        Для получения дополнительной информации о псевдонимах ознакомьтесь с псевдонимами Commands.yml.

        database [ ]

        В этом разделе можно задать различные параметры конфигурации базы данных для базы данных, которые будут совместно использоваться плагинами, использующими внутренний сервер eBeans. Большинство плагинов не используют это, так что, нужно ли вам это настраивать или нет, зависит от вас. Изменение этих свойств изменит способ подключения к базе данных всех плагинов, использующих интегрированный с Bukkit сервер eBeans.

        • username: (string) Имя пользователя для подключения к базе данных. Может игнорироваться в зависимости от водителя.
        • password: (string) Пароль для подключения к базе данных. Может игнорироваться в зависимости от водителя.
        • isolation: (one of SERIALIZABLE, . ) Оставьте это, как правило, в покое, если не указано иное.
        • driver: (string, JDBC class name) Должен использоваться класс драйверов JDBC. Смотрите документацию для драйвера Java вашей базы данных для этого значения.
        • url: (string, JDBC database URL) URL-адрес для подключения к базе данных. Для баз данных MySQL/PostgreSQL или других серверов-клиентов, это обычно включает имя хоста, порт и имя базы данных. Для файловых баз данных, таких как SQLite, это обычно включает имя файла.

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

        SQLite Конфигурация (по умолчанию):

        database: username: bukkit isolation: SERIALIZABLE driver: org.sqlite.JDBC password: walrus url: jdbc:sqlite:.db

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

        MySQL Пример конфигурации:

        database: username: isolation: SERIALIZABLE driver: com.mysql.jdbc.Driver password: url: jdbc:mysql://:/

        Примечание: , , и не являются настоящими именами переменных, которые Bukkit использует, как в примере SQLite. Они просто представляют собой данные, которые вы должны изменить, чтобы конфигурация MySQL работала корректно.

        *OPTIONAL* worlds [ ]

        В этом разделе вы можете определить генераторы для миров, которые по умолчанию загружаются из bukkit».

        Prereqs: Вы ДОЛЖНЫ уже установить генератор, а разработчик генератора должен вставить >>> в свой плагин.yml.

        Если вы хотите свой мир под названием ‘world1’ (то же самое, что и ‘levell-name’ в server.properties) и хотите использовать CleanroomGenerator без параметров, вы можете это сделать:

        settings: . aliases: . database: . worlds: world1: generator: CleanroomGenerator

        Если вам нужны нестандартные параметры:

        settings: . aliases: . database: . worlds: world1: generator: CleanroomGenerator:10,stone,20,dirt,1,grass

        Файл paper.yml

        Фотография

      • Пользователь
      • Pip
      • 6 сообщений

      Отправлено 28 Июнь 2018 — 19:56

      Нужен этот файл. При создании сервера он не создался (есть bukkit.yml & spigot.yml). Где его найти и как его корректно добавить?

      #2 deadanykey

      deadanykey

    • Пользователь
    • PipPipPipPipPip
    • 3 415 сообщений

    Отправлено 29 Июнь 2018 — 4:22

    А Вы уверены, что у вас ядро Paper?

    Количество пользователей, читающих эту тему: 0

    0 пользователей, 0 гостей, 0 анонимных

    Ответить цитируемым сообщениям Очистить

    1. Форум MyArena.ru
    2. → Игровые сервера
    3. → MineCraft
    4. Правила поведения на форуме

    • RSS поток
    • Изменить стиль
      • IP.Board
      • MyArena
      • IP.Board Mobile
    • Отметить все сообщения прочитанными
      • Форум
      • Пользователи
      • Отметить все как прочтенное
    • Помощь

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *