Troubleshooting
Most problems show up as a line in the console of the proxy or of a backend. Find the line on this page for its cause and fix. Lines are shown without the prefix the console adds. A part in angle brackets, such as <name> or <reason>, stands for a name, an address, a number or an error text. The hub is the port the proxy listens on for backends, see Hub Port and Firewall.
General Guidelines
- Read both consoles. When the proxy refuses a backend, the backend only logs
connection closed. The proxy console says why. - Compare with a healthy start. Checking That It Works shows the lines you should see.
- Restart after editing a config file. Both plugins read their config only at startup, see Paper Config and Velocity Config.
Startup Problems
No Secret on the Proxy
- Proxy (error):
No secret: use modern forwarding with a forwarding.secret file or set 'secret' in plugins/mythicproxy/config.json, MythicProxy is disabled - Cause:
secretin config.json is empty, and the proxy could not read Velocity's forwarding secret: velocity.toml is not in the folder the proxy was started from, or its secret file is missing or empty. - Fix: Start the proxy from the folder that holds velocity.toml, or set
secretin config.json and the same value on every backend. See Secret.
No Secret on a Backend
- Backend (error):
No secret: enable Velocity modern forwarding in config/paper-global.yml or set 'secret' in plugins/MythicProxy/config.yml, disabling MythicProxy - Cause: The backend found no secret:
secretin config.yml is empty and Paper's Velocity forwarding is not set up. - Fix: Turn on Velocity modern forwarding with the proxy's secret, or set
secretin config.yml to the proxy's secret, and restart. See Secret.
The Configuration Cannot Be Loaded
- Proxy (error, with the cause below it):
Failed to load the configuration, MythicProxy is disabled - Cause: The proxy could not read config.json, velocity.toml or the secret file, or config.json holds a wrong value: invalid JSON, a
storageother thanSQLITEorMYSQL, abindwithout a port, or text where a number belongs. - Fix: Correct config.json and restart the proxy. See Velocity Config.
Storage Cannot Start
- Proxy (error, with the cause below it):
SQLITE storage failed to start, MythicProxy is disabledorMYSQL storage failed to start, MythicProxy is disabled - Cause: The database could not be opened. For SQLite, the folder of
sqlite-filemust exist and be writable. For MySQL, the server must accept connections from the proxy, the database must already exist and the user must be allowed to create tables. - Fix: Correct the storage settings and restart the proxy. See Storage.
The Hub Cannot Open Its Port
- Proxy (error, with the cause below it):
Hub failed to listen on <bind>, MythicProxy is disabled - Cause: Another program uses the port in
bind, or the address inbinddoes not belong to this machine. - Fix: Free the port or change
bind, and restart the proxy. Backends that saved the old address keep trying it, see Backends Use the Wrong Proxy Address.
MythicMobs Premium Not Detected
- Backend (warning):
MythicMobs Premium not detected: the MythicMobs mechanics, conditions, placeholders and triggers are disabled - Cause: The backend runs the free version of MythicMobs. MythicProxy then adds no mechanics, conditions, placeholders, triggers,
eventsskills or signals, and MythicMobs logsFailed to load custom mechanic <NAME>orFailed to load custom condition <NAME>for skill lines that use them. - Fix: Install MythicMobs Premium on the backend and restart.
/mm versionshowsIs Premium: Yesonce it is installed.
MythicRPG Premium Not Detected
- Backend (warning):
MythicRPG Premium not detected: the MythicRPG profile scopes and placeholders are disabled - Cause: MythicRPG is installed but is not the Premium version, or it did not enable. Lines with
scope=profileorscope=targetprofileare then invalid, and theprofilenetvarplaceholders do not work. - Fix: Install MythicRPG Premium on the backend and restart, or use the
casterandtargetscopes. See MythicRPG Profile Variables.
MythicRPG Cannot Be Hooked
- Backend (warning, with a stack trace):
Could not hook into MythicRPG: the MythicRPG profile scopes and placeholders are disabled - Cause: The installed MythicRPG version does not have what this MythicProxy version expects. The stack trace names what is missing.
- Fix: Use MythicRPG and MythicProxy versions that work together, or report the stack trace.
A Backend Cannot Read Its Proxy List
- Backend: an error while MythicProxy enables, and no
MythicProxy enabledline - Cause: An entry in
proxiesin config.yml has a port that is not a whole number from 0 to 65535, for exampleproxy.example.com:abc. - Fix: Correct the entry and restart. See How Backends Find the Proxy.
Connection Problems
A Backend Keeps Reconnecting
- Backend (warning):
Proxy link <proxy> down (<reason>), retrying in 5s - Cause:
<proxy>is the proxy's id, or its address if the backend has not connected to it yet. One such line when a proxy restarts is normal. If it keeps coming, look up<reason>:
| Reason | Cause | Fix |
|---|---|---|
connection closed |
The proxy refused the backend, or it is stopping. | Read the proxy console: Wrong Secret or Backend Name Not Resolved. |
| A Java network error, such as a refused connection or a timeout | The hub cannot be reached: the proxy is down, MythicProxy is disabled on it (Startup Problems), the address or port in proxies is wrong, or a firewall blocks it. |
Look for Hub listening on in the proxy console, then check the entry in proxies and the firewall. |
Only a host name, while <proxy> reads <host>/<unresolved>:<port> |
The host name could not be looked up. A backend looks up a name only once. | Fix the name or its DNS record, or use the IP address, and restart the backend. |
unsupported protocol version <n> |
The proxy and the backend run different MythicProxy versions. The proxy logs nothing. | Use the same version everywhere. |
proxy '<id>' failed to prove it knows the secret |
The server at that address is not your proxy. | Check the entry in proxies. |
Any other reason, such as expected CHALLENGE, got <TYPE>, proxy rejected the connection with <TYPE>, invalid frame length <n> or malformed envelope |
The address is not a MythicProxy hub, or the hub runs another version. | Point the entry at the hub port and use the same version everywhere. |
Wrong Secret
- Proxy (warning):
Rejected backend '<name>' from <address>: wrong secret - Cause: The backend and the proxy use different secrets.
<name>is the backend'sserver-name, and empty when it has none. - Fix: Use the same secret on both sides. A
secretset in config.yml or config.json takes priority over the forwarding secret, so remove an old one. See Secret.
Backend Name Not Resolved
- Proxy (warning):
Cannot identify the backend connecting from <address> with Minecraft port <port>: <n> match(es) among <servers>. Set 'server-name' in its plugins/MythicProxy/config.yml - Cause: The backend has no
server-name, and the proxy did not find exactly one server in velocity.toml with the backend's address and Minecraft port (<servers>lists them asname=host:port). The proxy closes the connection. - Fix: Set
server-nameon the backend to its name in velocity.toml and restart the backend. See Server Names.
Server Name Not Registered
- Proxy (warning):
Backend '<name>' from <address> is not listed in velocity.toml; lifecycle events will not reach it - Cause: The backend's
server-nameis not a server in velocity.toml. The backend still connects and shares variables, but the join, switch and quit triggers andeventsskills never run on it, and signals that other servers send to its players do not arrive. - Fix: Use the server name from velocity.toml, or leave
server-nameempty, and restart the backend. See Server Names.
Backends Use the Wrong Proxy Address
- Proxy (info):
Backends will be told to reach this proxy at <ip>:<port>; set 'advertise' in config.json if that address is not reachable from them - Proxy (warning):
Could not determine an address to advertise; backends will be told to use 127.0.0.1:<port>, set 'advertise' in config.json - Backend:
Proxy '<proxy>' announced its hub at <address>, connecting(info), thenProxy link <proxy> down (<reason>), retrying in 5s(warning) again and again. - Cause: With
advertiseempty, the proxy picks an address itself. That can be one your backends cannot reach, for example on another network adapter, behind NAT or in Docker, or127.0.0.1, which works only on the same machine. Backends save every announced address and never remove one. - Fix: Set
advertiseon the proxy and restart it. Then stop each backend that saved a wrong address, remove that entry fromproxiesin its config.yml and start it again. See How Backends Find the Proxy.
A Hub Announcement Is Ignored
- Backend (warning):
Ignoring hub announcement with invalid address '<address>'orIgnoring malformed hub announcement carried by <player> - Cause: In the first case, the port in
advertiseon the proxy is not a whole number from 0 to 65535. In the second, a message on the plugin channelmythicproxy:hubwas not a valid announcement, for example from another MythicProxy version. - Fix: Correct
advertiseand restart the proxy, and run the same MythicProxy version everywhere.
Two Backends Use the Same Name
- Proxy:
Backend '<name>' connected from <address>(info), thenBackend '<name>' disconnected (<reason>)(warning), over and over, about every 5 seconds. A singledisconnectedline is normal when a backend stops or restarts. - Cause: The proxy keeps one connection per backend name, and a new connection closes the old one with the same name. Two backends have the same name, for example from a copied config.yml with
server-nameset, or one backend reaches the same proxy through two entries inproxies. - Fix: Give each backend its own
server-name, or leave it empty. For two entries, stop the backend and remove the entry that differs from the address the proxy announces. See How Backends Find the Proxy.
A Backend Is Known Under Two Names
- Backend (warning):
Proxy '<proxy>' calls this backend '<new name>' but it is already known as '<old name>' - Proxy (warning, for each message):
Backend '<name>' sent a message claiming origin '<origin>'; dropped - Cause: The backend has no
server-nameand took its name from a proxy. Later a proxy called it something else, for example after a rename in velocity.toml while the backend ran, or because two proxies list it under different names. The backend keeps the first name, so that proxy drops its messages. - Fix: Set
server-nameto the name in velocity.toml, use the same server name on every proxy, and restart the backend.
The Hub Cannot Accept a Connection
- Proxy (warning):
Hub accept failed: <reason> - Cause: The hub port reported an error while waiting for a backend. This does not happen in normal operation.
- Fix:
<reason>is the Java error text and names the problem.
Database Problems
Database Errors While Running
- Proxy (warning, with a stack trace):
Storing a variable from '<server>' failed,Adding to a variable from '<server>' failed,Deleting a variable from '<server>' failed,Loading variables for '<server>' failedorExpired variable cleanup failed. The plugin API addsLease '<name>' for '<server>' failed,Storing blob '<name>' from '<server>' failedandLoading blob '<name>' for '<server>' failed. - Cause: A database operation failed, and nothing retries it:
- A failed store or delete still reaches the connected backends, but not the database, so a server that starts or reconnects later loads the old value.
- A failed add sends no new total, so only the backend that added shows its own estimate.
- A failed load leaves the backend without those variables. If it was a joining player's load, their join and switch triggers never run.
- A failed cleanup is tried again at the next interval.
- Fix: Repair the database (the stack trace names the problem), then set the affected variables again. See Storage.
Skill Problems
Invalid Mechanic or Condition Lines
- Backend (warning, when MythicMobs loads the skill):
| Console message | Used by |
|---|---|
Invalid <name> line: needs var=, a supported type= and value= |
networkVariableSet |
Invalid <name> line: needs var= and a numeric type= |
networkVariableAdd |
Invalid <name> line: needs var= |
networkVariableUnset, networkVariableIsSet, networkVariableInRange |
Invalid <name> line: needs var= and value= |
networkVariableEquals |
Invalid <name> line: needs signal= |
networkSignal |
- Cause:
<name>is the mechanic or condition name as written in your line. A line is invalid when a required attribute is missing, whenscope=is not a valid scope (profileandtargetprofileneed MythicRPG Premium), or whentype=is not a supported type. All of these give the same message, soneeds var=can also mean a wrongscope=ortype=. An invalid mechanic does nothing, and an invalid condition is always false. - Fix: Correct the line and run
/mm reload. See Variable Scopes and Variable Types.
A Variable Cannot Be Created
- Backend (warning, each time the mechanic runs):
Cannot create a <TYPE> network variable '<name>' from value '<value>' - Cause: The value does not fit the type, so nothing is stored or sent.
<TYPE>isINTEGERwhen the line has notype=. A common case is a placeholder that prints a decimal such as20.5into an INTEGER variable. - Fix: Make the value match the type, or change
type=. See Variable Types.
A Skill Stops at a LOCATION Variable
- Backend (error, each time the skill runs):
Couldn't execute skill '<skill>': Enable debugging for a stack trace. - Cause: MythicMobs logs this when an error stops a skill. One cause is a networkVariableSet line with
type=LOCATIONwhose value names a world this backend does not have. The rest of the skill does not run, and nothing is stored or sent. - Fix: Use a world that exists on every backend that runs the skill. See Variable Types.
Unknown Skill in Config
- Backend (warning, each time the event fires):
Unknown MythicMobs skill '<skill>' in config - Cause: A skill listed under
eventsin config.yml does not exist on this backend. A skill that exists but whose conditions fail logs nothing. - Fix: Correct the name and restart, or create the skill on this backend and run
/mm reload. See Events.
A Placeholder Without a Variable Name
- Backend (error):
Failed to construct placeholder global.netvar, or the same withcaster.netvar,target.netvar,caster.profilenetvarortarget.profilenetvar - Cause: MythicMobs logs this for a placeholder with no variable name after
netvar, for example<global.netvar>. - Fix: Add the name, as in
<global.netvar.boss_kills>. See Network Variable Placeholders.
Message Problems
Messages Over the Size Limit
- Backend or proxy (warning):
Not sending: <TYPE> message is <N> bytes, limit is 1048576 - Cause: A message was larger than the limit, and nothing retries it.
<TYPE>tells what it was:VAR_SETa variable value,SIGNALa signal with its payload,SYNC_SNAPSHOTa page of variables the proxy sends to a backend, which then misses those variables. A backend keeps its own change, and the mechanic still reports success. - Fix: Keep values and payloads small, and split large data over several variables.
Dropped or Ignored Messages
- Backend (warning):
Dropped message from <proxy>: <reason>orIgnoring <TYPE> from <origin>: <reason> - Proxy (warning):
Dropped message from '<server>': <reason>orIgnoring <TYPE> from '<server>': <reason> - Cause: A message could not be read, for example
invalid VAR_SET payload, which happens when the two sides run different MythicProxy builds. The message is skipped and the connection stays up. - Fix: Run the same MythicProxy version on the proxy and on every backend.
A Message Cannot Be Handled
- Backend (error, with a stack trace):
Failed to handle <TYPE> from <origin> - Proxy (error, with a stack trace):
Failed to handle <TYPE> from '<server>' - Cause: An error happened while handling a message: a bug in MythicProxy or, on a backend, in a plugin that uses the plugin API.
- Fix: Read the stack trace. If it names a plugin that uses the MythicProxy API, fix that plugin. Otherwise report the stack trace.
A Channel Message Has No Target
- Proxy (warning):
Dropped a CHANNEL message from '<server>' without a target - Cause: A plugin on that backend called
sendof the plugin API without a target backend. The call returnedtrue, but the proxy forwards a channel message only to a named backend. - Fix: Pass the receiving backend's name as the target.
Nothing in the Console
Join, Switch or Quit Triggers Do Not Run
~onNetworkJoinand~onServerSwitchfire on the player, not on mobs, see Mob Triggers and Player Triggers.~onNetworkQuitfires on the mobs of the server the player left, see onNetworkQuit.- The backend was not connected when it happened, for example the first join after installing, or the player's data took too long to load. See Missed Events.
- The backend's name is not its server name in velocity.toml (Server Name Not Registered), or it equals the proxy's
proxy-id(A Backend Ignores the Proxy). - MythicMobs Premium is missing (MythicMobs Premium Not Detected).
A Placeholder Prints UNDEFINED
See Unset Variables: it explains when a placeholder has no value and how to add a default.
A Signal Reaches Nobody
networkSignal reports success even when nobody receives the signal. Check:
- the target:
server:NAMEmust match the server name exactly, including letter case, and a player target must be online, see Target Attribute - the receiver: on mobs,
~onNetworkSignalfires only for signals sent toallor to a server, see onNetworkSignal - MythicMobs Premium on the receiving backend (MythicMobs Premium Not Detected)
A Backend Ignores the Proxy
- Console: no line
- Cause: The backend's server name equals the proxy's
proxy-id(defaultproxy), for example a server namedproxyin velocity.toml. The backend then drops every message the proxy itself sends: saved variables, the player list, add totals, and join, switch and quit events. - Fix: Rename the server or change
proxy-id, and restart. See Server Names.