• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Solved [1.7.2]Creation d'un arbre personnalisé…

    1.7.x
    5
    10
    3598
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • bbcmh3
      bbcmh3 last edited by

      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 Reply Last reply Reply Quote 0
      • isador
        isador Moddeurs confirmés Modérateurs last edited by

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

        1 Reply Last reply Reply Quote 1
        • bbcmh3
          bbcmh3 last edited by

          Bonjour,

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

          1 Reply Last reply Reply Quote 0
          • Gugu
            Gugu last edited by

            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 Reply Last reply Reply Quote 1
            • bbcmh3
              bbcmh3 last edited by

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

              1 Reply Last reply Reply Quote 0
              • bbcmh3
                bbcmh3 last edited by

                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 Reply Last reply Reply Quote 0
                • robin4002
                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                  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 Reply Last reply Reply Quote 0
                  • bbcmh3
                    bbcmh3 last edited by

                    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 Reply Last reply Reply Quote 0
                    • Diangle
                      Diangle last edited by

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

                      1 Reply Last reply Reply Quote 0
                      • bbcmh3
                        bbcmh3 last edited by

                        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 Reply Last reply Reply Quote 0
                        • 1 / 1
                        • First post
                          Last post
                        Design by Woryk
                        Contact / Mentions Légales

                        MINECRAFT FORGE FRANCE © 2018

                        Powered by NodeBB