[Nukkit MOT] Запуск ядра/работа с плагинами на android

У меня уже несколько человек спросили, как писать плагины для Nukkit-MOT на телефоне.

Потребуется:

  • Termux (установите через F-Droid)
  • OpenJDK 21 (JDK, а не просто JRE)
  • Gradle (рекомендуется) или Maven
  • Nukkit-MOT
  • IDE
  • Базовые знания Java

:wrench: Установка Nukkit-MOT

  1. Обновляем пакеты в Termux:

    pkg update && pkg upgrade
    
  2. Устанавливаем JDK 21:

    pkg install openjdk-21-jdk
    
  3. Настраиваем доступ к хранилищу:

    termux-setup-storage
    
  4. Создаём рабочую директорию:

    mkdir -p ~/storage/shared/Nukkit
    cd ~/storage/shared/Nukkit
    
  5. Скачиваем Nukkit-MOT Workflow runs · MemoriesOfTime/Nukkit-MOT · GitHub

  6. Переносим Nukkit-MOT в папку Nukkit.

  7. Запускаем сервер:

    java -jar Nukkit-MOT.jar
    

:memo: Создание плагина

  1. Устанавливаем Gradle:

    pkg install gradle
    
  2. Создаём структуру проекта:

    mkdir -p ~/storage/shared/Nukkit/plugins/MyPlugin
    cd ~/storage/shared/Nukkit/plugins/MyPlugin
    
  3. Инициализируем Gradle проект:

    gradle init --type java-application --dsl kotlin
    
  4. Переносим содержимое из lib, в корень проекта

  5. Заменяем содержимое build.gradle.kts на:

    plugins {
        java
        id("com.github.johnrengelman.shadow") version "8.1.1"
    }
    
    group = "your.plugin.package"
    version = "1.0.0"
    
    repositories {
        mavenCentral()
        maven("https://repo.opencollab.ru/maven-releases/")
    }
    
    dependencies {
        compileOnly("cn.nukkit:nukkit:1.0-SNAPSHOT")
        compileOnly("org.projectlombok:lombok:1.18.30")
        annotationProcessor("org.projectlombok:lombok:1.18.30")
    }
    
    tasks {
        shadowJar {
            archiveFileName.set("${project.name}.jar")
            minimize()
        }
    }
    
  6. Создаём структуру плагина:

    mkdir -p src/main/java/your/plugin/package
    mkdir -p src/main/resources
    
  7. Заполняем plugin.yml в resources:

    name: "Test"
    api: ["1.0.0"]
    version: "1.0"
    main: your.plugin.package.Main
    author: "Author"
  1. Пример основного класса (src/main/java/your/plugin/package/Main.java):

    package your.plugin.package;
    
    import cn.nukkit.plugin.PluginBase;
    
    public class Main extends PluginBase {
        @Override
        public void onEnable() {
            getLogger().info("Plugin enabled!");
        }
    }
    
  2. Собираем плагин:

    gradle build
    
  3. Готовый плагин будет в:

ls build/libs/MyPlugin.jar

Примеры можете смотреть по темам @MEFRREEX

Я не то что бы мог назвать себя полноценным java разработчиком, но разве не правильнее было бы писать this.getLogger…? Я знаю что в данном случае использовать this не обязательно, но мне кажется с ним легче, ведь this указывает к какому классу идёт обращение. Нет?

Я когда писал проект для колледжа на джаве, всегда использовал ключевое слово this где это было возможно. Таким образом к примеру если я видел variable.function() я сразу знал что идет обращение к локальной переменной внутри метода. А если я видел this.variable.function() то сразу знал что идет обращение к глобальной переменной класса.

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

По сути и да, и нет. Тут больше зависит от кодстайла и принятого стиля в проекте. Я например, всегда испольую “this” для обращения к методам и полям класса в своем коде, но это не обязательно и многие могут не использовать, хотя соглашусь, это сильно улучшает читаемость кода

1 лайк

И кстати нет, не можете) Я уже наверное как пол года перешел на gradle в пользу отказа от maven, по тому что считаю что в новых проектах стоит использовать gradle, не буду конечно тут вникать почему это лучше, но в проектах которые опубликованы на форуме, а этим я уже давно не занимаюсь почти во всех плагинах используется maven

У тебя некоторые плагины на gradle, да и пример в теме я использовал gradle

На этом форуме? Один от силы
upd: ну вообще парочку найдется

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

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

Соглашусь, такие скорее всего сами смогут открыть документацию джавы, gradle/maven, нуккита, и разобраться что к чему

Я именно так и начал)))

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

1 лайк