为了账号安全,请及时绑定邮箱和手机立即绑定

有没有什么办法可以删除某个块放在另一个特定块的顶部?

有没有什么办法可以删除某个块放在另一个特定块的顶部?

一只斗牛犬 2023-02-16 16:19:14
我试图找到最简单的方法来删除例如放置在粘液块顶部的导轨。我不想扫描特定半径内的所有块,因为我不想让插件使用太多内存。我希望只有在放置在粘液块顶部时才删除导轨。感谢您的任何回答。
查看完整描述

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()因为您考虑到了性能。


查看完整回答
反对 回复 2023-02-16
  • 1 回答
  • 0 关注
  • 145 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号