Как мне заставить игрока майнкрафта посмотреть на блок - PullRequest
0 голосов
/ 16 июня 2019

В настоящее время я кодирую мод для майнкрафт. Я хочу, чтобы игрок мог смотреть на координаты x, y, z. Я также хочу иметь возможность щелкать по этому блоку в этих координатах x, y, z (и, следовательно, разбить его, если игрок находится рядом с ним).

Другая проблема, с которой я столкнулся, заключается в том, что я хочу просмотреть координаты / координаты блоков и посмотреть и щелкнуть по каждому из них, но мне нужно поместить задержку между ними, не останавливая игру.

Я попробовал некоторый код, который уже был предложен на этом форуме, но персонаж майнкрафта не совсем правильно смотрит в правильном направлении:

public void LookAt(double px, double py, double pz) {
        EntityPlayer me = Minecraft.getMinecraft().player;
        World world = me.world;
        int x = (int) me.posX;
        int y = (int) me.posY + 1;
        int z = (int) me.posZ;
        double dirx = x - px;
        double diry = y - py;
        double dirz = z - pz;
        double len = Math.sqrt(dirx * dirx + diry * diry + dirz * dirz);
        dirx /= len;
        diry /= len;
        dirz /= len;
        double pitch = Math.asin(diry);
        double yaw = Math.atan2(dirz, dirx);
        // to degree
        pitch = pitch * 180.0 / Math.PI;
        yaw = yaw * 180.0 / Math.PI;
        yaw += 90f;
        me.rotationPitch = (float) pitch;
        me.rotationYaw = (float) yaw;
    }

Код выше сорта работает, как уже было сказано, но он не всегда смотрит на те же ТОЧНЫЕ координаты, когда я использую метод с другого угла / позиции.

Для задержек, которые я уже пробовал использовать Thread.sleep (), что привело к зависанию Minecraft. Я также попробовал robot.delay (), (я использую робота, чтобы эмулировать клик), но это приводит к тому же самому. Когда я не помещаю задержку, нет остановки, но она переходит к последнему набору координат в цикле и разбивает только этот один блок.

1 Ответ

1 голос
/ 08 июля 2019

Вы можете использовать Bukkit API, чтобы упростить код плагина.

Если вы хотите получить блок на вид игрока, вам нужно использовать:

Block b = player.getTargetBlock(new HashSet<Material>(), 100);
if (b.getState() instanceof Block) {
    // your code
}
...