Nouvelle échelle



  • Bonjours , j'ai trouver un code pour créer une nouvelle échelle , le code fonctionne parfaitement , juste j'aimerais que l'échelle quand on monte elle va 2x plus vite , je doit modifier / ajouter quoi ?

    
    public class IronLadder extends Block
    {
    
        public IronLadder()
        {
            super(Material.circuits);
            this.setCreativeTab(CreativeTabs.tabDecorations);
        }
    
        /**
         * Returns a bounding box from the pool of bounding boxes (this means this box can change after the pool has been
         * cleared to be reused)
         */
        public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
        {
            this.setBlockBoundsBasedOnState(world, x, y, z);
            return super.getCollisionBoundingBoxFromPool(world, x, y, z);
        }
    
        /**
         * Updates the blocks bounds based on its current state. Args: world, x, y, z
         */
        public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z)
        {
            this.func_149797_b(world.getBlockMetadata(x, y, z));
        }
    
        /**
         * Returns the bounding box of the wired rectangular prism to render.
         */
        @SideOnly(Side.CLIENT)
        public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
        {
            this.setBlockBoundsBasedOnState(world, x, y, z);
            return super.getSelectedBoundingBoxFromPool(world, x, y, z);
        }
    
        public void func_149797_b(int p_149797_1_)
        {
            float f = 0.125F;
    
            if (p_149797_1_ == 2)
            {
                this.setBlockBounds(0.0F, 0.0F, 1.0F - f, 1.0F, 1.0F, 1.0F);
            }
    
            if (p_149797_1_ == 3)
            {
                this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, f);
            }
    
            if (p_149797_1_ == 4)
            {
                this.setBlockBounds(1.0F - f, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
            }
    
            if (p_149797_1_ == 5)
            {
                this.setBlockBounds(0.0F, 0.0F, 0.0F, f, 1.0F, 1.0F);
            }
        }
    
        /**
         * Is this block (a) opaque and (b) a full 1m cube?  This determines whether or not to render the shared face of two
         * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block.
         */
        public boolean isOpaqueCube()
        {
            return false;
        }
    
        /**
         * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc)
         */
        public boolean renderAsNormalBlock()
        {
            return false;
        }
    
        /**
         * The type of render function that is called for this block
         */
        public int getRenderType()
        {
            return 8;
        }
    
        /**
         * Checks to see if its valid to put this block at the specified coordinates. Args: world, x, y, z
         */
        public boolean canPlaceBlockAt(World world, int x, int y, int z)
        {
            return world.isSideSolid(x - 1, y, z, EAST ) ||
                   world.isSideSolid(x + 1, y, z, WEST ) ||
                   world.isSideSolid(x, y, z - 1, SOUTH) ||
                   world.isSideSolid(x, y, z + 1, NORTH);
        }
    
        /**
         * Called when a block is placed using its ItemBlock. Args: World, X, Y, Z, side, hitX, hitY, hitZ, block metadata
         */
        public int onBlockPlaced(World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metadata)
        {
            int j1 = metadata;
    
            if ((metadata == 0 || side == 2) && world.isSideSolid(x, y, z + 1, NORTH))
            {
                j1 = 2;
            }
    
            if ((j1 == 0 || side == 3) && world.isSideSolid(x, y, z - 1, SOUTH))
            {
                j1 = 3;
            }
    
            if ((j1 == 0 || side == 4) && world.isSideSolid(x + 1, y, z, WEST))
            {
                j1 = 4;
            }
    
            if ((j1 == 0 || side == 5) && world.isSideSolid(x - 1, y, z, EAST))
            {
                j1 = 5;
            }
    
            return j1;
        }
    
        /**
         * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are
         * their own) Args: x, y, z, neighbor Block
         */
        public void onNeighborBlockChange(World world, int x, int y, int z, Block block)
        {
            int l = world.getBlockMetadata(x, y, z);
            boolean flag = false;
    
            if (l == 2 && world.isSideSolid(x, y, z + 1, NORTH))
            {
                flag = true;
            }
    
            if (l == 3 && world.isSideSolid(x, y, z - 1, SOUTH))
            {
                flag = true;
            }
    
            if (l == 4 && world.isSideSolid(x + 1, y, z, WEST))
            {
                flag = true;
            }
    
            if (l == 5 && world.isSideSolid(x - 1, y, z, EAST))
            {
                flag = true;
            }
    
            if (!flag)
            {
                this.dropBlockAsItem(world, x, y, z, l, 0);
                world.setBlockToAir(x, y, z);
            }
    
            super.onNeighborBlockChange(world, x, y, z, block);
        }
    
        /**
         * Returns the quantity of items to drop on block destruction.
         */
        public int quantityDropped(Random random)
        {
            return 1;
        }
    
        @Override
        public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity)
        {
            return true;
        }
    }
    
    

    Merci !


  • Administrateurs

    Salut,
    Dans la fonction isLadder, avant le return true essaies de multiplié par deux le motionY de entity. Mais je ne suis pas sûr que le résultat sera le résultat voulu.



  • @'robin4002':

    Salut,
    Dans la fonction isLadder, avant le return true essaies de multiplié par deux le motionY de entity. Mais je ne suis pas sûr que le résultat sera le résultat voulu.

    Comment ça multiplié par de le motionY ?

    Sur sa ? j'ajoute quoi ou ? 😕

        @Override
        public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity)
        {
            return true;
        }
    }
    
    

  • Administrateurs

    multiplié par deux le motionY de entity. Pas "multiplié par de le motionY".
    Comme ça :

    @Override
    public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity)
    {
    entity.motionY *= 2;
    return true;
    }
    


  • @'robin4002':

    multiplié par deux le motionY de entity. Pas "multiplié par de le motionY".
    Comme ça :

       @Override
       public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity)
       {
           entity.motionY *= 2;
           return true;
       }
    

    Merci sa fonctionne , mais il à un autre problème , quand je monte la dernière échelle , sa me fait jump vraiment haut pourquoi ?

    edit : sa fait crash aussi mon solo (shutting down internal server..)


  • Administrateurs

    @'KrushHD':

    Merci sa fonctionne , mais il à un autre problème , quand je monte la dernière échelle , sa me fait jump vraiment haut pourquoi ?

    edit : sa fait crash aussi mon solo (shutting down internal server..)

    Je m'attendais bien à ce genre de comportement non voulu 😕 Comme le motion y est élevé, ça fait sauté le joueur quand il n'y a pas d'échelle.
    Peut-être en faisant comme ceci :

    if(world.getBlock(x, y + 1, z) == this)
    {
    entity.motionY *= 2;
    }
    

    Pour le crash, il faudrait un copier/coller du rapport de crash.


  • Correcteurs

    Envoie le crash report, ça les aidera mieux à savoir où se situe ton problème

    edit: Robin est un rapide



  • Voila mon probleme serez ces quoi le probleme ?https://www.youtube.com/watch?v=UXolTrISoVI&feature=youtu.be



  • @'robin4002':

    multiplié par deux le motionY de entity. Pas "multiplié par de le motionY".
    Comme ça :

       @Override
       public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity)
       {
           entity.motionY *= 2;
           return true;
       }
    

    Je suis à peu près sûr qu'en faisant ça, l'entité va monter de façon exponentielle plutôt que 2x plus vite (2x sur le premier block, puis 4x, puis 8x…), ce qui pourrait causer le problème.

    Il va te falloir regarder quelle est la motionY de base quand on monte ton échelle (avec du debug).
    Ensuite il te suffira de metter une condition pour tester si la motionY est égale à cette valeur, et dans ce cas la multiplier par 2.



  • @Dylem:

    @'robin4002':

    multiplié par deux le motionY de entity. Pas "multiplié par de le motionY".
    Comme ça :

       @Override
       public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity)
       {
           entity.motionY *= 2;
           return true;
       }
    

    Je suis à peu près sûr qu'en faisant ça, l'entité va monter de façon exponentielle plutôt que 2x plus vite (2x sur le premier block, puis 4x, puis 8x…), ce qui pourrait causer le problème.

    Il va te falloir regarder quelle est la motionY de base quand on monte ton échelle (avec du debug).
    Ensuite il te suffira de metter une condition pour tester si la motionY est égale à cette valeur, et dans ce cas la multiplier par 2.

    J'ai tester, et ça fonctionne 😉 Du coup, Zokyt tu as la réponse ^^



  • @'Fifou_BE':

    @'Dylem':

    @'robin4002':

    multiplié par deux le motionY de entity. Pas "multiplié par de le motionY".
    Comme ça :

       @Override
       public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity)
       {
           entity.motionY *= 2;
           return true;
       }
    

    Je suis à peu près sûr qu'en faisant ça, l'entité va monter de façon exponentielle plutôt que 2x plus vite (2x sur le premier block, puis 4x, puis 8x…), ce qui pourrait causer le problème.

    Il va te falloir regarder quelle est la motionY de base quand on monte ton échelle (avec du debug).
    Ensuite il te suffira de metter une condition pour tester si la motionY est égale à cette valeur, et dans ce cas la multiplier par 2.

    J'ai tester, et ça fonctionne 😉 Du coup, Zokyt tu as la réponse ^^

    J'ai rien comprit ^^'
    En gros faut que je mette quoi parse que le truc au dessu je les déja mit





  • @'Plaigon':

    https://www.minecraftforgefrance.fr/showthread.php?tid=1977&page=2&highlight=%C3%A9chelle

    Heu ces la 1.8 est jcomprend rien ten dit que moi faut juste regler un petit truc..



  • @'Zokyt':

    @'Fifou_BE':

    @'Dylem':

    @'robin4002':

    multiplié par deux le motionY de entity. Pas "multiplié par de le motionY".
    Comme ça :

       @Override
       public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity)
       {
           entity.motionY *= 2;
           return true;
       }
    

    Je suis à peu près sûr qu'en faisant ça, l'entité va monter de façon exponentielle plutôt que 2x plus vite (2x sur le premier block, puis 4x, puis 8x…), ce qui pourrait causer le problème.

    Il va te falloir regarder quelle est la motionY de base quand on monte ton échelle (avec du debug).
    Ensuite il te suffira de metter une condition pour tester si la motionY est égale à cette valeur, et dans ce cas la multiplier par 2.

    J'ai tester, et ça fonctionne 😉 Du coup, Zokyt tu as la réponse ^^

    J'ai rien comprit ^^'
    En gros faut que je mette quoi parse que le truc au dessu je les déja mit

    C'est pas compliqué, tu fais ça :

    
       @Override
       public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity) {
    
           System.out.println("MOTIONY :" + entity.motionY);
           return true;
       }
    
    

    Tu regardes la valeur affichée dans la console, puis :

    
       @Override
       public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity) {
    
           if(entity.motionY == valeur) 
               entity.motionY *= 2;
           return true;
       }
    
    

    Je peux pas t'aider plus là…



  • @'Dylem':

    @'Zokyt':

    @'Fifou_BE':

    @'Dylem':

    @'robin4002':

    multiplié par deux le motionY de entity. Pas "multiplié par de le motionY".
    Comme ça :

       @Override
       public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity)
       {
           entity.motionY *= 2;
           return true;
       }
    

    Je suis à peu près sûr qu'en faisant ça, l'entité va monter de façon exponentielle plutôt que 2x plus vite (2x sur le premier block, puis 4x, puis 8x…), ce qui pourrait causer le problème.

    Il va te falloir regarder quelle est la motionY de base quand on monte ton échelle (avec du debug).
    Ensuite il te suffira de metter une condition pour tester si la motionY est égale à cette valeur, et dans ce cas la multiplier par 2.

    J'ai tester, et ça fonctionne 😉 Du coup, Zokyt tu as la réponse ^^

    J'ai rien comprit ^^'
    En gros faut que je mette quoi parse que le truc au dessu je les déja mit

    C'est pas compliqué, tu fais ça :

    
       @Override
       public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity) {
    
           System.out.println("MOTIONY :" + entity.motionY);
           return true;
       }
    
    

    Tu regardes la valeur affichée dans la console, puis :

    
       @Override
       public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity) {
    
           if(entity.motionY == valeur) 
               entity.motionY *= 2;
           return true;
       }
    
    

    Je peux pas t'aider plus là…

    bh quand je fait :

    @Override
        public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity) {
    
            if(entity.motionY == valeur) 
                entity.motionY *= 2;
            return true;
        }
    

    ha valeur il y a une bar rouge (erreur)



  • @'Zokyt':

    bh quand je fait :

    @Override
        public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity) {
    
            if(entity.motionY == valeur) 
                entity.motionY *= 2;
            return true;
        }
    

    ha valeur il y a une bar rouge (erreur)

    J'abandonne, tu ne lis même pas mes messages, je sais que dans ta vidéo tu as une voix juvénile mais putain fais un effort….



  • @'Dylem':

    @'Zokyt':

    bh quand je fait :

    @Override
        public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity) {
    
            if(entity.motionY == valeur) 
                entity.motionY *= 2;
            return true;
        }
    

    ha valeur il y a une bar rouge (erreur)

    J'abandonne, tu ne lis même pas mes messages, je sais que dans ta vidéo tu as une voix juvénile mais putain fais un effort….

    Désole ces bon j'ai comprit j'ai fait sa

    @Override
        public boolean isLadder(IBlockAccess world, int x, int y, int z, EntityLivingBase entity) {
    
            if(entity.motionY == -0.0784000015258789) 
                entity.motionY *= 2;
            return true;
        }
    

    Mais je ne vais pas plus vite sur l'échelle ces normal ?



  • Si tu trouves une motionY négative en montant l'échelle, non ce n'est pas normal..



  • @'Dylem':

    Si tu trouves une motionY négative en montant l'échelle, non ce n'est pas normal..

    Ces bon j'ai reussi il y avait des négative est des positive ;=)