目前正在为我的世界编码我的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;
}
sorta上面的代码可以像上面所说的那样工作,但是当我从另一个角度/位置使用该方法时,它并不总是看相同的EXACT坐标。
对于我已经尝试使用Thread.sleep()的延迟,这导致了Minecraft Freezing。我也尝试过robot.delay(),(我使用机器人来模拟点击),但结果相同。当我不延迟时,不会冻结,但会跳到循环中的最后一组坐标,并且只会中断该一个块。
答案 0 :(得分:1)
您可以使用Bukkit API简化插件代码。
如果您想让玩家看到障碍物,则需要使用:
Block b = player.getTargetBlock(new HashSet<Material>(), 100);
if (b.getState() instanceof Block) {
// your code
}