有没有什么办法可以删除某个块放在另一个特定块的顶部?
Is there any way to delete a certain block when placed on top of another certain block?
我正在尝试找到最简单的方法来删除例如放置在粘液块顶部的导轨。我不想扫描特定半径内的所有块,因为我不想让插件使用太多内存。
我希望铁轨仅在放置在粘液块顶部时才会被删除。
感谢您的回答。
就像 Benjamin Urquhart 所做的那样,总是把你的问题分成更小的问题 sub-problems,如果你搜索它们而不是搜索主要问题,这些问题可以更容易地得到解决,因为主要问题很可能是唯一的你而 sub-problems 不是。
考虑到这一点,我们需要开始监听一个事件。更具体地说 BlockPlaceEvent。将您的 class 设置为侦听器并注册它。
在事件中我们需要检查放置的方块是否是铁轨以及下面的方块是粘液,如果是,取消事件以防止它被放置。 请注意,取消事件只会阻止放置铁轨,而不会删除。如果你想删除轨道你必须将它的类型设置为 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);
}
}
您必须将此代码放入已注册的侦听器中 class 才能调用它。
我选择使用 #getBlockAgainst() 来检查我们的粘液块。请注意,此方法 return 是放置铁轨的方块,在我们的例子中,铁轨只能放置在方块之上,这意味着该方法必须 return 下面的方块。但是,请记住该方法不能确保使用铁路以外的其他方块。
在其他情况下,您可能必须在坐标 block.getY()-1
处获取块,这将始终是 return 下面的块,但需要更高的性能。我选择 event.getBlockAgainst()
因为您考虑的是性能。
我正在尝试找到最简单的方法来删除例如放置在粘液块顶部的导轨。我不想扫描特定半径内的所有块,因为我不想让插件使用太多内存。
我希望铁轨仅在放置在粘液块顶部时才会被删除。
感谢您的回答。
就像 Benjamin Urquhart 所做的那样,总是把你的问题分成更小的问题 sub-problems,如果你搜索它们而不是搜索主要问题,这些问题可以更容易地得到解决,因为主要问题很可能是唯一的你而 sub-problems 不是。
考虑到这一点,我们需要开始监听一个事件。更具体地说 BlockPlaceEvent。将您的 class 设置为侦听器并注册它。
在事件中我们需要检查放置的方块是否是铁轨以及下面的方块是粘液,如果是,取消事件以防止它被放置。 请注意,取消事件只会阻止放置铁轨,而不会删除。如果你想删除轨道你必须将它的类型设置为 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);
}
}
您必须将此代码放入已注册的侦听器中 class 才能调用它。 我选择使用 #getBlockAgainst() 来检查我们的粘液块。请注意,此方法 return 是放置铁轨的方块,在我们的例子中,铁轨只能放置在方块之上,这意味着该方法必须 return 下面的方块。但是,请记住该方法不能确保使用铁路以外的其他方块。
在其他情况下,您可能必须在坐标 block.getY()-1
处获取块,这将始终是 return 下面的块,但需要更高的性能。我选择 event.getBlockAgainst()
因为您考虑的是性能。