Résolu 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 !
-
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 !