Problème de récupération d'entité



  • Bonjour,

    J'essaye d'appliquer une force à une entité quand c'elle-ci marche sur mon bloc. Le problème c'est que je veut que mon bloc possède en plus un TileEntity.
    Voici mon code:

    
    @Override
    public void onEntityWalk(World world, BlockPos pos, Entity entity) {    
        // Make the entity jump
        if (!world.isRemote) {
            TileEntity tile = getTileEntity(world, pos);
    
            if (tile instanceof TileEntityJumper) {
                TileEntityJumper tileJumper = (TileEntityJumper) tile;
    
                entity.motionY += tileJumper.getJump();
                System.out.println(tileJumper.getJump());
    
                System.out.println(entity);
            }
        }
    }
    
    

    Quand je print entity, la console m'affiche bien le jour. Et tileJumper correspond bien au TileEntity de mon bloc, la méthode getJump() fonctionne bien.
    Du coup je ne comprends pas pourquoi aucune force n'est appliqué sur les entités qui marchent sur le bloc.
    getJump() est bien > 0

    Merci de votre aide.


  • Administrateurs

    Salut,
    Peux-tu envoyer le code de ton tile entity ?



  • Yep

    
    public class TileEntityJumper extends TileEntity {
    
        private double jump;
    
        @Override
        public void readFromNBT(NBTTagCompound compound) {
            this.jump = compound.getDouble("jump");
            super.readFromNBT(compound);
        }
    
        @Override
        public NBTTagCompound writeToNBT(NBTTagCompound compound) {
            compound.setDouble("jump", this.jump);
            return super.writeToNBT(compound);
        }
    
        public double getJump() {
            return this.jump;
        }
    
        public void increaseJump() {
            this.jump++;
            markDirty();
        }
    
        public void decreaseJump() {
            this.jump–;
            markDirty();
        }
    }
    
    

    Et le BlocTileEntity qui va avec :

    
    public abstract class BlockTileEntity <te extends="" tileentity="">extends BlockBase {
    
        public BlockTileEntity(Material material, String name) {
            super(material, name);
        }
    
        public abstract Class <te>getTileEntityClass();
    
        public TE getTileEntity(IBlockAccess world, BlockPos pos) {
            return (TE)world.getTileEntity(pos);
        }
    
        @Override
        public boolean hasTileEntity(IBlockState state) {
            return true;
        }
    
        @Nullable
        @Override
        public abstract TE createTileEntity(World world, IBlockState state);
    
    }
    
    ```</te></te>

  • Administrateurs

    Je ne vois aucun problème dans ton code 😕


  • Rédacteurs

    Je doit être un peu bête mais j'ai beau regarder et je ne vois où est incrémenté la variable jump, à moins qu'il le fasse depuis un gui (auquel cas il n'y a effectivement aucun problème)



  • @'BrokenSwing':

    Je doit être un peu bête mais j'ai beau regarder et je ne vois où est incrémenté la variable jump, à moins qu'il le fasse depuis un gui (auquel cas il n'y a effectivement aucun problème)

    La variable est modifié l'ors du clic souris sur le bloc lui même. Dès que je rentre chez moi j'envoi le code complet de la classe.
    De plus toutes les classes présentés sont dans le package proxy.common.



  • Et voilà la totalité de ma classe BlockBasicJumper:

    
    package com.loustak.flask.proxy.common.blocks;
    
    import javax.annotation.Nullable;
    
    import com.loustak.flask.proxy.common.tileentity.BlockTileEntity;
    import com.loustak.flask.proxy.common.tileentity.TileEntityJumper;
    
    import net.minecraft.block.material.Material;
    import net.minecraft.block.state.IBlockState;
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.tileentity.TileEntity;
    import net.minecraft.util.EnumFacing;
    import net.minecraft.util.EnumHand;
    import net.minecraft.util.math.BlockPos;
    import net.minecraft.util.text.TextComponentString;
    import net.minecraft.world.World;
    
    public class BlockBasicJumper extends BlockTileEntity <tileentityjumper>{
    
    public BlockBasicJumper() {
        super(Material.IRON, "basic_jumper");
        setHardness(1.0f);
        setResistance(10.0F);
    }
    
    @Override
    public void onEntityWalk(World world, BlockPos pos, Entity entity) {    
        // Make the entity jump
        if (!world.isRemote) {
            TileEntity tile = getTileEntity(world, pos);
    
            if (tile instanceof TileEntityJumper) {
                TileEntityJumper tileJumper = (TileEntityJumper) tile;
    
                entity.motionY += tileJumper.getJump();
                System.out.println(tileJumper.getJump());
    
                System.out.println(entity);
            }
        }
    }
    
    @Override
    public void onFallenUpon(World worldIn, BlockPos pos, Entity entityIn, float fallDistance) {
        // Remove fall damage
        entityIn.fall(fallDistance, 0.0F);
    }
    
    @Override
    public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, 
            EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) {
    
        if (!world.isRemote) {
            TileEntityJumper tile = getTileEntity(world, pos);
    
            if (side == EnumFacing.DOWN) {
                tile.decreaseJump();
            } else if (side == EnumFacing.UP) {
                tile.increaseJump();
            }
            player.sendMessage(new TextComponentString("Jump height: " + tile.getJump()));
    
            return true;
        }
        return false;
    }
    
    @Override
    @Deprecated
    public boolean canEntitySpawn(IBlockState state, Entity entityIn) {
        return false;
    }
    
    @Override
    @Deprecated
    public boolean isOpaqueCube(IBlockState state) {
        return false;
    }
    
    @Override
    @Deprecated
    public boolean isFullCube(IBlockState state) {
        return false;
    }
    
    @Override
    public Class <tileentityjumper>getTileEntityClass() {
        return TileEntityJumper.class;
    }
    
    @Nullable
    @Override
    public TileEntityJumper createTileEntity(World world, IBlockState state) {
        return new TileEntityJumper();
    }
    
    }
    
    

    Je vais aussi tenté de mettre forge à jour.

    Edit: Le problème persiste après la mise à jour de forge…</tileentityjumper></tileentityjumper>