Générer une structure
-
@‘isador34’:
regarde le code de génération des coffre dans les mineshaft
Il passe par une classe annexe, il te faut créer une classe hériter de ChestGenHooks et de recréer se qui faut après regarde dans le donjons (moins complexe que le mineshaft).
-
world.isAirBlock(x, y, z) n’est pas la pour rien. (tutoriel modifié).
-
Excellent tutoriel :D, donc si je comprends bien, on peu générer par exemple des plantes sur la grass ? (Ce n’est pas que pour les grosses structures)
-
Merci
Oui en effet, on peux générer de l’herbe avec ça 
-
Ah vraiment bien

-
Super tuto et très utile ! Maintenant pour ce qui est de très grande structure existe t-il des logiciels permettant de créer son “donjon” et ensuite de l’exporter en JAVA ?
-
Il me semble avoir vu un logiciel pour convertir ses .schematic en Java, je crois que c’était sur les Minecraft Forums.
-
Merci j’ai trouver je pense voici pour ceux que cela intéresse

-
ça ne marcheras pas, ce logiciel était prévu dans la partie bonus avant de me rendre compte qu’il ne marche pas en 1.7

-
Le logiciel fonctionne, il donne juste du code erroné car il n’a pas été mis à jour depuis longtemps.
-
Le code est vraiment érroné où il suffit juste de changer la fonction (les coordonnées et les blocs y sont) ?
-
Changer la fonction + ajouter ,3
-
Existe t-il d’autres logiciels pour la conversion de Shematics en JAVA compatible avec la 1.7 ?
-
Je ne crois pas.
-
Bonjour, j’ai suivi le tuto (et utilisé mon expérience passée) et j’ai créé une structure. Problème :
Alors que le code de génération s’exécute (tests au System.out.print), la structure ne se génère pas.
Un peu d’aide ?DragonsWorldGenerator :
public class DragonsWorldGenerator implements IWorldGenerator { private static boolean hasGeneratedDungeon = false; @Override public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) { switch(world.provider.dimensionId) { /*case 1: this.generateEnd(world, chunkX * 16, chunkZ * 16, random);*/ case 0: this.generateSurface(world, chunkX * 16, chunkZ * 16, random); /*case -1: this.generateNether(world, chunkX * 16, chunkZ * 16, random);*/ } } private void generateSurface(World world, int x, int z, Random random) { // Sera migré vers generateNether if(hasGeneratedDungeon == false) { hasGeneratedDungeon = true; (new WorldGenNetherDungeon()).generate(world, random, x + 10, 128 /*Valeur de test*/, z +10); } } private void generateNether(World world, int x, int z, Random random) { } private void generateEnd(World world, int x, int z, Random random) { } }WorldGenNetherDungeon :
import java.util.Random; import net.minecraft.init.Blocks; import net.minecraft.world.World; import net.minecraft.world.gen.feature.WorldGenerator; public class WorldGenNetherDungeon extends WorldGenerator { @Override public boolean generate(World world, Random rand, int x, int y, int z) { if(world.getBlock(x, y - 1, z) == Blocks.air) { clearZone(world, rand, x, y, z); generateGround(world, rand, x, y, z); generateFort(world, rand, x, y, z); System.out.println("[Dragons][Normal] GENERATED THE STRUCTURE."); // Test return true; } return false; } public void clearZone(World world, Random rand, int x, int y, int z) { // Caché ;p utilisation des world.setBlockToAir(x, y, z); } public void generateGround(World world, Random rand, int x, int y, int z) { // Caché ;p utilisation des world.setBlock(x, y, z, Blocks.block) } public void generateFort(World world, Random rand, int x, int y, int z) { generateTowers(world, rand, x, y, z); generateFloor1(world, rand, x, y, z); } public void generateTowers(World world, Random rand, int x, int y, int z) { // Caché ;p } public void generateFloor1(World world, Random rand, int x, int y, int z) { // Caché ;p } } -
if(!hasGeneratedDungeon) { hasGeneratedDungeon = (new WorldGenNetherDungeon()).generate(world, random, x + 10, 128 /*Valeur de test*/, z +10); }Fait comme ça.
-
Cette fois, le jeu me renvoie une erreur : [Rapport trop long pour ce message] https://www.mediafire.com/?lxitifcn3p4mmi6
(Désolé je verrais un peu plus tard pour Github) -
Forcement, tu n’as pas mit des valeurs random, et comme il n’y pas réussi à faire spawn sur les coordonnés que tu as donnés (surement car il n’y a pas d’air) ça a fait une boucle infini …
Et pour les gros logs, pastebin, mediafire c’est horrible u_U.
-
Oui mais ça continue à crasher (en y pensant, c’est logique, c’est pas des coordonnées qui vont faire crasher. Si ?).
De plus, là où la structure devait se générer (tests), les blocs n’atteignaient pas plus de la couche 79….EDIT : Il semble que ce soit l’utilisation du “hasGeneratedDungeon” qui fasse tout bugger.
EDIT II : Ma structure se génère normalement.
EDIT III : Je note que ça laggue beaucoup pendant le chargement du monde (après spawn, bugs de chunk de plusieurs minutes) est-ce que quelqu’un connaîtrai une technique moins lourde que des for() et des setblock ? -
@‘MrBlockTNT’:
Oui mais ça continue à crasher (en y pensant, c’est logique, c’est pas des coordonnées qui vont faire crasher. Si ?).
Si.
Regarde bien ce que tu as fait. La fonction generateSurface est appelé régulièrement, et toi tu essayes de faire spawner la structure sur des coordonnées fixes. Sauf que la fonction generate de WorldGenNetherDungeon ne return que true si la structure a été généré, donc si tu mets des coordonnés fixe où il n’y a pas d’air, il va essayer à chaque fois de le générer.Pour les grosses structures (mines abandonnés, forts) minecraft utilise un autre code mais il est plus difficile à comprendre.

