Compatibility
Minecraft: Java Edition
Platforms
Links
Tags
Creators
Details
BeeTools
A set of server-side utilities for a Minecraft server running Paper. Currently the spawn point management module is implemented.
Features
/setspawn— sets the spawn point to the player's current position (including facing direction) and records who set it and when./spawn— teleports the player to the saved point./spawninfo— opens a window with information about the point: world, coordinates, compass direction, author, date it was set, and whether the spot is passable.- Automatic teleport to spawn on a player's first join.
- Safety check: the teleport only happens if both the block at foot level and the block at head level are passable.
- The point is stored in
plugins/BeeTools/spawn.jsonand survives a server restart. - Two languages: Russian and English, selected by the player's client language.
Commands and permissions
| Command | Permission | Default | Description |
|---|---|---|---|
/setspawn |
beetools.setspawn |
op |
Set the spawn point |
/spawn |
beetools.spawn |
true |
Teleport to spawn |
/spawninfo |
beetools.spawninfo |
op |
View information about the spawn point |
Permissions are declared in plugin.yml, so LuckPerms and other permission managers pick them up correctly.
beetools.spawninfo is declared as a child of beetools.setspawn: whoever can move the spawn can automatically view it too — there is no need to grant the permission separately.
Language
The language is set in plugins/BeeTools/config.yml:
language: auto
| Value | What it does |
|---|---|
auto (default) |
Follows the player's client language: a Russian client gets Russian, everyone else gets English |
ru |
Always Russian, regardless of the client |
en |
Always English, regardless of the client |
The texts live in plugins/BeeTools/lang/ru.yml and lang/en.yml. The files are created on first startup and can be edited to suit your server — a plugin update does not overwrite them. If a file turns out to be corrupted, the plugin falls back to the version bundled in the jar and reports it in the console.
The two languages have different numeral pluralization rules (plural-rule: slavic vs simple) and different date formats, which is why "21 минуту назад" and 29.08.2026 23:33 sit alongside "21 minutes ago" and 2026-08-29 20:33.
Command descriptions and permission-denied messages in plugin.yml cannot be localized — Bukkit reads the manifest once for the whole server — so they are bilingual.
Compatibility
| Platform | Paper (and forks — Purpur) |
| Minecraft version | 1.21 – 1.21.11 |
| Java | 21+ |
The plugin uses only the Bukkit API, so it very likely works on Spigot as well, but it has not been tested there. Folia is not supported — teleportation is performed synchronously.
Installation
- Download
beetools-<version>.jarfrom the Releases page or from Modrinth. - Put the file into your server's
plugins/folder. - Restart the server.
- Stand where you want the spawn to be and run
/setspawn.
Building from source
mvn clean package
The resulting jar appears at target/beetools-<version>.jar. Tests (JUnit 5 + Mockito) run as part of the build; to run them separately, use mvn test.
Gson is bundled into the jar and relocated to the net.romuskras.beeTools.libs.gson namespace (maven-shade-plugin) so it does not conflict with Gson versions from other plugins on the same server.
Data storage
The spawn point is stored in plugins/BeeTools/spawn.json:
{
"location": {"world": "world", "x": -71.42, "y": 63.0, "z": -59.44, "yaw": 0.18, "pitch": 4.08},
"setBy": {"uuid": "68c83735-d060-3355-9d07-82b5c0bac139", "name": "_Romus_"},
"setAt": "2026-08-29T20:33:00Z"
}
The world is referenced by name: if no world with that name is found at load time, the spawn point is not applied and an error is written to the console.
Files from versions prior to 1.1.0 — a bare location without the location wrapper — are read as-is and converted to the new format on the first save. The author of such points remains unknown, and the window says so.
The setBy block is not written if the author is unknown, and setAt is omitted if the date is unknown. A corrupted uuid or date does not break reading the rest: the plugin logs a warning and leaves the field empty.


