# Minecraft Server — Known Files, Directories & Change Locations **Purpose:** Reference for file browser implementation. Defines what files users commonly access, edit, or upload across all supported Minecraft server variants. --- ## Universal (All Variants) These exist regardless of loader or server software. | Path | Type | Notes | |------|------|-------| | `server.properties` | Text / Key-Value | Most commonly edited file on any server. Gamemode, difficulty, max players, MOTD, ports, whitelist, PvP, view distance, seed. Requires restart to apply. | | `server.jar` | Binary | The server executable. Never directly edited by users but occasionally replaced during upgrades. | | `eula.txt` | Text | Must be accepted on first run. | | `logs/latest.log` | Text | Current session log. Frequently downloaded for debugging. Read-only in most cases. | | `logs/` | Directory | Archived logs (`.log.gz`). Download only. | | `world/` | Directory | Overworld data. Never touched by file browser — excluded from safety scope. | | `world_nether/` | Directory | Nether dimension (Vanilla layout). Excluded. | | `world_the_end/` | Directory | End dimension (Vanilla layout). Excluded. | | `banned-players.json` | JSON | Banned player list. Occasionally edited directly. | | `banned-ips.json` | JSON | Banned IP list. Occasionally edited directly. | | `whitelist.json` | JSON | Whitelist entries. Edited when allow-list=true. | | `ops.json` | JSON | Operator list. Edited to grant/revoke op. | | `usercache.json` | JSON | UUID to username cache. Read-only in practice. | --- ## Vanilla Minimal file surface. No mods, no plugins. ``` server.properties eula.txt server.jar logs/ world/ world_nether/ world_the_end/ ``` No `mods/` or `plugins/` directory. Config changes are limited to `server.properties` and the JSON admin files above. --- ## Paper / Spigot / Purpur (Plugin-based) ### Additional Config Files | Path | Type | Notes | |------|------|-------| | `bukkit.yml` | YAML | Core Bukkit settings (spawn limits, chunk GC, aliases). | | `spigot.yml` | YAML | Spigot-specific tuning (mob spawn ranges, tick rates, bungeecord). | | `config/paper-global.yml` | YAML | Paper global settings (added ~1.19+). | | `config/paper-world-defaults.yml` | YAML | Paper world-level defaults. | | `config/paper-world/` | Directory | Per-world Paper overrides. | | `purpur.yml` | YAML | Purpur-specific options (only on Purpur). | | `help.yml` | YAML | Custom help command entries. | | `commands.yml` | YAML | Command aliases and overrides. | | `permissions.yml` | YAML | Basic permission definitions (rarely used with permission plugins). | ### World Storage Layout (Paper differs from Vanilla) Paper stores nether and end inside the main world folder: ``` world/ region/ ← Overworld chunks DIM-1/ ← Nether DIM1/ ← End playerdata/ stats/ advancements/ data/ ``` Vanilla stores them as siblings: ``` world/ world_nether/ world_the_end/ ``` **This matters for file browser display** — do not assume a flat sibling layout. ### Plugins Directory ``` plugins/ PluginName.jar ← Plugin binary PluginName/ config.yml ← Primary plugin config messages.yml ← Usually messages/lang data.yml ← Persistent data (do not edit while running) ``` Common plugin configs users edit: - `plugins/EssentialsX/config.yml` - `plugins/LuckPerms/config.yml` - `plugins/WorldGuard/config.yml` - `plugins/Vault/config.yml` Plugin configs are almost always `.yml`. Restart or `/reload` required to apply. --- ## Forge / NeoForge (Mod-based) ### Mods Directory ``` mods/ modname-1.0.0.jar ← Active mod modname-1.0.0.jar.disabled ← Disabled mod (ZLH convention) mods-removed/ modname-1.0.0.jar ← Soft deleted mod (ZLH convention) ``` ### Config Directory Most mod configs live in `config/`. Two common formats: | Format | Extension | Notes | |--------|-----------|-------| | TOML | `.toml` | Standard for modern Forge/NeoForge mods | | JSON | `.json` | Less common, some older mods | | Properties | `.properties` | Rare, legacy mods | ``` config/ modname-common.toml ← Shared client+server config modname-server.toml ← Server-only config modname/ config.toml ← Some mods use a subfolder ``` Some mods also create a top-level directory: ``` modname/ config.toml ``` ### Additional Forge/NeoForge Files | Path | Type | Notes | |------|------|-------| | `user_jvm_args.txt` | Text | JVM arguments for the server. Edit with care. | | `libraries/` | Directory | Forge/NeoForge runtime libs. Never user-edited. | | `kubejs/` | Directory | KubeJS script mod directory. Heavily edited on modpack servers. | | `kubejs/server_scripts/` | Directory | Server-side KubeJS scripts (`.js`). Very commonly edited. | | `kubejs/startup_scripts/` | Directory | Startup scripts. | | `defaultconfigs/` | Directory | Default configs applied to new worlds. | | `global_packs/` | Directory | Global data/resource packs. | | `packs/` | Directory | Per-world data and resource packs. | --- ## Fabric / Quilt (Mod-based) Same `mods/` and `config/` structure as Forge/NeoForge. Config formats vary by mod but `.json` is more common in the Fabric ecosystem than `.toml`. ``` mods/ fabric-api-*.jar modname.jar config/ modname.json modname/ config.json ``` ### Fabric-specific Files | Path | Type | Notes | |------|------|-------| | `fabric-server-launch.jar` | Binary | Fabric launch wrapper. Not user-edited. | | `fabric_loader_libraries/` | Directory | Internal. Not user-edited. | --- ## Frequently Edited — Priority List for File Browser These are the files users will navigate to most often, across all variants. The file browser should make these discoverable: **Tier 1 — Edited constantly** - `server.properties` - `config/*.toml` (Forge/NeoForge) - `plugins/PluginName/config.yml` (Paper/Spigot) - `kubejs/server_scripts/` (modpack servers) - `mods/` (install, enable, disable, remove) **Tier 2 — Edited occasionally** - `bukkit.yml` - `spigot.yml` - `config/paper-global.yml` - `config/paper-world-defaults.yml` - `ops.json` - `whitelist.json` - `banned-players.json` - `purpur.yml` **Tier 3 — Downloaded, rarely edited** - `logs/latest.log` - `logs/*.log.gz` - `usercache.json` **Never expose in file browser** - `world/` and dimension subdirectories (backup system handles this) - `libraries/` (Forge/NeoForge runtime, read-only) - `fabric_loader_libraries/` - Any `.lock` files --- ## Config File Formats by Loader | Loader | Primary Format | Secondary | |--------|---------------|-----------| | Vanilla | `.properties` | `.json` | | Paper / Spigot / Purpur | `.yml` | `.json` | | Forge | `.toml` | `.json`, `.properties` | | NeoForge | `.toml` | `.json` | | Fabric | `.json` | `.toml` | | Quilt | `.json` | `.toml` | **Implication for in-browser editor:** syntax highlighting or at minimum format-aware display should handle `.toml`, `.yml`, `.json`, and `.properties`. --- ## ZLH-Specific Paths These are ZLH conventions, not Minecraft defaults. | Path | Notes | |------|-------| | `mods/` | Active mods (`.jar` and `.jar.disabled`) | | `mods-removed/` | Soft-deleted mods. Restore via file browser. | | `.zlh_snapshots/` | Deployment safety snapshots. Hidden, not shown in file browser. | --- ## Notes for Implementation - **Paper world layout differs from Vanilla.** Do not assume nether/end are sibling directories. Detect by loader type from agent metadata. - **Plugin configs are always inside `plugins/PluginName/`** — the plugin `.jar` and its config folder share the same name. - **Mod configs can be in `config/` or a top-level named directory** — no single rule covers all mods. - **`.toml` files need TOML-aware editing** — malformed TOML will break mod config loading silently or with cryptic errors. - **KubeJS** is worth treating as a first-class surface. Modpack servers using KubeJS will have users editing scripts frequently. - **`server.properties`** should have a structured editor (key-value form), not just raw text, for non-technical users.