Match this symptom
A JAR placed in plugins/ or mods/ fails to load, a Java client reports missing content, or a Bedrock console/mobile client cannot join the Java server.
The answer first
Identify the server family before moving any files: vanilla loads data packs but not Paper plugins or Fabric/NeoForge mods; Paper uses plugins/, while Fabric and NeoForge use their loader and mods/. Match the exact game, loader, package and dependency versions, and determine whether the mod is server-only or client-required. Bedrock devices cannot natively join Java—Geyser is a separate third-party translator with its own UDP listener, authentication and supported-version limits, not a compatibility checkbox.

Take a recovery point before removing content
A failed loader start is often reversible; saving a world after content removal may not be. Stop the server cleanly, preserve the whole world and exact server/loader/plugin/mod/config set, and reproduce on a copy.
- 1If the server still starts, run save-all flush and stop; otherwise confirm the process is fully exited.
- 2Copy the server root and record every JAR filename, version/hash and current Java executable.
- 3Preserve logs/latest.log from the failing start before another restart rotates evidence.
- 4Do not load the production world without a content package that owns persistent blocks/items/entities unless its removal procedure says it is safe.
Identify the server family
- Vanilla: official Mojang JAR; world data packs under <level-name>/datapacks; no plugins/ or mod-loader contract.
- Paper: Paper server JAR; plugin JARs at the root of plugins/; verify with Paper’s log/plugin output.
- Fabric: Fabric Loader; mods/ content must match Java Edition, Minecraft version and Fabric loader, often with Fabric API.
- NeoForge: installed server launcher/run script and mods/; use a modpack’s server pack when provided.
Read the first loader error
- 1Look near the beginning of logs/latest.log for the package name and the first missing dependency, wrong game version, wrong loader or invalid metadata error.
- 2Download only from the package/project’s trusted distribution and choose the artifact explicitly labeled for the selected platform.
- 3Install required dependencies at their compatible versions and remove duplicate old/new copies from the active folder.
- 4Restart normally; Paper’s project documentation discourages general live reload for plugin updates.
Translate common log evidence into the right branch
Treat the first package-specific error as the branch point. A message naming an incompatible Minecraft or loader version means the artifact was built for another target. A missing dependency or class should send you to the package’s declared dependency list and compatible releases, not to random duplicate JARs. An invalid plugin/mod descriptor or wrong entry point often indicates the file belongs to another server family or is not the intended server artifact.
If the server reaches readiness and only a client is rejected for a missing/incompatible channel, inspect whether the selected content is client-required. If the process stops while loading persistent registry content, keep the production world closed and restore the exact matched package set on a copy. The final wrapper exception is often less useful than the first named plugin, mod or dependency line above it.
- Artifact ignored with no platform metadata: verify Paper plugin versus Fabric/NeoForge mod packaging.
- Dependency/version rejection: use the project’s compatibility declaration for this Minecraft/loader release.
- Duplicate package identifier: remove old/new collision only from the disposable copy and retain both original files elsewhere.
- Client channel mismatch after server readiness: compare the documented server-only/client-required status and exact client profile.
Determine whether clients need the same mod set
A server-only optimization can allow an unmodified Java client, while content/gameplay mods often require an exact client loader and package set. The mod or modpack documentation—not its filename—decides this.
- Test a clean Java client only when the package states it is server-side.
- For a modpack, distribute its intended client profile and keep the server pack separate.
- Do not use a Paper compatibility plugin to conceal a Fabric/NeoForge server requirement without explicit support.
- Retest world persistence after adding and after the supported removal workflow on a copy.
Separate Bedrock translation from Java extensions
Mojang’s native editions use different servers. Geyser translates Bedrock traffic into a Java client connection and normally adds a UDP Bedrock port; it does not convert Java-only client mods, redstone/mechanics or the underlying Java world into Bedrock behavior.
- Check Geyser’s current supported Java and Bedrock versions on the day of deployment.
- Design Floodgate/account linking and whitelist identity deliberately; never weaken a publicly reachable backend by guesswork.
- Expose only the documented Geyser Bedrock UDP listener plus Java TCP gameplay as intended, not every management port.
- Validate one Java and one actual Bedrock client, including inventory/name/access behavior, before advertising cross-play.
Test one variable at a time on a copied world
- 1Baseline the copied world with the previously matched server family and content set; confirm readiness and one existing Java identity.
- 2Change only the target plugin/mod/loader artifact and its explicitly required dependencies. Preserve the before/after file manifest and first launch log.
- 3Run the package’s representative feature, then save-all flush, stop and restart. A green startup alone does not prove persistent content survived.
- 4For client-required mods, repeat with the exact intended client profile and a deliberately clean client to document the expected rejection boundary.
- 5For Geyser, test native Java TCP and the separately configured Bedrock UDP path, then verify translated identity/whitelist and inventory behavior with a real Bedrock client.
Rollback by restoring the entire compatibility set
Stop every process using the candidate before rollback. Restore the copied world together with the prior server JAR/loader, plugin or mod set, dependencies and configuration. Removing only the last JAR after it wrote persistent blocks, items, entities or registry data may not recreate the earlier state. Keep the failed copy and log isolated for diagnosis.
Do not use a production live reload to test upgrades, and do not weaken online-mode, proxy forwarding or whitelist identity merely to make a translated client connect. Security/identity changes require their own reviewed design and an explicit Java-plus-Bedrock acceptance test.
Maintain a compatibility inventory
- Record Minecraft, Java, server family, loader, every extension/dependency version and local hash beside each recovery point.
- Recheck Paper, Fabric, NeoForge and Geyser project documentation on their own release cadence; they do not become compatible merely because Minecraft starts.
- Keep modpack server artifacts separate from client distributions and document which content players must install.
- Re-run startup, representative feature, persistence/restart and client matrix checks before changing the article’s verified version.
- Remove obsolete compatibility claims when a project drops a game release; do not preserve a stale supported-version promise for search traffic.
