- 39
- 2
- 0
Пробовал копировать исходники mrcrayfish's со всеми его вспомогательными классами, не работает. При нажатии на блок немного дёргается камера, а псле нажатия на шифт телепортирует к блоку
Вот метод, который расположен в блоке
Вот код энтити
Вот метод, который расположен в блоке
Метод onBlockActivated:
public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
{
if(!worldIn.isRemote) {
EntitySeat sit = new EntitySeat(worldIn);
sit.setPosition(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D);
worldIn.spawnEntity(sit);
playerIn.startRiding(sit);
}
return false;
}
Код класса Entity:
public class EntitySeat extends Entity
{
public int blockPosX;
public int blockPosY;
public int blockPosZ;
public EntitySeat(World world)
{
super(world);
setSize(0.5F,0.5F);
this.noClip = true;
}
public EntitySeat(World world, double x, double y, double z, double y0ffset)
{
this(world);
this.blockPosX = (int) x;
this.blockPosY = (int) y;
this.blockPosZ = (int) z;
setPosition(x + 0.5D, y + y0ffset, z + 0.5D);
}
public EntitySeat(World world, double x, double y, double z, double y0ffset, int rotation, double rotationOffset)
{
this(world);
this.blockPosX = (int) x;
this.blockPosY = (int) y;
this.blockPosZ = (int) z;
setPostionConsideringRotation(x + 0.5D, y + y0ffset, z + 0.5D, rotation, rotationOffset);
}
public void setPostionConsideringRotation(double x, double y, double z, int rotation, double rotationOffset)
{
switch(rotation)
{
case 2:
z += rotationOffset;
break;
case 0:
z -= rotationOffset;
break;
case 3:
x -= rotationOffset;
break;
case 1:
x += rotationOffset;
break;
}
setPosition(x, y, z);
}
@Override
public double getMountedYOffset()
{
return this.height * 0.0D;
}
@Override
protected boolean shouldSetPosAfterLoading()
{
return false;
}
@Override
public void onEntityUpdate()
{
super.onEntityUpdate();
if(!this.isBeingRidden() || this.world.isAirBlock(new BlockPos(blockPosX, blockPosY, blockPosZ)))
{
this.setDead();
world.updateComparatorOutputLevel(getPosition(), world.getBlockState(getPosition()).getBlock());
}
}
@Override
protected void entityInit()
{
}
@Override
public void readEntityFromNBT(NBTTagCompound nbttagcompound)
{
}
@Override
public void writeEntityToNBT(NBTTagCompound nbttagcompound)
{
}
}