我试图找到一种最简单的删除方法,例如,将其放置在粘液块顶部时,将其删除。我不想扫描特定半径内的所有块,因为我不想插件使用过多的内存。
我希望仅将滑轨放在煤泥块上方时将其删除。
谢谢您的回答。
答案 0 :(得分:1)
就像本杰明·厄克特(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()检查我们的粘液块。请注意,此方法返回放置导轨的块,在这种情况下,只能将导轨放置在块的顶部,这意味着该方法必须返回下面的块。但是,请记住,该方法不能确保除rail以外的其他块。
在其他情况下,您可能必须将块放在坐标block.getY()-1
处,该块将始终返回下面的块,但需要更高的性能。我选择event.getBlockAgainst()
是因为您考虑到性能。