Zevvoryn

# Zevvoryn **A Minecraft: Java Edition 1.21.1 server with a native C++ core.** Optional plugin runtimes: C++, Luau, and Java/JNI. [Русский](/Zevvoryn/README.ru.html) · **English** ![version](https://img.shields.io/badge/version-0.2.0--alpha-orange) ![status](https://img.shields.io/badge/status-alpha%20%C2%B7%20unstable-red) ![minecraft](https://img.shields.io/badge/Minecraft-1.21.1-green) ![protocol](https://img.shields.io/badge/protocol-767-lightgrey) ![c++](https://img.shields.io/badge/C%2B%2B-20-blue) ![platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux-lightgrey)

⚠️ This is an early alpha

Zevvoryn is at an alpha stage and is very unstable. It’s a proof of concept: some systems work and are playable, but a lot is missing, some things half-work, and some are buggy. Treat it as an experiment, not a finished server.

Not there yet / not working properly: crafting and furnaces, redstone and mechanisms, enchanting and brewing, full mob AI and mob variety, plus a number of other blocks/mechanics. Full list is in license/CHANGELOG_EN.md.

Almost none of this has been tested on a live server under load — most of it was only checked statically (syntax / bracket balance), not by actually playing on a running world, so real behavior may differ. Back up your world.


What it is

Zevvoryn is a from-scratch implementation of the Minecraft: Java Edition 1.21.1 server (protocol 767), written in C++20. A vanilla client connects to it directly — no mods, no proxy.

The goal is a fast, lightweight server core with predictable resource usage, where the official Java server spends time spinning up the JVM and a lot of memory on the heap. This is a learning/research project, not a drop-in replacement for the official server.


What’s new in 0.2.0

Full list: license/CHANGELOG_EN.md.


Features

Legend: ✅ works · 🚧 partial / buggy · ❌ not yet

Area State
Protocol 1.21.1 (767): handshake, status, play ✅
Online/offline mode, encryption, packet compression ✅
Anvil format: read and write regions/chunks ✅
Inventory, items, game modes ✅
Eating food and food effects ✅
Nether, End, inter-dimension portals ✅
Block physics, fluids, tick-based updates 🚧
Mining: block hardness, tool speed, durability 🚧
Armor, equipment, combat vs players/mobs 🚧
Chat, system messages, tab list, skins ✅
Whitelist (whitelist.txt), operators, bans ✅
RCON (Source RCON, works with any client) ✅
Discord bot + web control panel ✅
First-run setup wizard (RU/EN) ✅
Auto-save, safe save on window close ✅
Rotating logs (last 15), crash protection ✅
MiniEdit — fast bulk region block ops ✅
Mobs: spawning and a basic set 🚧
Vehicles: boats and minecarts 🚧
Mobs: full AI and variety ❌
Crafting and furnaces ❌
Redstone, mechanisms, rail transport ❌
Enchanting, brewing ❌

Requirements


Building

Plugin development

Zevvoryn supports native C ABI plugins, an optional sandboxed Luau runtime, and an optional Java/JNI runtime. The runtime options are disabled by default and can be turned off at build time or in the server configuration. See the English plugin guide for setup, API, manifests, permissions, lifecycle, and security notes; the Russian guide is also available. This update publishes documentation only; it does not include the plugin runtime source code.

Security: native C++ and Java plugins execute trusted code inside the server process. Java permissions only restrict access through the Zevvoryn API; they do not sandbox Java code. Review plugin JARs and their full dependency trees for vulnerabilities such as Log4Shell. Luau is the sandboxed scripting option.

Windows (MSVC + Ninja)

From the “x64 Native Tools Command Prompt for VS 2022”:

cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake --build build

Put the resulting zevvoryn.exe in its own folder — next to it the server will create settings.properties, world/, logs/ and DiscrordBotRcon/.

PowerShell installer

Open PowerShell and download the installer from GitHub, inspect it, then run it:

$installer = "$env:TEMP\install_zevvoryn.ps1"
Invoke-WebRequest "https://raw.githubusercontent.com/Zevvoryn/Zevvoryn/main/install_windows.ps1" -OutFile $installer
notepad $installer
powershell -ExecutionPolicy Bypass -File $installer

It offers English or Russian and an installation folder; enter 0 at the folder step to go back and change the language. It then downloads the prebuilt Windows x64 release; no compiler or build tools are required. The output folder contains run_server.bat. Rerun the installer to update. You can also run it directly with irm https://raw.githubusercontent.com/Zevvoryn/Zevvoryn/main/install_windows.ps1 | iex; review the script first if you prefer not to execute a remote script directly. The selected drive must have at least 1 GB free; 5 GB or more is recommended for testing.

Linux

Download the installer and run it in a terminal (Bash and an internet connection are required):

curl -fL https://raw.githubusercontent.com/Zevvoryn/Zevvoryn/main/install_linux.sh -o install_linux.sh
bash install_linux.sh

The installer lets you choose English or Russian, an installation folder (default: Desktop/zevvoryn/release), or open a folder picker; enter 0 to go back and change the language. It downloads a prebuilt Linux x86_64 release and does not compile source. A Linux release binary is not published yet, so the installer will explain this and stop rather than leave you waiting on a build. Once the asset is available, it will create run_server.sh; rerun the installer to update. The installation drive needs at least 1 GB free; 5 GB or more is recommended for testing.


First run

On the first start (when there’s no settings.properties yet) a setup wizard kicks in: language, port, game mode, difficulty, view distance, whitelist, RCON, Discord bot and web panel. Plugin-enabled builds also offer separate switches for C++, Luau, and Java/JVM plugins. Everything you pick is saved to settings.properties, and a DiscrordBotRcon/.env is created for the panel.

On Linux, bash install_linux.sh installs the executable zevvoryn and creates an executable run_server.sh launcher in the selected server folder. Start it with ./run_server.sh; the setup wizard appears in the terminal. The installer prints the exact folder and launch command when it finishes. The launcher starts the server with the installation folder as its working directory, so settings.properties, worlds, and logs stay there. If you run the binary directly, an existing config beside it takes precedence; otherwise first-run setup writes settings.properties in the current working directory. Avoid launching from the source repository root if you do not want server files there. See the plugin owner and developer guide for package layout, runtime switches, permissions, and security. The public download in this documentation-only update does not add plugin runtime code; these plugin instructions apply to builds that include the corresponding runtime.

After that the server starts normally:

zevvoryn.exe                          # default config
zevvoryn.exe my-settings.properties   # custom config file

Configuration (settings.properties)

Plain key=value, like PocketMine/PMMP.

# ── Server ──
language=eng             # rus | eng — language of logs and messages
motd=Zevvoryn Server
server-port=25565
max-players=80
view-distance=16
simulation-distance=8

# ── World ──
level-name=world
level-type=DEFAULT       # DEFAULT | FLAT | VOID
level-seed=0             # 0 = random

# ── Gameplay ──
gamemode=creative
difficulty=2             # 0 peaceful … 3 hard
pvp=true
spawn-protection=16

# ── Access ──
online-mode=false
white-list=false         # player names go in whitelist.txt

# ── RCON ──
enable-rcon=true
rcon.port=25575
rcon.password=change_me
rcon.max-clients=4

# ── Panel ──
auto-start-panel=true    # launch the Discord bot / web panel with the server

Important: the RCON password is set only here. The server syncs DiscrordBotRcon/.env on every start — don’t edit it by hand.


Console commands

help                      help
list                      who is online
say <text>                message from the console
gamemode <0-3> [name]     change mode (or gm0..gm3)
give <name> <item>        give an item
tp <name> <x> <y> <z>     teleport
spawn / setworldspawn     spawn point
time set <value>          time of day
weather <clear|rain|thunder>
summon / mob / killall    mobs
setblock <x> <y> <z> <block>
locate <structure>
nether / end / overworld  dimension switch
whitelist <add|remove|on|off|list>
kick <name>
save                      save the world now
tps                       performance
reload                    soft config reload
stop                      graceful shutdown

The same commands are available over RCON, the Discord bot and the web panel.


In-game player commands (skins & capes)

Typed by players in chat:

/skin <name>              wear a licensed player's skin
/skin reset               go back to your own skin
/cape <id>                put on a minecraft.net cape
/cape off                 take the cape off
/capes                    list the available capes

Skins and capes only work when online-mode=false. With online-mode=true capes are disabled on purpose — handing official minecraft.net capes to licensed accounts would violate the Minecraft EULA, so the server refuses to. /skin lets an offline (cracked) player borrow the skin of any licensed nickname; /skin reset restores their own. If you’re wearing a cape, the first /skin reset only warns — run it again within 15 seconds to drop both the skin and the cape.


Whitelist

whitelist.txt next to the server, one name per line:

# Player whitelist
Notch
Steve

Enable it with white-list=true or the whitelist on command.


RCON, Discord bot and web panel

The bundled DiscrordBotRcon folder is a Node.js app that connects to the server over RCON and offers two interfaces: Discord commands and a browser web panel.

cd DiscrordBotRcon
npm install

With auto-start-panel=true the server launches it together with zevvoryn.exe (and writes the current RCON port and password into .env).

Variable Purpose
RCON_HOST, RCON_PORT, RCON_PASSWORD filled in automatically by the server
WEB_ENABLED false — disable the web panel (enabled by default)
WEB_HOST, WEB_PORT panel address, default 127.0.0.1:3000
WEB_PASSWORD panel login password
DISCORD_TOKEN, CLIENT_ID, GUILD_ID needed only for the Discord bot
ADMIN_ROLE_ID, COMMAND_CHANNEL_ID permission gating in Discord

The panel shows server status, who’s online, the whitelist, and gives you a console in the browser: http://127.0.0.1:3000

Register the Discord slash commands (once):

npm run deploy

The web panel is HTTP only (no real TLS/HTTPS) and uses a single shared Basic Auth password — fine for local/personal use, not meant to be exposed directly to the internet.


Logs and shutdown


Project layout

core/        config, logs, RCON, whitelist, commands, MiniEdit, server core
network/     TCP server, connections, compression
protocol/    1.21.1 packet codecs and shared structures
entity/      players and mobs
world/       chunks, generation, biomes, Anvil format
registries/  block, item and biome registries
crypto/      protocol encryption
utils/       NBT and helpers
data/        Minecraft game data
thirdparty/  cubiomes (vanilla generation)
tools/       smoke and stress test bots in Python
DiscrordBotRcon/  Discord bot and web panel (Node.js)

Extra docs: PHYSICS.md — the physics model, MINIEDIT.md — bulk region block operations.


Troubleshooting

The panel says “RCON: Disconnected”. Check that settings.properties has enable-rcon=true and a non-empty rcon.password (the remote console won’t start with an empty password). The startup log should contain Remote console listening on 0.0.0.0:25575.

The panel won’t open. Default port is 3000, address http://127.0.0.1:3000. Look for the crash cause in DiscrordBotRcon/panel-crash.log.

Panel auto-start was skipped. You need Node.js on PATH and npm install run in the DiscrordBotRcon folder.

The client doesn’t see the server on the LAN. Open TCP port 25565 in the Windows firewall.


Roadmap


License

Distributed under the Zevvoryn Custom License v1.0 — see license/LICENSE.txt. In short: you may use, study, modify and fork it, but only with attribution preserved and source disclosed, and no commercial distribution without written permission. Third-party components and their licenses are listed in license/THIRD-PARTY-NOTICES.txt (notably cubiomes).

Minecraft is a trademark of Mojang Studios. This project is not affiliated with Mojang Studios or Microsoft and contains none of their code.


**GitHub:** https://github.com/Zevvoryn/Zevvoryn