Asseoir un joueur



  • Bonjour 😄 ,
    J'ai (encore) un problème mais plus simple je pense (je vous épargnerais les vecteurs)
    J'aimerais faire en sorte qu'un joueur puisse s’asseoir sur mon bloc
    Je sais que FFTM-libs le propose mais ça ne marche pas chez moi 😞 
    Je suis considéré comme sur l'entité (donc je peux sneak pour la dismount) mais quand je la monte il ne se passe rien (je ne suis pas sur l'entité en "assis", je reste debout à ma place et je peux bouger) :s

    En ce qui concerne les codes ce sont ceux de FFTM-libs

    ​public class EntityBlockSittable extends Entity
    
    {
    protected int blockPosX;
    protected int blockPosY;
    protected int blockPosZ;
    
    public EntityBlockSittable(World world)
    {
    super(world);
    this.noClip = true;
    this.preventEntitySpawning = true;
    this.setSize(0.0F, 0.0F);
    }
    
    public EntityBlockSittable(World world, EntityPlayer entityplayer, int x, int y, int z, float entityX, float entityY, float entityZ)
    {
    this(world);
    this.blockPosX = x;
    this.blockPosY = y;
    this.blockPosZ = z;
    this.setPosition(entityX, entityY, entityZ);
    }
    
    public boolean interact(EntityPlayer entityplayer)
    {
    
    if(this.riddenByEntity != null)
    {
    return true;
    }
    else
    {
    entityplayer.rotationYaw = this.rotationYaw;
    entityplayer.rotationPitch = this.rotationPitch;
    
           if (!this.worldObj.isRemote)
           {
            entityplayer.mountEntity(this);
            System.out.println(this);
           }
    
                return true;
    }
    }
    
    public void onEntityUpdate()
    {
    if(this.riddenByEntity == null || this.riddenByEntity.isDead)
    {
    this.setDead();
    }
    super.onEntityUpdate();
    }
    
    @Override
    public void readEntityFromNBT(NBTTagCompound compound)
    {
    this.blockPosX = compound.getInteger("blockPosX");
    this.blockPosY = compound.getInteger("blockPosY");
    this.blockPosZ = compound.getInteger("blockPosZ");
    }
    
    @Override
    public void writeEntityToNBT(NBTTagCompound compound)
    {
    compound.setInteger("blockPosX", this.blockPosX);
    compound.setInteger("blockPosY", this.blockPosY);
    compound.setInteger("blockPosZ", this.blockPosZ);
    }
    
    @Override
    protected void entityInit()
    {
    
    }
    
    ​public class BlockSittable extends Block
    
    {
    public BlockSittable(Material material)
    {
    super(material);
    }
    
    public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, float par8, float par9)
    {
    return sitPlayer(world, x, y, z, player, 1.0F);
    }
    
    public static boolean sitPlayer(World world, int x, int y, int z, EntityPlayer player, float entityY)
    {
    return sitPlayer(world, x, y, z, player, 0.5F, entityY, 0.5F);
    }
    
    public static boolean sitPlayer(World world, int x, int y, int z, EntityPlayer player, float entityX, float entityY, float entityZ)
    {
    if(!world.isRemote)
    {
    List <entityblocksittable>listEMB = world.getEntitiesWithinAABB(EntityBlockSittable.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1.0D, y + 1.0D, z + 1.0D).expand(1.0D, 1.0D, 1.0D));
    for(EntityBlockSittable entitytocheck : listEMB)
    {
    if((entitytocheck.blockPosX == x) && (entitytocheck.blockPosY == y) && (entitytocheck.blockPosZ == z))
    {
    entitytocheck.interact(player);
    return true;
    }
    }
    
    EntityBlockSittable entity = new EntityBlockSittable(world, player, x, y, z, x + entityX, y + entityY, z + entityZ);
    world.spawnEntityInWorld(entity);
    entity.interact(player);
    }
    return true;
    }
    }
    

    Si ça se trouve c'est une faute toute bête que … je ne trouve pas, j'ai regarder du côté du cheval mais je n'ai pas trouvé ce qui était en plus pour que ça marche :s

    Merci d'avance :D</entityblocksittable>


  • Administrateurs

    Ton entité est au moins enregistré ?



  • rire jaune

    Si ça se trouve c'est une faute toute bête que … je ne trouve pas

    Bah … c'était bien ça (y a de quoi se sentir bête...)

    En revanche j'ai un autre problème : lorsque je clique droit et que je suis sur l'entité je "monte" par exemple si je clique sur un bloc je suis aux coordonnées 63.125 mais après quelque chose change et je passe en coordonnées 63.5 une idée ? :s (explication très confuse)


  • Administrateurs

    J'ai compris ton explication, mais je ne vois pas ce qui pourrai causer ça.



  • Bah remet le joueur en permanence a la bonne hauteur



  • C'est un bug assez commun, enfait l'entité semble se TP plus haut, essaie de la mettre en noclip pour voir.



  • Il y est déjà (codes plus haut) dans le constructeur de l'entité