🎉
Introducing Endstone

The next generation of Nukkit is here.

The legacy Nukkit project has evolved.
Welcome to Endstone, the official successor to Nukkit.

Nukkit ➡️ Endstone

See how your Nukkit plugin translates into Endstone plugin.

Plugin.javaNukkit
package my.plugin;

import cn.nukkit.command.Command;
import cn.nukkit.command.CommandSender;
import cn.nukkit.event.EventHandler;
import cn.nukkit.event.EventPriority;
import cn.nukkit.event.server.ServerCommandEvent;
import cn.nukkit.plugin.PluginBase;
import cn.nukkit.utils.TextFormat;

public class MyPlugin extends PluginBase {
    @Override
    public void onLoad() {
        this.getLogger().info(TextFormat.GREEN + "onLoad is called");
    }

    @Override
    public void onEnable() {
        this.getLogger().info(TextFormat.DARK_GREEN + "onEnable is called");
        this.getServer().getPluginManager().registerEvents(this, this);
    }

    @Override
    public void onDisable() {
        this.getLogger().info(TextFormat.DARK_RED + "onDisable is called");
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
        switch (command.getName()) {
            case "example":
                sender.sendMessage("Hello world!");
                break;
        }
        return true;
    }

    @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = false)
    public void onServerCommand(ServerCommandEvent event) {
        this.getLogger().info("ServerCommandEvent is called!");
    }
}
plugin.pyEndstone
from typing import override

from endstone.command import Command, CommandSender
from endstone.event import event_handler, EventPriority, ServerCommandEvent
from endstone.plugin import Plugin
from endstone import ColorFormat


class MyPlugin(Plugin):
    @override
    def on_load(self) -> None:
        self.logger.info(ColorFormat.GREEN + "on_load is called!")

    @override
    def on_enable(self) -> None:
        self.logger.info(ColorFormat.DARK_GREEN + "on_enable is called!")
        self.register_events(self)
    
    @override
    def on_disable(self) -> None:
        self.logger.info(ColorFormat.DARK_RED + "on_disable is called!")
    
    @override
    def on_command(self, sender: CommandSender, command: Command, args: list[str]) -> bool:
        match command.name:
            case "example":
                sender.send_message("Hello world!")
                break

        return True

    @event_handler(priority=EventPriority.NORMAL, ignore_cancelled=False)
    def on_server_command(self, event: ServerCommandEvent):
        self.logger.info("ServerCommandEvent is called!")

Frequently Asked Question

Nukkit was the original Java-based server software for Minecraft: Bedrock Edition, created by Vincent "MagicDroidX" Wu. It was designed to be fast, stable, and plugin-friendly. It's now considered a legacy project and is no longer actively maintained by its creator.

© 2025 Nukkit. All rights reserved.