OnEntityCollidedWithBlock ne fonctionne pas



  • 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 !



  • 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 😉



  • 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


  • Rédacteurs

    public void onEntityCollidedWithBlock(World worldIn, BlockPos pos, IBlockState state, Entity entityIn)
    


  • 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;
    }
    

  • Rédacteurs

    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>


  • Merci beaucoup ça fonctionne parfaitement!


  • Administrateurs

    @'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).


  • Rédacteurs

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


  • Administrateurs

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