# 🔧 Configuration avancée - NationsGlory 1.6.4

## 📝 Fichiers de configuration

### docker-compose.yml
Configuration Docker principale. Variables importantes:

```yaml
environment:
  SERVER_PORT: "25565"        # Port du serveur Minecraft
  RCON_PORT: "25575"          # Port RCON (administration)
  RCON_PASSWORD: "minecraft"  # ⚠️ À CHANGER pour la sécurité
  ONLINE_MODE: "FALSE"        # Accepte les comptes crack
  GAMEMODE: "1"               # 0=Survie, 1=Créatif, 2=Aventure
  LEVEL_TYPE: "FLAT"          # Type de monde (FLAT, DEFAULT, LARGEBIOMES)
  MEMORY: "2G"                # RAM maximale
  INIT_MEMORY: "1G"           # RAM initiale
```

### server.properties
Généré automatiquement. Modifications manuelles nécessaires pour:
- `online-mode=false` (authentification crack)
- `level-type=FLAT` (monde plat)
- `gamemode=1` (mode créatif)
- `rcon.password=VotreMotDePasse` (mot de passe RCON)

⚠️ **Redémarrez après modification**: `docker-compose restart`

---

## 🔐 Configuration RCON sécurisée

### 1. Définir le mot de passe RCON

**Méthode 1: Avant le premier démarrage**
```bash
# Éditer server.properties
echo "rcon.password=VotreMotDePasseSecurise" >> server.properties
echo "enable-rcon=true" >> server.properties
```

**Méthode 2: Serveur en cours (modification dans le conteneur)**
```bash
# Modifier directement dans le conteneur
docker exec mc-nationsglory sed -i 's/^rcon.password=.*/rcon.password=NouveauMotDePasse/' /data/server.properties

# Redémarrer pour appliquer
docker-compose restart
```

### 2. Tester RCON

```bash
# Remplacer 192.168.1.252 par votre IP serveur
docker exec mc-nationsglory rcon-cli \
  --host 192.168.1.252 \
  --port 25575 \
  --password VotreMotDePasse \
  "list"
```

### 3. Mode interactif

```bash
docker exec -it mc-nationsglory rcon-cli \
  --host 192.168.1.252 \
  --port 25575 \
  --password VotreMotDePasse

# Dans la console RCON:
> list
> op JoueurAdmin
> save-all
> stop
```

---

## 🌍 Configuration du monde

### Réinitialiser le monde en FLAT

```bash
# 1. Arrêter le serveur
docker-compose down

# 2. Supprimer l'ancien monde
sudo rm -rf world world_*

# 3. Modifier server.properties
sed -i 's/level-type=.*/level-type=FLAT/' server.properties

# 4. Redémarrer (génère un nouveau monde FLAT)
docker-compose up -d
```

### Types de mondes disponibles

- **FLAT** : Monde plat (idéal construction)
- **DEFAULT** : Monde normal avec biomes
- **LARGEBIOMES** : Biomes plus grands
- **AMPLIFIED** : Relief extrême (nécessite plus de RAM)

---

## 🎮 Gestion des joueurs

### Donner les droits OP

**Via RCON:**
```bash
docker exec mc-nationsglory rcon-cli \
  --host 192.168.1.252 \
  --port 25575 \
  --password VotreMotDePasse \
  "op NomJoueur"
```

**Manuellement:**
```bash
# Ajouter au fichier ops.txt
echo "NomJoueur" >> ops.txt
docker-compose restart
```

### Bannir/Débannir

```bash
# Bannir
docker exec mc-nationsglory rcon-cli --host IP --port 25575 --password MDP "ban JoueurMechant"

# Débannir
docker exec mc-nationsglory rcon-cli --host IP --port 25575 --password MDP "pardon JoueurMechant"
```

---

## 💾 Sauvegardes automatiques

### Script de sauvegarde

```bash
#!/bin/bash
# save-world.sh

BACKUP_DIR="$HOME/backups/nationsglory"
DATE=$(date +%Y%m%d_%H%M%S)

# Créer le dossier de sauvegarde
mkdir -p "$BACKUP_DIR"

# Forcer la sauvegarde
docker exec mc-nationsglory rcon-cli \
  --host 192.168.1.252 \
  --port 25575 \
  --password VotreMotDePasse \
  "save-all"

# Attendre la fin
sleep 5

# Archiver
cd /chemin/vers/serveur
tar -czf "$BACKUP_DIR/world_$DATE.tar.gz" world/

echo "✅ Sauvegarde créée: $BACKUP_DIR/world_$DATE.tar.gz"
```

### Automatiser avec cron

```bash
# Éditer crontab
crontab -e

# Sauvegarder toutes les 6 heures
0 */6 * * * /chemin/vers/save-world.sh >> /var/log/minecraft-backup.log 2>&1
```

---

## 🚀 Optimisation performances

### Augmenter la RAM

```yaml
# docker-compose.yml
environment:
  MEMORY: "4G"        # RAM max
  INIT_MEMORY: "2G"   # RAM initiale

deploy:
  resources:
    limits:
      memory: 5G      # Limite Docker
```

### Options JVM optimisées

```yaml
command:
  - sh
  - -c
  - |
    cd /data
    exec java \
      -Xms2G -Xmx4G \
      -XX:+UseG1GC \
      -XX:+ParallelRefProcEnabled \
      -XX:MaxGCPauseMillis=200 \
      -XX:+UnlockExperimentalVMOptions \
      -XX:+DisableExplicitGC \
      -XX:G1NewSizePercent=30 \
      -XX:G1MaxNewSizePercent=40 \
      -XX:G1HeapRegionSize=8M \
      -jar mcpc.jar nogui
```

---

## 🔍 Monitoring

### Voir les logs en temps réel

```bash
# Tous les logs
docker logs -f mc-nationsglory

# Sans spam Forge (filtrer les >)
docker logs -f mc-nationsglory 2>&1 | sed -u '/^>/d'

# Rechercher des erreurs
docker logs mc-nationsglory 2>&1 | grep -i "error\|exception"
```

### Surveiller les ressources

```bash
# Utilisation CPU/RAM
docker stats mc-nationsglory

# Processus Java
docker exec mc-nationsglory ps aux | grep java
```

---

## 🐛 Dépannage courant

### Problème: "Failed to verify username"
**Cause**: `online-mode=true`  
**Solution**:
```bash
docker exec mc-nationsglory sed -i 's/online-mode=true/online-mode=false/' /data/server.properties
docker-compose restart
```

### Problème: RCON "authentication failed"
**Cause**: Mot de passe incorrect ou vide  
**Solution**:
```bash
# Vérifier le mot de passe
docker exec mc-nationsglory grep "rcon.password" /data/server.properties

# Le définir
docker exec mc-nationsglory sed -i 's/^rcon.password=.*/rcon.password=NouveauMDP/' /data/server.properties
docker-compose restart
```

### Problème: Le monde n'est pas FLAT
**Solution**:
```bash
docker-compose down
sudo rm -rf world world_*
sed -i 's/level-type=.*/level-type=FLAT/' server.properties
docker-compose up -d
```

### Problème: Serveur lag
**Solutions**:
1. Augmenter RAM (voir Optimisation)
2. Réduire view-distance dans server.properties: `view-distance=8`
3. Nettoyer les logs: `docker exec mc-nationsglory rm -f /data/*.log`

---

## 📊 Variables d'environnement complètes

| Variable | Valeur par défaut | Description |
|----------|------------------|-------------|
| `SERVER_PORT` | 25565 | Port Minecraft |
| `RCON_PORT` | 25575 | Port RCON |
| `RCON_PASSWORD` | minecraft | Mot de passe RCON |
| `ENABLE_RCON` | true | Activer RCON |
| `ONLINE_MODE` | FALSE | Authentification Mojang |
| `GAMEMODE` | 1 | Mode de jeu (0/1/2) |
| `DIFFICULTY` | 1 | Difficulté (0-3) |
| `LEVEL_TYPE` | FLAT | Type de monde |
| `MEMORY` | 2G | RAM maximale |
| `INIT_MEMORY` | 1G | RAM initiale |
| `JVM_OPTS` | (voir docker-compose.yml) | Options Java |

---

## 🔗 Ressources

- [Documentation MCPC+](https://www.spigotmc.org/wiki/mcpc-plus/)
- [Commandes WorldEdit](https://worldedit.enginehub.org/en/latest/commands/)
- [Commandes Essentials](https://essinfo.xeya.me/commands.html)
- [Options JVM Minecraft](https://aikar.co/2018/07/02/tuning-the-jvm-g1gc-garbage-collector-flags-for-minecraft/)
