Minecraft ยท Server setup

How to set up a Minecraft server from scratch

Full setup walkthrough for a Minecraft Java Edition dedicated server: pick the right flavor (Vanilla, Paper, Spigot, Purpur, Fabric, Forge), configure server.properties, tune performance (view-distance, simulation-distance, Paper's config/paper-global.yml), set up ops and whitelist, install plugins or mods, wire up a BungeeCord / Velocity proxy for multi-server networks, and fix the common errors. Separate section for Bedrock Edition.

What you need first

  • An active Minecraft plan on Fatality Servers. See our Minecraft hosting plans.
  • A Minecraft Java Edition license per player (for Bedrock: a Bedrock copy each). The server binary itself is free.
  • Enough RAM โ€” Minecraft is Java-based and hungry. Per-player rule-of-thumb: 100 MB base + 50 MB per concurrent player (vanilla), 200 MB + 100 MB per player (plugin-heavy Paper), 1 GB + 200 MB per player (large modpack like ATM10 or GT:NH).
  • A basic SFTP client (FileZilla, WinSCP) and a text editor that won't mangle YAML (VS Code, Notepad++).
๐Ÿ’ก

Sizing note: view-distance & mob density matter more than raw player count. A vanilla 10-player server on view-distance=10 uses 2-3 GB; bumping to view-distance=32 pushes it past 6 GB. Modpacks like All The Mods 10 want 10+ GB just to boot. If you plan to run 1.20.x+ modded, our Community plan is the floor.

Pick a server flavor

"Minecraft server" actually means half a dozen different binaries depending on what you want to do:

Flavor Use case Plugins? Mods? Perf
VanillaReference / small friends serverโŒโŒBaseline
PaperCommunity survival / lobbies / most serversโœ… Bukkit/SpigotโŒ๐Ÿ”ฅ Fastest vanilla-compatible
SpigotOlder/legacy setups โ€” use Paper insteadโœ…โŒFair
PurpurPaper + extra configurable gameplay tweaksโœ… (Paper-compat)โŒ~Paper
FoliaVery large survival / spreads ticks across coresโœ… (Folia-specific)โŒOnly worthwhile 200+ players
FabricModern mod loader (Fabric mods)โŒ (unless Bukkit bridge)โœ… FabricVery good
ForgeTraditional mod loader (most modpacks)โŒ (unless hybrid)โœ… ForgeGood
NeoForgeCommunity fork of Forge (1.20.2+)โŒโœ… NeoForgeGood
QuiltFabric fork with extra QoLโŒโœ… Fabric-compatGood
Mohist / ArclightHybrid: plugins + Forge mods in oneโœ…โœ…Compromised
๐Ÿ’ก

Picking for most people: if you want plugins, use Paper. If you want mods, use Forge for most modpacks and Fabric for newer ones. Avoid Mohist / Arclight hybrid loaders unless you specifically need both โ€” the stability cost isn't worth it for most servers.

Deploy the server (1-click)

Our Minecraft template asks you which flavor + version on first deploy, downloads the matching jar (PaperClip for Paper, official Mojang jar for Vanilla, installer for Forge, etc.), writes a starter server.properties, accepts the EULA, and opens TCP 25565 on your plan's IP.

  1. Pick the Minecraft template at checkout

    On the Minecraft hosting page, pick a plan sized for your use case. Starter = 4-10 vanilla players. Community = 20-40 Paper survival with QoL plugins. Flagship = 100+ slot public or heavy modpack.

  2. Pick flavor + version

    Dropdown: Vanilla / Paper / Purpur / Fabric / Forge / NeoForge / Mohist + MC version (1.8 through latest). Swap anytime from the panel โ€” version changes preserve your world.

  3. Accept the EULA

    Mojang requires you to accept the Minecraft EULA. Panel does this automatically by setting eula=true in eula.txt. First boot without it: server refuses to start.

  4. Wait for first-boot world generation

    On first run, the server generates a 256ร—256 spawn chunk area โ€” takes 30-90 seconds depending on flavor and seed. Console ends with Done (12.345s)! For help, type "help".

File layout & where things go

/
โ”œโ”€โ”€ server.jar                  โ€” the Minecraft server binary (Paper/Vanilla/etc.)
โ”œโ”€โ”€ server.properties           โ€” main config
โ”œโ”€โ”€ eula.txt                    โ€” Mojang EULA acceptance
โ”œโ”€โ”€ ops.json                    โ€” operator list (admins)
โ”œโ”€โ”€ whitelist.json              โ€” allow-list of players
โ”œโ”€โ”€ banned-players.json         โ€” player bans
โ”œโ”€โ”€ banned-ips.json             โ€” IP bans
โ”œโ”€โ”€ usercache.json              โ€” UUID โ†” name cache
โ”œโ”€โ”€ world/                      โ€” overworld
โ”‚   โ”œโ”€โ”€ level.dat
โ”‚   โ”œโ”€โ”€ playerdata/
โ”‚   โ”œโ”€โ”€ region/                 โ€” chunk data (.mca files)
โ”‚   โ””โ”€โ”€ data/
โ”œโ”€โ”€ world_nether/               โ€” Nether dim
โ”œโ”€โ”€ world_the_end/              โ€” End dim
โ”œโ”€โ”€ logs/                       โ€” rolling log files
โ”‚   โ””โ”€โ”€ latest.log
โ”œโ”€โ”€ plugins/                    โ€” Paper/Spigot plugins (.jar each)
โ”œโ”€โ”€ mods/                       โ€” Forge/Fabric mods (.jar each)
โ”œโ”€โ”€ config/                     โ€” per-plugin / per-mod configs
โ”‚   โ”œโ”€โ”€ paper-global.yml        โ€” Paper's new global config (1.19+)
โ”‚   โ”œโ”€โ”€ paper-world-defaults.yml
โ”‚   โ””โ”€โ”€ <mod-name>/
โ”œโ”€โ”€ bukkit.yml                  โ€” Bukkit core config (CraftBukkit legacy)
โ”œโ”€โ”€ spigot.yml                  โ€” Spigot core config
โ””โ”€โ”€ banned-names.txt
โš ๏ธ

The world/ folder IS your save. Don't delete it unless you want a fresh world. Don't edit it while the server is running (corruption risk). Don't FTP-drag a live world from Windows to Linux without stopping the server first โ€” filesystem locks on session.lock will fight you.

Core server.properties settings

Plain key=value pairs. The values most people tweak:

motd=A Minecraft Server
server-port=25565
max-players=20
online-mode=true
enforce-secure-profile=true

gamemode=survival
difficulty=normal
hardcore=false
pvp=true
allow-flight=false
allow-nether=true
force-gamemode=false
spawn-protection=16
spawn-monsters=true
spawn-animals=true
spawn-npcs=true

view-distance=10
simulation-distance=10
entity-broadcast-range-percentage=100
network-compression-threshold=256

level-name=world
level-type=minecraft:normal
level-seed=
generate-structures=true

white-list=false
enforce-whitelist=false

enable-rcon=true
rcon.password=change-me-very-strong
rcon.port=25575

enable-query=false
query.port=25565

# Paper-specific (ignored on vanilla)
use-native-transport=true
prevent-proxy-connections=false

Values to know:

  • motd โ€” the text shown in the server list. Supports ยง color codes. 59-char limit.
  • max-players โ€” slot count. Match your plan.
  • online-mode โ€” keep true for public servers; checks Mojang auth. false = "cracked" mode, allows pirated clients but breaks skins/auth on some plugins.
  • view-distance โ€” chunk radius sent to each client. Every +1 increases memory use exponentially. 10 is Mojang default; 16 is common for community servers; 32 is lag city.
  • simulation-distance โ€” how far from players entities/redstone tick. Usually equal or slightly less than view-distance.
  • difficulty โ€” peaceful, easy, normal, hard. Peaceful disables mob spawns entirely.
  • level-seed โ€” leave empty for random. Paste a seed string to regenerate a specific world.
  • enable-rcon + rcon.password โ€” enable for remote admin tools (RCON, Discord bots).
  • network-compression-threshold โ€” packet size above which gzip kicks in. 256 for most servers; set to -1 to disable if you're running Velocity with TCP offload.

Performance tuning (Paper)

Paper is the performance-tuned fork most servers run. Its real config lives in config/paper-global.yml and config/paper-world-defaults.yml (since 1.19). Highlights to tune:

# config/paper-world-defaults.yml (excerpt)
chunks:
  prevent-moving-into-unloaded-chunks: true
  delay-chunk-unloads-by: 10s

collisions:
  max-entity-collisions: 8

entities:
  armor-stands:
    do-collision-entity-lookups: false
    tick: false
  behavior:
    disable-chest-cat-detection: true
    phantoms-do-not-spawn-on-creative-players: true
  spawning:
    despawn-ranges:
      ambient:
        hard: 128
        soft: 32
      animal:
        hard: 128
        soft: 32
      axolotls:
        hard: 128
        soft: 32
      creature:
        hard: 128
        soft: 32
      misc:
        hard: 128
        soft: 32
      monster:
        hard: 128
        soft: 32

environment:
  optimize-explosions: true
  treasure-maps:
    enabled: true
    find-already-discovered:
      loot-tables: default
      villager-trade: false

hopper:
  cooldown-when-full: true
  disable-move-event: false

lootables:
  auto-replenish: false

spawn:
  allow-using-signs-inside-spawn-protection: false
  keep-spawn-loaded: true
  keep-spawn-loaded-range: 10
  per-player-mob-spawns: true

Three tuning knobs that move the needle most:

  1. per-player-mob-spawns: true โ€” distributes mob cap per-player instead of globally. Huge for multi-base survival servers.
  2. despawn-ranges โ€” lower both values to reduce entity count. Default is already ok; some modpacks need aggressive cuts.
  3. view-distance / simulation-distance โ€” the single biggest perf lever. Lower simulation-distance first (to 6-8) if TPS drops below 18.
๐Ÿ’ก

JVM flags matter. Use Aikar's Flags for startup. They tune the G1 garbage collector for Minecraft's allocation pattern and routinely cut GC pause times by 50%+. Our Paper template ships with Aikar's flags enabled by default.

Ops, whitelist, bans

Ops (admins)

Grant operator permissions via console:

/op YourUsername

Or edit ops.json directly:

[
  {
    "uuid": "f7c77d99-9f15-4a66-a87d-c4a51ef30d19",
    "name": "YourUsername",
    "level": 4,
    "bypassesPlayerLimit": true
  }
]

Levels: 1 (spawn protection bypass), 2 (commands like /kick, /gamemode), 3 (/ban, /op), 4 (all commands including /stop). Most admins run level 4.

Whitelist

/whitelist on
/whitelist add YourFriend
/whitelist remove someone
/whitelist list

Or flip white-list=true in server.properties and edit whitelist.json directly. Whitelisted servers stay public in the server list but reject non-whitelisted joins.

Bans

/ban PlayerName Reason
/ban-ip 1.2.3.4 Reason
/pardon PlayerName
/pardon-ip 1.2.3.4

Plugins (Paper/Spigot) & mods (Fabric/Forge)

Paper/Spigot plugins

Download .jar files from Modrinth, SpigotMC Resources, or Paper's Hangar. Drop into plugins/, restart. On boot, Paper creates plugins/<PluginName>/config.yml for each.

Essential plugins for most community servers:

  • EssentialsX โ€” homes, warps, kits, tpa, economy foundation
  • LuckPerms โ€” group permissions, prefixes, suffixes (replaces legacy PEX)
  • Vault โ€” economy/perms abstraction, required by many plugins
  • WorldEdit + WorldGuard โ€” world editing + region protection
  • CoreProtect โ€” block/item logger, /co inspect is a lifesaver
  • DiscordSRV โ€” Discord โ†” server chat bridge
  • PlaceholderAPI โ€” plugin-interop placeholder system
  • ViaVersion + ViaBackwards โ€” lets older/newer clients connect to your server

Forge / NeoForge mods

  1. Deploy the Forge flavor

    Panel โ†’ set flavor to Forge (or NeoForge for 1.20.2+) + Minecraft version. The installer runs automatically.

  2. Upload .jar files to mods/

    From CurseForge or Modrinth, grab the Forge-compatible .jar for your MC version. Drop into mods/, restart.

  3. Match client mods

    Clients must have the exact same mods + versions. Tell players to install them (we recommend Modrinth's App or CurseForge's for easy one-click syncs), or distribute a modpack manifest.

Fabric mods

Same workflow as Forge, but use Fabric-compatible mods. The overlap is: Fabric mods are NOT Forge-compatible and vice-versa. Fabric API is a required dependency for most Fabric mods โ€” drop it in mods/ first.

Running a prebuilt modpack (ATM, FTB, Create, GT:NH)

Our panel has a Modpack Installer that fetches directly from CurseForge's API โ€” see our separate modpack install guide. Supports all CurseForge modpacks by ID.

โš ๏ธ

Don't mix plugin and mod ecosystems casually. Running Mohist (Forge + Bukkit plugins) works but breaks on updates and has worse perf than pure-Forge or pure-Paper. Unless you NEED both, pick one lane. If you must hybrid, use Mohist on stable MC versions only โ€” never on the latest release the same week it drops.

BungeeCord / Velocity proxies

Running more than one Minecraft server (lobby โ†’ survival โ†’ minigames โ†’ creative)? Put a proxy in front. Clients connect to the proxy; it routes them between backend servers invisibly.

Velocity (recommended)

Velocity is PaperMC's modern proxy โ€” faster, better-documented, actively maintained. Install steps:

  1. Spawn a Velocity instance

    On our panel, add a sibling under your subscription and pick Velocity as the template. Tiny plan (512 MB RAM) is enough.

  2. Configure velocity.toml

    bind = "0.0.0.0:25565"
    motd = "&6My Network"
    show-max-players = 1000
    online-mode = true
    player-info-forwarding-mode = "modern"
    
    [servers]
    lobby = "127.0.0.1:25566"
    survival = "127.0.0.1:25567"
    minigames = "127.0.0.1:25568"
    try = ["lobby"]
  3. Configure each backend server

    On every Paper backend, set online-mode=false in server.properties and enable Velocity modern forwarding in config/paper-global.yml:

    proxies:
      velocity:
        enabled: true
        online-mode: true
        secret: "copy-this-from-velocity/forwarding.secret"

    Backends now trust the proxy for auth โ€” never expose them on a public port.

BungeeCord (legacy)

Still works, still maintained by SpigotMC. Use only if you're running plugins that need BungeeCord-specific APIs and haven't been ported to Velocity.

Bedrock Edition notes

Bedrock is a different binary entirely โ€” Mojang ships bedrock-server separately. On our platform, pick the Bedrock template instead of Java. Key differences:

  • Port: UDP 19132 (not TCP 25565).
  • Config file: server.properties (same name, different values).
  • No plugins in the Bukkit sense. Scripts are authored in JavaScript using Bedrock's scripting API.
  • Hybrid Java + Bedrock access: use Geyser (a Paper plugin) to let Bedrock clients connect to your Java server.

For most server owners, running Java + Geyser + Floodgate on a Paper server is better than running Bedrock natively โ€” you get plugin support, cross-play, and one world for both editions.

Connect and test

  1. Launch Minecraft on your PC

    Main menu โ†’ Multiplayer โ†’ Add Server.

  2. Enter your server address

    YOUR-SERVER-IP (default port 25565) or your-ip:port for custom ports. If you've pointed a domain, enter that instead.

  3. Op yourself on first join

    From the panel console:

    op YourUsername

    Rejoin if you were already in โ€” op status takes effect on next login.

  4. Smoke-test admin commands

    /gamemode creative
    /tp @s ~ 100 ~
    /save-all
    /whitelist on

Common errors and fixes

"Failed to verify username"

Player's session is stale or online-mode=true is rejecting their client. Fixes:

  • Have player log out and back into the Minecraft launcher
  • Check your server's internet โ€” if Mojang's auth servers are unreachable, all joins fail
  • Check status.minecraft.net for Mojang-side outages

"Server is Out of Memory"

  • Bump RAM allocation via the panel's Memory slider
  • Use Aikar's Flags in the startup command (G1GC tuning)
  • Install Spark plugin (/spark heap) to identify what's eating memory
  • If modded: a specific mod is leaking โ€” check its issues page

Server lagging / low TPS

Install Spark (profiling plugin) and run:

/spark profiler start --timeout 120
# ... wait 2 minutes while lag reproduces ...
/spark profiler stop

Spark uploads a flame-graph URL. 95% of the time it points you directly at a bad plugin or an entity hotspot.

"Outdated server" / "Outdated client"

Client and server MC version mismatch. Two options:

  • Change the client's version in the launcher profile
  • Install ViaVersion + ViaBackwards + ViaRewind on the server to let multiple client versions connect

"Can't keep up! Is the server overloaded?"

Server tick took > 50 ms. Not fatal by itself, but if it repeats:

  • Reduce view-distance and simulation-distance
  • Run /spark profiler to identify the hotspot
  • Upgrade CPU plan โ€” MC's main-tick thread is single-threaded, raw clock matters

World corruption ("Failed to load chunk")

  1. Stop the server immediately โ€” continued writes compound corruption
  2. Rollback from the panel's backup tab (daily snapshots + 30-day retention on all managed plans)
  3. If the backup is too old, try MCA Selector or RegionFixer to delete just the broken chunks

RCON connects but commands silent

  • enable-rcon=true missing from server.properties
  • Wrong rcon.password
  • Firewall blocking TCP on rcon.port (25575 by default, different from game port)

Plugin doesn't load

  • Wrong Minecraft version โ€” check the plugin's listed compat on Modrinth/Hangar
  • Wrong Paper flavor โ€” a Fabric-only plugin won't load on Paper
  • Missing dependency โ€” check logs/latest.log for "Unknown dependency: XYZ"
  • Plugin jar is corrupted โ€” re-download

Forge modpack won't start

  • Wrong Java version โ€” MC 1.17+ needs Java 17, 1.20.5+ needs Java 21. Panel has a JVM dropdown.
  • Modpack's recommended RAM isn't met โ€” ATM10 wants 10+ GB just to boot
  • Forge/NeoForge version mismatch โ€” check crash-reports/ for the exact version the pack wants
  • Mixin conflict โ€” one mod's mixin is clashing with another's. Usually a specific pair; check the crash report's mixin section.

Stuck on something specific? Email support with your server IP, the last 200 lines of logs/latest.log, and any relevant crash report โ€” we'll usually have an answer within the hour.