OldBiomes

gael75014

Aventurier
13 Août 2012
4
0
1
28
Bonsoir et désolé de peut-être déranger certains avec ce post.
Lors du passage de Minecraft de la beta 1.7.3 à la 1.8, L’algorithme de génération de terrain à été revu, ainsi que les biomes, qui se basent à présent sur les fractales, me semble t'il.
Un choix à du être fait par les administrateurs:
- Créer une nouvelle carte.
- Continuer sur l'ancienne.
Ce dernier choix a mené à l'apparition de nouveaux plugins de génération de terrain, permettant ainsi d'avoir une carte 1.7.3 se générant normalement.
Cependant, un soucis persiste: Les biomes sont ceux de la 1.2.5, c'est à dire qu'un désert peut tout à fait être considéré comme toundra et être recouvert de neige.
Lors de la 1.2.5, le format Anvil est arrivé, avec une fonctionnalité attendue depuis longtemps:
Les biomes étaient sauvegardés et non calculés à chaque chargement.
Mon plugin, OldBiomes, a pour but de, dans un rayon donné, calculer le biome de chaque bloc avec l’algorithme de calcul de biomes de la 1.7.3 et stocker ce biome, réglant ainsi les problèmes de biomes mal placés.

Voici ainsi un exemple issu de notre serveur, minelab:
Avant d'utiliser OldBiomes, nous avions ce "désert-Toundra":
2012-08-08_07.47.36.png


Après son utilisation, le bon biome était assigné (La commande unfreeze n'avait pas encore codée à l'époque du screenshot, les blocs de neiges n'ont pas été retirés):
2012-08-08_07.48.32.png


L'algorithme étant celui utilisé, la précision est assurée au bloc près par rapport à la 1.7.3:
2012-08-08_07.50.56.png


2012-08-08_07.51.05.png


Le plugin dispose de deux commandes:
/OldBiomes <coté> , ou /ob <coté> calcule et enregistre les biomes dans un carré de longueur coté et de centre le joueur.
/unfreeze <coté> enlève la neige (pas le bloc de neige, uniquement la naturelle) et remplace la glace par de l'eau dans les biomes n'étant pas toundra.

Il faut cependant noter que unfreeze, même si elle n'affecte que le bloc le plus haut, ne fonctionne pas si ce dernier est au dessus de y=90, et peut provoquer une utilisation d'au moins 1.5 GO de RAM et beaucoup de lag si coté est supérieur à 2000.
Le serveur étant inaccessible pendant le calcul, il vaut mieux faire morceaux par morceaux, ou bien lancer le serveur avec assez de mémoire (une partition swap de plusieurs GO et une utilisation équivalente de -Xms et -Xmx est conseillée, afin d'éviter un outOfMemory du serveur) et lancer le calcul pendant un moment ou personne n'est connecté.

Pensez a vérifier que le seed du level.dat correspond bien à celui avec lequel le monde à été généré, afin d'éviter les mauvaises surprises.

Voici le lien pour le plugin (J'ai indiqué 1.2.5 mais il est théoriquement compatible 1.3):
http://dev.bukkit.org/server-mods/oldbiomes/
 

ventrail

Graphiste amateur
16 Août 2011
173
2
124
Hum. Hum.. Algorithme... Mathématique... Impressionné moi je dis ;)
Tu as bien du mettre du temps dedans. Bravo
 

gael75014

Aventurier
13 Août 2012
4
0
1
28
Pas tant que ça; c'est surtout le débugage qui a pris du temps (Il fallait recupérer les classes de calcul du biomes et les rendre indépendante du reste du code source, et il y avait des problèmes de fuites mémoires comme pour le unfreeze en ce moment... Surtout que c'est pas très optimisé pour l'instant: un unfreeze sur du 2500 demande entre 2500*2500*1 = 6250000 et 2500*2500*26 = 162500000 avec un niveau de la mer à 64...), et en soit, le plugin marche de manière vraiment basique (La seule partie difficile est celle codée par notch ^^) Mais merci beaucoup.