1 回答
TA贡献1847条经验 获得超11个赞
就像 Benjamin Urquhart 所做的那样,总是将你的问题分成更小的子问题,如果你搜索它们而不是搜索主要问题,这些问题可以更容易地得到解决,因为主要问题很可能是你独有的,而子问题是不是。
考虑到这一点,我们需要开始监听一个事件。更具体地说是BlockPlaceEvent。将您的班级设置为侦听器并注册它。
在事件中,我们需要检查放置的方块是否是铁轨,下方的方块是否是粘液,如果是,则取消事件以防止其被放置。请注意,取消事件只会阻止放置铁轨,而不会删除。如果你想删除轨道,你必须将它的类型设置为 AIR 而不是取消事件。
你最终会得到这样的结果:
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
Block block = event.getBlock();
Block against = event.getBlockAgainst();
if(block.getType().equals(Material.RAIL) && against.getType().equals(Material.SLIME_BLOCK)) {
event.setCancelled(true);
}
}
您必须将此代码放入已注册的侦听器类中才能调用它。我选择使用#getBlockAgainst()来检查我们的粘液块。请注意,此方法返回我们放置轨道的块,在我们的例子中,轨道只能放置在块的顶部,这意味着该方法必须返回下面的块。但是,请记住该方法不能确保使用铁路以外的其他方块。
在其他情况下,您可能必须在 coordinate 处获取块block.getY()-1,这将始终返回下面的块,但需要更高的性能。我选择是event.getBlockAgainst()因为您考虑到了性能。
添加回答
举报
