Installation
- 1Drop the jar into plugins/ and restart. There are no dependencies, no database and nothing fetched on first boot — deliberately, because the hardest failure an accessibility plugin can have is not starting, and the person it fails is the one who needed it.
- 2Log in and run /soundsight test. Every cue you have on fires once, spaced out, and none of it is real. This is the check worth doing on day one: without it, the only way to find out what a creeper alarm looks like is to be killed by a creeper.
- 3Decide what your server wants in plugins/SoundSight/config.yml, then run /soundsight reload. The defaults suit a survival server and are a reasonable place to stop.
Three channels, and why
The obvious design is to push every cue to the action bar, and it is wrong. Cues then overwrite each other, the loudest thing on screen is whatever fired last, and a creeper warning is erased half a second later by a radar update.
So each cue goes to the channel that matches its urgency and the channels never compete. The boss bar carries the ambient radar. The action bar carries events, arbitrated by priority rather than arrival order, so a tool warning never erases a skeleton shooting you from behind. The title carries the creeper alarm and nothing else — spending it on anything survivable would train players to ignore the one cue that is not.
Colour is never the only channel. The radar says the same thing three ways — bar length, bar colour and the text — so it still works for a colourblind player.
The cues
Creeper alarm: a full-screen title for a creeper that is close and targeting you, or already hissing. Damage direction: what is hurting you and which way it came from, including the causes with no attacker at all — drowning, fire, the void — which are the hardest of all to notice without sound.
Behind you: a hostile mob has picked you and is not in front of you. Fishing bite: a fish is on the line, which is otherwise a splash and a bobber dip lasting a fraction of a second.
Threat radar: the standing list of hostile mobs nearby, with direction and distance. Tool warning: your tool is nearly gone — off by default, because vanilla has no warning at all and this belongs here, but it is a convenience rather than an access need and the defaults should not spend screen space on one.
Name mentions: somebody said your name in chat. The ping is a sound, and on a busy server the line itself scrolls away in under a second.
What your players choose
Everything is per-player and opt-out. /soundsight opens the screen; /soundsight threat off is the same thing in one line; /soundsight list is the whole state as text.
The master switch and the per-cue choices are separate on purpose. Turning SoundSight off and back on restores exactly what a player had, because somebody who spent time choosing which cues they need should never have that thrown away by a toggle that reads like it should be reversible.
Deleting a player’s entry from players.yml is what resets them to your defaults.
Tuning the radar
scan.radius is capped at 48 blocks whatever you write. Bigger is not better: past about 24 the bar fills with mobs that are never going to reach the player, and a cue that has to be read carefully stops being read at all.
scan.period-ticks defaults to 5, which is four times a second — responsive enough for a creeper and cheap enough not to notice. It is only read at startup, and /soundsight reload says so rather than pretending a change took effect.
scan.max-threats defaults to three. More turns a glanceable line into something you have to stop and read.
worlds.excluded switches SoundSight off completely in the worlds you name, and takes any boss bar down on the way in. A threat radar in a lobby is only clutter.
Permissions
soundsight.use defaults to everyone, and it is the setting that decides whether this plugin does its job. A player who needs it cannot ask you for a permission they do not know exists. Set it to op if you would rather opt people in deliberately, but do it knowingly.
soundsight.admin covers /soundsight status; soundsight.reload covers the reload. Both default to op.
Commands are not declared in plugin.yml, and that is deliberate. A permission on a plugin.yml command makes Paper hide it from anyone lacking the node, so a player without it gets unknown command and cannot tell a missing permission from a broken plugin. Here the command stays visible and refuses by name.
Commands
| Command | What it does | Permission |
|---|---|---|
/soundsight | The settings screen — a native form on Bedrock, a chest menu otherwise. | soundsight.use |
/soundsight test | Show every cue you have on, once. Nothing in it is real. | soundsight.use |
/soundsight (cue) [on|off] | Turn one cue on or off in a single line, without opening anything. | soundsight.use |
/soundsight on · /soundsight off | The master switch. Per-cue choices are kept for when you turn it back on. | soundsight.use |
/soundsight list | Every cue, whether you have it, and what it does — as text. | soundsight.use |
/soundsight status | What the server is running with, and whether the boss-bar channel is healthy. | soundsight.admin |
Still stuck?
Post in Discord with your server version and the relevant part of the log. That is almost always enough to get a straight answer the same day.
Get help