# 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 é:\
\&#xNAN;**\[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)

***


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.rededirt.com/testept-br.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
