Résolu Faire pivoter la hitbox
-
Bijour tout le monde !
Bon alors, je m’explique !
Mon bloc fais sous forme d’un TileEntity se place dans un sens différent suivant le sens dans lequel on regarde (comme un four ou un coffre en fait), et se que j’aimerai c’est que sa hitbox (dont l’aspect est modifié) pivote elle aussi !Voila, merci d’avance pour votre aide, et longue vie a forge !
-
@SideOnly(Side.CLIENT) public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) { return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ); }
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ); }
À mettre dans la classe du bloc. La première, c’est pour la hitbox côté client donc la sélection. L’autre c’est pour le serveur, donc la collision.
Si tu as fait ton système de direction avec le metadata du bloc, tu fais simplement des conditions avec world.getBlockMetadata(x, y, z)
Sinon si tu as fait sur le TileEntity :TileEntity te = world.getBlockTileEntity(x, y, z) if(te != null && te instanceof MonTileEntity) { MonTileEntity monTe = (MonTileEntity)te; if(te.getDirection == 0) { return AxisAlignedBB.getAABBPool().getAABB((double)…. } else if ..... } return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ); // axis par défaut si jamais il y a un problème avec le TileEntity
-
J’ai mis ```java
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z)
{
return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ);
}
@SideOnly(Side.CLIENT)
public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
{
return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ);
}dans mon bloc, et redéfini ainsi ma hitbox. Je fais ainsi pour ma rotation: ```java public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack) { int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3; world.setBlockMetadataWithNotify(x, y, z, direction, 2); }
Mais pour le reste je n’ai absolument pas compris ! ^^’
-
Ta rotation fonctionne avec le metadata donc fait ça :
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { if(world.getBlockMetadata(x, y, z) == 0) { return AxisAlignedBB.getAABBPool().getAABB((double)x + 0.8D, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ); } else if(world.getBlockMetadata(x, y, z) == 1) { return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + 0.8D, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ); } else if(world.getBlockMetadata(x, y, z) == 2) { return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + 0.2D, (double)y + this.maxY, (double)z + this.maxZ); } else if(world.getBlockMetadata(x, y, z) == 3) { return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + 0.2D); } else { return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ); } } @SideOnly(Side.CLIENT) public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) { if(world.getBlockMetadata(x, y, z) == 0) { return AxisAlignedBB.getAABBPool().getAABB((double)x + 0.8D, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ); } else if(world.getBlockMetadata(x, y, z) == 1) { return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + 0.8D, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ); } else if(world.getBlockMetadata(x, y, z) == 2) { return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + 0.2D, (double)y + this.maxY, (double)z + this.maxZ); } else if(world.getBlockMetadata(x, y, z) == 3) { return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + 0.2D); } else { return AxisAlignedBB.getAABBPool().getAABB((double)x + this.minX, (double)y + this.minY, (double)z + this.minZ, (double)x + this.maxX, (double)y + this.maxY, (double)z + this.maxZ); } }
Si tu prend ça, tu verra que les hitbox sont différents en fonction de la direction. Pour l’exemple j’ai fait un truc random, à toi d’adapter les valeurs en fonctions de tes besoins. Utilise le débug pour avoir les changements en direct
-
Sa marche, merci infiniment !