Links
Comment on page

Optimisation

Guide pour la version 1.20+. Certaines choses peuvent encore s'appliquer aux versions 1.15 à 1.19.
Pour les utilisateurs de version vanilla, Fabric ou Spigot (ou toute version inférieure à Paper) - allez dans votre fichier server.properties et changez sync-chunk-writes à false. Cette option est automatiquement définie sur false sur Paper et ses dérivés, mais sur d'autres implémentations de serveur, vous devez le passer à false manuellement. Cela permet au serveur de sauvegarder les chunks en dehors du thread principal, réduisant ainsi la charge sur la boucle principale d'exécution.

Il n'existera jamais de guide qui vous donnera des résultats parfaits. Chaque serveur a ses propres besoins et limites quant à ce que vous pouvez ou êtes prêt à sacrifier. Jouer avec les options pour les ajuster aux besoins de votre serveur est essentiel. Ce guide vise uniquement à vous aider à comprendre quelles options ont un impact sur les performances et ce qu'elles modifient exactement. Si vous pensez avoir trouvé des informations incorrectes dans ce guide, vous êtes libre d'ouvrir une demande et de proposer une modification pour le corriger.

JAR Serveur

Le choix de votre logiciel de serveur peut faire une énorme différence en termes de performances et de possibilités d'API. Actuellement, il existe plusieurs JARs de serveur populaires et viables, mais il y en a également quelques-uns que vous devriez éviter pour diverses raisons.
Choix recommandés en tête de liste :
  • Paper - Le logiciel de serveur le plus populaire qui vise à améliorer les performances tout en corrigeant les incohérences de gameplay et de mécaniques.
  • Pufferfish - Une version modifiée de Paper qui vise à améliorer encore davantage les performances du serveur.
  • Purpur - Une version modifiée de Pufferfish axée sur les fonctionnalités et la liberté de personnalisation.
Vous devriez éviter :
  • Tout JAR de serveur payant qui prétend offrir des fonctionnalités asynchrones - 99,99 % de chances d'être une arnaque.
  • Bukkit/CraftBukkit/Spigot - Extrêmement obsolète en termes de performances par rapport à d'autres logiciels de serveur disponibles.
  • Tout plugin/logiciel qui active/désactive/recharge des plugins en cours d'exécution. Voir cette section pour comprendre pourquoi.
  • De nombreuses versions dérivées de Pufferfish ou Purpur peuvent rencontrer des instabilités et d'autres problèmes. Si vous recherchez des gains de performances supplémentaires, optimisez votre serveur ou investissez dans une version personnalisée privée.

Pré-génération de la map

La pré-génération de la carte, grâce à diverses optimisations ajoutées au fil des ans pour la génération des chunks, est désormais uniquement utile sur les serveurs dotés de processeurs uniques, peu puissants ou limités. Cependant, la pré-génération est couramment utilisée pour générer les chunks pour des plugins de carte du monde tels que Pl3xMap ou Dynmap.
Si vous souhaitez toujours pré-générer le monde, vous pouvez utiliser un plugin tel que Chunky pour le faire. Assurez-vous de définir une limite de bordure de monde pour que vos joueurs ne génèrent pas de nouveaux chunks ! Notez que la pré-génération peut parfois prendre des heures en fonction du rayon que vous définissez dans le plugin de pré-génération. Gardez à l'esprit qu'avec Paper et versions supérieures, vos TPS (ticks par seconde) ne seront pas affectés par le chargement des chunks, mais la vitesse de chargement des chunks peut ralentir considérablement lorsque le processeur de votre serveur est surchargé.
N'oubliez pas que l'overworld, le nether et l'end ont des bordures de monde séparées qui doivent être définies pour chaque monde. La dimension du nether est 8 fois plus petite que l'overworld (sauf si modifiée avec un datapack), donc si vous définissez la taille incorrectement, vos joueurs pourraient se retrouver en dehors de la bordure du monde !
Assurez-vous de définir une bordure de monde vanilla (/worldborder set [diamètre]), car cela limite certaines fonctionnalités telles que la portée de recherche pour les cartes aux trésors qui peuvent causer des pics de lag.

Networking

[server.properties]

network-compression-threshold
Bonne valeur de départ : 256
Cela vous permet de définir la limite de taille d'un paquet avant que le serveur essaie de le compresser. Le fait de le régler plus haut peut économiser des ressources CPU au détriment de la bande passante, et le régler sur -1 le désactive complètement. Le fait de régler cette valeur plus haut peut également nuire aux clients ayant des connexions réseau plus lentes. Si votre serveur est sur un réseau avec un proxy ou sur la même machine (avec un ping de moins de 2 ms), le désactiver (-1) sera avantageux, car les vitesses du réseau interne peuvent généralement gérer le trafic non compressé supplémentaire.

[purpur.yml]

use-alternate-keepalive
Bonne valeur de départ : true
Vous pouvez activer le système de keepalive alternatif de Purpur afin que les joueurs ayant une mauvaise connexion ne soient pas déconnectés aussi souvent. Cependant, cela est connu pour être incompatible avec TCPShield.
En activant cela, un paquet keepalive est envoyé une fois par seconde à un joueur, et la déconnexion pour inactivité n'intervient que si aucun d'entre eux n'a reçu de réponse pendant 30 secondes. Répondre à l'un d'entre eux dans n'importe quel ordre maintiendra la connexion du joueur. Autrement dit, cela n'éjectera pas vos joueurs parce qu'un seul paquet est perdu quelque part dans les lignes. ~ https://purpurmc.org/docs/Configuration/#use-alternate-keepalive

Chunks

[server.properties]

simulation-distance
Bonne valeur de départ : 4
La simulation distance est la distance en chunks autour du joueur que le serveur va charger. Essentiellement, c'est la distance depuis le joueur où les choses se produiront. Cela inclut le fonctionnement des fours, la croissance des cultures et des pousses, etc. C'est une option que vous voulez délibérément définir sur une valeur basse, autour de 3 ou 4, en raison de l'existence de view-distance. Cela permet de charger plus de chunks sans les mettre en activité. Cela permet aux joueurs de voir plus loin sans avoir le même impact sur les performances.
view-distance
Bonne valeur de départ : 7
C'est la distance en chunks qui sera envoyée aux joueurs, similaire à la distance de vue sans tick de Paper.
La distance de vue totale sera égale à la plus grande valeur entre simulation-distance et view-distance. Par exemple, si la simulation distance est définie sur 4 et la view distance est de 12, la distance totale envoyée au client sera de 12 chunks.

[spigot.yml]

view-distance
Bonne valeur de départ : default
Cette valeur écrase celle du server.properties si elle n'est pas définie sur default. Vous devriez laisser la valeur par défaut pour avoir à la fois la simulation et la distance de vue au même endroit pour une gestion plus facile.

[paper-world configuration]

delay-chunk-unloads-by
Bonne valeur de départ : 10s
Cette option vous permet de configurer pendant combien de temps les chunks resteront chargés après que le joueur les a quittés. Cela évite de charger et décharger constamment les mêmes chunks lorsque le joueur va et vient. Des valeurs trop élevées peuvent entraîner le chargement de trop de chunks en même temps. Dans les zones où les téléportations sont fréquentes et chargent constamment la zone, envisagez de garder la zone chargée en permanence. Cela sera moins lourd pour votre serveur que de charger et décharger constamment les chunks.
max-auto-save-chunks-per-tick
Bonne valeur de départ : 8
Vous permet de ralentir la sauvegarde incrémentielle du monde en répartissant davantage la tâche dans le temps pour de meilleures performances moyennes. Vous voudrez peut-être définir cette valeur plus élevée que 8 avec plus de 20 à 30 joueurs. Si la sauvegarde incrémentielle ne parvient pas à se terminer à temps, Bukkit sauvegardera automatiquement les chunks restants en une fois et recommencera le processus.
prevent-moving-into-unloaded-chunks
Bonne valeur de départ : true
Lorsqu'il est activé, empêche les joueurs de se déplacer dans des chunks non chargés et de provoquer des chargements synchronisés qui ralentissent le thread principal et causent des lags. La probabilité qu'un joueur se retrouve dans un chunk non chargé est plus élevée si votre distance de vue (view-distance) est plus basse.
entity-per-chunk-save-limit
area_effect_cloud: 8
arrow: 16
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
wither_skull: 4
Grâce à cette entrée, vous pouvez définir des limites au nombre d'entités de chaque type qui peuvent être sauvegardées. Vous devriez fournir une limite pour chaque projectile au moins pour éviter les problèmes avec des quantités massives de projectiles sauvegardées, ce qui pourrait faire planter votre serveur lors du chargement. Vous pouvez utiliser l'ID de n'importe quelle entité ici, consultez la wiki de Minecraft pour trouver les IDs des entités. Veuillez ajuster la limite selon vos préférences. La valeur suggérée pour tous les projectiles est d'environ 10. Vous pouvez également ajouter d'autres entités en utilisant leurs noms de type dans cette liste. Cette option de configuration n'est pas conçue pour empêcher les joueurs de créer de grandes fermes de monstres.

[pufferfish.yml]

max-loads-per-projectile
Bonne valeur de départ : 8
Spécifie le nombre maximum de chunks qu'un projectile peut charger pendant sa durée de vie. Diminuer cette valeur réduira les chargements de chunks causés par les projectiles d'entité, mais pourrait entraîner des problèmes avec les tridents, les enderpearls, etc.

Mobs

[bukkit.yml]

spawn-limits
monsters: 20
animals: 5
water-animals: 2
water-ambient: 2
water-underground-creature: 3
axolotls: 3
ambient: 1
Le calcul de la limitation des mobs est [nombre-de-joueurs] * [limite], où "nombre-de-joueurs" est le nombre actuel de joueurs sur le serveur. Logiquement, plus les chiffres sont petits, moins vous verrez de mobs. per-player-mob-spawn applique une limite supplémentaire à cela, garantissant que les mobs sont répartis également entre les joueurs. Réduire cela est à double tranchant ; oui, votre serveur a moins de travail à faire, mais dans certains modes de jeu, les mobs générés naturellement sont une grande partie du gameplay. Vous pouvez aller aussi bas que 20 ou moins si vous ajustez correctement mob-spawn-range. En réduisant cette valeur, il semblera qu'il y a plus de mobs autour de chaque joueur. Si vous utilisez Paper, vous pouvez définir des limites de mobs par monde dans la [configuration de paper-world].
ticks-per
monster-spawns: 10
animal-spawns: 400
water-spawns: 400
water-ambient-spawns: 400
water-underground-creature-spawns: 400
axolotl-spawns: 400
ambient-spawns: 400
Cette option définit à quelle fréquence (en ticks) le serveur tente de faire apparaître certaines entités vivantes. Les mobs aquatiques / ambiants n'ont pas besoin d'apparaître à chaque tick car ils ne sont généralement pas tués aussi rapidement. Quant aux monstres : augmenter légèrement le temps entre les apparitions ne devrait pas affecter les taux d'apparition même dans les fermes à mobs. Dans la plupart des cas, toutes les valeurs de cette option devraient être supérieures à 1. Augmenter cela permet également à votre serveur de mieux gérer les zones où la génération de mobs est désactivée.

[spigot.yml]

mob-spawn-range
Bonne valeur de départ : 3
Vous permet de réduire la portée (en chunks) où les mobs apparaîtront autour du joueur. En fonction du mode de jeu de votre serveur et de son nombre de joueurs, vous voudrez peut-être réduire cette valeur avec les spawn-limits du [bukkit.yml]. En réduisant cela, il semblera qu'il y a plus de mobs autour de vous. Cela doit être inférieur ou égal à votre distance de simulation, et jamais plus grand que votre distance de désactivation maximale / 16.
entity-activation-range
animals: 16
monsters: 24
raiders: 48
misc:
water: 8
villagers: 16
flying-monsters: 48
Vous pouvez définir à quelle distance d'un joueur une entité doit être pour effectuer des ticks (faire des choses). Réduire ces valeurs améliore les performances, mais peut rendre les mobs non réactifs jusqu'à ce que le joueur se rapproche d'eux. Diminuer cela trop loin peut casser certaines fermes à mobs ; les fermes à fer étant la victime la plus courante.
entity-tracking-range
players: 48
animals: 48
monsters: 48
misc: 32
other: 64
Il s'agit de la distance en blocs à partir de laquelle les entités seront visibles. Elles ne seront simplement pas envoyées aux joueurs. Si cela est défini trop bas, cela peut donner l'impression que les mobs apparaissent de nulle part près d'un joueur. Dans la majorité des cas, cela devrait être supérieur à votre entity-activation-range.
tick-inactive-villagers
Bonne valeur de départ : false
Cela vous permet de contrôler si les villageois doivent effectuer des ticks en dehors de la plage d'activation. Cela permettra aux villageois de procéder normalement et d'ignorer la plage d'activation. La désactivation de cette option améliorera les performances, mais cela peut être déroutant pour les joueurs dans certaines situations. Cela peut entraîner des problèmes avec les fermes à fer et le réapprovisionnement des échanges.
nerf-spawner-mobs
Bonne valeur de départ : true
Vous pouvez faire en sorte que les mobs générés par un spawner de monstres n'aient pas d'IA. Les mobs nerfés ne feront rien. Vous pouvez les faire sauter dans l'eau en changeant spawner-nerfed-mobs-should-jump en true dans la [configuration de paper-world].

[paper-world configuration]

despawn-ranges
ambient:
hard: 56
soft: 30
axolotls:
hard: 56
soft: 30
creature:
hard: 56
soft: 30
misc:
hard: 56
soft: 30
monster:
hard: 56
soft: 30
underground_water_creature:
hard: 56
soft: 30
water_ambient:
hard: 56
soft: 30
water_creature:
hard: 56
soft: 30
Vous permet d'ajuster les distances de disparition des entités (en blocs). Réduisez ces valeurs pour éliminer plus rapidement les mobs qui sont loin du joueur. Vous devriez garder une plage douce d'environ 30 et ajuster la plage dure à un peu plus que votre distance de simulation réelle, afin que les mobs ne disparaissent pas immédiatement lorsque le joueur va juste au-delà du point d'un chunk chargé (cela fonctionne bien grâce à delay-chunk-unloads-by dans la [configuration de paper-world]). Lorsqu'un mob est hors de la plage dure, il disparaîtra instantanément. Lorsqu'il se trouve entre la plage douce et la plage dure, il aura une chance aléatoire de disparaître. Votre plage dure devrait être plus grande que votre plage douce. Vous devriez ajuster cela en fonction de votre distance de vue en utilisant (simulation-distance * 16) + 8. Cela tient partiellement compte des chunks qui n'ont pas encore été déchargés après la visite du joueur.
per-player-mob-spawns
Bonne valeur de départ : true
Cette option décide si les apparitions de mobs doivent tenir compte du nombre de mobs autour du joueur cible. Vous pouvez contourner de nombreux problèmes liés aux apparitions de mobs étant incohérentes en raison des joueurs créant des fermes qui utilisent l'intégralité de la limite de mobs. Cela permettra une expérience d'apparition plus similaire à celle du mode solo, vous permettant de définir des spawn-limits plus bas. Activer cela entraîne une très légère baisse des performances, mais son impact est surpassé par les améliorations dans les spawn-limits qu'il permet.
max-entity-collisions
Bonne valeur de départ : 2
Remplace l'option du même nom dans [spigot.yml]. Vous permet de décider combien de collisions une entité peut traiter à la fois. Une valeur de 0 empêchera l'entité de pousser d'autres entités, y compris les joueurs. Une valeur de 2 devrait être suffisante dans la plupart des cas. Il est important de noter que cela rendra inutile la règle de jeu maxEntityCramming si sa valeur est supérieure à la valeur de cette option de configuration.
update-pathfinding-on-block-update
Bonne valeur de départ : false
En désactivant cela, moins de recherche de chemin sera effectuée, ce qui améliore les performances. Dans certains cas, cela rendra les mobs plus lents ; ils mettront simplement à jour leur chemin toutes les 5 ticks (0,25 sec).
fix-climbing-bypassing-cramming-rule
Bonne valeur de départ : true
En activant cela, les entités ne seront pas affectées par l'étranglement lorsqu'elles grimpent. Cela empêchera des quantités absurdes de mobs empilés dans de petits espaces même s'ils grimpent (araignées).
armor-stands.tick
Bonne valeur de départ : false
Dans la plupart des cas, vous pouvez le régler sur false. Si vous utilisez des présentoirs d'armure ou des plugins qui modifient leur comportement et que vous rencontrez des problèmes, réactivez-le. Cela empêchera les présentoirs d'armure d'être poussés par l'eau ou d'être affectés par la gravité.
armor-stands.do-collision-entity-lookups
Bonne valeur de départ : false
Vous pouvez désactiver les collisions des présentoirs d'armure avec cette option. Cela vous aidera si vous avez beaucoup de présentoirs d'armure et que vous n'avez pas besoin qu'ils entrent en collision avec quoi que ce soit.
tick-rates
behavior:
villager:
validatenearbypoi: 60
acquirepoi: 120
sensor:
villager:
secondarypoisensor: 80
nearestbedsensor: 80
villagerbabiessensor: 40
playersensor: 40
nearestlivingentitysensor: 40
Il n'est pas recommandé de modifier ces valeurs par défaut lorsque DAB de Pufferfish est activé !
Cela décide à quelle fréquence (en ticks) les comportements et capteurs spécifiés sont déclenchés. acquirepoi pour les villageois semble être le comportement le plus lourd, donc il a été fortement augmenté. Diminuez-le en cas de problèmes avec les villageois qui trouvent leur chemin.

[pufferfish.yml]

dab.enabled
Bonne valeur de départ : true
DAB (activation dynamique du cerveau) réduit la quantité de ticks d'une entité plus éloignée des joueurs. DAB fonctionne sur un gradient plutôt qu'un arrêt brutal comme EAR. Au lieu de faire entièrement fonctionner les entités proches et à peine fonctionner les entités éloignées, DAB réduit la quantité de ticks d'une entité en fonction du résultat d'un calcul influencé par dab.activation-dist-mod.
dab.max-tick-freq
Bonne valeur de départ : 20
Définit la fréquence la plus lente à laquelle les entités les plus éloignées des joueurs seront mises à jour. Augmenter cette valeur peut améliorer les performances des entités loin de la vue, mais peut casser des fermes ou grandement affaiblir le comportement des mobs. Si l'activation de DAB casse les fermes à mobs, essayez de diminuer cette valeur.
dab.activation-dist-mod
Bonne valeur de départ : 7
Contrôle le gradient selon lequel les mobs sont activés. En diminuant cela, DAB sera activé plus près des joueurs, améliorant les gains de performances de DAB, mais cela affectera la façon dont les entités interagissent avec leur environnement et peut casser les fermes à mobs. Si l'activation de DAB casse les fermes à mobs, essayez d'augmenter cette valeur.
enable-async-mob-spawning
Bonne valeur de départ : true
Active l'apparition de mobs asynchrone. Pour que cela fonctionne, le paramètre per-player-mob-spawns de Paper doit être activé. Cette option ne fait pas apparaître réellement les mobs de manière asynchrone, mais décharge une grande partie de l'effort de calcul lié à l'apparition de nouveaux mobs vers un autre thread. L'activation de cette option ne devrait pas être perceptible dans le gameplay vanilla.
enable-suffocation-optimization
Bonne valeur de départ : true
Cette option optimise la vérification d'étouffement (la vérification pour voir si un mob est à l'intérieur d'un bloc et s'il doit subir des dégâts d'étouffement), en limitant le taux de vérification à la limite des dégâts. Cette optimisation ne devrait pas être perceptible à moins que vous ne soyez un joueur extrêmement technique utilisant un timing précis pour tuer une entité exactement au bon moment par suffocation.
inactive-goal-selector-throttle
Bonne valeur de départ : true
Limite le sélecteur d'objectifs de l'IA dans les ticks inactifs des entités, ce qui fait que les entités inactives mettent à jour leur sélecteur d'objectifs toutes les 20 ticks au lieu de chaque tick. Peut améliorer les performances de quelques pourcents et a des implications mineures sur le gameplay.

[purpur.yml]

zombie.aggressive-towards-villager-when-lagging
Bonne valeur de départ : false
En activant cela, les zombies cesseront de cibler les villageois si le serveur est en dessous du seuil de tps défini avec lagging-threshold dans [purpur.yml].
entities-can-use-portals
Bonne valeur de départ : false
Cette option peut désactiver l'utilisation des portails pour toutes les entités, à l'exception du joueur. Cela empêche les entités de charger des chunks en changeant de monde, ce qui est géré sur le thread principal. Cela a pour effet secondaire que les entités ne peuvent pas passer par des portails.
villager.lobotomize.enabled
Bonne valeur de départ : true
Cela ne doit être activé que si les villageois causent des lags ! Sinon, les vérifications de recherche de chemin peuvent réduire les performances.
Les villageois lobotomisés sont dépourvus de leur IA et se contentent de réapprovisionner leurs offres de temps en temps. Activer cela lobotomisera les villageois qui ne peuvent pas trouver de chemin vers leur destination. Les libérer les délobotomisera.

Misc

[spigot.yml]

merge-radius
item: 3.5
exp: 4.0
Cela détermine la distance entre les objets et les orbes d'expérience à fusionner, réduisant ainsi le nombre d'objets qui s'accumulent au sol. Définir cette valeur trop élevée donnera l'illusion que les objets ou les orbes d'expérience disparaissent lorsqu'ils fusionnent ensemble. Un réglage trop élevé peut également causer des problèmes avec certaines fermes et permettre aux objets de se téléporter à travers les blocs. Aucune vérification n'est effectuée pour empêcher les objets de fusionner à travers les murs. L'expérience n'est fusionnée qu'à sa création.
hopper-transfer
Bonne valeur de départ : 8
Temps en ticks pendant lequel les entonnoirs attendront pour déplacer un objet. Augmenter cette valeur améliorera les performances s'il y a beaucoup d'entonnoirs sur votre serveur, mais cela pourra casser les horloges basées sur les entonnoirs et les systèmes de tri d'objets si la valeur est trop élevée.
hopper-check
Bonne valeur de départ : 8
Temps en ticks entre les vérifications des entonnoirs pour voir s'il y a un objet au-dessus d'eux ou dans l'inventaire au-dessus d'eux. Augmenter cette valeur améliorera les performances s'il y a beaucoup d'entonnoirs sur votre serveur, mais cela pourra casser les horloges basées sur les entonnoirs et les systèmes de tri d'objets reposant sur des flux d'eau.

[paper-world configuration]

alt-item-despawn-rate
enabled: true
items:
cobblestone: 300
netherrack: 300
sand: 300
red_sand: 300
gravel: 300
dirt: 300
grass: 300
pumpkin: 300
melon_slice: 300
kelp: 300
bamboo: 300
sugar_cane: 300
twisting_vines: 300
weeping_vines: 300
oak_leaves: 300
spruce_leaves: 300
birch_leaves: 300
jungle_leaves: 300
acacia_leaves: 300
dark_oak_leaves: 300
mangrove_leaves: 300
cactus: 300
diorite: 300
granite: 300
andesite: 300
scaffolding: 600
Cette liste vous permet de définir le temps (en ticks) de désapparition de certains types d'objets jetés plus rapidement ou plus lentement que la valeur par défaut. Cette option peut être utilisée à la place de plugins de nettoyage d'objets en combinaison avec merge-radius pour améliorer les performances.
redstone-implementation
Bonne valeur de départ : ALTERNATE_CURRENT
Remplace le système de redstone par des versions plus rapides et alternatives qui réduisent les mises à jour redondantes des blocs, réduisant ainsi le calcul logique que votre serveur doit effectuer. L'utilisation d'une implémentation non standard peut introduire de légères incohérences avec des mécanismes redstone très techniques, mais les gains de performances l'emportent largement sur les éventuels problèmes techniques mineurs. Une option d'implémentation non standard peut également corriger d'autres incohérences de redstone causées par CraftBukkit.
L'implémentation ALTERNATE_CURRENT est basée sur le mod Alternate Current. Vous pouvez trouver plus d'informations sur cet algorithme sur leur page de ressources.
hopper.disable-move-event
Bonne valeur de départ : false
L'événement InventoryMoveItemEvent ne se déclenche que s'il y a un plugin qui écoute cet événement. Cela signifie que vous ne devez définir cette valeur sur true que si vous avez de tels plugins et que cela ne vous dérange pas qu'ils ne puissent pas agir sur cet événement. Ne le réglez pas sur true si vous souhaitez utiliser des plugins qui écoutent cet événement, par exemple des plugins de protection !
hopper.ignore-occluding-blocks
Bonne valeur de départ : true
Détermine si les entonnoirs ignoreront les conteneurs à l'intérieur des blocs pleins, par exemple les wagonnets-entonnnoirs à l'intérieur d'un bloc de sable ou de gravier. Le maintien de cette option activée peut casser certaines constructions qui dépendent de ce comportement.
tick-rates.mob-spawner
Bonne valeur de départ : 2
Cette option vous permet de configurer la fréquence à laquelle les spawners doivent être actualisés. Des valeurs plus élevées réduisent les lags si vous avez beaucoup de spawners, bien que des valeurs trop élevées (par rapport au délai de vos spawners) entraîneront une diminution du taux d'apparition des créatures.
optimize-explosions
Bonne valeur de départ : true
En mettant cette option à true, vous remplacez l'algorithme d'explosion standard par un algorithme plus rapide, au détriment d'une légère imprécision lors du calcul des dégâts d'explosion. Cela n'est généralement pas perceptible.
treasure-maps.enabled
Bonne valeur de départ : false
La génération des cartes au trésor est extrêmement coûteuse et peut bloquer le serveur si la structure qu'elle essaie de localiser se trouve dans un chunk non généré. Il est donc sécurisé d'activer cette option si vous avez pré-généré votre monde et défini une bordure de monde vanilla.
treasure-maps.find-already-discovered
loot-tables: true
villager-trade: true
La valeur par défaut de cette option oblige les nouvelles cartes générées à rechercher des structures non explorées, qui se trouvent généralement dans des chunks non générés. En définissant cette valeur sur true, les cartes pourront mener aux structures déjà découvertes. Si vous ne modifiez pas cela en true, votre serveur risque de se bloquer ou de planter lors de la génération de nouvelles cartes au trésor. villager-trade concerne les cartes échangées par les villageois et loot-tables se réfère à tout ce qui génère du butin dynamiquement, comme les coffres au trésor, les coffres de donjon, etc.
tick-rates.grass-spread
Bonne valeur de départ : 4
Temps en ticks entre les tentatives de propagation de l'herbe ou du mycélium par le serveur. Cela fera en sorte que de grandes zones de terre mettent un peu plus de temps à se transformer en herbe ou en mycélium. Mettre cette valeur à environ 4 devrait bien fonctionner si vous souhaitez la diminuer sans que la diminution du taux de propagation soit perceptible.
tick-rates.container-update
Bonne valeur de départ : 1
Temps en ticks entre les mises à jour des conteneurs. Augmenter cette valeur peut aider si les mises à jour des conteneurs posent des problèmes (ce qui est rare), mais cela facilite la désynchronisation des joueurs lorsqu'ils interagissent avec les inventaires (objets fantômes).
non-player-arrow-despawn-rate
Bonne valeur de départ : 20
Temps en ticks après lequel les flèches tirées par les créatures doivent disparaître après avoir touché quelque chose. Les joueurs ne peuvent pas les ramasser de toute façon, vous pouvez donc régler cette valeur à environ 20 (1 seconde).
creative-arrow-despawn-rate
Bonne valeur de départ : 20
Temps en ticks après lequel les flèches tirées par les joueurs en mode créatif doivent disparaître après avoir touché quelque chose. Les joueurs ne peuvent pas les ramasser de toute façon, vous pouvez donc régler cette valeur à environ 20 (1 seconde).

[pufferfish.yml]

disable-method-profiler
Bonne valeur de départ : true
Cette option désactivera certains profils supplémentaires effectués par le jeu. Ces profils ne sont pas nécessaires en production et peuvent causer des lags supplémentaires.

[purpur.yml]

dolphin.disable-treasure-searching
Bonne valeur de départ : true
Empêche les dauphins d'effectuer des recherches de structures similaires aux cartes au trésor.
teleport-if-outside-border
Bonne valeur de départ : true
Vous permet de téléporter le joueur au point d'apparition du monde s'il se trouve à l'extérieur de la bordure du monde. C'est utile car la bordure du monde vanilla peut être contournée et les dégâts qu'elle inflige au joueur peuvent être atténués.

Aides

[Configuration paper-world]

anti-xray.enabled
Bonne valeur de départ : true
Activez ceci pour masquer les minerais des tricheurs X-ray. Pour une configuration détaillée de cette fonctionnalité, consultez Configuring Anti-Xray. Activer cette fonctionnalité diminuera effectivement les performances, mais c'est beaucoup plus efficace que n'importe quel plugin anti-Xray. Dans la plupart des cas, l'impact sur les performances sera négligeable.
nether-ceiling-void-damage-height
Bonne valeur de départ : 127
Si cette option est supérieure à 0, les joueurs au-dessus de la hauteur définie subiront des dégâts comme s'ils étaient dans le vide. Cela empêchera les joueurs d'utiliser le toit du Nether. Le Nether vanille mesure 128 blocs de hauteur, donc vous devriez probablement le régler sur 127. Si vous modifiez la hauteur du Nether de quelque manière que ce soit, vous devrez définir cette valeur sur [votre_hauteur_du_Nether] - 1.

La version 1.19 de Minecraft vanilla et des logiciels de serveur Minecraft nécessite Java 17 ou une version supérieure. Oracle a modifié sa licence et il n'y a plus de raison impérative de l'obtenir auprès d'eux. Les fournisseurs recommandés sont Adoptium et Amazon Corretto. Les implémentations JVM alternatives telles qu'OpenJ9 ou GraalVM peuvent fonctionner, mais elles ne sont pas prises en charge par Paper et ont été connues pour causer des problèmes, elles ne sont donc actuellement pas recommandées.
Vous pouvez configurer votre ramasse-miettes (garbage collector) pour réduire les pics de lag causés par les tâches du ramasse-miettes volumineuses. Vous pouvez trouver des drapeaux de démarrage optimisés pour les serveurs Minecraft ici SOG. Gardez à l'esprit que cette recommandation ne fonctionnera pas sur les implémentations JVM alternatives. Il est recommandé d'utiliser le générateur de drapeaux de démarrage flags.sh pour obtenir les bons drapeaux de démarrage pour votre serveur.
De plus, l'ajout du drapeau bêta --add-modules=jdk.incubator.vector avant -jar dans vos drapeaux de démarrage peut améliorer les performances. Ce drapeau permet à Pufferfish d'utiliser des instructions SIMD sur votre CPU, rendant certaines opérations mathématiques plus rapides. Actuellement, il est utilisé uniquement pour rendre le rendu des cartes de plugins en jeu (comme imageonmaps) potentiellement 8 fois plus rapide.

Plugins supprimant les objets au sol

Absolument inutile car ils peuvent être remplacés par merge-radius et alt-item-despawn-rate, et franchement, ils sont moins configurables que les configurations de base du serveur. Ils ont tendance à utiliser plus de ressources pour scanner et supprimer les objets qu'à ne pas les supprimer du tout.

Plugins de stack de mobs

Il est vraiment difficile de justifier leur utilisation. L'empilement d'entités générées naturellement cause plus de lag que de ne pas les empiler du tout, car le serveur essaie constamment de faire apparaître plus de monstres. Le seul cas d'utilisation "acceptable" est pour les générateurs de monstres sur les serveurs avec un grand nombre de générateurs.

Plugins activant/désactivant d'autres plugins

Tout ce qui active ou désactive des plugins en cours d'exécution est extrêmement dangereux. Le chargement d'un plugin de ce type peut provoquer des erreurs fatales avec des données de suivi, et la désactivation d'un plugin peut entraîner des erreurs dues à la suppression de dépendances. La commande /reload souffre exactement des mêmes problèmes, et vous pouvez en savoir plus à leur sujet dans l'article de blog de me4502

mspt

Paper propose une commande /mspt qui vous indiquera le temps que le serveur a pris pour calculer les ticks récents. Si les deux premières valeurs que vous voyez sont inférieures à 50, alors félicitations ! Votre serveur ne subit pas de lag ! Si la troisième valeur est supérieure à 50, cela signifie qu'il y a eu au moins 1 tick qui a pris plus de temps. C'est tout à fait normal et cela arrive de temps en temps, donc ne paniquez pas.

Spark

Spark est un plugin qui vous permet de profiler l'utilisation du CPU et de la mémoire de votre serveur. Vous pouvez en savoir plus sur son utilisation sur son wiki. Il y a également un guide sur la façon de trouver la cause des pics de lag ici.

Timings

La méthode pour voir ce qui se passe lorsque votre serveur est en train de laguer est Timings. Timings est un outil qui vous permet de voir exactement quelles tâches prennent le plus de temps. C'est l'outil de dépannage le plus basique et si vous demandez de l'aide concernant des lags, on vous demandera très probablement vos Timings. Timings est connu pour avoir un impact sérieux sur les performances des serveurs, il est donc recommandé d'utiliser le plugin Spark à la place et d'utiliser Purpur ou Pufferfish pour désactiver complètement Timings.
Pour obtenir les Timings de votre serveur, il vous suffit d'exécuter la commande /timings paste et de cliquer sur le lien qui vous est fourni. Vous pouvez partager ce lien avec d'autres personnes pour qu'elles vous aident. Cela peut aussi être facilement mal interprété si vous ne savez pas ce que vous faites. Il existe un tutoriel vidéo détaillé par Aikar sur la façon de les lire.