Java 我如何让minecraft玩家看到一个方块

Java 我如何让minecraft玩家看到一个方块,java,math,vector,delay,minecraft,Java,Math,Vector,Delay,Minecraft,目前我正在为minecraft编写一个mod。我想让玩家看到x,y,z坐标。我还希望能够在x、y、z坐标处单击该块(因此,如果玩家靠近该块,则将其打断) 我的另一个问题是,我想循环通过坐标/块坐标,查看并单击每个坐标,但我需要在它们之间设置延迟,而不会使我的游戏冻结 我尝试了一些已经在这个论坛上提出的代码,但是minecraft角色并没有完全朝着正确的方向看: public void LookAt(double px, double py, double pz) { Entity

目前我正在为minecraft编写一个mod。我想让玩家看到x,y,z坐标。我还希望能够在x、y、z坐标处单击该块(因此,如果玩家靠近该块,则将其打断)

我的另一个问题是,我想循环通过坐标/块坐标,查看并单击每个坐标,但我需要在它们之间设置延迟,而不会使我的游戏冻结

我尝试了一些已经在这个论坛上提出的代码,但是minecraft角色并没有完全朝着正确的方向看:

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(),(我使用robot模拟点击),但结果是一样的。当我不延迟时,就不会冻结,但它会跳到循环中的最后一组坐标,只会中断这一个块。

您可以使用Bukkit API简化插件代码

如果您想让玩家看到方块,您需要使用:

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

1。你一次问的问题太多了。2.什么是看得不完美?对于什么输入/输出。。。3.游戏API是如何工作的?我假设消息/事件系统在这种情况下延迟将冻结游戏,相反,你需要在每次调用/迭代你的mod代码的基础上“动画化”你的东西。。。因此,如果游戏重复调用您的代码,请创建一个全局/静态变量,该变量将告诉您正在做什么,并将
for
循环改为迭代调用方式(no
for
循环)。如果你的API不同,我们需要知道游戏如何调用你的mod?。。。