Chaise



  • Bonjour/Bonsoir
    J'aimerai pouvoir faire en sorte que quand le joueur fait un clic droit sur un bloc il s'assoie dessus et je ne sais pas comment faire.



  • Tu fais spawn une entity et tu fais asseoir le joueur dessus. Bien évidemment l entity doit être immobilile et tu dois set ses positions a chaque tick pour qu elle ne bouge pas pareil pour sa rotatoin, enleve lui son ia et fais en sorte qu elle ne puisse pas être poussée et que quand le joueur se lève de la chaise, tu la setdead.



  • Ou tu peux tout simplement aller voir le github de FFMTLibs où il y a une classe exprès pour çà.



  • J'ai fait comme dans le github avec le EntityBlockSittable et le block sittable mais quand je clic droit sur le block rien ne se passe.


  • Administrateurs

    Sans ton code on ne risque pas de pouvoir t'aider.


  • Correcteurs

    Tu n'as pas oublié cette partie?

    [size=small/**]
    
     * To use, add this in your block: (change heightOfThePlayer with a float)
    %(#969896)[ *```
    ]
     * public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
     * {
     * return FFMTBlockSittable.sitPlayer(world, x, y, z, player, heightOfThePlayer);
     * }
    %(#969896)[ * 
    ```]
     **/
    


  • package com.mod_rpg.Block;
    
    import java.util.List;
    
    import com.mod_rpg.CoreMod.Main;
    import com.mod_rpg.Entity.EntityBlockSittable;
    
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.util.AxisAlignedBB;
    import net.minecraft.world.World;
    
    public class BlockSittable extends Block
    {
        public BlockSittable(Material material, String name)
        {
            super(material);
            this.setUnlocalizedName(name);
            this.setCreativeTab(Main.TabsDeco);
        }
        public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
        {
            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.fromBounds(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;
        }
    }
    
    
    package com.mod_rpg.Entity;
    
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.world.World;
    
    public class EntityBlockSittable extends Entity
    {
        public int blockPosX;
        public int blockPosY;
        public 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;
            }
    
            if(!this.worldObj.isRemote)
            {
                entityplayer.mountEntity(this);
            }
            return true;
        }
    
        @Override
        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()
        {
    
        }
    }
    
    ```</entityblocksittable>

  • Administrateurs

    Je suis presque sûr que tu n'as pas enregistré l'entité.


  • Correcteurs

    Au passage vous sauriez où trouver l'équivalent en 1.7 svp?

    Quand j'essaie d'adapter [font=Ubuntu, sans-serif le github de FFMTLibs précieusement renseigné de la part de SCAREX, la "seule" erreur vient de:]

    %(#000000)[[font=monospace]AxisAlignedBB]%(#666600)[[font=monospace].]%(#000000)[[font=monospace]fromBounds]%(#666600)[[font=monospace](]%(#000000)[[font=monospace]x]%(#666600)[[font=monospace],]%(#000000)[[font=monospace] y]%(#666600)[[font=monospace],]%(#000000)[[font=monospace] z]%(#666600)[[font=monospace],]%(#000000)[[font=monospace] x ]%(#666600)[[font=monospace]+] %(#646464)[[font=monospace]1.0D]%(#666600)[[font=monospace],]%(#000000)[[font=monospace] y ]%(#666600)[[font=monospace]+] %(#646464)[[font=monospace]1.0D]%(#666600)[[font=monospace],]%(#000000)[[font=monospace] z ]%(#666600)[[font=monospace]+] %(#646464)[[font=monospace]1.0D]%(#666600)[[font=monospace]).]%(#000000)[[font=monospace]expand]%(#666600)[[font=monospace](]%(#646464)[[font=monospace]1.0D]%(#666600)[[font=monospace],] %(#646464)[[font=monospace]1.0D]%(#666600)[[font=monospace],] %(#646464)[[font=monospace]1.0D]%(#666600)[[font=monospace]));]
    

  • Administrateurs

    https://github.com/FFMT/FFMT-libs/tree/17
    D'ailleurs je viens de capter qu'il y a un problème dans le code, le expand n'a rien à faire là.


  • Correcteurs

    ça marche du tonnerre.
    Merci Robin.



  •   EntityRegistry.registerModEntity(EntityBlockSittable.class, "entityblocksittable", 100, this, 0, 10, true);
    


  • Le problème dans ce code c'est le :

    public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
    {
    return sitPlayer(world, x, y, z, player, 1.0F);
    }
    

    Qui en 1.8 est supposé être comme ça :

    @Override
    public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)
    {
    return sitPlayer(world, pos.getX(), pos.getY(), pos.getZ(), player, 1.0F);
    }
    

    Toujours penser à vérifier les fonctions "officiels" avec le petit @Override ça évite ce genre d'erreur.

    Ps: Moi j'aurais voulue savoir comment descendre l'entité qui remonte à chaque fois au bout d'une seconde environ 😕


  • Correcteurs

    @'EmotionFox':

    Le problème dans ce code c'est le :

    public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ)
    {
       return sitPlayer(world, x, y, z, player, 1.0F);
    }
    

    Qui en 1.8 est supposé être comme ça :

    @Override
    public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)
    {
       return sitPlayer(world, pos.getX(), pos.getY(), pos.getZ(), player, 1.0F);
    }
    

    Toujours penser à vérifier les fonctions "officiels" avec le petit @Override ça évite ce genre d'erreur.

    Ps: Moi j'aurais voulue savoir comment descendre l'entité qui remonte à chaque fois au bout d'une seconde environ 😕

    Moi j'ai abaissé la position du joueur (edit: en 1.7, je reprécise)

    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, 0.5F);
    }
    

    Par contre j'ai un bloc avec des bordures réduites de moitié (sinon le joueur est considéré dans le bloc et remonte)

    M'enfin la position de l'entité doit bien pouvoir être réglée. A voir si l'entité a le même soucis de position réactualisée pour ne pas être dans le bloc.
    A toi de faire mumuse avec ces variables. (Je suis pas de grande utilité mais chui qu'un bidouilleur de codes pour le moment).



  • je crois qu'il y a un truc avec le noclip ou alors je me trompe.

    Mes dernière chaises date de la bêta 1.2.5 donc bon…



  • Arf justement TouToune j'ai baissé cette valeur et beaucoup d'autre (en réalité j'ai déjà transformé toutes les valeurs en float et je l'ai est toutes abaissé en ce qui concerne les valeurs d'Y) mais le problème que l'entité ce réajuste persiste :C Et en ce qui concerne le noClip je vois pas trop ce que je pourrais changer



  • dans le constructeur de l'entité pour sit, this.noClip = true;



  • J'aimerais que la hitbox du bloc que j'ai modifier soit toujours placer en fonction de la position du joueur quand il place le bloc pour que la hitbox suive le model custom.



  • passe par les axis ou direction.