# Optymalizacja serwera

Ten poradnik opisuje **bezpieczną optymalizację**, która znacząco zmniejsza zużycie CPU **bez wpływu na mechaniki gry**:

- farmy działają
- redstone działa
- villagerzy działają
- hoppery i sortownie działają
- spawner farmy działają
- gracze nie odczują żadnych zmian w gameplayu

> Testowane na Paper / Purpur 1.21.5 + Java 21

---

## Źródło poradnika

Ten poradnik jest **uproszczoną i „bezpieczną” wersją** bardzo rozbudowanego opracowania:

https://github.com/YouHaveTrouble/minecraft-optimization/

Jeśli potrzebujesz bardziej zaawansowanego tuningu lub korzystasz z innej wersji Minecrafta, możesz sprawdzić dedykowane wersje oryginalnego poradnika:

- 1.18 - https://github.com/YouHaveTrouble/minecraft-optimization/tree/1.18
- 1.19 - https://github.com/YouHaveTrouble/minecraft-optimization/tree/1.19
- 1.20 - https://github.com/YouHaveTrouble/minecraft-optimization/tree/1.20
- 1.21 - https://github.com/YouHaveTrouble/minecraft-optimization/tree/1.21
- 1.21.5 - https://github.com/YouHaveTrouble/minecraft-optimization/tree/1.21.5
- 1.21.11 - https://github.com/YouHaveTrouble/minecraft-optimization/tree/1.21.11

---

## Wymagania

- **Paper**, **Purpur** lub dowolny fork oparty na Paper
- **Java 21**
- Nie używaj Spigot/CraftBukkit

---

## 1. `server.properties` - absolutna podstawa

Edytuj plik `server.properties`:

    sync-chunk-writes=false
    simulation-distance=4
    view-distance=7
    network-compression-threshold=256

**Dlaczego:**

| Opcja | Efekt |
|------|------|
| sync-chunk-writes | zapis chunków poza głównym wątkiem |
| simulation-distance | serwer symuluje mały obszar |
| view-distance | gracz widzi daleko bez obciążania ticków |
| network-compression-threshold | mniejsze użycie CPU przy pakietach |

---

## 2. `paper-world` - największy zysk wydajności

Plik: `config/paper-world-defaults.yml` (lub per świat)

### Opóźnienie wyładowywania chunków

    delay-chunk-unloads-by: 10s

---

### Blokada wchodzenia w niezaładowane chunki

    prevent-moving-into-unloaded-chunks: true

---

### Szybszy redstone (bez zmiany mechaniki)

    redstone-implementation: ALTERNATE_CURRENT

---

### Szybsze eksplozje

    optimize-explosions: true

---

### Mapy skarbów (częsta przyczyna freezów)

    treasure-maps:
      enabled: false
      find-already-discovered:
        loot-tables: true
        villager-trade: true

---

### Anti-Xray

    anti-xray:
      enabled: true

---

### Rzadsze ticki trawy

    tick-rates:
      grass-spread: 4

---

### Strzały szybciej znikają

    non-player-arrow-despawn-rate: 20
    creative-arrow-despawn-rate: 20

---

## 3. `spigot.yml` - redukcja ilości encji

### Łączenie itemów i expa

    merge-radius:
      item: 3.5
      exp: 4.0

---

### Zasięg śledzenia encji

    entity-tracking-range:
      players: 48
      animals: 48
      monsters: 48
      misc: 32
      other: 64

---

### Aktywacja encji tylko blisko gracza

    entity-activation-range:
      animals: 16
      monsters: 24
      raiders: 48
      misc: 8
      water: 8
      villagers: 16
      flying-monsters: 48

---

## 4. `bukkit.yml` + Paper - limity mobów

### `bukkit.yml`

    spawn-limits:
      monsters: 20
      animals: 5
      water-animals: 2
      ambient: 1

### `paper-world`

    per-player-mob-spawns: true

---

## 5. Map pregeneration (pregen)

Obecnie, dzięki optymalizacjom generowania chunków w Paper, **pregen nie jest wymagany** na nowoczesnych CPU.

Główne zastosowanie pregenu:
- mapy Dynmap / Pl3xMap
- bardzo słabe, jednowątkowe CPU

Jeśli chcesz wykonać pregen:

- użyj pluginu **Chunky**
- ustaw wcześniej world border
- pamiętaj, że overworld, nether i end mają osobne bordery
- nether jest 8× mniejszy od overworlda

Ustaw także **vanilla world border**:

    /worldborder set [średnica]

Ogranicza to m.in. zakres wyszukiwania map skarbów, które potrafią powodować lagi.

---

## 6. „Too good to be true” pluginy (unikać)

### Pluginy usuwające itemy z ziemi

Niepotrzebne. `merge-radius` i `alt-item-despawn-rate` robią to lepiej i taniej wydajnościowo.

---

### Mob stacker pluginy

Stackowanie naturalnych mobów powoduje WIĘKSZY lag niż ich brak. Jedyny sensowny przypadek to farmy spawnerów na serwerach z ogromną ilością spawnerów.

---

### Pluginy włączające/wyłączające inne pluginy

Ekstremalnie niebezpieczne. Powodują błędy w śledzeniu danych i dependency.  
Komenda `/reload` ma dokładnie te same problemy.

---

## 7. Co laguje? - mierzenie wydajności

### `/mspt` (Paper)

Jeśli pierwsze dwie wartości są poniżej 50 - serwer **nie laguje**.  
Trzecia wartość powyżej 50 oznacza pojedynczy wolniejszy tick - to normalne.

---

### Spark

Plugin do profilowania CPU i pamięci. Pozwala dokładnie znaleźć przyczynę lagów i spike’ów.

https://spark.lucko.me/

https://spark.lucko.me/docs

https://spark.lucko.me/docs/guides/Finding-lag-spikes

---

## 8. Flagi Java

> Użytkownik nie ma możliwości samodzielnej zmiany flag startowych.

Jeśli potrzebujesz optymalizacyjnych flag JVM, administrator może je dodać na życzenie.

W tym celu otwórz ticket na **naszym serwerze Discord** z prośbą o dodanie flag optymalizacyjnych.

Link do Discorda: https://discord.com/invite/S6Cb3FuUZJ
