Доброго времени суток. Создаю простейший предмет, который позволяет телепортироваться к блоку, который находится в прицеле игрока.
Проблема заключается в том, что RayCastResult не позволяет получить конкретную точку "коллизии" луча с блоком. Из-за этого теряется информация о том, в какую часть блока смотрел игрок.
Нужно, чтобы телепортация происходила с учётом расположения курсора на сторонах блока.
Пытался реализовать через yaw и pitch, однако работает неправильно:
Проблема заключается в том, что RayCastResult не позволяет получить конкретную точку "коллизии" луча с блоком. Из-за этого теряется информация о том, в какую часть блока смотрел игрок.
Нужно, чтобы телепортация происходила с учётом расположения курсора на сторонах блока.
Пытался реализовать через yaw и pitch, однако работает неправильно:
Java:
public class PortalStaff extends Item {
public PortalStaff(Properties pProperties) {
super(pProperties);
}
@Override
public ActionResult<ItemStack> use(World pLevel, PlayerEntity pPlayer, Hand pHand) {
if(!pLevel.isClientSide) {
RayTraceResult rayCast = pPlayer.pick(100,0,false);
if(rayCast.getType() == RayTraceResult.Type.BLOCK) {
BlockPos blockInRay = ((BlockRayTraceResult) rayCast).getBlockPos();
double x = blockInRay.getX() + Math.cos(pPlayer.getViewXRot(5)) * Math.sin(pPlayer.getViewYRot(5));
double y = blockInRay.getY() + 1 ;
double z = blockInRay.getZ() + Math.cos(pPlayer.getViewXRot(5)) * Math.cos(pPlayer.getViewYRot(5));
pPlayer.moveTo(x, y, z);
pPlayer.playSound(SoundEvents.ENDERMAN_TELEPORT,1,1);
}
}
return super.use(pLevel, pPlayer, pHand);
}
}