RayTrace на сервере

Версия Minecraft
1.11.2
переменная rayTrace есть только на игроке EntityPlayerSP, что на клиенте. А как мне взять entity на которого смотрит игрок со стороны сервера?

P.S. пытался так же брать Entity на клиенте через
Entity entity = Minecraft.getMinecraft().player.rayTrace(range, 0.5F).entityHit;
Но почему-то возвращается null
 
3,005
192
592
Для чего тебе это нужно?
Хочу сделать оружие но без использования отдельного снаряда. Просто взять Entity и нанести ему дамаг. Не знаю насколько сильно отличается производительность со снарядом и без, но как по мне мой способ полегче.
Теперь почему именно со стороны сервера: я уже представляю как игрок с высоким пингом отправляет пакеты о выстреле в игрока, который уже совсем далеко от него, поэтому хочу брать RayTrace на сервере, дабы избежать таких конфликтов, но не могу определиться что лучше.
 
1,560
86
204
Можно как-то так:
Java:
Vec3d vec3d1 = new Vec3d(posX, posY, posZ);
        Vec3d vec3d = new Vec3d(posX + motionX, posY + motionY, posZ + motionZ);
        RayTraceResult rtr = world.rayTraceBlocks(vec3d1, vec3d, false, true, false);
        vec3d1 = new Vec3d(posX, posY, posZ);
        vec3d = new Vec3d(posX + motionX, posY + motionY, posZ + motionZ);
      
        if (rtr != null) {
            vec3d = new Vec3d(rtr.hitVec.x, rtr.hitVec.y, rtr.hitVec.z);
        }
      
        Entity entity = findEntityOnPath(vec3d1, vec3d);
      
        if (entity != null) {
            rtr = new RayTraceResult(entity);
        }
      
        if (rtr != null && !world.isRemote) {
            if (rtr.entityHit != null) {
                //
            }
        }
Java:
@Nullable
    protected Entity findEntityOnPath(Vec3d start, Vec3d end) {
        Entity entity = null;
        List<Entity> list = world.getEntitiesInAABBexcluding(this, getEntityBoundingBox().expand(motionX, motionY, motionZ).grow(1.0D), BULLET_TARGETS);
        double d0 = 0.0D;
       
        for (int i = 0; i < list.size(); ++i) {
            Entity entity1 = list.get(i);
           
            boolean flag = entity1 == shootingEntity;
           
            if (!flag) {
                AxisAlignedBB axisalignedbb = entity1.getEntityBoundingBox().grow(0.30000001192092896D);
                RayTraceResult raytraceresult = axisalignedbb.calculateIntercept(start, end);
               
                if (raytraceresult != null) {
                    double d1 = start.squareDistanceTo(raytraceresult.hitVec);
                   
                    if (d1 < d0 || d0 == 0.0D)
                    {
                        entity = entity1;
                        d0 = d1;
                    }
                }
            }
        }
       
        return entity;
    }
 
Сверху