Java / Bukkit - 检查玩家是否撞墙

时间:2014-08-22 12:55:24

标签: java bukkit

我正在制作一个Bukkit插件,当玩家触摸墙壁时(我的身体,而不是十字线),我想运行一段代码!所以,我认为这可以通过PlayerMoveEvent实现。问题是,如何。 几点说明:

  • 如果玩家朝另一个方向看,他走进一堵墙,我想运行相同的代码
  • 玩家必须用他的身体触摸墙壁,而不是用他的十字架

我真的无法弄清楚这一点,我无法在网上找到这个。你们是我最后的希望;) 提前致谢, BRAM

3 个答案:

答案 0 :(得分:1)

我同意Finn的观点,每次玩家移动时,这种方法都会被qutie服务器强化运行,但这可能会有所帮助:

@EventHandler
public void onPlayerMove(PlayerMoveEvent e)
{
    for(int x = e.getPlayer().getLocation().getBlockX() - 1; x < x + 2; x++)
    {
        for(int z = e.getPlayer().getLocation().getBlockZ() - 1; z < z + 2; z++)
        {
            Block b = e.getPlayer().getWorld().getBlockAt(x, e.getPlayer().getLocation().getBlockY(), z);

            if(b.getType() != Material.AIR)
            {
                doSomething();
            }
        }
    }
}

从理论上讲,这应该有效。它只是循环播放器周围的块。如果它们不是空的(由空气制成)那么它将做你想做的任何事情。

答案 1 :(得分:0)

您必须首先获得玩家的位置。然后,使用X坐标和Z坐标找出它们与它们所站立的块边缘的接近程度。如果它们足够接近(大约0.3个区块),则需要使用位置矢量和Material.isSolid()来确定该方向是否存在阻塞。
每当玩家移动(或转过头)时调用此方法可能会有些滞后。

答案 2 :(得分:0)

这是一个没有良好解决方案的问题,没有重新实现mojang的检查或挂钩到nms。