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