как писать скрипты для майнкрафт сервера

Содержание
  1. Идеальный скрипт запуска сервера Minecraft
  2. Нужные нам команды
  3. Альтернативное логирование
  4. Аргументы запуска
  5. Правильный автоматический перезапуск
  6. Правильная автозагрузка
  7. Собираем модуль
  8. Start-Minecraft
  9. Register-Minecraft
  10. Register-Autologon
  11. Как пользоваться
  12. Завершение
  13. [Урок][Глава 1] Учимся писать плагин для сервера
  14. Minecraft Script Engine
  15. Содержание
  16. Система скриптинга [ править ]
  17. Структура файлов и папок [ править ]
  18. Структура скрипта [ править ]
  19. Команды [ править ]
  20. Сущности [ править ]
  21. Компоненты [ править ]
  22. События [ править ]
  23. Фильтры [ править ]
  24. Компоненты скрипта [ править ]
  25. Клиентские компоненты [ править ]
  26. Серверные компоненты [ править ]
  27. Пользовательские компоненты [ править ]
  28. Делаем свой minecraft на JavaScript
  29. Добро пожаловать в самую запутанную архитектуру проекта. Да я умею писать вступление.
  30. Структура проекта
  31. Игровой цикл
  32. Настройки
  33. Генерация карты
  34. Камера и управление
  35. Ссылки
  36. Туториал по созданию плагинов mineraft

Идеальный скрипт запуска сервера Minecraft

Автор очень любит игру, и сам является администратором небольшого сервера «чисто для друзей». Как водится среди любителей, на сервере замодировано все, а это влечёт за собой нестабильность работы и как следствие падения. Так как Powershell автор знает лучше, чем расположение магазинов на своей улице, он принял решение сделать «Лучший Скрипт Для Запуска Майнкрафт 2020». Этот же скрипт послужил основой для шаблона в маркетплейсе Ruvds. Но все исходники уже есть в статье. Сейчас по порядку, как это все производилось.

Нужные нам команды

Альтернативное логирование

Однажды поставив еще пару модов я обнаружил, что сервер, судя по всему, падает без объявления войны. Сервер не писал ошибки в latest.log или в debug, а консоль, которая по идее эту ошибку должна была написать и остановиться, была закрыта.

Не хочет писать – не нужно. У нас есть Powershell с командлетом Tee-Object, который берёт объект и выводит его в файл и в консоль одновременно.

Аргументы запуска

Поставив ту самую пару модов, автор заметил, что на сервере к тому же не хватает оперативной памяти. А это нужно менять аргументы запуска. Вместо того чтобы каждый раз менять их в start.bat, который все используют просто используйте этот скрипт.

Так как Tee-Object читает StandardOutput, только когда исполняемый файл вызывается «Прямо так», придется сделать еще один скрипт. Этот скрипт будет запускать сам майнкрафт. Начнем с аргументов.

Чтобы в будущем предаваться ультимативной лени, скрипт должен собирать аргументы запуска на лету. Для этого начнем с поиска последней версии forge.

С помощью sort-object мы всегда будем брать объект с самой большой циферкой, сколько бы вы туда их не положили. Ультимативная лень.

Теперь нужно назначить серверу память. Для этого берем количество системной памяти и записываем его сумму в string.

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

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

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

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

Для этого мы записываем результат Start-Process в переменную. В скрипте это выглядит так:

А дальше записываем результаты в файл. Вот что возвращается нам в переменную:

Все это с помощью Add-Content можно добавить в файл. Немного причесав, получаем такой скрипт, а на зовем его handler.ps1.

Теперь давайте оформим скрипт с запуском handler’a.

Правильная автозагрузка

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

Проблема заключается в том, что процесс должен запустить пользователь, который находится в системе. Это можно делать через рабочий стол или WinRm. Если запускать сервер от имени системы или даже администратора, но не входить в систему, то Server.jar не сможет даже прочитать eula.txt и запуститься.

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

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

С автовходом разобрались. Теперь нужно зарегистрировать новую таску под сервер. Запускать будем команду из Powershell, поэтому выглядеть это будет так:

Собираем модуль

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

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

Start-Minecraft

Сначала сделаем модуль, который только и будет делать, что запускать скрипт, который будет слушать и записывать standardoutput.

В блоке параметров он запрашивает из какой папки запускать майнкрафт и куда складывать лог.

А запускать майнкрафт нужно будет так:

Теперь перейдем к готовому к употреблению Handler.ps1

Чтобы наш скрипт мог принимать параметры при вызове, также нужно указывать блок параметров. Обратите внимание, он запускает Oracle Java, если вы используете другой дистрибутив, нужно будет изменить путь до исполняемого файла.

Register-Minecraft

Скрипт, практически, повторяет Start-Minecraft, за исключением того, что только регистрирует новую задачу. Принимает те же самые аргументы. Имя пользователя, если не было указано, берет текущего.

Register-Autologon

В блоке параметров скрипт принимает параметр Username и Password. Если Username не был указан, используется имя текущего пользователя.

Запуск этого скрипта выглядит так:

Как пользоваться

Сейчас рассмотрим то, как сам автор пользуется всем этим. Как правильно нужно разворачивать публичный сервер Minecraft на Windows. Начнем с самого начала.

1. Создаем пользователя

2. Регистрируем задание по запуску скрипта

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

Или воспользоваться стандартными средствами:

3. Включаем автовход в систему и перезагружаем машину

Завершение

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

Источник

[Урок][Глава 1] Учимся писать плагин для сервера

1499969270 60901441

Урок по написанию плагинов

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

Инструменты для создания плагина

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

Мы скачали программу и ядро, теперь делаем следующие

1491668972 bandicam 2017 04 08 19 21 46 404

Создаем новый проект Java Project

1491669102 bandicam 2017 04 08 19 21 59 439

Здесь мы вводим название нашего проекта и нажимаем Next

1491669137 bandicam 2017 04 08 19 22 07 633

Здесь нажимаем Add External Jars и ищем свой JAR ядро (в моем случае bukkit 1.8), и отправляем сюда

1491669375 bandicam 2017 04 08 19 22 43 321

Далее, мы создаем файл и начинаем редактировать его

1491669363 bandicam 2017 04 08 19 23 21 664

1491669510 bandicam 2017 04 08 19 23 29 345 1491669509 bandicam 2017 04 08 19 23 42 357

Далее мы создаем Package в файле scr и в Package создаем Class. Все файлы называть как название плагина.

1491669659 bandicam 2017 04 08 19 24 29 982

Когда вы создадите файл, вы должны добавить к 2 строке extends JavaPlugin, затем, навести на него курсор и нажать импорт. После чего, у вас появится строка с импортом для работы плагина

1491669741 bandicam 2017 04 08 19 26 09 745

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

Вы наверное спросите, зачем мы пишем < и >> Несколько раз?
Дело в том, что эти скобочки, открывают взаимодействие с пабликом. Если после ввода public void onEnable() поставить <, то все ниже коды будут выполняться тогда, когда паблик начнет их выполнять.
Чтобы закрыть паблик, нужно ввести >. Чтобы полностью закончить код, нужно в самом конце и в самом начале строке, написать еще раз >. Это означает, что паблик и код завершены

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

Источник

Minecraft Script Engine

Содержание

Система скриптинга [ править ]

В Minecraft Script Engine использован язык программирования Javascript. Скрипты связываются с пакетами поведений, могут отлавливать внутриигровые события и выполнять определенные команды, в частности изменять данные различных компонентов игры.

Два примера уже доступны для скачивания и изучения:

Пример Ссылка
Mob Arena https://aka.ms/minecraftscripting_mobarena
Turn-Based RPG https://aka.ms/minecraftscripting_turnbased

Структура файлов и папок [ править ]

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

Пока Minecraft Script Engine находится в бета-версии, для его работы необходимо будет включение экспериментального геймплея в настройках мира.

Структура файлов и папок для пакета поведения со скриптами приведена ниже:

Folder Structure

Структура скрипта [ править ]

Аргументами функции registerSystem является версия Minecraft Script Engine, под которую заточен данный скрипт. В примере выше это версия 0.0. Версии API будут различаться набором функционала и, соответственно, совместимостью с версиями майнкрафта.

Далее необходимо задать нашим системам функции initialize,update и shutdown:

Для отладки кода (обнаружения ошибок и даже построчного выполнения) нам понадобится компьютер с установленной Windows 10, Visual Studio и Minecraft Bedrock Edition.

Файлы логов могут быть расположены в различных местах на различных платформах. В Windows 10 это %APPDATA%\..\Local\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\logs.

Команды [ править ]

Все команды выполняются внутри функций с помощью контекста this. Это работает как в приведенных выше функциях, так и в определенных таким же образом собственных.

Сущности [ править ]

Для сущностей используются следующие команды:

Компоненты [ править ]

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

События [ править ]

Фильтры [ править ]

Компоненты скрипта [ править ]

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

Клиентские компоненты [ править ]

Эти компоненты могут быть использованы только в клиентских скриптах:

Серверные компоненты [ править ]

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

Пользовательские компоненты [ править ]

Источник

Делаем свой minecraft на JavaScript

Добро пожаловать в самую запутанную архитектуру проекта. Да я умею писать вступление.

image loader

Попробуем сделать небольшую демку minecraft в браузере. Пригодятся знания JS и three.js.

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

В конце статьи есть все нужные ссылки. Постараюсь как можно меньше воды в тексте. Объяснять работу каждой строки не буду. Вот теперь можно начать.

Для начала чтобы понимать какой будет итог, то вот демка игры.

Разделим статью на несколько частей:

Структура проекта

Вот так выглядит структура проекта.

image loader

index.html — Расположение канваса, немного интерфейса и подключение стилей, скриптов.
style.css — Стили только для внешнего вида. Самое важное это кастомный курсор для игры который располагается в центре экрана.

texture — Здесь лежат текстуры для курсора и блока земли для игры.
core.js — Основной скрипт где происходит инициализация проекта.
perlin.js — Это библиотека для шума Перлина.
PointerLockControls.js — Камера от three.js.
controls.js — Управление камерой и игроком.
generationMap.js — Генерация мира.
three.module.js — Сам three.js в виде модуля.
settings.js — Настройки проекта.

Игровой цикл

В core.js нужно провести инициализацию three.js, настроить его и добавить все нужные модули от игры + обработчики событий… ну и игровой цикл запустить. В учет того, что все настройки стандартные, то объяснять их нет смысла. Поговорить можно про map (он принимает сцену игры для добавления блоков) и contorls т.к. он принимает несколько параметров. Первый это камера от three.js, сцену для добавления блоков и карту чтобы можно было взаимодействовать с ней. update отвечает за обновление камеры, GameLoop — игровой цикл, render- стандарт от three.js для обновления кадра, событие resize также стандарт для работы с канвасом (это реализация адаптива).

Настройки

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

Генерация карты

В классе Map у нас есть несколько свойство которые отвечают за кеш материалов и параметры для шума Перлина. В методе generation мы загружаем текстуры, создаем геометрию и меш. noise.seed отвечает за стартовое зерно для генерации карты. Можно рандом заменить на статичное значение чтобы карты всегда была одинаковая. В цикле по X и Z координатам начинаем расставлять кубы. Y координата генерируется за счет библиотеки pretlin.js. В конечном итоге мы добавляем куб с нужными координатами на сцену через scene.add( cube );

Камера и управление

Я уже говорил, что controls принимает параметры в виде камеры, сцены и карты. Также в конструкторе мы добавляем массив keys для клавиш и movingSpeed для скорости. Для мыши у нас есть 3 метода. onClick определяет какая кнопка нажата, а onRightClick и onLeftClick уже отвечают за действия. Правый клик(удаление блока) происходит через raycast и поиска пересеченных элементов. Если их нет, то прекращаем работу, если есть, то удаляем первый элеент. Левый клик работает по схожей системе. Для начала создаем блок. Запускаем рейкаст и если есть блок который пересек луч, то получаем координаты этого блока. Далее определяем с какой стороны произошел клик. Меняем координаты для созданного куба в соответствии со стороной к которой мы добавляем блок. градация в 5 единиц т.к. это размер блока(да здесь можно было использовать свойство из settings).

Как работает управление камерой?! У нас есть три метода inputKeydown, inputKeyup и update. В inputKeydown мы добавляем кнопку в массив keys. inputKeyup отвечает за очистку кнопок из массива которые отжали. В update идет проверка keys и вызывается moveForward у камеры, параметры которые принимает метод это скорость.

Ссылки

Как и обещал. Весь материал который пригодится.

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

Источник

Туториал по созданию плагинов mineraft

1602933249 bez nazvanija 2

Разработки, созданные для данного туториала, используют ядро Spigot.

Софт для начала работы :
Среда разработки :
1) IntelliJ IDEA [+]
2) Eclipse [+]
3) NetBeans [+]
Для нормального запуска этих программ у Вас должен быть установлен JDK (Java Development Kit) и JRE (Java Runtime Environment)!

Проект, созданный для данного туториала, был разработан в СР Eclipse.

1602932349 bandicam 2018 02 04 14 56 42 829

3) В появившемся окне указываем имя проекта (в этом случае » RuBukkitGuide «) и ставим такие настройки:

1602932376 bandicam 2018 02 04 14 57 00 100

1602932448 bandicam 2018 02 04 14 57 39 652

3) Создаем сами пакеты:

1602932500 bandicam 2018 02 04 14 57 50 349

1602932617 bandicam 2018 02 04 14 58 12 337

2) Указываем название и нажимаем Finish.

1602932644 bandicam 2018 02 04 14 58 30 056

1602932725 bandicam 2018 02 04 14 59 35 563

Начинаем кодить!
Созданный нами класс Main пока-что выглядит вот так:

1602932745 bandicam 2018 02 04 15 00 33 878

1602932757 bandicam 2018 02 04 15 01 36 742

Теперь мы имеем доступ к protected и public полям и методам. Чтобы Java знала наверняка, что мы используем метод из родительского класса (JavaPlugin), мы скажем это, используя аннотацию @Override. Какой метод мы возьмем из родительского класса? onEnable(), так как он запускает весь наш проект. Само ядро будет знать, что это плагин, и начнет получать всю нужную информацию. Если мы уберем extends JavaPlugin и метод onEnable(), то когда добавим плагин в папку plugins, он вообще не загрузится, и его вообще не будет в списке плагинов.

1602932937 bandicam 2018 02 04 15 04 20 383

Что такое void? Это тип возвращаемых данных. Поскольку метод onEnable() ни чего не возвращает через return, то мы должны сообщить об этом системе. (Тип доступа может быть любым форматом возвращаемых данных, к примеру: int, boolean и даже String).

Как узнать все методы, к которым мы имеем доступ? Пишем this и ставим точку. Нам программа вывела все доступные методы и поля из класса JavaPlugin.

Что будем делать? Ну давайте выведем при запуске плагина, что он включился.
Для этого заходим в метод onEnable() < >и между < и >пишем нашу команду. Она выглядит так: this.getLogger().info(«ПЛУГИН РАБОТАИТ!»);
Что мы сделали, введя эту команду? Мы получили класс Logger, в которого есть метод info(. ), который и запустили.

Источник

Общеобразовательный справочник
Adblock
detector