> For the complete documentation index, see [llms.txt](https://wiki.rededirt.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wiki.rededirt.com/testept-br.md).

# TestePt-Br

## Guia de Otimização de Servidores Minecraft

#### ⚠️ Para quem usa Vanilla, Fabric ou Spigot (ou qualquer coisa abaixo de Paper):

Acesse o `server.properties` e altere a opção `sync-chunk-writes` para `false`.\
Essa opção já é forçadamente `false` no Paper e seus forks, mas em outras implementações você precisa ajustar manualmente. Isso permite que o servidor salve chunks fora da thread principal, reduzindo a carga no *tick loop* principal.

> Compatível com versão **1.21**. Algumas recomendações ainda funcionam nas versões de **1.15 até 1.20**.

Baseado neste [guia original](https://www.spigotmc.org/threads/guide-server-optimization%E2%9A%A1.283181/) e outras fontes (todas estão linkadas no decorrer do texto).

Use o **índice** localizado acima (ao lado de `README.md`) para navegar facilmente pelo guia.

***

## Introdução

Nunca existirá um guia com resultados perfeitos para todos. Cada servidor tem necessidades e limites próprios do que pode ou está disposto a sacrificar. O segredo está em ajustar cada opção conforme sua realidade.

Este guia serve para te ajudar a **entender o impacto de cada configuração**, e o que exatamente ela modifica. Se encontrar informações incorretas, sinta-se livre para abrir uma *issue* ou enviar um *pull request* com correções.

***

## Preparação

### JAR do Servidor

Sua escolha de software faz uma **grande diferença no desempenho** e nas possibilidades de API. Existem várias opções viáveis, mas algumas devem ser evitadas.

**Top recomendações:**

* [Paper](https://github.com/PaperMC/Paper) – O mais popular, focado em desempenho e correção de bugs de jogabilidade.
* [Pufferfish](https://github.com/pufferfish-gg/Pufferfish) – Fork do Paper com foco em desempenho ainda maior.
* [Purpur](https://github.com/PurpurMC/Purpur) – Fork do Pufferfish, com mais recursos e liberdade de personalização.

**Evite:**

* Qualquer JAR pago que prometa "async" – 99,99% de chance de ser golpe.
* Bukkit / CraftBukkit / Spigot – Extremamente ultrapassados em desempenho.
* Plugins ou softwares que ativam/desativam/recarregam plugins em tempo real. Veja a seção sobre isso.
* Forks muito distantes do Purpur/Pufferfish – costumam ser instáveis e problemáticos.

Se quer mais desempenho, **otimize seu servidor ou crie um fork privado confiável**.

***

### Pré-geração de Mapa (Map Pregen)

Com as otimizações de geração de chunks nos últimos anos, a pré-geração **só é útil em CPUs muito limitadas ou single-threaded**. Porém, ainda é comum ao usar plugins de mapas como *Dynmap* ou *Pl3xMap*.

Se ainda quiser pré-gerar, use um plugin como [Chunky](https://github.com/pop4959/Chunky).

* Defina um **world border**, senão os jogadores poderão gerar chunks fora da área.
* Pré-gerar pode levar **horas**, dependendo do raio configurado.
* Com Paper+, o TPS não será afetado por carregamento de chunks, **mas a velocidade de carregamento será afetada se a CPU estiver sobrecarregada**.

Cada mundo (overworld, nether e the end) tem seu **próprio border**.

> O Nether é 8x menor que o Overworld (se não modificado por datapack), então ajuste corretamente ou os jogadores podem sair da borda.

⚠️ Use o comando vanilla `/worldborder set [diâmetro]` para evitar lag de *lookup* em mapas do tesouro e outros sistemas.

***

## Configurações

### Rede

#### \[server.properties]

**network-compression-threshold**

**Valor inicial recomendado: 256**

Define o tamanho mínimo (em bytes) de um pacote para o servidor comprimir.

* **Maior valor**: economiza CPU, mas usa mais banda.
* **Menor valor**: ajuda clientes com internet fraca.
* Valor `-1` **desativa a compressão**.

> Se seu servidor usa proxy ou está na mesma máquina (latência < 2ms), desativar a compressão (`-1`) pode ser **benéfico**.

***

#### \[purpur.yml]

**use-alternate-keepalive**

**Valor inicial recomendado: true**

Ativa o sistema de keepalive alternativo do Purpur.\
Ajuda jogadores com conexão instável a **evitarem timeouts**.

⚠️ Pode ser incompatível com TCPShield.

> “Esse sistema envia pacotes a cada 1s e só desconecta se **nenhum for respondido em 30s**. Qualquer resposta mantém o jogador online.”

Fonte: <https://purpurmc.org/docs/Configuration/#use-alternate-keepalive>

***

### Chunks

#### \[server.properties]

**simulation-distance**

**Valor inicial recomendado: 4**

Distância em chunks ao redor do jogador onde o servidor irá executar *ticks*.\
Coisas como fornalhas, crescimento de plantas, etc.

> Mantenha esse valor **baixo** (3–4), e use o `view-distance` para exibir mais chunks **sem processá-los**. Isso economiza recursos.

**view-distance**

**Valor inicial recomendado: 7**

Distância de visualização em chunks enviada ao cliente.\
Semelhante ao `no-tick-view-distance` do Paper.

> O total de chunks exibidos será o **maior valor entre simulation e view-distance**.\
> Exemplo: `simulation-distance: 4`, `view-distance: 12` → jogador verá 12 chunks.

***

#### \[spigot.yml]

**view-distance**

**Valor recomendado: default**

Se definido como qualquer coisa diferente de `default`, substitui o valor do `server.properties`.

> Deixe em `default` para **gerenciar tudo em um único lugar**.

***

#### \[paper-world configuration]

**delay-chunk-unloads-by**

**Valor inicial recomendado: 10s**

Define por quanto tempo um chunk permanece carregado após o jogador sair.\
Ajuda a evitar cargas/descarregas constantes de chunks.

> **Não exagere** nesse tempo ou você pode ter muitos chunks ativos.

**max-auto-save-chunks-per-tick**

**Valor inicial recomendado: 8**

Espalha o salvamento de chunks ao longo do tempo.\
Pode ser **aumentado** em servidores com +30 jogadores.

> Se o salvamento incremental não terminar a tempo, o Bukkit força salvamento completo, o que causa travamentos.

**prevent-moving-into-unloaded-chunks**

**Valor inicial recomendado: true**

Impede jogadores de entrarem em chunks descarregados, o que causaria carregamentos sincronizados e **lag**.

> A chance disso acontecer aumenta quanto menor for sua `view-distance`.

**entity-per-chunk-save-limit**

**Valores iniciais recomendados:**

```yaml
area_effect_cloud: 8  
arrow: 16  
breeze_wind_charge: 8  
dragon_fireball: 3  
egg: 8  
ender_pearl: 8  
experience_bottle: 3  
experience_orb: 16  
eye_of_ender: 8  
fireball: 8  
firework_rocket: 8  
llama_spit: 3  
potion: 8  
shulker_bullet: 8  
small_fireball: 8  
snowball: 8  
spectral_arrow: 16  
trident: 16  
wind_charge: 8  
wither_skull: 4
```

> Isso **limita a quantidade salva de entidades por chunk**, evitando salvar milhares de projéteis inúteis e reduzindo lag de IO.

***

### 🎯 **Limite de Entidades Salvas**

> **Arquivo:** `pufferfish.yml`\
> **Opção:** `max-loads-per-projectile`\
> **Valor sugerido:** `8`

Com essa opção, você pode limitar quantas entidades de determinado tipo podem ser salvas. É importante definir um limite para cada tipo de projétil para evitar problemas de desempenho e até crash ao carregar o servidor com muitos projéteis salvos.\
Você pode usar qualquer ID de entidade (veja a wiki do Minecraft para a lista).\
Essa configuração **não** foi feita para impedir os jogadores de criarem farms grandes de mobs.

***

### 🧟‍♂️ **Mobs**

> **Arquivo:** `bukkit.yml`

#### `spawn-limits`

> **Valores sugeridos:**

```
monsters: 20
animals: 5
water-animals: 2
water-ambient: 2
water-underground-creature: 3
axolotls: 3
ambient: 1
```

A fórmula de limitação de mobs é:\
**\[quantidade de jogadores] × \[limite de cada tipo]**

Ou seja, quanto menores os valores, menos mobs vão aparecer.\
Se `per-player-mob-spawn` estiver ativado, os mobs são distribuídos de forma mais equilibrada entre os jogadores.\
Você pode usar valores bem baixos como `20` se configurar o `mob-spawn-range` corretamente (veja abaixo).

***

#### `ticks-per`

> **Valores sugeridos:**

```
monster-spawns: 10
animal-spawns: 400
water-spawns: 400
water-ambient-spawns: 400
water-underground-creature-spawns: 400
axolotl-spawns: 400
ambient-spawns: 400
```

Define com que frequência (em ticks) o servidor tenta spawnar determinados mobs.\
Mobs aquáticos e do tipo ambiente não precisam spawnar a todo momento, já que morrem com menos frequência.\
Para monstros, valores maiores geralmente **não afetam farms**, e aliviam a carga em áreas onde o spawn está desativado.

***

> **Arquivo:** `spigot.yml`

#### `mob-spawn-range`

> **Valor sugerido:** `3`

Determina quantos **chunks ao redor do jogador** serão considerados para o spawn de mobs.\
Reduzir esse valor cria a impressão de que há mais mobs por jogador.\
Deve ser menor ou igual à sua **simulation-distance**, e nunca maior que `hard despawn range ÷ 16`.

***

#### `entity-activation-range`

> **Valores sugeridos:**

```
animals: 16
monsters: 24
raiders: 48
misc: 8
water: 8
villagers: 16
flying-monsters: 48
```

Define a distância em que uma entidade começa a ser "ativada" (realiza ações).\
Reduzir melhora o desempenho, mas mobs podem ficar parados até o jogador se aproximar.\
Se for muito baixo, pode quebrar farms (especialmente de ferro).

***

#### `entity-tracking-range`

> **Valores sugeridos:**

```
players: 48
animals: 48
monsters: 48
misc: 32
other: 64
```

Define a distância máxima de **visibilidade** das entidades para o jogador.\
Se estiver muito baixo, mobs parecerão surgir do nada.\
Geralmente deve ser **maior** que `entity-activation-range`.

***

#### `tick-inactive-villagers`

> **Valor sugerido:** `false`

Se ativado, aldeões continuam funcionando mesmo fora da faixa de ativação.\
Desativar melhora desempenho, mas **pode afetar farms de ferro e reabastecimento de trocas**.

***

#### `nerf-spawner-mobs`

> **Valor sugerido:** `true`

Mobs gerados por spawners ficam **sem IA**, ou seja, não se movem nem atacam.\
Se quiser que pulem na água, use `spawner-nerfed-mobs-should-jump: true` em `paper-world configuration`.

***

> **Arquivo:** `paper-world configuration`

#### `despawn-ranges`

> **Valores sugeridos:**

```
ambient:
  hard: 72
  soft: 30
axolotls:
  hard: 72
  soft: 30
creature:
  hard: 72
  soft: 30
misc:
  hard: 72
  soft: 30
monster:
  hard: 72
  soft: 30
underground_water_creature:
  hard: 72
  soft: 30
water_ambient:
  hard: 72
  soft: 30
water_creature:
  hard: 72
  soft: 30
```

Controla a distância (em blocos) para os mobs **desaparecerem automaticamente**.

* **Fora do `hard` range**: mob desaparece instantaneamente.
* **Entre `soft` e `hard`**: chance aleatória de sumir.\
  Regule o `hard` com base na fórmula:\
  `(simulation-distance * 16) + 8`

***

#### `per-player-mob-spawns`

> **Valor sugerido:** `true`

Faz o sistema de spawn de mobs considerar **quantos mobs já existem perto de cada jogador**.\
Ajuda a impedir que farms dominem o limite total de mobs.\
Traz uma experiência mais parecida com o singleplayer. Leve impacto no desempenho, mas compensa.

***

#### `max-entity-collisions`

> **Valor sugerido:** `2`

Controla quantas colisões uma entidade pode processar ao mesmo tempo.

* `0` = nada pode empurrar ou ser empurrado
* `2` = suficiente para a maioria dos casos\
  Nota: isso **anula o gamerule `maxEntityCramming`** se ele for maior que esse valor.

### **\[paper-world-defaults.yml]**

#### `update-pathfinding-on-block-update`

**Valor recomendado: `false`**\
Desativar isso reduz a quantidade de pathfinding feito, melhorando o desempenho. Em alguns casos, isso fará os mobs parecerem mais "lagados", pois eles atualizarão sua rota a cada 5 ticks (0.25 segundos).

***

#### `fix-climbing-bypassing-cramming-rule`

**Valor recomendado: `true`**\
Corrige o problema de mobs não serem afetados pela regra de aglomeração (`cramming`) enquanto escalam, como aranhas. Evita que grandes quantidades fiquem acumuladas em espaços pequenos.

***

#### `armor-stands.tick`

**Valor recomendado: `false`**\
Pode ser desativado com segurança na maioria dos casos. Reative apenas se usar plugins que modificam armor stands e apresentar problemas. Impede que sejam afetados por água ou gravidade.

***

#### `armor-stands.do-collision-entity-lookups`

**Valor recomendado: `false`**\
Desativa colisões de armor stands. Útil se houver muitos no servidor e não houver necessidade de colisão.

***

#### `tick-rates`

**Valores recomendados:**

```yaml
behavior:
  villager:
    validatenearbypoi: 60
    acquirepoi: 120
sensor:
  villager:
    secondarypoisensor: 80
    nearestbedsensor: 80
    villagerbabiessensor: 40
    playersensor: 40
    nearestlivingentitysensor: 40
```

Define com que frequência certos comportamentos e sensores são ativados em ticks. O `acquirepoi` é o mais pesado, por isso foi aumentado. Diminua se houver problemas com vila.

⚠️ **Não recomendado alterar se o DAB do Pufferfish estiver ativado!**

***

### **\[pufferfish.yml]**

#### `dab.enabled`

**Valor recomendado: `true`**\
DAB reduz a frequência de ticks de entidades com base na distância dos jogadores, de forma gradual. Melhora desempenho sem os cortes bruscos do EAR.

***

#### `dab.max-tick-freq`

**Valor recomendado: `20`**\
Controla o tick mais lento possível para entidades longe dos jogadores. Aumentar melhora performance, mas pode quebrar farms de mobs.

***

#### `dab.activation-dist-mod`

**Valor recomendado: `7`**\
Define a "inclinação" do gradiente de ativação do DAB. Valores menores ativam mais perto dos jogadores (mais performance, mas maior risco de bugs/farms quebradas).

***

#### `enable-async-mob-spawning`

**Valor recomendado: `true`**\
Ativa a lógica assíncrona de spawn de mobs. Não faz o spawn realmente em paralelo, mas alivia carga da thread principal. Requer `per-player-mob-spawns` ativo no Paper.

***

#### `enable-suffocation-optimization`

**Valor recomendado: `true`**\
Otimiza a verificação de sufocamento, limitando-a ao tempo de dano. Quase imperceptível no jogo comum, útil para servidores com muitos mobs.

***

#### `inactive-goal-selector-throttle`

**Valor recomendado: `true`**\
Reduz a frequência que mobs inativos atualizam seus objetivos. Passa de 1 tick para 20 ticks. Melhora performance com impacto mínimo no gameplay.

***

### **\[purpur.yml]**

#### `zombie.aggressive-towards-villager-when-lagging`

**Valor recomendado: `false`**\
Zumbis deixam de perseguir aldeões quando o servidor está com lag, conforme limiar definido em `lagging-threshold`.

***

#### `entities-can-use-portals`

**Valor recomendado: `false`**\
Impede que entidades (exceto o jogador) usem portais, evitando carregamento de chunks desnecessário. Entidades não mudarão de dimensão.

***

#### `villager.lobotomize.enabled`

**Valor recomendado: `true`**\
⚠️ Use **apenas** se aldeões causarem lag!\
Remove a IA de aldeões que não conseguem encontrar caminho. Eles apenas reabastecem ofertas de tempos em tempos. Liberá-los reativa a IA.

***

#### `villager.search-radius`

**Valores recomendados:**

```yaml
acquire-poi: 16
nearest-bed-sensor: 16
```

Define o raio de busca por locais de trabalho e camas. Reduz drasticamente a carga com grandes quantidades de aldeões.

***

### **\[spigot.yml]**

#### `merge-radius`

**Valores recomendados:**

```yaml
item: 3.5
exp: 4.0
```

Distância para juntar itens e orbes de XP. Reduz a quantidade de entidades no chão. Valores altos podem causar desaparecimento aparente e bugs em farms.

***

#### `hopper-transfer`

**Valor recomendado: `8`**\
Tempo em ticks para um hopper transferir itens. Aumentar melhora performance mas pode quebrar sistemas de clock ou sorting.

***

#### `hopper-check`

**Valor recomendado: `8`**\
Tempo em ticks para um hopper verificar itens acima ou no inventário superior. Impacta diretamente sistemas baseados em hoppers com água/clocks.

***

### **\[paper-world configuration]**

#### `alt-item-despawn-rate`

**Exemplo de valores recomendados:**

```yaml
enabled: true
items:
  cobblestone: 300
  netherrack: 300
  sand: 300
  ...
  scaffolding: 600
```

Permite definir tempo individual de despawn (em ticks) para itens jogados no chão. Substitui plugins de limpeza e funciona junto com `merge-radius`.

***

#### `redstone-implementation`

**Valor recomendado: `ALTERNATE_CURRENT`**\
Substitui a lógica de redstone por uma mais otimizada baseada no mod [Alternate Current](https://modrinth.com/mod/alternate-current). Melhora desempenho com pequenas inconsistências em sistemas extremamente técnicos.

***

#### `hopper.disable-move-event`

**Valor recomendado: `false`**\
Desativa o `InventoryMoveItemEvent`. Só ative se souber que seus plugins **não** precisam dele (ex: plugins de proteção).

***

#### `hopper.ignore-occluding-blocks`

**Valor recomendado: `true`**\
Faz com que hoppers ignorem blocos sólidos que normalmente bloqueariam containers (como minecart hopper sob areia). Pode quebrar farms específicas.

***

#### `tick-rates.mob-spawner`

**Valor recomendado: `2`**\
Controla com que frequência os spawners de mobs são atualizados. Valores mais altos diminuem a taxa de spawn, mas aliviam a performance.

***

#### ⛏️ **Desempenho de Spawners**

> **Esta opção** permite configurar com que frequência os spawners devem ser ativados. Valores mais altos reduzem o lag se houver muitos spawners, mas se estiver muito alto (em relação ao delay dos spawners), a taxa de spawn de mobs será reduzida.

***

#### 💥 **Explosões otimizadas**

* **`optimize-explosions: true`**

> Substitui o algoritmo padrão de explosão por um mais rápido, com leve perda de precisão nos cálculos de dano. Normalmente, isso não é perceptível.

***

#### 🗺️ **Mapas do tesouro**

* **`treasure-maps.enabled: false`**

> Gerar mapas do tesouro é extremamente custoso e pode travar o servidor se a estrutura estiver em chunk não gerado. Só ative se tiver pré-gerado o mundo e definido uma borda mundial do Vanilla.

* **`treasure-maps.find-already-discovered`**
  * `loot-tables: true`
  * `villager-trade: true`

> **Esta opção** define se os mapas recém-gerados podem apontar para estruturas já descobertas. Se deixar `false`, o servidor pode travar ao tentar encontrar estruturas ainda não geradas.\
> `villager-trade` se refere a mapas negociados com aldeões.\
> `loot-tables` se aplica a baús com loot dinâmico (masmorras, tesouros, etc).

***

#### 🌱 **Taxas de atualização do mundo**

* **`tick-rates.grass-spread: 4`**

> Intervalo em ticks para espalhamento de grama ou micélio. Valor 4 é ideal para reduzir a frequência sem impacto visual perceptível.

* **`tick-rates.container-update: 1`**

> Intervalo em ticks entre atualizações de containers. Aumentar pode ajudar com travamentos causados por containers, mas pode causar desincronização (itens fantasmas).

***

#### 🏹 **Desaparecimento de flechas**

* **`non-player-arrow-despawn-rate: 20`**

> Tempo (em ticks) para flechas disparadas por mobs desaparecerem após colidir. Jogadores não podem pegá-las, então `20` (1 segundo) é ideal.

* **`creative-arrow-despawn-rate: 20`**

> Mesmo caso, mas para flechas disparadas por jogadores em modo criativo.

***

#### ⚙️ \[**pufferfish.yml**]

* **`disable-method-profiler: true`**

> **Esta opção** desativa o profiler adicional usado apenas em debug. Causa lag desnecessário em produção.

***

#### 🐬 \[**purpur.yml**]

* **`dolphin.disable-treasure-searching: true`**

> Evita que golfinhos façam busca de estruturas como mapas do tesouro.

* **`teleport-if-outside-border: true`**

> Teleporta o jogador para o spawn se ele sair da borda do mundo. Útil já que a borda vanilla pode ser burlada e o dano mitigado.

***

#### 🔐 \[**paper-world configuration**]

* **`anti-xray.enabled: true`**

> Esconde minérios de x-rayers. Impacta performance, mas ainda é mais leve que plugins de anti-xray. Recomendado.

* **`nether-ceiling-void-damage-height: 127`**

> Se maior que 0, jogadores acima dessa altura no Nether tomam dano como se estivessem no Void. Impede uso do teto do Nether. O valor ideal é `127`.

***

#### ☕ **Java - Início do Servidor**

> O Minecraft 1.20.5+ **requer Java 21 ou superior**. Use [Adoptium](https://adoptium.net/) ou [Amazon Corretto](https://aws.amazon.com/corretto/).\
> JVMs alternativas como OpenJ9 ou GraalVM **não são recomendadas**.

> Flags de inicialização otimizadas:\
> 🔗 [`Aikar’s flags`](https://docs.papermc.io/paper/aikars-flags)\
> 🔧 Gerador recomendado: [`flags.sh`](https://flags.sh)

> Para melhorar performance com SIMD, adicione:

```bash
--add-modules=jdk.incubator.vector
```

> antes do `-jar`. Isso acelera mapas de plugins como ImageOnMaps em até 8x.

***

#### 🚫 Plugins Problemáticos

**❌ Plugins que removem itens do chão**

> Inúteis. `merge-radius` e `alt-item-despawn-rate` fazem isso com mais eficiência.

**❌ Mob Stacker**

> Na maioria dos casos, **gera mais lag** do que ajuda, principalmente para mobs naturais. Só se justifica para **spawners em massa**.

**❌ Plugins que ativam/desativam outros plugins**

> Extremamente perigosos. Podem corromper dados e causar crashes. O comando `/reload` sofre dos mesmos problemas — veja [este post](https://madelinemiller.dev/blog/problem-with-reload/).

***

#### 📊 Diagnóstico de Lag

**`/mspt`**

> Mostra o tempo de processamento de ticks. Se os dois primeiros valores estiverem <50ms, o servidor está estável. O terceiro valor alto é normal ocasionalmente.

**🔥** [**Spark**](https://spark.lucko.me/)

> Plugin para profiling de CPU/RAM. Guia completo na [wiki oficial](https://spark.lucko.me/docs/).\
> Tutorial de análise de lag: [clique aqui](https://spark.lucko.me/docs/guides/Finding-lag-spikes)

**⏱️ Timings**

> Ferramenta básica de diagnóstico. Gere com `/timings paste`.\
> Prefira Spark para menor impacto. Tutoriais:\
> 🎥 [Como ler Timings - por Aikar](https://www.youtube.com/watch?v=T4J0A9l7bfQ)

***

#### 🧨 Exploits e Correções

> Veja exploits e como corrigi-los neste repositório:\
> 🔗 [GitHub - Exploits e Fixes](https://github.com/YouHaveTrouble/minecraft-exploits-and-how-to-fix-them)

***
