Résolu Probleme de chaise
-
Bijour, tout le monde
Je Vient de Crée une chaise sans problème, j’ai réussi a faire en sorte que l’on puisse s’assoir mais le problème c’est que on vole sur la chaise XD, notre perso s’assoie en haut de la HitBox de la chaise
Un petit Screen:
http://www.noelshack.com/2015-52-1450709519-2015-12-21-15-51-25.pnges-que quelqu’un aurait une solution pour que le joueur se place bien sur la chaise et pas au dessus X)
La Class du bloc:
package fr.burning.lfc.blocks; import java.util.List; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import fr.burning.lfc.lib.ProxyClient; import fr.burning.lfc.tile.EntityChaiseSittable; import fr.burning.lfc.tile.TileEntityChaise; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.IIcon; import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; public class Chaise extends Block { private IIcon top, bottom; public Chaise(int i, Material material) { super(material); this.setBlockName("Chaise"); } 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 <entitychaisesittable>listEMB = world.getEntitiesWithinAABB(EntityChaiseSittable.class, AxisAlignedBB.getBoundingBox(x, y, z, x + 1.0D, y + 1.0D, z + 1.0D).expand(1.0D, 1.0D, 1.0D)); for(EntityChaiseSittable entitytocheck : listEMB) { if((entitytocheck.blockPosX == x) && (entitytocheck.blockPosY == y) && (entitytocheck.blockPosZ == z)) { entitytocheck.interact(player); return true; } } EntityChaiseSittable entity = new EntityChaiseSittable(world, player, x, y, z, x + entityX, y + entityY, z + entityZ); world.spawnEntityInWorld(entity); entity.interact(player); } return true; } //–----------- public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack) { if(stack.getItemDamage() == 0) { TileEntity tile = world.getTileEntity(x, y, z); if(tile instanceof TileEntityChaise) { int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3; ((TileEntityChaise)tile).setDirection((byte)direction); } } } @Override public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis) { if((axis == ForgeDirection.UP || axis == ForgeDirection.DOWN) && !world.isRemote && world.getBlockMetadata(x, y, z) == 0) { TileEntity tile = world.getTileEntity(x, y, z); if(tile instanceof TileEntityChaise) { TileEntityChaise tileTuto = (TileEntityChaise)tile; byte direction = tileTuto.getDirection(); direction++; if(direction > 3) { direction = 0; } tileTuto.setDirection(direction); return true; } } return false; } public ForgeDirection[] getValidRotations(World world, int x, int y, int z) { return world.getBlockMetadata(x, y, z) == 0 ? new ForgeDirection[] {ForgeDirection.UP, ForgeDirection.DOWN} : ForgeDirection.VALID_DIRECTIONS; } @Override public TileEntity createTileEntity(World world, int metadata) { return new TileEntityChaise(); } @Override public boolean hasTileEntity(int metadata) { return true; } public boolean isOpaqueCube() { return false; } public boolean renderAsNormalBlock() { return false; } @SideOnly(Side.CLIENT) public int getRenderType() { return ProxyClient.tesrRenderId; } public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.2F, 1.0F); } }
L’entity du bloc
package fr.burning.lfc.tile; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; public class TileEntityChaise extends TileEntity { private byte direction; @Override public void readFromNBT(NBTTagCompound compound) { super.readFromNBT(compound); this.direction = compound.getByte("Direction"); } @Override public void writeToNBT(NBTTagCompound compound) { super.writeToNBT(compound); compound.setByte("Direction", this.direction); } public byte getDirection() { return direction; } public void setDirection(byte direction) { this.direction = direction; this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); } public Packet getDescriptionPacket() { NBTTagCompound nbttagcompound = new NBTTagCompound(); this.writeToNBT(nbttagcompound); return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbttagcompound); } public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { this.readFromNBT(pkt.func_148857_g()); this.worldObj.markBlockRangeForRenderUpdate(this.xCoord, this.yCoord, this.zCoord, this.xCoord, this.yCoord, this.zCoord); } }
[size=largeLa Class EntityChaiseSittable]
package fr.burning.lfc.tile; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; public class EntityChaiseSittable extends Entity { public int blockPosX; public int blockPosY; public int blockPosZ; public EntityChaiseSittable(World world) { super(world); this.noClip = true; this.preventEntitySpawning = true; this.setSize(0.0F, 0.0F); } public EntityChaiseSittable(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; } 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() { } } ```</entitychaisesittable>
-
public double getMountedYOffset() { return (double)this.height + 0.35D; }
Tu mets plus ou moins la valeur que tu veux après.
-
@‘Toutoune1008’:
public double getMountedYOffset() { return (double)this.height + 0.35D; }
Tu mets plus ou moins la valeur que tu veux après.
j’ai mis ça dans la class du bloc et il me met une erreur sur le
this.height
je pourrais le remplacer par quoi ?
-
Il faut mettre la fonction dans la classe l’entité (EntityChaiseSittable)
-
@‘robin4002’:
Il faut mettre la fonction dans la classe l’entité (EntityChaiseSittable)
Ha oui sa marche mieux XD merci