Résolu 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 -
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; }
-
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!
-
@‘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). -
Pourtant, avec une boite de collision de 111, en tapant le côté du bloc, ça me faisait sauter
-
Ah bon ? Donc la fonction ne fonctionne pas exactement comme il me semblait.