Как сделать команду java minecraft
Всем доброго времени суток. В этом туториале я расскажу о том, как добавлять собственные команды в игру. Исходники доступны на GitHub: 1.7.10 и 1.12.2. Они содержат по три примера команд, а в этой статье я расскажу как создавать одну из них.
Все доступные в игре команды предназначены для сервера, однако они работают и в одиночной игре. В чём же секрет? Всё дело в том, что даже в одиночной игре присутствует сервер, но только логический, поэтому нам доступны все серверные объекты. Команды создаются для сервера и регистрируются в процессе его загрузки и его наличие в одиночной игре даёт нам возможность их использовать, конечно только если при создании мира вы разрешили использование команд (cheats).
Так как выполнение команд происходит на сервере, то вся активность не должна использовать объекты клиента. Если требуется что то синхронизировать с клиентом - придётся использовать пакеты. Кроме того в любом случае вам потребуется настроить прокси.
Для начала в главном классе вашего проекта создайте метод, который будет выполнятся при загрузке сервера:
В CommonProxy создаёте такой же, но без аннотации. Вызовите его из метода в главном классе:
Создание команды
Начнём. Создадим команду для ремонта предмета в руке, класс CommandRepair:
Рассмотрим методы, которые обязательно требуется переопределить.
getCommandName() отвечает за имя, которое используется при вызове. Кроме имени мы ещё можем передавать множество аргументов при вызове. Этот пример не будет использовать аргументы.
getCommandUsage() возвращает шаблон использования. Он выводится при выбрасывании исключения WrongUsageException, а так же при просмотре доступных команд при вызове /help .
Теперь перейдём к processCommand() - этот метод выполняется при вызове команды. Как я уже писал, выполняется он только на сервере. В качестве аргументов у нас есть сам сервер, объект, вызвавший команду (игрок или консоль) и аргументы, с которыми она вызвана. Тут необходимо определить исполняемую активность.
Реализация. Для getCommandName() и getCommandUsage() созданы две строковые константы в начале класса для удобства. В getCommandUsage() добавлена необходимая активность:
Впринципе всё, команда будет работать. Осталось зарегистрировать её в CommonProxy в методе serverStarting() :
Вы можете зайти и проверить её работоспособность. По умолчанию она будет доступна только для миров, в которых разрешены команды (читы) или для опнутых игроков на сервере.
Дополнительно: права
В первую очередь хотелось бы обратить внимание на права использования. По умолчанию команда может быть использована опами на сервере или в одиночной игре при разрешённых командах (читах). Конечно вы можете добавить проверки в метод processCommand() , однако для этого уже есть специализированный метод canCommandSenderUseCommand() :
Он вызывается до processCommand() . К примеру просто вернув в нём true вы разрешите использование команды кем угодно и где угодно.
Дополнительно: варианты вызова
Для большего удобства каждая команда может быть дополнена набором вариантов вызова. Распространённое применение этой возможности заключается в добавлении укороченных вариантов. Добиться этого можно переопределив getCommandAliases() :
Дополнительно: уведомления
Дополнительно: команда исключительно для клиента
Что бы команда работала только на клиенте, вам надо зарегистрировать её через ClientCommandHandler.instance.registerCommand() в ClientProxy в процессе преинициализации (например). С ледует учесть, что такая команда не имеет возможности влиять на данные сервера (физического или логического). Метод processCommand() в данном случае может ссылаться на клиентские классы.
Вот как выглядит класс команды после внесения дополнений:
Для начала в главном классе вашего проекта создайте метод, который будет выполнятся при загрузке сервера:
В CommonProxy создаёте такой же, но без аннотации. Вызовите его из метода в главном классе:
Создание команды
Начнём. Создадим команду для ремонта предмета в руке, класс CommandRepair:
Рассмотрим методы, которые обязательно требуется переопределить.
getName() отвечает за имя, которое используется при вызове. Кроме имени мы ещё можем передавать множество аргументов при вызове. Этот пример не будет использовать аргументы.
getUsage() возвращает шаблон использования. Он выводится при выбрасывании исключения WrongUsageException, а так же при просмотре доступных команд при вызове /help .
Теперь перейдём к execute() - этот метод выполняется при вызове команды. Как я уже писал, выполняется он только на сервере. В качестве аргументов у нас есть сам сервер, объект, вызвавший команду (игрок или консоль) и аргументы, с которыми она вызвана. Тут необходимо определить исполняемую активность.
Реализация. Для getName() и getUsage() созданы две строковые константы в начале класса для удобства. В execute() добавлена необходимая активность:
Впринципе всё, команда будет работать. Осталось зарегистрировать её в CommonProxy в методе serverStarting() :
Вы можете зайти и проверить её работоспособность. По умолчанию она будет доступна только для миров, в которых разрешены команды (читы) или для опнутых игроков на сервере.
Дополнительно: права
В первую очередь хотелось бы обратить внимание на права использования. По умолчанию команда может быть использована опами на сервере или в одиночной игре при разрешённых командах (читах). Конечно вы можете добавить проверки в метод execute() , однако для этого уже есть специализированный метод checkPermission() :
Он вызывается до execute() . К примеру просто вернув в нём true вы разрешите использование команды кем угодно и где угодно.
Дополнительно: варианты вызова
Для большего удобства каждая команда может быть дополнена набором вариантов вызова. Распространённое применение этой возможности заключается в добавлении укороченных вариантов. Добиться этого можно переопределив getAliases() :
Дополнительно: уведомления
Дополнительно: команда исключительно для клиента
Что бы команда работала только на клиенте, вам надо зарегистрировать её через ClientCommandHandler.instance.registerCommand() в ClientProxy в процессе преинициализации (например). С ледует учесть, что такая команда не имеет возможности влиять на данные сервера (физического или логического). Метод execute() в данном случае может ссылаться на клиентские классы.
Клиентскую команду можно выполнять просто вводя в чат её имя, не предваряя её "/". Если уж очень хочется этого избежать, то реализуйте IClientCommand в классе вашей команды, переопределите allowUsageWithoutPrefix() и верните в нём false (без реализации этого интерфейса и переопределения по умолчанию будет возвращаться true ). Таким образом для использования команды вам придётся вводить её вместе со слешем.
Настройка сервера:
Перейдем к базовой настройке, закройте окно сервера если оно открыто.
1) Откройте файл server.properties текстовым редактором в нем есть основные настройки сервера.
2) Если у вас пиратка, то что бы вас пускало на сервер найдите параметр online-mode=true и измените его на online-mode=false
3) Укажите IP своего сервера в параметре server-ip=
Вы можете указать IP своего пк в интернете (не забывайте открыть порты), IP в хамачи, локальный адрес пк если ваши игроки находятся в одной сети ( подключены к одному вайфай или проводом)
Инструкция как настроить хамачи.
Инструкция как играть по сети
4) Значение - max-players=20 указывает максимальное количество игроков, все прочие настройки вы легко найдете поискав в гугле.
5) В файле еще очень много настроек, многие понятны без перевода, другие понятны если перевести переводчиком, а так же вы можете использовать эту вики.
Установка нужной версии Java для сервера
Сервер Forge требует для работы JDK (Java Development Kit), джава для разработчиков, все версии фордж_сервера до minecraft 1.17 требуют наличия JDK 8, версия minecraft 1.17+ требует установки JDK 16.
Если хотите сервер, а не игру по сети, вам придется выполнить этот квест.
-
Все версии майнкрафт до 1.17 требуется JDK 8 - скачать можно здесь
Создание файла start.bat для запуска сервера:
Выполнять данный пункт только для версий 1.5.2-1.16.5.
Создайте в папке сервера текстовый документ, поместите внутрь такую строчку:
Здесь вы должны иметь правильное название файла сервера, в данном случае forge-1.12.2-14.23.5.2855.jar, если вы переименовали, либо у вас другая версия майнкрафт или форджа, измените название на ваше.
Прочие параметры:
- "C:\Program Files\OpenJDK\jdk-8.0.262.10-hotspot\bin\java.exe" - адрес до нужной версии Java которую вы установили на предыдущем шаге, в данном случае JDK 8
- Xmx1024M - значение указывающее максимальное количество мегабайт оперативной памяти доступное серверу.
- Xms1024M - значение указывает значение оперативной памяти которое сервер займет сразу на старте сервера, даже если ему не нужно.
- nogui - Важным моментом является параметр nogui, он отключает окно сервера которое показывает игроков и график нагрузки на сервер, да, это окно может быть удобным, но лично у меня оно очень сильно нагружает процессор при работе сервера, НАСТОЯТЕЛЬНО рекомендую отключать GUI сервера.
Сохраните файл, переименуйте его например в start и замените расширение .txt на .bat
Если у вас нет возможности изменить .txt при переименовании, то включите эту опцию в системе: инструкция
[Урок][Глава 1] Учимся писать плагин для сервера
Вводим там следующие пункты
1. name - Название вашего проекта
2. main - Название.main.Название - Будет использоваться чтобы использовать плагин на сервере
3. version - версия плагина.
Далее мы создаем Package в файле scr и в Package создаем Class. Все файлы называть как название плагина.
Когда вы создадите файл, вы должны добавить к 2 строке extends JavaPlugin, затем, навести на него курсор и нажать импорт. После чего, у вас появится строка с импортом для работы плагина
И так. Дабы не томить вас нудными скринами, составил вам сразу готовый код выдачи лога в консоль. Давайте же разберемся, а не тупо спишем.
Вы наверное спросите, зачем мы пишем < и >> Несколько раз?
Дело в том, что эти скобочки, открывают взаимодействие с пабликом. Если после ввода public void onEnable() поставить Чтобы закрыть паблик, нужно ввести >. Чтобы полностью закончить код, нужно в самом конце и в самом начале строке, написать еще раз >. Это означает, что паблик и код завершены
Работа с сервером:
После того как вы настроили сервер, настало время работать с ним.
Всегда стоит останавливать сервер командой /stop, а не просто закрывать окно сервера.
Сервер поддерживает ввод команд (подобно чату в игре), команды вводятся сюда: (если запустили через .bat файл будет черное окно консоли, пишите в нем.)
На вики вы найдете основные команды для консоли, установить точку спавна, установить время, погоду, телепортация, получить ОП, изменить режим игры игрока, убить, кикнуть, забанить итд.
Правила сервера с модами:
- У сервера и у всех игроков должна быть одинаковая версия minecraft forge.
- У сервера и у всех игроков должны быть одинаковые моды, притом вплоть до версии самого мода. (исключение только клиентские моды, миникарты, JEI итд)
- Некоторые моды не поддерживает работу в онлайне вообще, просто крашат сервер ошибками, автор не реализовал это или допустил ошибок.
- Если вы изменяете настройки мода в конфиг файле, то эти изменения должны быть у всех игроков и на сервере тоже. Т.е у конфиги сервера и конфиги игроков должны быть одинаковые.
- Нет необходимости устанавливать клиентские моды на сервер, моды JEI, damage indicators, миникарты итд, то, что работает у конкретного игрока и не взаимодействует с другими игроками.
Если все хорошо, вы можете подключиться к серверу и увидеть на нем моды.
Если ваш сервер не запускается, то читайте файл лога в папке logs, там может быть написан проблемный мод и причину сбоя.
Как создать сервер майнкрафт с модами и Forge
В этой инструкции я расскажу как создать и запустить простой сервер майнкрафт вместе с модами для игры со своими друзьями используя хамачи или общую сеть и даже интернет.
В данной статье я буду использовать официальный сервер майнкрафт на который будет произведена установка Forge, установлены моды и вы сможете играть с друзьями в сборки.
Предупреждение :Современные моды майнкрафт работают не только на Forge, но есть и альтернативный загрузчик - Fabric, пока моды не поддерживают друг друга, потому если вы хотите создать сервер с Fabric модами: Создать сервер майнкрафт с модами Fabric.
Создадим сервер:
Скачайте установщик Minecraft forge необходимой версии, exe или jar, не важно.
Запустите скачанный файл, в данном окне выберите Install server, а ниже укажите произвольную папку в которой будет ваш сервер, нажмите Ok.
Установочник сам все скачает, необходим интернет.
Перейдите в папку которую указали, там вы увидите примерно это:
Как установить моды:
Моды устанавливаются подобно обычному майнкрафту, вы помещаете мод и зависимости (ядра, библиотеки) в папку mods вашего выключенного сервера, хотя есть несколько правил.
Как создать команду 1.7.10?
В методе processCommand:
- проверяешь первый аргумент, то что ICommandSender имеет наследство от EntityPlayerMP.
- проверяешь второй аргумент (который массив String):
Если длина массива равна 1, то по id 0 то что за название кита equals названию нужного кита, если ему доступно, то выдать то что положен по киту.
* Если длина массива равна 2, то по id 0 ищется игрок, по id 1 ищется кит, если достаточно прав у игрока по первому аргументу, чтобы выдавать кому-то кит.
В методе addTabCompletionOptions, проверяешь, то что:
- проверяешь первый аргумент, то что ICommandSender имеет наследство от EntityPlayerMP.
- проверяешь второй аргумент (который массив String):
Если длина массива равна 1, то то что длина массива равна 1, то возвращать List доступных игроку команд.
* Если длина массива равна 2, то по id 0 ищется игрок, по id 1 ищется кит, если достаточно прав у игрока по первому аргументу, чтобы выдавать кому-то кит.
Правка run.bat (только для minecraft 1.17 и более новых)
Если у тебя версия до 1.17, то ты выполнял пункт выше, этот можешь пропустить, если версия новее, то наверное все точно так же.
На версии 1.17+ автор чуть изменил процесс, немного его упростил, потому после окончания работы установщика форджа вы увидите примерно такое содержимое папки сервера которую вы указали:
Здесь уже есть run.bat для запуска из под Windows и run.sh для запуска из под Linux, но не торопитесь запускать.
Открываем текстовым редактором файл run.bat заменяем Java на "C:\Program Files\Java\jdk-16.0.1\bin\java.exe" (с кавычками) это ваш адрес до установленной Java JDK 16, сохраняем и запускаем файл run.bat
Первая попытка запуска сервера:
После того как вы запустите файл start.bat (run.bat), окно сразу же закроется или закройте его сами (1.17+), это нормально, в папке появятся несколько папок и файлов:
Откройте файл eula.txt, внутри измените eula=false на eula=true
Если вдруг файлы не появились и eula.txt нету, всего скорее вы установили не ту Java, либо не верно указали адрес, либо допустили другие ошибки, что бы лучше понять что за ошибка, добавьте в start.bat pause на новой строчке, с этим консоль не закроется и там будет какая-то ошибка или информация которую можно погуглить
Вторая попытка запуска сервера:
Снова открывайте файл start.bat (run.bat) и у вас должно открыться окно сервера с графиком и списком игроков (если в start.bat нет параметра nogui) или черная консоль сервера, сервер загрузится и создаст карту, но не торопитесь запускать игру и подключаться, сервер не настроен и моды не установлены.
Читайте также: