Меню Рубрики

Установка bukkit для minecraft

Bukkit

2 января 2011 г. (Объявлен) 28 октября 2012 г.

Bukkit — глобальная серверная модификация, предоставляющая API для взаимодействия с игровым миром и созданная для упрощения создания плагинов к SMP-серверу. Bukkit был призван заменить hMod. Существуют некоторое сходство между этими модами, но плагины, написанные для hMod, несовместимы с Bukkit и должны быть переписаны с использованием Bukkit API. Bukkit являлся самой используемой системой управления плагинами.

В феврале 2012 года разработчики Bukkit официально влились в команду Mojang.

В августе 2014 года команду Bukkit покинули практически все разработчики, в том числе глава проекта EvilSeph [1] , а уже 3 сентября один из бывших разработчиков послал DMCA Takedown, тем самым добившись блокировки проекта. С тех пор скачать исходники и сборки Bukkit’а с официального сайта нельзя.

Позже команды разработчиков Spigot, Cauldron и Bukkit объединили усилия в новой универсальной серверной платформе Sponge.

Содержание

Установка [ править | править код ]

Windows [ править | править код ]

  1. Скачиваем сервер, пусть данный пример будет на версии 1.12;
  2. Перемещаем jar-архив в папку для сервера
  3. Открываем блокнот или другой текстовый редактор
  4. Вписываем туда, подставив название скачанного jar файла. Например для версии 1.12 текст в блокноте будет выглядеть так:

craftbukkit-1.12.jar — имя скачанного файла.

  1. Вписываем туда, подставив имя файла:

5. Сохраняем этот текстовый документ, после чего меняем его расширение с «txt» на «bat», перемещаем в папку где будет расположен сервер и запускаем. Он создаст необходимые файлы для сервера. 6. Сервер готов, для запуска сервера запускаем bat файл.

  • Для 32-битной системы или 64-битной системы и 64-битной версии Java пишем это:
  • Для 64-битной системы и 32-битной версии Java пишем это:

Или создаём в любом месте скрипт для упрощения запуска:

  • Для 32-битной системы или 64-битной системы и 64-битной версии Java:
  • Для 64-битной системы и 32-битной версии Java:
  • Если не помогло, есть вариант:
  • Также, есть пользовательский скрипт:

Данный скрипт перезапускает сервер, если пользователь нажал на клавишу, а не закрыл консоль.

  • Если не работает — переустановите Java.
  • Если не помогло — напишите полный путь вместо «java».
  • Внимание! Для корректной работы любого скрипта нужно установить соответствующую версию Java! На 32-битную систему можно установить только 32-битную версию Java!

Linux [ править | править код ]

  1. Скачиваем сервер
  2. Перемещаем jar-архив в папку для сервера
  3. Сервер готов, для запуска переходим в папку сервера и отдаем команду java -Xincgc -Xmx1G -jar craftbukkit- .jar .

Желательно изменить опцию «-Xmx1G» в соответствии с количеством свободной оперативной памяти. Объём памяти должен быть больше 1 гигабайта, то есть не «-Xmx2G» или «-Xmx5600M»

При желании можно повесить эту команду на кнопку на панели или в меню:

Или создать в любом месте скрипт для упрощения запуска:

Скрипт нужно сделать исполняемым: chmod a+x start.sh и можно запускать командой sh start.sh .

Или даже прописать алиас, добавив где-нибудь в

После этого сервер можно будет запускать командой mcserver .

Возможно, Вы также захотите использовать init-скрипт для фоновой работы сервера.

OS X [ править | править код ]

также можно просто скачать нужную версию здесь, и поместить в нужную вам папку. В следующей команде замените [RAM] на количество оперативной памяти, которое будет выделено на запуск и дальнейшую работу сервера (512M — 512 МБ, 1536M — 1536 МБ, 1G — 1 ГБ, 2G — 2 ГБ, 4G — 4ГБ, и.т.д.):

2. Сервер готов, для запуска используем файл LaunchServer.command (будет лежать на рабочем столе).

Управление [ править | править код ]

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

Bukkit предоставляет все те же команды, что и оригинальный сервер Minecraft, но также имеет и три собственные особые команды:

Команда Описание Использование Запись в Permissions Доступ по умолчанию
version Показывает версию CraftBukkit этого сервера. version bukkit.command.version Всем
plugins Выводит список установленных плагинов. plugins bukkit.command.plugins Всем
reload Останавливает и снова запускает все плагины на сервере. reload bukkit.command.reload Операторам

Прочитать о настройке прав более подробно можно на вики проекта.

источник

Установить Bukkit сервер

Этот мануал расскажет вам о том, как установить и запустить сервер Bukkit minecraft.

Для начала, вам нужно будет совершить три несложных действия. Скачать java на ваш компьютер. Вот здесь можно скачать версию для Windows.

Затем, вам нужно скачать сам файл Bukkit сервера – имеющей расширение rar.

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

После того, как вы скачали все нужные файлы. Закиньте jar файл Bukkit сервера в папку, где находиться ваш сервер. Как видим, все достаточно просто.

Запуск сервера на Windows

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

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

Код запуска для 32-х разрядной системы

Если этот код не сработал, попробуйте следующий.

Xms1024M -Xmx1024M

это размер потребляемой сервером оперативной памяти.

craftbukkit.jar

Имя сервера, которое заключено в названии файла . jar.

Прописав все необходимое, сохраняем полученный документ с расширением – ваше название.bat. Если средствами windowsу вас не получается сохранить с нужным расширением. То воспользуйтесь программой totalcommander. В ней нажмите клавиши ctrl+mи в окошечке с надписью расширение введите – batи нажмите применить.

Теперь можно запускать сервер одним кликом, достаточно нажать два раза ЛКМ на файле – ваше название.bat. если все сделано правильно, откроется окно сервера майнкрафт.

Для того, чтобы остановить сервер майнкрафт, вам достаточно ввести обычную команду – stop.

Код запуска для 64-х разрядной системы

Все тоже самое, что и для 32-х разрядной, только код нужно прописывать другой, тот который приведен ниже.

Данный сgособ является универсальным для все систем Linux. Сперва качаем java/ затем, файл сервера с расширением jarнам нужно поместить в папку, к примеру, это будет /home/minecraft. Сделав это, открываем консоль, далее, приложения/стандартные/терминал. Для Ubuntudekstopможно воспользоваться комбинацией клавиш – ctrl+alt+t.

Переходим в папку сервера введя команду – cd/home/minecraft/

Вводим команду – nanostart.sh

И вставляем следующий код:

Теперь, осталось сделать файл исполняемым, введя команду – chmod +x /home/minecraft/start.sh

Для перехода в каталог, вводим – cd /home/minecraft/ Для запуска нужно ввести – ./start.sh

Если вдруг у вас не получается, пробуем последовательно ввести 1) cd /home/minecraft/ 2) sudo ./start.sh.

Если все получилось, для последующего запуска повторяем:

Для перехода в каталог, вводим – cd /home/minecraft/ Для запуска нужно ввести – ./start.sh

Чтобы остановить сервер, введите в консоль stop.

Настройки сервера вы найдете в файле – serversproperties. Что за что отвечает можно узнать заглянув под спойлер.

источник

Bukkit по-русски — свой сервер Minecraft

RuBukkit.org

Новости RuBukkit

Будьте в курсе последних обновлений RuBukkit!

Правила RuBukkit

Реклама на Rubukkit

Официальные новости Bukkit

Официальные новости Bukkit (на английском)

Последние успешные сборки

Плагины

Релизы плагинов

В данном разделе размещаются плагины, прошедшие проверку.

Неподтвержденные плагины

В данном разделе разрешено размещение созданных вами плагинов. Как только ваша тема пройдет проверку (правильные префиксы, правильное оформление описания плагина, авторство), она будет перенесена модераторами в раздел «Релизы плагинов»

Запросы на разработку плагинов

В данном разделе вы можете сделать запрос на разработку требуемого плагина (если такого еще не существует)

Разработка плагинов для новичков

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

Переводы

Релизы переводов

В данном разделе размещаются переводы, прошедшие проверку

Неподтвержденные переводы

В данном разделе разрешено размещение сделанных вами переводов. Как только ваша тема пройдет проверку (правильные префиксы, правильное оформление описания перевода, авторство, ссылки), она будет перенесена модераторами в раздел «Релизы переводов»

Запросы на перевод плагинов

В данном разделе вы можете сделать запрос на перевод требуемого плагина (если такого еще не существует)

Сервер CraftBukkit

Помощь

В данном разделе вы можете попросить помощи в администрировании вашего сервера, настройке плагинов. Убедительная просьба запрашивать помощь о разработанных девелоперами плагинов в их официальных темах. Хотите обсудить вопрос с профессионалами? Управление сервером Bukkit

[Архив] Помощь

Управление сервером Bukkit

Для продвинутых администраторов! Обсуждение различных аспектов администрирования сервера Bukkit: оптимизация, конфигурация площадки, обмен опытом и так далее

Руководства, инструкции, утилиты

Различные мануалы, относящиеся к Bukkit и Minecraft: установка, настройка, тонкости, а также утилиты для обслуживания и восстановления

Готовые сборки сервера

Готовые сборки сервера от пользователей с предустановленными плагинами. Запрещено размещение платных сборок. Запрещено запрашивать сборки, платные или бесплатные. ТОЛЬКО РЕЛИЗЫ.

Веб-обвязки и лаунчеры

Лаунчеры, движки, PHP скрипты и все, что связано с веб-обвязкой Bukkit

Модификации клиента

Различные модификации клиента, которые не конфликтуют с сервером Bukkit

Альтернативы Bukkit

Альтернативные серверные платформы

В данном разделе идет обсуждение альтернативных севрерных платформ Minecraft — в дальнейшем самые популярные получат отдельные разделы.

Sponge

Sponge — новая платформа для серверов Minecraft, которая сочетает в себе различные API. Поддержка Forge, плагинов Bukkit и очень сильная команда разработчиков. Короткий адрес: rusponge.org

Официальные новости Sponge

Spout

Мультипоточный, воксельный игровой движок/платформа с открытым кодом, написанный на Java. Его возможности выходят далеко за пределы Minecraft.

Другое

Все, что не связано с Bukkit напрямую

Обсуждение Minecraft

Обсуждение самой игры, запросы о помощи по игровому процессу

Ваш сервер Minecraft

Коммерческий раздел

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

источник

Bukkit по-русски — свой сервер Minecraft

RuBukkit.org

Новости RuBukkit

Будьте в курсе последних обновлений RuBukkit!

Правила RuBukkit

Реклама на Rubukkit

Плагины

Релизы плагинов

В данном разделе размещаются плагины, прошедшие проверку.

Неподтвержденные плагины

В данном разделе разрешено размещение созданных вами плагинов. Как только ваша тема пройдет проверку (правильные префиксы, правильное оформление описания плагина, авторство), она будет перенесена модераторами в раздел «Релизы плагинов»

Запросы на разработку плагинов

В данном разделе вы можете сделать запрос на разработку требуемого плагина (если такого еще не существует)

Разработка плагинов для новичков

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

Переводы

Релизы переводов

В данном разделе размещаются переводы, прошедшие проверку

Неподтвержденные переводы

В данном разделе разрешено размещение сделанных вами переводов. Как только ваша тема пройдет проверку (правильные префиксы, правильное оформление описания перевода, авторство, ссылки), она будет перенесена модераторами в раздел «Релизы переводов»

Запросы на перевод плагинов

В данном разделе вы можете сделать запрос на перевод требуемого плагина (если такого еще не существует)

Сервер CraftBukkit

Помощь

В данном разделе вы можете попросить помощи в администрировании вашего сервера, настройке плагинов. Убедительная просьба запрашивать помощь о разработанных девелоперами плагинов в их официальных темах. Хотите обсудить вопрос с профессионалами? Управление сервером Bukkit

[Архив] Помощь

Управление сервером Bukkit

Для продвинутых администраторов! Обсуждение различных аспектов администрирования сервера Bukkit: оптимизация, конфигурация площадки, обмен опытом и так далее

Руководства, инструкции, утилиты

Различные мануалы, относящиеся к Bukkit и Minecraft: установка, настройка, тонкости, а также утилиты для обслуживания и восстановления

Готовые сборки сервера

Готовые сборки сервера от пользователей с предустановленными плагинами. Запрещено размещение платных сборок. Запрещено запрашивать сборки, платные или бесплатные. ТОЛЬКО РЕЛИЗЫ.

Веб-обвязки и лаунчеры

Лаунчеры, движки, PHP скрипты и все, что связано с веб-обвязкой Bukkit

Модификации клиента

Различные модификации клиента, которые не конфликтуют с сервером Bukkit

Альтернативы Bukkit

Альтернативные серверные платформы

В данном разделе идет обсуждение альтернативных севрерных платформ Minecraft — в дальнейшем самые популярные получат отдельные разделы.

Spigot

Spigot создан на основе ядра CraftBukkit и призван заменить «старшего брата» стабильностью и производительностью. Кроме этого, почти все плагины, написанные для CraftBukkit, пойдут и на Spigot, но на Spigot написаны и собственные, недоступные CraftBukkit’у плагины.

источник

Читайте также:  Установка акустики на акценте

Plugin Tutorial/ru

This page is a work in progess, check back regularly for more content!

Contents

Вступление

Статья базируется на уроке от Adamki11s, в нём содержится достаточно большое количество примеров.

После изучения данной статьи мы рекомендуем Вам ознакомиться с дополнительными материалами автора.

Перевод на русский делают ZZZubec и fromgate. Дополняет перевод:D_ART, Xipxop, а также snaypak. Контроль за орфографией, пунктуацией, грамотностью изложения и викифицированием — pashak.

Учим Java

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

Видеоуроки

Изучение Java дастся Вам гораздо легче, если вы знаете другие языки програмирования. Также в изучении этого языка могут помочь следующие издания:

  • Герберт Шилдт — «Полный справочник по Java SE6»
  • Брюс Эккель — «Философия Java»

Java IDE

Минимумом для разработки на Java вам являются лишь текстовый редактор и компилятор. Однако гораздо удобнее использовать интегрированную среду разработки — IDE (Integrated Development Environment). Это целый комплекс программных средств, позволяющий писать, компилировать и отлаживать написанные программы.

Наиболее популярными средами для разработки на Java являются:

Eclipse — самая популярная среда, ей пользуется большинство пользователей Bukkit. Если вы новичок в Java, то Eclipse предпочтительнее, так как данная статья написана на примерах именно этой программы. Рекомендуемую версию Eclipse можно взять отсюда.

По мнению автора лучшим руководством для Eclipse является эта статья (англ.). Руководство написано для версии 3.3, но, скорее всего, подойдёт и к более новым версиям.

Также есть руководство (англ.) и для IntelliJ, используемой преимущественно для разработки игр на Java.

Начинаем проект плагина

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

Перед тем как мы начнем создавать новый плагин не забудьте настроить «переменные окружения» в Eclipse. Запустите Eclipse и нажмите File > New > Java Project:

Имя проекта может быть каким хотите (но я рекомендую в любые названия вкладывать смысл). Далее следуйте инструкциям. В Package Explorer в левой панели будет отображаться весь проект целиком. ЛКМ на плюсе возле папки с названием проекта, раскроет весь проект и Вы сможете посмотреть все файлы которые относятся к нему.

Добавление Bukkit API к нашему плагину

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

Последнюю текущую версию баккит сервера Вы можете найти здесь: Bukkit API — Development Snapshot

Кликните «Правой кнопкой мыши» (ПКМ) по нашему проекту и нажмите на Свойства. Далее нажмите на Java Build Path в левой части и в правой части перейдите на закладку Libraries. Нажмите на кнопку Add External JARs, чтобы выбрать jar баккит сервера который Вы скачали.

Подключение справки Bukkit для Eclipse

Если Вы обладаете уже опытом работы с Eclipse и Java, то вы наверняка знаете что при наведении мыши на какую либо команду или класс, всплывает подсказка, которая очень помогает при написании кода. Для подключения справки нам понадобиться интернет соединение. Баккит также содержит справку для разработчиков, которая интегрируется в Eclipse. Для того чтобы её подключить необходимо нажать ПКМ по Bukkit jar файлу (который был добавлен в проект), затем выберем в панели слева Javadocs Location, затем справа в адресе укажем «http://jd.bukkit.org/apidocs/»(без кавычек):

Нажмите validate (для проверки), а затем OK. Вот и всё! Теперь справка поможет нам в дальнейшем.

Начинаем создавать ваш плагин

Сейчас вы должны создать ‘package’ (или ‘пакет’ как я буду называть его далее) в котором будут храниться все файлы классов Java. Правой кнопкой по папке «src» и выберите New > Package:

Имя вашего ‘пакета’ должно быть таковым: «me.yourname.pluginname» — там где ‘yourname’ это название пакета и оно не должно содержать Русских букв и слова bukkit. Например: Если ваш плагин называется «TestPlugin», то ‘пакет’ должен называться так: «me.adamki11s.TestPlugin».

Теперь наш проект создан, мы можем добавлять файлы классов и начать делать наш плагин. Правой кнопкой по папке «src» и выберите New > Class. Главный класс должен иметь то же имя, как и плагин! Например: Плагин с именем «TestPlugin», то первый класс должен называться так «TestPlugin».

Сейчас вы создали основной файл и ваш проект. Чтобы bukkit видел ваш плагин, надо добавить plugin.yml файл. Этот файл содержит важную информацию, без него плагин работать не будет! Нажмите правой кнопкой по папке проекта(Не ‘src’ , а та что самая первая). Выберете New > File. Назовите файл так: «plugin.yml«. По умолчанию Eclipse откроет файл plugin.yml в блокноте (Подсказка: Если вы хотите держать ваше рабочее пространство упорядоченным закройте текстовый редактор и перетащите plugin.yml в главное рабочее пространство (Справа) и вы сможете редактировать файл внутри eclips.) Вот две вещи которые надо добавить; ссылку на ваш главный класс и команды.

Простой пример plugin.yml выглядит вот так :

Внимание: Имя пакета часто включает в себя имя плагина, так что не удивляйтесь, если вы видите

onEnable() и onDisable()

Эти функции вызываются когда плагин enabled/disabled (Включен/выключен). По умолчанию плагин будет включаться при запуске сервера и вы можете настроить сообщение которое пишет в консоле при запуске плагина. onEnable() это первое, что выполняется в плагине.

Введение: onEnable() и onDisable()

Создайте методы onEnable () и onDisable () внутри основного класса, созданного в предыдущем разделе:

В настоящий момент функция ничего не делает и как вы заметили получаете ошибку. Это потому, что мы должны указать главный класс, откуда начинается «функционал плагина». В верхней части кода измените объявление класса:

После добавления этого кода вы увидите красные линии под ним, говорящие что, что-то не так. Чтобы исправить это, просто наведите курсор мыши на выделенный код и нажмите правую кнопку мыши Import ‘JavaPlugin’ (org.bukkit.plugin.java) .

Вывод сообщений при помощи Logger

Сейчас мы напишем код, который будет выводить сообщения в консоле о статусе плагина (1 раз) Включен/выключен. Сначала мы должны получить объект регистратора, который позволит нам послать выходные данные на консоль. Для этого классе JavaPlugin имеется метод getLogger(). Для удобства можно объявить специальную переменную:

Затем внутри onEnable() мы будет отображаться сообщение о том, плагин был включен:

Вы можете сделать тоже самое с onDisable() , убедившись, что изменили сообщение. Ваш главный класс должен выглядеть как-то так::

Слушатели событий (хуки)

Слушатели событий или хуки, фактически будут самой большой часть в ваших плагинах. Всё что бы не происходило с игроками на сервере можно отловить через них. Игрок поставил блок или игрок убил какого-то монстра, или что-то другое — это всё отлавливается через хук (событий). Перед тем как вы создадите такой хук, Вам надо зарегистрировать его на стороне плагина. Хорошим местом для регистрации хуков, будет то же место где Ваш плагин подключается к серверу (OnEnable). Когда вы зарегистрируете событие(хук), сервер уже будет знать что когда произойдет событие, он оповестит Ваш плагин о нём. Довольно стандартная модель регистрации событий.

Добавление слушателей(хуков)

Информация неактуальна! Сейчас используется упрощенная система слушателей событий!

Чтобы зарегистрировать само событие, нам понадобится Plugin Manager, его можно получить через «окружение».

Возможно после того как вы запишите этот код, появится красное подчеркивание на слове PluginManager, этого из-за того что мы ещё не импортировали этот класс. Для устранения данной ошибки достаточно поставить курсор на подчеркнутое слово и нажать правой кнопкой мыши. И выбрать импорт(import) класса.

Следующим шагом будет регистрация события. Возьмем например событие, когда игрок изменяет позицию в игре. Запишем в следующей строке

Важно! Достаточно одного файла слушателя на все события одного типа. Например чтобы отлавливать все события игрока, мы должны их зарегистрировать. А затем создать всего один файл слушателя, и уже в нём написать реакцию (функции) на каждое зарегистрированное событие игрока. И по скольку игра не разделяет одного игрока от другого, получается, что мы получим слушатель одновременно на всех игроков и на каждое их событие.Кроме того, нам не обязательно выносить хуки в отдельный файл, при их малом налиичи можно их просто описать в этом же файле (плагина) просто добавив именные функции внутри класса и добавив implements PlayerListener нашему класса плагина.Также я решил отойти(в некоторых местах) от стандартного перевода в хуках, чтобы русскоязычному населению было более понятно о возможностях, которые дают хуки.

Допустим мы возьмем имя Basic для файла слушателя, тогда запишем вот так:

Эту часть кода необходимо внести в класс плагина(основного)

В таком случае, создаем новый класс с именем(имя на самом деле произвольное, главное чтобы не было пересечений с другими именами) BasicPlayerListener, и за основной класс возьмем PlayerListener. Не забывайте добавлять необходимые импорты классов, чтобы не было красных подчеркиваний. Должно получится вот так:

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

MyPlugin необходимо заменить на имя нашего класса плагина (основного). И запишем в основную функцию класса слушателя передачу(присвоение, получение) этого индентификатора.

Чтобы правильно обработать событие, Вы должны создать функцию

Баккит автоматически будет вызывать её после того как событие произошло. Поэтому старайтесь не ошибиться в имени функции Для примера (пример не удачный, поправил), событие EntityDamage, будет иметь название функции onEntityDamage( EntityDamageEvent event) также внутри функции можно получить доступ к тому кто «ударил», через

Отсюда да же, можно получить координаты как самого Entity (вплоть до отдельных координат X,Y,Z), так и того кто ударил, через

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

для блоков — BlockListener

дла сущностей — EntityListener

для игрока — PlayerListener

Спасибо за то что читаете, мы все стараемся передать вместе с переводом частичку своих знаний

Команды

Метод onCommand()

Теперь Вы знаете как использовать события, но что если Вам нужно обрабатывать команды, посланные игроком? Для этого используется onCommand . Этот код вызывается когда игрок пишет в чат команду, начиная с символа «/». Например ввод «/do something» вызовет код onCommand . В данном случае при вызове ничего не произойдёт т.к. нужно запрограммировать окружение.

Избегайте использования названий команд, используемых стандартым сервером. Так же необходимо следить за уникальностью названия команды. Например: команда «give» уже используется некоторыми плагиными и добавление ещё одной команды с таким же именем сделает ваш плагин несовместимым с этими плагинами.

всегда должен возвращать булево значение — true или false. Если возвращаемое значение true, то это условно означает о том, что команда выполнена успешно и вызвавшему само по себе ничего не отобразится. Если же возвращаемое значение фелсе, то плагин обратится к параметру команды ‘usage:’ и выведет содержимое этого параметра пользователю команды, взятое из файла plugin.yml. При использовании метода

необходимо зарегистрировать 4 параметра:

Установка команд

хорошим тоном считается возвращать false в самом конце метода. Возврат false отобразит пользователю команды параметр использования из plugin.yml (смотри выше). В этом случае, если что-то пошло не так, пользователю выведет сообщение-подсказку. Когда метод возвращает значение, любой код, находящийся ниже него, не будет выполнен, за исключением случаев, когда команда return расположена в закрытом условии и не будет достигнута про исполнении кода. Код

означает, что при сравнении строк не будет различий между верхним и нижним регистром. Например строки «BAsIc» и «BasiC» обе эквивалентны basic и код в условии будет воспроизведён.

Добавляем команду в plugin.yml

Вы также должны добавить команду в plugin.yml файл. Добавьте следующее в конец plugin.yml:

  • basic — Название команды
  • description — Описание команды.
  • permission — This is used by some help plugins to work out which commands to show to the user.
  • usage — Сообщение которое будет отправлено игроку если метод onCommand вернёт false. Пишите так чтобы игрок смог понять как эту команду использовать
Читайте также:  Установка пожарных извещателей в гараже

Консольные команды против команд Игроков

Вы, возможно, заметили выше параметр CommandSender sender . CommandSender является интерфейсом Bukkit, у которого есть две полезные (для писателей плагинов) реализации Player и ConsoleCommandSender (чтобы быть точным, Player тоже является интерфейсом).

When you’re writing your plugin, it’s a very good idea to ensure that commands that can be run from the console actually work, and that commands that should only be run as a logged-in player really are only run as a logged-in player. Some plugins simply return if the sender is not a player (i.e. someone tried to use the plugin’s commands from the console), even when those commands make perfect sense from the console (e.g. changing the weather on the server).

In this example, the command basic can be run by anyone — a logged-in player, or the server operator on the console. But the command basic2 can only be run by logged-in players.

In general, you should allow as many commands as possible to work on both the console and for players. Commands that need a logged-in player can use the mechanism in the example above to check that the CommandSender is actually a player before continuing. Such commands would generally depend on some attribute of the player, e.g. a teleportation command needs a player to teleport, an item giving command needs a player to give the item to.

If you want to get more advanced, you could do some extra checks on your command arguments so that e.g. a teleportation command could be used from the console if and only if a player’s name is also supplied.

Использование отдельного класса CommandExecutor

В приведённом выше примере мы просто вставили метод onCommand() в главный класс плагина. Для небольших плагинов, это прекрасно, но если вы пишете что то большое, возможно, имеет смысл разместить метод onCommand() в своём отдельном классе. К счастью, это не слишком сложно:

  • Создайте новый класс в пакете вашего плагина. Назовите его MyPluginCommandExecutor (хотя, конечно, можете заменить MyPlugin на реальное имя вашего плагина). Этот класс должен реализовать интерфейс Bukkit CommandExecutor.
  • В методе onEnable () вашего плагина, вы должны создать экземпляр нового класса для исполнителя команды, а потом вызвать его при помощи getCommand («basic») setExecutor (myExecutor)., Где «basic» команда, которую мы хотим выполнить и myExecutor экземпляр который мы создали.

Лучше объяснить на примере:

MyPlugin.java (главный класс плагина):

Обратите внимание, как мы передаем экземпляр из основного класса в конструктор MyPluginCommandExecutor. Это позволяет легко добраться до основных методов плагина.

Используя эту возможность, мы можем лучше организовывать свой код — если основной метод OnCommand() у вас стал большим и сложным, вы можете разделить его на под методы которые не загромождают основной класс плагина. Обратите внимание, что если ваш плагин имеет несколько команд, то вам нужно создавать исполнителя для каждой команды отдельно.

Конфигурация/Настройки плагина

Needs Updating!
This page may contain outdated information or needs more work, and needs to be updated. You might experience problems if you use the information you find here. In the meantime, you can always try asking on IRC, or perhaps the JavaDocs have the answer.

Часто бывает так, что вашему плагину требуется переменная для сохранения, когда сервер выключен или выключается, как правило, какие-то настройки или имущество. Это достигается при помощи конфигурации, для этого Bukkit предоставляет свою встроенную функцию.

Получаем конфигурацию для плагина

Bukkit automatically creates a Configuration object which is associated with your plugin. In order to work with it you will need to import the Configuration class and retrieve a reference to the object by calling the getConfiguration() method in your main plugin class, as shown below:

Here the variable config is the object which you will work with to set, get, save, and load settings and properties related to your plugin.

Настройка переменных конфигурации

Now that we have our Configuration object, we can begin to save our properties and settings to it. Bukkit Configuration objects can handle many different types of variables, such as ints, booleans, and Strings (as well of lists of all of these). In order to set a property, you will need to use the following code:

This code will create a config.yml which looks like this:

You will notice that there is only one method which is used to set a property. The kind of property that will be saved is determined by the actual object you pass to the setProperty() method, so make sure it is of a type that Configuration objects can handle.

Bukkit Configurations also provide support for categories. In order to create categories for properties, simply put a decimal point as a seperator between the category and the property itself. An example use of this could be a situation where there is a different category for each player, where variables are set to different values for each different player. For example, you could use the following code to set the value of a few variables under the category of a particular player:

This will create a config.yml for your plugin that will look like this:

Получение переменных конфигурации

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

The first argument passed is the particular property that is being looked for, while the second argument is the default value to return if that property is not found in the configuration.

To get a property from a category, simply prepend the category name to the property you wish to retrieve and seperate the two with a decimal point, as such:

Сохранение и загрузка с диска

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

Usually, you would load the configuration on the plugin enable, and save at least once on plugin disable if anything was worth saving.

It is important to remember to call the save() method somewhat more frequently, in order to make sure that any properties that have been set are not forgotten on the termination of the server. You might think you only need to call this in onDisable(), but remember, if the server crashes before your plugin can properly close, any settings that haven’t been saved will be lost. By default, configuration files will be saved in the file plugins/YourPlugin/config.yml, but you can use the Configuration class to read/write any file. Example:

That will create a new file called plugins/YourPluginName/anotherfile.yml. You should avoid creating/modifying any files outside your own plugin’s data folder (which you can get via the getDataFolder() call above) unless you have a very good reason.

Разрешения (Permissions)

With the new Bukkit API for permissions, they couldn’t be easier. To find out if a player has a particular permission use the following:

You can also find if a permission has been set or not (equivalent to Java’s null) with the following function:

You may be wondering why there aren’t any groups. The answer to that is because they aren’t really needed. Previously one of the main uses for groups was to format chat messages. That however can be done just as easily with permissions. Inside your chat plugin’s config you would define associations between permissions and prefixes. For example the permission «someChat.prefix.admin» would correspond to the prefix [Admin]. Whenever a player speaks with that permission their name will be prefixed with [Admin].

Another common usage might be to send a message to all users within a group. Again however this can be done with permissions with the following:

Finally you may be asking, well how do I set and organise player’s permissions if there are no groups? Although the bukkit API doesn’t provide groups itself, you must install a permission provider plugin such as permissionsBukkit to manage the groups for you. This API provides the interface, not the implementation.

Настройка разрешений

If you want more control over your permissions, for example default values or children then you should consider adding them to your plugin.yml. This is completely optional, however it is advised. Below is an example permissions config that would be appended to the end of your existing plugin.yml:

Firstly, each permission your plugin uses is defined as a child node of the permissions node. Each permission can then optionally have a description, a default value, and children.

Defaults

By default when a permission isn’t defined for a player hasPermission will return false. Inside your plugin.yml you can change this by setting the default node to be one of four values:

  • true — The permission will be true by default.
  • false — The permission will by false by default.
  • op — If the player is an op then this will be true.
  • not op — If the player is not an op then this will be true.

Children

Before now you will probably be used to the * permission to automatically assign all sub permissions. This has changed with the bukkit API and you can now define the child permissions. This allows for a lot more flexibility. Below is an example of how you do this:

Here the doorman.* permission has several child permissions assigned to it. The way child permissions work is when doorman.* is set to true, the child permissions are set to their values defined in the plugin.yml. If however doorman.* was set to false then all child permissions would be inverted.

Создание собственных разрешений

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

Scheduling Tasks and Background Tasks

Currently, Minecraft servers operate nearly all of the game logic in one thread, so each individual task that happens in the game needs to be kept very short. A complicated piece of code in your plugin has the potential to cause huge delays and lag spikes to the game logic, if not handled properly.

Luckily, Bukkit has support for scheduling code in your plugin. You can submit a Runnable task to occur once in the future, or on a recurring basis, or you can spin off a whole new independent thread that can perform lengthy tasks in parallel with the game logic.

There is a separate Scheduler Programming tutorial which introduces the Scheduler, and gives more information on using it to schedule synchronous tasks, and on kicking off asynchronous tasks in Bukkit.

Операции над блоками

Самый простой способ для создания или измения блоков. Для начала мы изменим блок находящийся над игроком (вверху) в 5ом блоке от позиции игрока. Для этого мы будем использовать событие PlayerMove (оно срабатывает каждый раз когда позиция игрока изменяется).

Давайте разберем код. В начале мы берем позицию игрока, затем получаем «мир», который нам потребуеться для последующих операций над блоками. Далее мы берем текущую позицию игрока по высоте и увеличиваем её на 5ть. Затем мы получаем информацию о текущем блоке через команду w.getBlockAt(loc); В конце мы меняем ID блока на 1 (камень). Также мы можем изменить и его дополнительные свойства, вы можете добавить новую строку b.setData((byte)3); сразу после строки b.setTypeId(1); Как видите дополнительные свойства должны быть указанны числом с типом byte (8 bit).

Также мы рассмотрим довольно простой алгоритм для конструирования.

Этот код построит 3д куб или кубоид с необходимым размером (его необходимо вызвать принудительно в удобном для вас месте). Если же вам необходимо очистить блоки, то используйте значение ID равным 0 (он же блок воздуха)

Читайте также:  Установка принтера canon на нетбук

Управляем инвентарем

Inventory manipulation might seem a little hard at first, but it’s really easy once you get the hang of it. This section mostly covers player inventory manipulation, but the same applies to chest inventory manipulation as well if you find out how to get a chest’s inventory :P. Here is a simple example of inventory manipulation:

So inside onPlayerJoin we first make a few variables to make our job easier: player, inventory and diamondstack. Inventory is the player’s inventory and diamondstack is a ItemStack that has 64 diamonds. After that we check if the player’s inventory contains a stack of diamonds. If the player has a stack of diamonds, we give him/her another stack with inventory.addItem(diamondstack) and send a golden message. So inventory manipulation isn’t actually that hard, if we wanted we could remove the stack of diamonds by simply replacing inventory.addItem(diamondstack) with inventory.remove(diamondstack) and change the message a little bit. Hopefully this helped! inventory.remove(diamondstack) — это тоже учти.

HashMaps and How to Use Them

When making a plugin you will get to a point where just using single variables to state an event has happened or a condition has been met will be insufficient, due to more than one player performing that action/event.

This was the problem I had with one of my old plugins, Zones, now improved and re-named to Regions. I was getting most of these errors because I didn’t consider how the plugin would behave on an actual server with more than one on at any given time. I was using a single boolean variable to check whether players were in the region or not and obviously this wouldn’t work as the values for each individual player need to be separate. So if one player was in a region and one was out the variable would constantly be changing which could/would/did cause numerous errors.

A hashmap is an excellent way of doing this. A hashmap is a way of mapping/assigning a value to a key. You could setup the hashmap so that the key is a player and the value could be anything you want, however the useful things with hashmaps is that one key can only contain one value and there can be no duplicate keys. So say for example I put «adam» as the key and assigned a value of «a» to it. That would work as intended, but then say afterwards I wanted to assign the value of «b» to key «adam» I would be able to and would get no errors but the value of «a» assigned to key «adam» in the hashmap would be overwritten because Hashmaps cannot contain duplicate values.

Defining a HashMap

Keep that code in mind because we will be using it for the rest of the tutorial on HashMaps. So, for example lets create a simple function which will toggle whether the plugin has been enabled or not. Firstly, inside your on command function which I explained earlier you will need to create a function to send the player name to the function and adjust the players state accordingly.

So inside on command you’ll need this, the function name can be different but for the sake of simplicity it’s best if you keep it the same.

This code above will cast the value of sender to player and pass that arguement to the function togglePluginState(). But now we need to create our togglePluginState() function.

Now, what this code is doing is checking if the HashMap first contains the key player, so if it has been put into the hashap, if it is then we check the value of the HashMap key by get(player); if this is true then set value to false and send the player a message, else if the value is false then do the opposite, set the value to true and send a message again. But if the HashMap does not contain the key player then we can assume that this is their first run/use so we change the default value and add the player to the hashmap.

More Ideas for HashMaps

A HashMap (or really any kind of Map in Java) is an association. It allows quick and efficient lookup of some sort of value, given a unique key. Anywhere this happens in your code, a Map may be your solution.

Here are a few other ideas which are ideally suited to using Maps. As you will see, it doesn’t have to be data that you store per player, but can be any kind of data that needs to be «translated» from one form to another.

Data Value Lookups

Saving/Loading a HashMap

Once you know how to work with HashMaps, you probably want to know how to save and load the HashMap data. Saving and loading HashMap data is appropriate if

  • you don’t want an administrator to edit the data manually
  • you need to save data in binary format (too complex to organize for YAML)
  • you want to avoid parsing block names and/or other objects from freeform text

This is very simple way how to save any HashMap. You can replace HashMap

with any type of HashMap you want. Let’s continue using the «pluginEnabled» HashMap defined from the previous tutorial. This code saves the given HashMap to the file with given path.

You can see it’s really easy. Loading works very very similar but we use ObjectInputStream instead of ObjectOutputStream ,FileInputStream instead of FileOutputStream,readObject() instead of writeObject() and we return the HashMap.

You can use this «API» for saving/loading HashMaps, ArrayLists, Blocks, Players. and all Objects you know 😉 . Please credit me (Tomsik68) if you use this in your plugin.

Example implementation of this API: I’m skipping some part of code in this source

A minor note about this SLAPI and Java’s ObjectOutputStream class. This will work un-modified if you are saving almost all well-known Java types like Integer, String, HashMap. This will work un-modified for some Bukkit types as well. If you’re writing your own data object classes, and you may want to save their state using this technique, you should read up on Java’s Serializable interface. It’s easy to add to your code, and it will make your data persistent with very little work on your part. No more parsing!

Базы Данных

База данных представляет собой структурированную совокупность данных. Эти данные могут быть любыми — от простого списка игроков до перечня экспонатов картинной галереи. Для записи, выборки и обработки данных, хранящихся в компьютерной базе данных, необходима система управления базой данных. Поскольку компьютеры замечательно справляются с обработкой больших объемов данных, управление базами данных играет центральную роль в вычислениях. Реализовано такое управление может быть по-разному — как в виде отдельных утилит, так и в виде кода, входящего в состав других приложений.

Alta189 и PatPeter написали удобную библиотеку под названием SQLibrary. Данная библиотека позволяет упростить работу с БД. Так же для работы с БД вам понадобиться освоить синтаксис SQL.

SQLite

SQLite – это встраиваемая библиотека в которой реализовано многое из стандарта SQL. Её притязанием на известность является как собственно сам движок базы, так и её интерфейс (точнее его движок) в пределах одной библиотеки, а также возможность хранить все данные в одном файле. Я отношу позицию функциональности SQLite где-то между MySQL и PostgreSQL. Однако, на практике, SQLite не редко оказывается в 2-3 раза (и даже больше) быстрее. Такое возможно благодаря высокоупорядоченной внутренней архитектуре и устранению необходимости в соединениях типа «сервер-клиент» и «клиент-сервер».

MySQL

Другая популярная база данных SQL двигатель называется MySQL. Это ближе к серверу-класса, чем SQLite, где многие известные компании или веб-сайтов зависят от него миллионы веб-страницы хитов каждый день. При том, что безопасность приходит немного крутой кривой обучения, потому что MySQL имеет больше настраиваемых параметров и возможностей.

Получение скомпилированного плагина

После того как плагин написан, время задать вопрос: как получить рабочий jar-файл, который можно устанавливать на сервер, из набора файлов-исходников? В первую очередь установить сервер CraftBukkit на Вашем компьютере. Что бы сделать это ознакомьте с инструкцией Setting up a server (Настройка сервера). Затем Вам нужно экспортировать плагин в файл .jar, чтобы в дальнейшем запустить его на Вашем новом сервере. Чтобы сделать это в Eclipse, Выберите пункт меню File > Export. В появившемся окне под строкой «Java», выберите «JAR file», и затем выберите «next». Появится окно:

Проверьте что для экспорта выбрана Ваша директория с исходниками (в левой части окна). Справа, два файла с именем начинающимся на точку, не должны экспортироваться — они не нужны для работы плагина (снимите с них «галочки»). Очень важно, чтобы plugin.yml был выбран для экспорта; без него плагин не будет работать. Экспортируйте Ваш jar-файл, указав нужный путь.

Полученный jar-файл должен быть работоспособным плагином!nbsp;Естественно, если не были допущены ошибки в коде или в файле plugin.yml. Теперь можно скопировать плагин в директорию «plugins» Вашего сервера, перезагрузить или перезапустить сервер и приступить к тестированию! In order to connect to a server running locally on your computer, simply put «localhost» as the IP address of the server in Minecraft multiplayer. If you run into errors that you can’t solve for yourself, try visiting the plugin development forum, asking in the bukkitdev IRC channel, or re-reading this wiki. Once you have a useful working plugin, consider submitting your project to dev.bukkit for consumption by the Bukkit community.

Советы и трюки

Поджигание Игрока

API Bukkit позволяет делать очень много интересных и нестандартных вещей. Вот несколько примеров:

Как поджечь кого-то всего лишь командой:

Теперь, если написать команду типа /ignite Notch и если игрок «Notch» онлайн, Notch загорится!

Убиваем игрока

Продолжая тему, представляем способ убить игрока. Используем метод OnCommand для этого:

Очередной способ убийства игрока, но уже со взрывом:

Request Section

Как создать плагин с использованием Maven

Using git, clone the BukkitPluginArchetype repo and build the archetype:

Now, in the folder you want to create the plugin in, run the following commands:

then select the following from the list when prompted:

For groupid, enter what you’d use as the first part of the Java Package.For Artifactid, enter the last part of the package. Accept Version and package as is, then type Y

You’ll now have a folder named as whatever you used for archetypeid. In that folder is a folder, src, and a file, pom.xml.

, and add the following code where it says //Do Something

Now, go back to the base folder and run

It may take a while downloading things, but let it do it’s thing. When done, there’ll be a folder called target, and a file called -1.0-SNAPSHOT.jar inside it. Copy this file to the bukkit server plugin folder and reload the server.

Now, if you type the command /

Добавляйте ещё примеры с HashMap пожалуйста

Примеры файлов и шаблоны

My Open Source Plugins

  • TameGrass — What you can learn from this plugin: Creating, deleting and checking blocks in a world. Loops and HashMaps, Permissions integration, Number formatting and Exceptions and more.
  • Zombies(Unfinished) — What you can learn from this plugin: HashMaps, Manipulating blocks, Random number generation, Entity spawning, ArrayLists and more.

If you have any more questions on this matter, don’t hesitate to contact Adamki11s or anyone on the BukkitDev IRC channel

источник

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

Adblock
detector