MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Problème Generation Strucutre

    Planifier Épinglé Verrouillé Déplacé Résolu 1.12.x
    1.12.2
    6 Messages 2 Publieurs 289 Vues 2 Watching
    Charger plus de messages
    • Du plus ancien au plus récent
    • Du plus récent au plus ancien
    • Les plus votés
    Répondre
    • Répondre à l'aide d'un nouveau sujet
    Se connecter pour répondre
    Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
    • GregoirelpvG Hors-ligne
      Gregoirelpv
      dernière édition par

      Bonjour j’ai générer une structure pour mon custom biome mais elle ne s’affiche pas. J’ai mis un System.out.println(“Structure add”) a la fin du WorldGenCustomStructure pour voir si il la générait vraiment, et le “Structure add” s’affiche bien. J’ai refais la structure en .nbt dans le dossier “structures” mais ca ne marche toujours pas. Voila mes class:

      WorldGenCustomStructure:

      public static final WorldGenStructure ARMOURY = new WorldGenStructure("armoury");
      	
      	@Override
      	public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator, IChunkProvider chunkProvider) 
      	{
      		switch(world.provider.getDimension())
      		{
      		case 2:
      			
      			break;
      			
      		case 1:
      			
      			break;
      			
      		case 0:
      			
      			generateStructure(ARMOURY, world, random, chunkX, chunkZ, 20, ModBlocks.SEDIMENT_STONE, BiomeCobalte.class);
      			
      			break;
      			
      		case -1:
      			
      		}
      	}
      	
      	private void generateStructure(WorldGenerator generator, World world, Random random, int chunkX, int chunkZ, int chance, Block topBlock, Class<?>... classes)
      	{
      		ArrayList<Class<?>> classesList = new ArrayList<Class<?>>(Arrays.asList(classes));
      		
      		int x = (chunkX * 16) + random.nextInt(15);
      		int z = (chunkZ * 16) + random.nextInt(15);
      		int y = calculateGenerationHeight(world, x, z, topBlock);
      		BlockPos pos = new BlockPos(x,y,z);
      		
      		Class<?> biome = world.provider.getBiomeForCoords(pos).getClass();
      		
      		if(world.getWorldType() != WorldType.FLAT)
      		{
      			if(classesList.contains(biome))
      			{
      				if(random.nextInt(chance) == 0)
      				{
      					generator.generate(world, random, pos);
      				}
      			}
      		}
      		System.out.println("Structure add");
      	}
      	
      	private static int calculateGenerationHeight(World world, int x, int z, Block topBlock)
      	{
      		int y = world.getHeight();
      		boolean foundGround = false;
      		
      		while(!foundGround && y-- >= 0)
      		{
      			Block block = world.getBlockState(new BlockPos(x,y,z)).getBlock();
      			foundGround = block == topBlock;
      		}
      		
      		return y;
      	}
      

      WorldGenStructure:

      public abstract class WorldGenStructure extends WorldGenerator implements IStructure
      {
      	public static String structureName;
      	
      	public WorldGenStructure(String name) 
      	{
      		this.structureName = name;
      	}
      	
      	@Override
      	public boolean generate(World worldIn, Random rand, BlockPos position) 
      	{
      		this.generateStructure(worldIn, position);
      		return true;
      	}
      	
      	public static void generateStructure(World world, BlockPos pos)
      	{
      		MinecraftServer mcServer = world.getMinecraftServer();
      		TemplateManager manager = worldServer.getStructureTemplateManager();
      		ResourceLocation location = new ResourceLocation(refs.MODID, structureName);
      		Template template = manager.get(mcServer, location);
      		
      		if(template != null)
      		{
      			IBlockState state = world.getBlockState(pos);
      			world.notifyBlockUpdate(pos, state, state, 3);
      			template.addBlocksToWorldChunk(world, pos, settings);
      		}
      	}
      @Override
      	public void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator,
      			IChunkProvider chunkProvider) {
      		// TODO Auto-generated method stub
      		
      	}
      
      
      }
      

      IStructure

      package fr.gregoirelpv.gmv1.utils;
      
      import java.util.Random;
      
      import net.minecraft.util.Mirror;
      import net.minecraft.util.Rotation;
      import net.minecraft.world.World;
      import net.minecraft.world.WorldServer;
      import net.minecraft.world.chunk.IChunkProvider;
      import net.minecraft.world.gen.IChunkGenerator;
      import net.minecraft.world.gen.structure.template.PlacementSettings;
      import net.minecraftforge.fml.common.FMLCommonHandler;
      
      public interface IStructure {
      	public static final WorldServer worldServer = FMLCommonHandler.instance().getMinecraftServerInstance().getWorld(0);
      	public static final PlacementSettings settings = (new PlacementSettings()).setChunk(null).setIgnoreEntities(false).setIgnoreStructureBlock(false).setMirror(Mirror.NONE).setRotation(Rotation.NONE);
      	void generate(Random random, int chunkX, int chunkZ, World world, IChunkGenerator chunkGenerator,
      			IChunkProvider chunkProvider);
      }
      
      

      Voila avec ca la structure ne 'affiche pas

      Merci

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002R Hors-ligne
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs
        dernière édition par

        Non, ça me semble bon, sur un de mes mods j’utilise juste addBlocksToWorldChunk comme toi.

        Ton fichier armoury.nbt se trouve où ?

        1 réponse Dernière réponse Répondre Citer 0
        • robin4002R Hors-ligne
          robin4002 Moddeurs confirmés Rédacteurs Administrateurs
          dernière édition par

          Salut,

          Ton System.out.println("Structure add"); n’est pas au bon endroit pour vérifier la génération, il aurait fallu le mettre au même niveau que generator.generate(world, random, pos);
          à mon avis une des deux conditions ne passent pas.

          (au passage je ne comprends pas l’intérêt de ton interface IStructure, dont tu ne semble pas utiliser la fonction generate).

          1 réponse Dernière réponse Répondre Citer 0
          • GregoirelpvG Hors-ligne
            Gregoirelpv
            dernière édition par Gregoirelpv

            Apres avoir mis le System.out.printl(); après le generator.generate, la console m’indique bien le message. De plus je remarque que le message reapparait dans la console a chaque fois que je me déplace, signe que la structure se génère bien. Je pense que c’est un pb avec le .nbt, il y a t il autre chose à faire avec ce fichier ?

            Voici la structure :

            Structure.png

            1 réponse Dernière réponse Répondre Citer 0
            • robin4002R Hors-ligne
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs
              dernière édition par

              Non, ça me semble bon, sur un de mes mods j’utilise juste addBlocksToWorldChunk comme toi.

              Ton fichier armoury.nbt se trouve où ?

              1 réponse Dernière réponse Répondre Citer 0
              • GregoirelpvG Hors-ligne
                Gregoirelpv
                dernière édition par

                Dans assets.modid.structures et structures avec un S a la fin

                1 réponse Dernière réponse Répondre Citer 0
                • GregoirelpvG Hors-ligne
                  Gregoirelpv
                  dernière édition par

                  OKKKKKKKKKKK autant pour moi j’avais appeler le dossier “stuctures” au lieux de structures, comme quoi, les erreurs sont souvent extrêmement bête

                  1 réponse Dernière réponse Répondre Citer 0
                  • 1 / 1
                  • Premier message
                    Dernier message
                  Design by Woryk
                  ContactMentions Légales

                  MINECRAFT FORGE FRANCE © 2024

                  Powered by NodeBB