Configuration#
VSU has one properties file with four integer settings. Everything else is either
fixed behaviour or lives in kits.json and the SQLite database.
File: config/vonix_server_utilities.properties, written with defaults on first
launch.
# Vonix Server Utilities Configuration
# Maximum homes per player
max_homes=5
# Seconds before a TPA request expires
tpa_timeout_seconds=120
# Seconds after death before /backdeath is usable (0 = instant)
death_back_delay_seconds=0
# Minutes of playtime required for each automatic Playtime Key.
playtime_key_interval_minutes=60
Keys#
| Key | Type | Default | Effect |
|---|---|---|---|
max_homes |
int | 5 | Maximum homes a player may hold. Checked on /sethome for a new name only. |
tpa_timeout_seconds |
int | 120 | Lifetime of a pending /tpa or /tpahere request, in seconds. |
death_back_delay_seconds |
int | 0 | Minimum wait after death before /backdeath works. 0 means immediately. |
playtime_key_interval_minutes |
int | 60 | Minutes of playtime per automatic Playtime Key. Clamped to a minimum of 1. |
All four are read with Integer.parseInt on the trimmed value. A value that does
not parse falls back to the default for that key with no error beyond a debug-level
absence of the setting; the server starts normally.
max_homes#
/sethome counts existing homes for the player and refuses a new name once
the count reaches the limit. Overwriting an existing home always succeeds even at
the cap, so a player at 5 homes can still move home without deleting anything
first.
/homes prints the used and allowed counts, e.g. Your homes (3/5). The value is
read from config each time a command runs, so a reload changes the limit without a
restart. It does not retroactively delete homes above a lowered limit; they stay
and remain usable, they simply cannot be added to.
The limit is global. There is no per-rank override and no permission-based home count.
tpa_timeout_seconds#
A request is stamped with the time it was created. When the target runs
/tpaccept, the request is re-checked and refused if it is older than this value.
A stale request also stops blocking a fresh one from the same sender.
There is no background task that sweeps expired requests: expiry is evaluated
lazily on accept. That means an expired request still sitting in memory can make
/tpa report "already has a pending request" until it is evaluated once. Setting
the timeout very low shortens that window; it does not remove it.
Accepted values are multiplied by 1000 and stored as milliseconds; negative values produce an already-expired request, which is a way to disable TPA acceptance without disabling the command.
death_back_delay_seconds#
/backdeath compares the death timestamp against the current time and refuses
with a countdown when the elapsed time is below this value. The delay applies per
death, so dying again restarts the wait.
/back is unaffected. The two stores are separate: /back holds the last
teleport origin, /backdeath holds the last death position, and neither overwrites
the other. Both are persisted and survive a restart.
playtime_key_interval_minutes#
A tick task runs once per minute, reads each online player's vanilla playtime
statistic, and grants one playtime key per completed interval that has not been
awarded yet. Progress is stored, so this is cumulative rather than a per-session
flush.
The value is clamped with Math.max(1, ...) at load time. A configured 0 or a
negative number is read as 1, which is the most aggressive setting, not a
disabled one. To make the system effectively dormant, set a very large value.
Interval awards apply only to online players. Time played before the mod was installed still counts, because the source is the vanilla statistic rather than a VSU counter — a player joining for the first time with 100 hours on record will receive every interval they have already completed in one pass.
Reload#
/vonixsu reload re-reads the properties file and then reloads kits.json. It
requires vsu.admin.manage at operator level 3.
/vonixsu reload
| Result message | Meaning |
|---|---|
Configuration reloaded. |
The properties file was re-read; kit reload was attempted |
Reload failed — config not initialised. |
The config was never loaded, which means server start did not run the config step |
Reload threw: <message> |
An exception escaped; the stack trace is in the server log |
What a reload does not do:
- It does not re-open the database. Schema and connection state are fixed at start.
- It does not reload crate definitions. Those are database rows, changed through
/cratecommands. - It does not re-apply limits retroactively. For example, lowering
max_homesleaves existing homes in place. - It does not restart the expiry sweeper or clear the mute cache.
The reload is safe to run while players are online. There is a brief window where the kit map is being replaced, but claims are serialised against the database, so the worst case is a claim that resolves against the new file.
No remote configuration#
VSU 2.2.0 has no remote feature service, no HTTP client, and no configuration
endpoint. Nothing polls a website, and no setting is fetched at runtime.
Two consequences worth stating plainly:
/vonixsu statusprints a fixed module list (homes, warps, kits, TPA, back, admin, world) as a label. It is not a capability report and it is not fetched from anywhere.- The internal feature-gate keys that appear in command declarations are always open. They exist as compatibility labels; the only access control that runs is the permission gate described on Permissions.
If you find a guide describing a feature-sync command or a server-side config
pull for VSU, it describes a build that no longer exists. The 2.2.0 changelog
records the removal of the account-link, site, player-sync, and feature-polling
paths.
What is not in this file#
Settings that people look for here and will not find:
| Missing | Where it actually lives |
|---|---|
| Kit contents and cooldowns | config/vonix_server_utilities/kits.json — see Kits & crates |
| Crate definitions, prizes, key balances | The SQLite database, managed by /crate commands |
| Punishment records and durations | The SQLite database, managed by moderation commands |
| Chat format strings | LuckPerms prefix, suffix, and name colour metadata |
| Database path or connection tuning | Compiled in; the path is fixed |
| Warp list | The database, managed by /setwarp and /delwarp |
The database path is not configurable: it is always
config/vonix_server_utilities/data.db relative to the server directory.
Changing a value#
- Edit the properties file.
- Run
/vonixsu reloadfrom console or as an operator. - Confirm the
Configuration reloaded.message.
A restart is equivalent and slightly safer if you are changing several values at once, because it also re-runs schema checks and cache hydration. If a value seems to have no effect after a reload, check the log for a reload failure and confirm you edited the file under the server's own directory rather than a client instance.
Restarting also re-reads kits.json and rehydrates homes, warps, nicknames,
ignore lists, and back locations from the database, which is the clean way to
recover from a partial edit.