MFF

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

    Générations de minerais

    Planifier Épinglé Verrouillé Déplacé La génération & les dimensions
    1.6.x
    69 Messages 17 Publieurs 28.6k 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.
    • isadorI Hors-ligne
      isador Moddeurs confirmés Modérateurs
      dernière édition par

      oki merci

      problème:

      
      package Mineralherb;
      
      import java.util.Random;
      
      import net.minecraft.block.Block;
      import net.minecraft.util.MathHelper;
      import net.minecraft.world.World;
      import net.minecraft.world.chunk.IChunkProvider;
      import net.minecraft.world.gen.feature.WorldGenMinable;
      import cpw.mods.fml.common.IWorldGenerator;
      
      public abstract class WorldGeneratorMineral implements IWorldGenerator {
      
      private int minableBlockId;
      private int minableBlockMeta;
      private double numberOfBlocks;
      
      public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
      {
      float f = par2Random.nextFloat() * (float)Math.PI;
      double d0 = (double)((float)(par3 + 8) + MathHelper.sin(f) * (float)this.numberOfBlocks / 8.0F);
      double d1 = (double)((float)(par3 + 8) - MathHelper.sin(f) * (float)this.numberOfBlocks / 8.0F);
      double d2 = (double)((float)(par5 + 8) + MathHelper.cos(f) * (float)this.numberOfBlocks / 8.0F);
      double d3 = (double)((float)(par5 + 8) - MathHelper.cos(f) * (float)this.numberOfBlocks / 8.0F);
      double d4 = (double)(par4 + par2Random.nextInt(3) - 2);
      double d5 = (double)(par4 + par2Random.nextInt(3) - 2);
      
      for (int l = 0; l <= this.numberOfBlocks; ++l)
      {
      double d6 = d0 + (d1 - d0) * (double)l / (double)this.numberOfBlocks;
      double d7 = d4 + (d5 - d4) * (double)l / (double)this.numberOfBlocks;
      double d8 = d2 + (d3 - d2) * (double)l / (double)this.numberOfBlocks;
      double d9 = par2Random.nextDouble() * (double)this.numberOfBlocks / 16.0D;
      double d10 = (double)(MathHelper.sin((float)l * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * d9 + 1.0D;
      double d11 = (double)(MathHelper.sin((float)l * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * d9 + 1.0D;
      int i1 = MathHelper.floor_double(d6 - d10 / 2.0D);
      int j1 = MathHelper.floor_double(d7 - d11 / 2.0D);
      int k1 = MathHelper.floor_double(d8 - d10 / 2.0D);
      int l1 = MathHelper.floor_double(d6 + d10 / 2.0D);
      int i2 = MathHelper.floor_double(d7 + d11 / 2.0D);
      int j2 = MathHelper.floor_double(d8 + d10 / 2.0D);
      
      for (int k2 = i1; k2 <= l1; ++k2)
      {
      double d12 = ((double)k2 + 0.5D - d6) / (d10 / 2.0D);
      
      if (d12 * d12 < 1.0D)
      {
      for (int l2 = j1; l2 <= i2; ++l2)
      {
      double d13 = ((double)l2 + 0.5D - d7) / (d11 / 2.0D);
      
      if (d12 * d12 + d13 * d13 < 1.0D)
      {
      for (int i3 = k1; i3 <= j2; ++i3)
      {
      double d14 = ((double)i3 + 0.5D - d8) / (d10 / 2.0D);
      
      Block block = Block.blocksList[par1World.getBlockId(k2, l2, i3)];
      if (d12 * d12 + d13 * d13 + d14 * d14 < 1.0D && (block != null && block.isGenMineableReplaceable(par1World, k2, l2, i3, this.blockToReplace)))
      {
      par1World.setBlock(k2, l2, i3, this.minableBlockId, minableBlockMeta, 2);
      World.setBlock(k2, l2 + 3, i3, 3005, minableBlockMeta, 2);
      }
      }
      }
      }
      }
      }
      }
      
      return true;
      }
      
      }
      
      

      World.setBlock(k2, l2 + 3, i3, 3005, minableBlockMeta, 2); erreur: Cannot make a static reference to the non-static method setBlock(int, int, int, int, int, int) from the type World

      1 réponse Dernière réponse Répondre Citer 0
      • jglrxavpokJ Hors-ligne
        jglrxavpok Modérateurs
        dernière édition par

        Remplace World par par1World, c’est juste du Java là…
        Si tu en as besoin: Tutoriels pour le Java

        Modérateur sur MFF. 
        Mon Github: http://github.com/jglrxavpok
        Mon compte Steam si vous voulez jouer à CS:GO ou TF2 avec moi: https://steamcommunity.com/id/jglrxavpok/

        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

          En effet c’est la base de java ça …
          C’est pas compliqué en plus :
          Dans ta fonction generate :
          public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
          Le paramètre World à le nom par1World, donc il faut utiliser :
          par1World.setBlock(…
          Si la fonction était :
          public boolean generate(World nimportequoi, Random par2Random, int par3, int par4, int par5)
          alors la fonction serait :
          nimportequoi.setBlock(…

          C’est juste un exemple pour monter que le nom du paramètre peut être n’importe quoi, ça change rien, mais pour ne pas se perdre, on utilise quelque chose qui est significatif de ce que c’est. C’est d’ailleurs pour ça que je remplace les par2, par3, par4 par x, y, z qui sont beaucoup plus significatif.

          1 réponse Dernière réponse Répondre Citer 0
          • isadorI Hors-ligne
            isador Moddeurs confirmés Modérateurs
            dernière édition par

            oui excuser moi j’ai honte. une fois que j’ai créer ma classe de génération comment faire pour qu’elle s’applique a mon bloc?

            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

              Dans :

              for(int i = 0; i < probabilité; i++)
              {
              (new WorldGenMinable(id du bloc à générer, metadata du bloc à générer, taille maximum d un filon, id du bloc qui va être remplacé)).generate(world, rand, x + rand.nextInt(16), rand.nextInt(hauteur maximum), z + rand.nextInt(16));
              }
              

              Tu remplace WorldGenMinable par ta classe

              1 réponse Dernière réponse Répondre Citer 0
              • isadorI Hors-ligne
                isador Moddeurs confirmés Modérateurs
                dernière édition par

                Ok merci

                1 réponse Dernière réponse Répondre Citer 0
                • isadorI Hors-ligne
                  isador Moddeurs confirmés Modérateurs
                  dernière édition par

                  pour “id du bloc qui va être remplacé” dans le for, c’est le quel pour l’ai car Block.air.blockID marche pas

                  et remplacer WorldGenMinable par la classe de mon bloc ne marche pas j’ai comme erreur: The constructor GeneratingMineral(int, int, int, int) is undefined

                  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

                    Il n’y a pas de variable pour le bloc d’air en 1.6. Essaye avec 0, mais je suis pas sur que ça fonctionne.
                    Fait voir ton WorldGenMinable custom ?

                    1 réponse Dernière réponse Répondre Citer 0
                    • isadorI Hors-ligne
                      isador Moddeurs confirmés Modérateurs
                      dernière édition par

                      @‘robin4002’:

                      Il n’y a pas de variable pour le bloc d’air en 1.6. Essaye avec 0, mais je suis pas sur que ça fonctionne.
                      Fait voir ton WorldGenMinable custom ?

                      
                      private void generateSurface(World world, int x, int z, Random rand)
                      {
                      for(int i = 0; i < probabilité; i++)
                      {
                      (new GeneratingMineral(MineralherbMain.coppermineral.blockID, 0, 1,0)).generate(world, rand, x + rand.nextInt(16), rand.nextInt(256), z + rand.nextInt(16));
                      }
                      }
                      
                      

                      et la classe GeneratingMineral:

                      
                      package Mineralherb;
                      
                      import java.util.Random;
                      
                      import cpw.mods.fml.client.FMLClientHandler;
                      import cpw.mods.fml.relauncher.Side;
                      import cpw.mods.fml.relauncher.SideOnly;
                      import net.minecraft.block.Block;
                      import net.minecraft.block.material.Material;
                      import net.minecraft.client.renderer.texture.IconRegister;
                      import net.minecraft.creativetab.CreativeTabs;
                      import net.minecraft.tileentity.TileEntity;
                      import net.minecraft.util.Icon;
                      import net.minecraft.util.MathHelper;
                      import net.minecraft.world.World;
                      
                      public class GeneratingMineral extends Block {
                      
                      private Icon GM1;
                      private Icon GM2;
                      private int minableBlockId;
                      private int minableBlockMeta;
                      private int blockToReplace;
                      private double numberOfBlocks;
                      
                      public GeneratingMineral(int id)
                      {
                      super(id, Material.rock);
                      this.setCreativeTab(MineralherbMain.MineralherbCreativeTabs);
                      
                      }
                      public void registerIcons(IconRegister iconRegister)
                      {
                      GM1 = iconRegister.registerIcon("mineralherb:noninvisi");
                      GM2 = iconRegister.registerIcon("mineralherb:invisi");
                      
                      }
                      @SideOnly(Side.CLIENT)
                      public Icon getIcon(int side, int metadata)
                      {
                      if (FMLClientHandler.instance().getClient().thePlayer.capabilities.isCreativeMode)
                      {
                      return GM1;
                      }
                      else
                      {
                      return GM2;
                      }
                      }
                      public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
                      {
                      float f = par2Random.nextFloat() * (float)Math.PI;
                      double d0 = (double)((float)(par3 + 8) + MathHelper.sin(f) * (float)this.numberOfBlocks / 8.0F);
                      double d1 = (double)((float)(par3 + 8) - MathHelper.sin(f) * (float)this.numberOfBlocks / 8.0F);
                      double d2 = (double)((float)(par5 + 8) + MathHelper.cos(f) * (float)this.numberOfBlocks / 8.0F);
                      double d3 = (double)((float)(par5 + 8) - MathHelper.cos(f) * (float)this.numberOfBlocks / 8.0F);
                      double d4 = (double)(par4 + par2Random.nextInt(3) - 2);
                      double d5 = (double)(par4 + par2Random.nextInt(3) - 2);
                      
                      for (int l = 0; l <= this.numberOfBlocks; ++l)
                      {
                      double d6 = d0 + (d1 - d0) * (double)l / (double)this.numberOfBlocks;
                      double d7 = d4 + (d5 - d4) * (double)l / (double)this.numberOfBlocks;
                      double d8 = d2 + (d3 - d2) * (double)l / (double)this.numberOfBlocks;
                      double d9 = par2Random.nextDouble() * (double)this.numberOfBlocks / 16.0D;
                      double d10 = (double)(MathHelper.sin((float)l * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * d9 + 1.0D;
                      double d11 = (double)(MathHelper.sin((float)l * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * d9 + 1.0D;
                      int i1 = MathHelper.floor_double(d6 - d10 / 2.0D);
                      int j1 = MathHelper.floor_double(d7 - d11 / 2.0D);
                      int k1 = MathHelper.floor_double(d8 - d10 / 2.0D);
                      int l1 = MathHelper.floor_double(d6 + d10 / 2.0D);
                      int i2 = MathHelper.floor_double(d7 + d11 / 2.0D);
                      int j2 = MathHelper.floor_double(d8 + d10 / 2.0D);
                      
                      for (int k2 = i1; k2 <= l1; ++k2)
                      {
                      double d12 = ((double)k2 + 0.5D - d6) / (d10 / 2.0D);
                      
                      if (d12 * d12 < 1.0D)
                      {
                      for (int l2 = j1; l2 <= i2; ++l2)
                      {
                      double d13 = ((double)l2 + 0.5D - d7) / (d11 / 2.0D);
                      
                      if (d12 * d12 + d13 * d13 < 1.0D)
                      {
                      for (int i3 = k1; i3 <= j2; ++i3)
                      {
                      double d14 = ((double)i3 + 0.5D - d8) / (d10 / 2.0D);
                      
                      Block block = Block.blocksList[par1World.getBlockId(k2, l2, i3)];
                      if (d12 * d12 + d13 * d13 + d14 * d14 < 1.0D && (block != null && block.isGenMineableReplaceable(par1World, k2, l2, i3, this.blockToReplace)))
                      {
                      par1World.setBlock(k2, l2, i3, this.minableBlockId, minableBlockMeta, 2);
                      par1World.setBlock(k2, l2 + 3, i3, 3005, minableBlockMeta, 2);
                      }
                      }
                      }
                      }
                      }
                      }
                      }
                      
                      return true;
                      }
                      
                      }
                      
                      
                      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

                        Ta génération custom doit être une classe à part, pas la classe de ton bloc.
                        Regarde le premier post de la page 6, c’était bon comme ça.

                        1 réponse Dernière réponse Répondre Citer 0
                        • isadorI Hors-ligne
                          isador Moddeurs confirmés Modérateurs
                          dernière édition par

                          En clair ma classe GeneratingMineral c’est ma classe de générationcustom et je l’appliquerai après à mon bloc. Mais comment l’appliquer?

                          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, actuellement ta classe GeneratingMineral est un bloc, pas un générateur custom.
                            La classe de ton bloc doit être différente de celle de ton bloc.

                            Pour l’appliquer, c’est le code que je t’ai donné avant.

                            1 réponse Dernière réponse Répondre Citer 0
                            • isadorI Hors-ligne
                              isador Moddeurs confirmés Modérateurs
                              dernière édition par

                              À ok il me faut donc 3 classe?

                              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

                                oui.

                                • le bloc
                                • le WorldGenMinableCustom
                                • le WorldGenerator
                                1 réponse Dernière réponse Répondre Citer 0
                                • isadorI Hors-ligne
                                  isador Moddeurs confirmés Modérateurs
                                  dernière édition par

                                  ok merci je vais essayer ca
                                  du coup mes deux classe de génération aurons implements IWorldGenerator ?

                                  toujour l’erreur The constructor GeneratingMineral(int, int, int, int) is undefined

                                  voici mes deux classe:
                                  WorldGenerator:

                                  
                                  package Mineralherb;
                                  
                                  import java.util.Random;
                                  
                                  import net.minecraft.block.Block;
                                  import net.minecraft.world.World;
                                  import net.minecraft.world.chunk.IChunkProvider;
                                  import net.minecraft.world.gen.feature.WorldGenMinable;
                                  import cpw.mods.fml.common.IWorldGenerator;
                                  
                                  public class WorldGeneratorMH implements IWorldGenerator {
                                  
                                  private int probabilité;
                                  
                                  @Override
                                  public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)
                                  {
                                  switch(world.provider.dimensionId)
                                  {
                                  case -1:
                                  this.generateNether(world, chunkX * 16, chunkZ * 16, random);
                                  case 0:
                                  this.generateSurface(world, chunkX * 16, chunkZ * 16, random);
                                  case 1:
                                  this.generateEnd(world, chunkX * 16, chunkZ * 16, random);
                                  }
                                  }
                                  
                                  private void generateSurface(World world, int x, int z, Random rand)
                                  {
                                  for(int i = 0; i < probabilité; i++)
                                  {
                                  (new GeneratingMineral(MineralherbMain.coppermineral.blockID, 0, 1, 0)).generate(world, rand, x + rand.nextInt(16), rand.nextInt(256), z + rand.nextInt(16));
                                  }
                                  }
                                  
                                  private void generateEnd(World world, int x, int z, Random rand)
                                  {
                                  }
                                  
                                  private void generateNether(World world, int x, int z, Random rand)
                                  {
                                  }
                                  
                                  }
                                  
                                  

                                  WorldGeneratorCustom

                                  
                                  package Mineralherb;
                                  
                                  import java.util.Random;
                                  
                                  import net.minecraft.block.Block;
                                  import net.minecraft.util.MathHelper;
                                  import net.minecraft.world.World;
                                  import net.minecraft.world.chunk.IChunkProvider;
                                  import cpw.mods.fml.common.IWorldGenerator;
                                  
                                  public class GeneratingMineral implements IWorldGenerator {
                                  
                                  private int minableBlockId;
                                  private int minableBlockMeta;
                                  private int blockToReplace;
                                  private double numberOfBlocks;
                                  
                                  public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
                                  {
                                  float f = par2Random.nextFloat() * (float)Math.PI;
                                  double d0 = (double)((float)(par3 + 8) + MathHelper.sin(f) * (float)this.numberOfBlocks / 8.0F);
                                  double d1 = (double)((float)(par3 + 8) - MathHelper.sin(f) * (float)this.numberOfBlocks / 8.0F);
                                  double d2 = (double)((float)(par5 + 8) + MathHelper.cos(f) * (float)this.numberOfBlocks / 8.0F);
                                  double d3 = (double)((float)(par5 + 8) - MathHelper.cos(f) * (float)this.numberOfBlocks / 8.0F);
                                  double d4 = (double)(par4 + par2Random.nextInt(3) - 2);
                                  double d5 = (double)(par4 + par2Random.nextInt(3) - 2);
                                  
                                  for (int l = 0; l <= this.numberOfBlocks; ++l)
                                  {
                                  double d6 = d0 + (d1 - d0) * (double)l / (double)this.numberOfBlocks;
                                  double d7 = d4 + (d5 - d4) * (double)l / (double)this.numberOfBlocks;
                                  double d8 = d2 + (d3 - d2) * (double)l / (double)this.numberOfBlocks;
                                  double d9 = par2Random.nextDouble() * (double)this.numberOfBlocks / 16.0D;
                                  double d10 = (double)(MathHelper.sin((float)l * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * d9 + 1.0D;
                                  double d11 = (double)(MathHelper.sin((float)l * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * d9 + 1.0D;
                                  int i1 = MathHelper.floor_double(d6 - d10 / 2.0D);
                                  int j1 = MathHelper.floor_double(d7 - d11 / 2.0D);
                                  int k1 = MathHelper.floor_double(d8 - d10 / 2.0D);
                                  int l1 = MathHelper.floor_double(d6 + d10 / 2.0D);
                                  int i2 = MathHelper.floor_double(d7 + d11 / 2.0D);
                                  int j2 = MathHelper.floor_double(d8 + d10 / 2.0D);
                                  
                                  for (int k2 = i1; k2 <= l1; ++k2)
                                  {
                                  double d12 = ((double)k2 + 0.5D - d6) / (d10 / 2.0D);
                                  
                                  if (d12 * d12 < 1.0D)
                                  {
                                  for (int l2 = j1; l2 <= i2; ++l2)
                                  {
                                  double d13 = ((double)l2 + 0.5D - d7) / (d11 / 2.0D);
                                  
                                  if (d12 * d12 + d13 * d13 < 1.0D)
                                  {
                                  for (int i3 = k1; i3 <= j2; ++i3)
                                  {
                                  double d14 = ((double)i3 + 0.5D - d8) / (d10 / 2.0D);
                                  
                                  Block block = Block.blocksList[par1World.getBlockId(k2, l2, i3)];
                                  if (d12 * d12 + d13 * d13 + d14 * d14 < 1.0D && (block != null && block.isGenMineableReplaceable(par1World, k2, l2, i3, this.blockToReplace)))
                                  {
                                  par1World.setBlock(k2, l2, i3, this.minableBlockId, minableBlockMeta, 2);
                                  par1World.setBlock(k2, l2 + 3, i3, 3005, minableBlockMeta, 2);
                                  }
                                  }
                                  }
                                  }
                                  }
                                  }
                                  }
                                  
                                  return true;
                                  }
                                  
                                  @Override
                                  public void generate(Random random, int chunkX, int chunkZ,
                                  World world, IChunkProvider chunkGenerator,
                                  IChunkProvider chunkProvider) {
                                  // TODO Auto-generated method stub
                                  
                                  }
                                  
                                  }
                                  
                                  
                                  1 réponse Dernière réponse Répondre Citer 0
                                  • SquixS Hors-ligne
                                    Squix
                                    dernière édition par

                                    Salut, pour la 1.7.x, on peut utiliser pour les minerais comme superclass BlockOre 😉

                                    System.crash(); //Petite instruction marrante  :D

                                    Développeur de : RemoveHUDbut…

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

                                      Bonjour ce tutoriel est-il toujours valable pour la version 1.11 ?

                                      **Je suis un membre apprécié et joueur, j'ai déjà obtenu 1[ point de réputation./…

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

                                        Il y a quelques changements, x, y z est à remplacer par un blockpos et peut-être d’autres choses mais globalement c’est assez identique.

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

                                          pour les gens qui ont peur que le tuto ne marche pas pour la 1.7 ca marche avec quelques modif.

                                          s

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

                                          MINECRAFT FORGE FRANCE © 2024

                                          Powered by NodeBB