MFF

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

    [1.7.2]Creation d'un arbre personnalisé…

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    10 Messages 5 Publieurs 4.1k Vues 1 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.
    • bbcmh3B Hors-ligne
      bbcmh3
      dernière édition par

      Bonsoir !

      Oui, je sais, c’est encore moi…vous allez dire “il sait pas ce débrouiller, il est nul…” vous avez entièrement raison mais plus vite je vous demanderais les choses dont j’ai besoin, plus vite je vous laisserais tranquille et je serais capable de développer des mods de manière autonomne.

      Bref, passons au vif du sujet -> Je voudrais créer un nouvel arbre, j’ai trouvé un tuto pour cela pour la version 1.6.4 de minecraft ici, mais il est dans les tutos non validés donc…je préfères ne pas me réferer à celui-ci…

      Ensuite, je vous préviens que j’ai déja cherché sur Google (notre ami à tous), et j’ai trouvé plusieurs tutos mais qui n’étaient que pour la 1.5.2 et y en pas beaucoup en Français en plus. Non pas que je n’ai point de compétence dans cette langue, mais bon, quand il est question de code que je ne connais pas, je préfère partir sur des valeurs sures et ne pas faire d’erreurs à cause de mauvaises traductions.

      Donc, est-ce que vous connaitriez par hasard un bon tuto qui explique comment creer un arbre en 1.7.2 ? Ou alors, si impossibilité, est-ce que la méthode pour la 1.5.2 ou 1.6.4 pourrait aller ???

      Oui, car aprés avoir analyser les nombreuses classes, je penses qu’il faut utiliser pour cela celles qui s’appellent:
      “BlockLog.class”; “BlockLeaves.class” et “BlockSapling.class” mais aprés, je suis encore un peu dans le flou de ce qu’il faut faire par la suite (bien que j’ai peut-être une petite idée pour le début).

      Merci,
      BBCmh3

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

        Regarde dans le code de la sapling, il doit avoir un truc comme onGrow

        1 réponse Dernière réponse Répondre Citer 1
        • bbcmh3B Hors-ligne
          bbcmh3
          dernière édition par

          Bonjour,

          Merci ! Bien que je n’ai pas encore réussi…

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

            public void func_149878_d(World p_149878_1_, int p_149878_2_, int p_149878_3_, int p_149878_4_, Random p_149878_5_)
            

            Cette fonction est celle qui gère tout ça. Malheureusement, elle n’est pas “traduite”, donc difficile a comprendre. Cependant, on peut voir qu’elle utilise des classe comme “WorldGenForest”

            Essaie de te pencher sur ça

            "If you have a comprehensive explanation for everything then it decreases uncertainty and anxiety and reduces your cognitive load. And if you can use that simplifying algorithm to put yourself on the side of moral virtue then you’re constantly a good person with a minimum of effort."
            ― Jordan B. Peterson

            1 réponse Dernière réponse Répondre Citer 1
            • bbcmh3B Hors-ligne
              bbcmh3
              dernière édition par

              D’accord, merci pour l’aide !
              Je vais essayer de voir cela demain soir aprés les cours ! 😄

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

                Bonsoir, grâce à Kevin_68 et à toi, j’ai réussi à créer mon arbre et à faire pour que quand on utilise de la poudre d’os sur la pousse de mon arbre, celle-ci devient l’arbre en question……

                En revanche, je n’arrives toujours pas à générer l’arbre à la création du monde : j’ai beau regarder partout sur les map générées, il n’y a nul part mon arbre…
                Je vous passes le code :

                Ma classe bbcmh3LightsWood :

                package bbcmh3.common;
                
                import java.util.List;
                import net.minecraft.block.BlockLog;
                import net.minecraft.client.renderer.texture.IIconRegister;
                import net.minecraft.creativetab.CreativeTabs;
                import net.minecraft.item.Item;
                import net.minecraft.item.ItemStack;
                import net.minecraft.util.IIcon;
                import net.minecraft.world.IBlockAccess;
                
                public class bbcmh3LightsWood extends BlockLog
                {
                private IIcon topIcon;
                
                public bbcmh3LightsWood()
                {
                super();
                }
                
                @Override
                public void registerBlockIcons(IIconRegister iconregister)
                {
                blockIcon = iconregister.registerIcon(this.getTextureName());
                topIcon = iconregister.registerIcon(this.getTextureName() + "_top");
                }
                
                @Override
                public IIcon getIcon(int side, int metadata)
                {
                int k = metadata & 12;
                return k == 0 && (side == 1 || side == 0) ? topIcon : (k == 4 && (side == 5 || side == 4) ? topIcon : (k == 8 && (side == 2 || side == 3) ? topIcon : blockIcon));
                }
                
                @SuppressWarnings({"unchecked", "rawtypes"})
                
                @Override
                public void getSubBlocks(Item item, CreativeTabs creativeTabs, List list)
                {
                list.add(new ItemStack(item, 1, 0));
                }
                
                @Override
                public boolean canSustainLeaves(IBlockAccess world, int x, int y, int z)
                {
                return true;
                }
                
                @Override
                public boolean isWood(IBlockAccess world, int x, int y, int z)
                {
                return true;
                }
                }
                

                La classe bbcmh3LightsLeaves :

                package bbcmh3.common;
                
                import java.util.List;
                import java.util.Random;
                import net.minecraft.block.BlockLeaves;
                import net.minecraft.client.renderer.texture.IIconRegister;
                import net.minecraft.creativetab.CreativeTabs;
                import net.minecraft.init.Blocks;
                import net.minecraft.item.Item;
                import net.minecraft.item.ItemStack;
                import net.minecraft.util.IIcon;
                import net.minecraft.world.IBlockAccess;
                import net.minecraft.world.World;
                import net.minecraftforge.common.IShearable;
                import cpw.mods.fml.relauncher.Side;
                import cpw.mods.fml.relauncher.SideOnly;
                
                public class bbcmh3LightsLeaves extends BlockLeaves implements IShearable
                {
                protected IIcon fastIcon;
                public static final String[] types = new String[] {"lights"};
                
                public bbcmh3LightsLeaves()
                {
                super();
                this.setLightOpacity(1);
                }
                
                @Override
                public void registerBlockIcons(IIconRegister iconregister)
                {
                blockIcon = iconregister.registerIcon(this.getTextureName());
                fastIcon = iconregister.registerIcon(this.getTextureName() + "_opaque");
                }
                
                @Override public boolean isOpaqueCube()
                {
                return Blocks.leaves.isOpaqueCube();
                }
                
                @SideOnly(Side.CLIENT)
                public boolean shouldSideBeRendered(IBlockAccess blockaccess, int x, int y, int z, int side)
                {
                return !this.isOpaqueCube() ? true : super.shouldSideBeRendered(blockaccess, x, y, z, side);
                }
                
                @Override
                public IIcon getIcon(int side, int metadata)
                {
                return(isOpaqueCube() ? fastIcon : blockIcon);
                }
                
                @SuppressWarnings({"rawtypes", "unchecked"})
                
                @Override
                public void getSubBlocks(Item item, CreativeTabs creativeTabs, List list)
                {
                list.add(new ItemStack(item, 1, 0));
                }
                
                @Override
                public boolean isLeaves(IBlockAccess world, int x, int y, int z)
                {
                return true;
                }
                
                @SideOnly(Side.CLIENT)
                
                @Override
                public int getBlockColor()
                {
                return -1;
                }
                
                @SideOnly(Side.CLIENT)
                
                @Override
                public int getRenderColor(int par1)
                {
                return -1;
                }
                
                @Override
                public int quantityDropped(Random random)
                {
                return random.nextInt(20) == 0 ? 1 : 0;
                }
                
                @Override
                public Item getItemDropped(int metadata, Random random, int par3)
                {
                return Item.getItemFromBlock(bbcmh3lights.bbcmh3LightsSaplings);
                }
                
                @Override
                public void dropBlockAsItemWithChance(World world, int x, int y, int z, int metadata, float par6, int par7)
                {
                if(!world.isRemote)
                {
                if(world.rand.nextInt(20) == 0)
                {
                Item splingid = this.getItemDropped(metadata, world.rand, par7);
                this.dropBlockAsItem(world, x, y, z, new ItemStack(splingid, 1, this.damageDropped(metadata)));
                }
                
                }
                
                }
                
                @Override
                public int colorMultiplier(IBlockAccess blockaccess, int x, int y, int z)
                {
                return -1;
                }
                
                @Override
                public String[] func_150125_e()
                {
                return types;
                }
                }
                
                

                La classe bbcmh3LightsSaplings :

                package bbcmh3.common;
                import java.util.List;
                import java.util.Random;
                import net.minecraft.block.BlockSapling;
                import net.minecraft.client.renderer.texture.IIconRegister;
                import net.minecraft.creativetab.CreativeTabs;
                import net.minecraft.item.Item;
                import net.minecraft.item.ItemStack;
                import net.minecraft.util.IIcon;
                import net.minecraft.world.World;
                import net.minecraft.world.gen.feature.WorldGenerator;
                import cpw.mods.fml.relauncher.Side;
                import cpw.mods.fml.relauncher.SideOnly;
                
                public class bbcmh3LightsSaplings extends BlockSapling
                {
                public bbcmh3LightsSaplings()
                {
                super();
                float f = 0.4F;
                setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f * 2.0F, 0.5F + f);
                }
                
                @SideOnly(Side.CLIENT)
                public IIcon getIcon(int side, int metadata)
                {
                return blockIcon;
                }
                
                @Override
                public void func_149878_d(World world, int x, int y, int z, Random random)
                {
                int l = world.getBlockMetadata(x, y, z) & 3;
                world.setBlockToAir(x, y, z);
                Object obj = null;
                obj = new WorldGenLightsTree(false);
                if(!((WorldGenerator)(obj)).generate(world, random, x, y, z))
                {
                world.setBlock(x, y, z, this, l, 3);
                }
                }
                
                @SideOnly(Side.CLIENT)
                
                @Override
                public void getSubBlocks(Item item, CreativeTabs creativetabs, List list)
                {
                list.add(new ItemStack(item, 1, 0));
                }
                
                @SideOnly(Side.CLIENT)
                public void registerBlockIcons(IIconRegister iiconRegister)
                {
                this.blockIcon = iiconRegister.registerIcon(this.getTextureName());
                }
                }
                

                En enfin, la classe WorldGenLightsTree:

                
                package bbcmh3.common;
                
                import java.util.Random;
                
                import net.minecraft.block.Block;
                import net.minecraft.block.BlockSapling;
                import net.minecraft.init.Blocks;
                import net.minecraft.util.Direction;
                import net.minecraft.world.World;
                import net.minecraft.world.gen.feature.WorldGenAbstractTree;
                import net.minecraftforge.common.util.ForgeDirection;
                
                public class WorldGenLightsTree extends WorldGenAbstractTree
                {
                /** The minimum height of a generated tree. */
                private final int minTreeHeight;
                /** True if this tree should grow Vines. */
                private final boolean vinesGrow;
                /** The metadata value of the wood to use in tree generation. */
                private final int metaWood;
                /** The metadata value of the leaves to use in tree generation. */
                private final int metaLeaves;
                private static final String __OBFID = "CL_00000438";
                
                public WorldGenLightsTree(boolean par1)
                {
                this(par1, 4, 0, 0, false);
                }
                
                public WorldGenLightsTree(boolean par1, int par2, int par3, int par4, boolean par5)
                {
                super(par1);
                this.minTreeHeight = par2;
                this.metaWood = par3;
                this.metaLeaves = par4;
                this.vinesGrow = par5;
                }
                
                public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
                {
                int l = par2Random.nextInt(3) + this.minTreeHeight;
                boolean flag = true;
                
                if (par4 >= 1 && par4 + l + 1 <= 256)
                {
                byte b0;
                int k1;
                Block block;
                
                for (int i1 = par4; i1 <= par4 + 1 + l; ++i1)
                {
                b0 = 1;
                
                if (i1 == par4)
                {
                b0 = 0;
                }
                
                if (i1 >= par4 + 1 + l - 2)
                {
                b0 = 2;
                }
                
                for (int j1 = par3 - b0; j1 <= par3 + b0 && flag; ++j1)
                {
                for (k1 = par5 - b0; k1 <= par5 + b0 && flag; ++k1)
                {
                if (i1 >= 0 && i1 < 256)
                {
                block = par1World.getBlock(j1, i1, k1);
                
                if (!this.isReplaceable(par1World, j1, i1, k1))
                {
                flag = false;
                }
                }
                else
                {
                flag = false;
                }
                }
                }
                }
                
                if (!flag)
                {
                return false;
                }
                else
                {
                Block block2 = par1World.getBlock(par3, par4 - 1, par5);
                
                boolean isSoil = block2.canSustainPlant(par1World, par3, par4 - 1, par5, ForgeDirection.UP, (BlockSapling)bbcmh3lights.bbcmh3LightsSaplings);
                if (isSoil && par4 < 256 - l - 1)
                {
                block2.onPlantGrow(par1World, par3, par4 - 1, par5, par3, par4, par5);
                b0 = 3;
                byte b1 = 0;
                int l1;
                int i2;
                int j2;
                int i3;
                
                for (k1 = par4 - b0 + l; k1 <= par4 + l; ++k1)
                {
                i3 = k1 - (par4 + l);
                l1 = b1 + 1 - i3 / 2;
                
                for (i2 = par3 - l1; i2 <= par3 + l1; ++i2)
                {
                j2 = i2 - par3;
                
                for (int k2 = par5 - l1; k2 <= par5 + l1; ++k2)
                {
                int l2 = k2 - par5;
                
                if (Math.abs(j2) != l1 || Math.abs(l2) != l1 || par2Random.nextInt(2) != 0 && i3 != 0)
                {
                Block block1 = par1World.getBlock(i2, k1, k2);
                
                if (block1.isAir(par1World, i2, k1, k2) || block1.isLeaves(par1World, i2, k1, k2))
                {
                this.setBlockAndNotifyAdequately(par1World, i2, k1, k2, bbcmh3lights.bbcmh3LightsLeaves, this.metaLeaves);
                }
                }
                }
                }
                }
                
                for (k1 = 0; k1 < l; ++k1)
                {
                block = par1World.getBlock(par3, par4 + k1, par5);
                
                if (block.isAir(par1World, par3, par4 + k1, par5) || block.isLeaves(par1World, par3, par4 + k1, par5))
                {
                this.setBlockAndNotifyAdequately(par1World, par3, par4 + k1, par5, bbcmh3lights.bbcmh3LightsWood, this.metaWood);
                
                }
                }
                
                return true;
                }
                else
                {
                return false;
                }
                }
                }
                else
                {
                return false;
                }
                }
                }
                
                
                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

                  Bone meal -> il y a un event pour.
                  Génération -> il faut passer par un générateur du même type que pour les minerais.

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

                    Pour le bone meal, c’est bon, ça ça fonctionnait déja…
                    Par contre, merci pour la génération,je re-regardes cela toutà l’heure… 🙂

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

                      si vous avez besoin aller dans la section tutoriel en attente de validation ^^

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

                        Bonsoir,

                        Oui, merci pour ce bon tuto Diangle ! 🙂
                        Néanmoins, j’avais fini par trouver moi-même comment les générer…mais ton tuto reste tout de même bien ! 😛

                        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