Problème de collision



  • Salut,

    Dans mon mod, je transforme mon joueur en poulpe et je change ainsi sa BoundingBox.
    Le problème est que celle-ci va avancer tout seul vers le sud-est jusqu'à rencontrer un bloc et glitcher dedans.
    Par contre, si je suis entouré de blocs, le problème disparaît.

    Voici où je change la BoundingBox :

    
    public class SquidshroomEvent extends ShroomEvent {
    
       @Override
       protected void onTickPlayer(EntityPlayer p, Phase phase, Side side) {
          IPlayerMush mush = p.getCapability(PlayerMushProvider.MUSH_CAP, null);
          if(phase == TickEvent.Phase.END){
             if(side.isClient() && this.isSquid && p.getName().equals(Minecraft.getMinecraft().player.getName())) 
                this.setSquidBoundingBoxToPlayer(p); //Permet d'afficher soit même en poulpe
             else if(side.isClient() && MushPowers.getInstance().isSquid(p.getName()))
                this.setSquidBoundingBoxToPlayer(p); //Permet d'afficher les autres en poulpe
             else if(side.isServer() && p.getCapability(PlayerMushProvider.MUSH_CAP, null).isSquid())
                this.setSquidBoundingBoxToPlayer(p); //Permet de changer la BoundingBox côté serveur
             else if(p.eyeHeight != p.getDefaultEyeHeight())
                p.eyeHeight = p.getDefaultEyeHeight(); //Lorsqu'on redevient normale, la BoundingBox normal du joueur est automatiquement remis mais pas les yeux
          }
       }
    }
    
    private void setSquidBoundingBoxToPlayer(EntityPlayer p){
    if (0.8f != p.width || 0.8f != p.height) {
                p.width = 0.8f;
                p.height = 0.8f;
                p.eyeHeight = 0.4f;
                AxisAlignedBB axisalignedbb = p.getEntityBoundingBox();
                p.setEntityBoundingBox(new AxisAlignedBB(axisalignedbb.minX, axisalignedbb.minY, axisalignedbb.minZ, 
                axisalignedbb.minX + (double)p.width, axisalignedbb.minY + (double)p.height, axisalignedbb.minZ + (double)p.width));
           }
    }
    
    

    J'ai fait une vidéo pour mieux voir le problème :
    https://youtu.be/N8LYrPjNsSM
    On peux ainsi voir que le cube rouge dépasse du cube blanc sauf si je suis piégé.

    Merci !


  • Administrateurs

    Salut,
    On avait exactement le même soucis sur NHG avec le kit mouton (qui a aussi une hitbox différente).
    Voila notre code actuel :

    /**
    *
    * @param player
    * @param width
    * @param height
    * @param eyeHeight
    */
    public static void setSize(EntityPlayer player, float width, float height, float eyeHeight)
    {
    if(width != player.width || height != player.height)
    {
    player.eyeHeight = eyeHeight;
    float f = player.width;
    player.width = width;
    player.height = height;
    
    double d0 = width / 2.0D;
    player.setEntityBoundingBox(new AxisAlignedBB(player.posX - d0, player.posY, player.posZ - d0, player.posX + d0, player.posY + player.height, player.posZ + d0));
    
    if (player.width < f)
    {
    return;
    }
    
    if(!player.world.isRemote && player.width > f)
    {
    boolean firstUpdate = ObfuscationReflectionHelper.getPrivateValue(Entity.class, player, "firstUpdate", "field_70148_d");
    if(firstUpdate)
    {
    player.move(MoverType.SELF, (f - player.width) / 2, 0.0D, (f - player.width) / 2);
    }
    }
    }
    }
    
    


  • Marche parfaitement ! Merci Robin !