我正在制作一个Bukkit插件,当玩家触摸墙壁时(我的身体,而不是十字线),我想运行一段代码!所以,我认为这可以通过PlayerMoveEvent实现。问题是,如何。 几点说明:
我真的无法弄清楚这一点,我无法在网上找到这个。你们是我最后的希望;) 提前致谢, BRAM
答案 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。