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 > 0Merci de votre aide.
-
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>
-
Je ne vois aucun problème dans ton code
-
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>