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

    Solved OnEntityCollidedWithBlock ne fonctionne pas

    1.9.x et 1.10.x
    1.10.x
    4
    10
    1479
    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.
    • loustak
      loustak last edited by

      Bonjour,

      J’ai le code suivant :

      package com.loustak.flask.proxy;
      
      import net.minecraft.block.material.Material;
      import net.minecraft.block.state.IBlockState;
      import net.minecraft.entity.Entity;
      import net.minecraft.world.World;
      
      public class BlockBasicJumper extends BlockBase {
      
      public BlockBasicJumper() {
      super(Material.ROCK, "basic_jumper");
      }
      
      public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) {
      entity.motionY += 1;
      System.out.println("Walking! Motion: " + entity.motionY);
         }
      
      @Override
      @Deprecated
      public boolean isOpaqueCube(IBlockState state) {
      return false;
      }
      
      @Override
      @Deprecated
      public boolean isFullCube(IBlockState state) {
      return false;
      }
      
      }
      
      

      Qui hérite de :

      package com.loustak.flask.proxy;
      
      import com.loustak.flask.ModFlask;
      
      import net.minecraft.block.Block;
      import net.minecraft.block.material.Material;
      import net.minecraft.creativetab.CreativeTabs;
      import net.minecraft.entity.Entity;
      import net.minecraft.item.ItemBlock;
      import net.minecraft.world.World;
      
      public class BlockBase extends Block {
      
      protected String name;
      
      public BlockBase(Material material, String name) {
      super(material);
      
      this.name = name;
      
      setUnlocalizedName(name);
      setRegistryName(name);
      }
      
      public void registerItemModel(ItemBlock itemBlock) {
      ModFlask.proxy.registerItemRenderer(itemBlock, 0, name);
      }
      
      @Override
      public BlockBase setCreativeTab(CreativeTabs tab) {
      super.setCreativeTab(tab);
      return this;
      }
      
      }
      

      Je n’ai aucun message d’erreur par contre le code à l’intérieur de onEntityCollidedWithBlock ne s’exécute jamais et je ne comprends pas pourquoi.

      Merci de votre aide !

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

        Car cette fonction n’est pas la même en 1.11 qu’en 1.7.70 ^^ Tapes le début de son nom et fait ctrl+space dans ta classe pour l’avoir.
        PS: utilises des balises java la prochaine fois 😉

        Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

        AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

        Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
        Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

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

          Merci de ta réponse   🙂
          J’ai essayer de faire control+espace mais éclipse m’affiche une boite blanche avec écrit no déeault proposal

          1 Reply Last reply Reply Quote 0
          • BrokenSwing
            BrokenSwing Moddeurs confirmés Rédacteurs last edited by

            public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn)
            
            1 Reply Last reply Reply Quote 0
            • loustak
              loustak last edited by

              Ah j’avais pas vu le in après modification :

              @Override
              public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn) {
                  entityIn.motionY += 1;
                  System.out.println("Walking! Motion: " + entityIn.motionY);
              }
              

              Mais le message n’apparait pas et les entités ne sautes toujours pas.
              Est-ce que ça peut venir du fait que mon bloc à un rendu spécial ?

              @Override
              @Deprecated
              public boolean isOpaqueCube(IBlockState state) {
                  return false;
              }
              
              @Override
              @Deprecated
              public boolean isFullCube(IBlockState state) {
                   return false;
              }
              
              1 Reply Last reply Reply Quote 0
              • BrokenSwing
                BrokenSwing Moddeurs confirmés Rédacteurs last edited by

                onEntityCollidedWithBlock -> Collision sur les côtés

                Lorsqu’il marche dessus :

                public void onEntityWalk(World world, BlockPos pos, Entity entity)
                
                
                GameRegistry.<block>register(new Block(Material.ROCK) {
                @Override
                public void onEntityWalk(World worldIn, BlockPos pos, Entity entity) {
                entity.motionY++;
                }
                
                @Override
                public boolean isOpaqueCube(IBlockState state) {
                return false;
                }
                
                @Override
                public boolean isFullCube(IBlockState state) {
                return false;
                }
                }.setRegistryName("blockTest"));
                ```</block>
                1 Reply Last reply Reply Quote 1
                • loustak
                  loustak last edited by

                  Merci beaucoup ça fonctionne parfaitement!

                  1 Reply Last reply Reply Quote 0
                  • robin4002
                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                    @‘BrokenSwing’:

                    onEntityCollidedWithBlock -> Collision sur les côtés

                    Pas exactement.
                    La fonction onEntityCollidedWithBlock est appelé pour tous les blocs où la boite de collision du joueur se trouve dans leur x, y, z.
                    Or par défaut la boite de collision d’un bloc est de 111, donc le joueur sera toujours au dessus, en dessous où à côté du bloc.
                    Pour que la fonction onEntityCollidedWithBlock soit appelé il faut obligatoirement que la boite de collision d’un bloc soit inférieur à 1.

                    C’est pour ça que les cactus ne sont pas des blocs de 111 mais de 0.8750.93750.875

                    Quand la fonction onEntityWalk n’existait pas, le seul moyen de faire une action quand une entité marchait sur le bloc, était de faire un bloc avec une boite de collision de 10,991 et d’utiliser onEntityCollidedWithBlock.
                    Et c’est pour cela qu’on s’enfonce dans la soulsand (qui a une boite de collision de 1 * 0.875 * 1).

                    1 Reply Last reply Reply Quote 0
                    • BrokenSwing
                      BrokenSwing Moddeurs confirmés Rédacteurs last edited by

                      Pourtant, avec une boite de collision de 111, en tapant le côté du bloc, ça me faisait sauter

                      1 Reply Last reply Reply Quote 0
                      • robin4002
                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

                        Ah bon ? Donc la fonction ne fonctionne pas exactement comme il me semblait.

                        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