zlh-grind/docs/reference/minecraft-file-locations.md

252 lines
8.0 KiB
Markdown

# 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.