minecraft - WorldEdit 如何处理画笔?
问题描述
我试图找出Bukkit版本的 WorldEdit 如何处理画笔。我一直在查看 GitHub 上的源代码,但找不到任何有用的东西。我试图重新创建效果,但我只能在目标块的交互范围内让它工作。
这与源代码中的内容差不多:
} else if (action == Action.RIGHT_CLICK_AIR) {
if (we.handleRightClick(player)) {
event.setCancelled(true);
}
}
(WorldEdit/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditListener.java,第 143-147 行)
代码的其他一些部分非常接近。我也看过/worldedit-core,但也没有。
有人可以在这里帮助我吗?
编辑:这就是我尝试这样做的方式:
public static void onRightClick (PlayerInteractEvent event) {
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
Location location = event.getClickedBlock().getLocation();
if (event.getItem() != null) {
if (event.getItem().getItemMeta().equals(ItemManager.wand.getItemMeta())) {
Player player = event.getPlayer();
player.getWorld().doStuff(location);
}
}
}
}
编辑#2:我最好奇的是:如果您不在交互范围内,我们如何选择应用画笔的位置?
解决方案
我需要为此使用BlockIterators
。最终代码如下所示:
public class BoomWandEvent implements Listener {
@EventHandler
public static void onRightClick (PlayerInteractEvent event) {
Player player = event.getPlayer();
if (event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_AIR) {
if (player.getInventory().getItemInMainHand().equals(ItemManager.explosionWand)) {
Location eyePos = player.getEyeLocation();
BlockIterator raytracer = new BlockIterator(eyePos, 0.0D, player.getClientViewDistance() * 16);
while (raytracer.hasNext()) {
Location location = raytracer.next().getLocation();
if (player.getWorld().getBlockAt(location).getType() != Material.AIR && player.getWorld().getBlockAt(location).getType() != Material.CAVE_AIR && player.getWorld().getBlockAt(location).getType() != Material.VOID_AIR) {
player.getWorld().createExplosion(location, 4f);
return;
}
}
}
}
}
}
感谢流氓的帮助!
推荐阅读
- javascript - 来自事件和隐式绑定的 javascript 中的 this 范围
- c++ - Qt的src目录下如何建项目?
- react-native - 创建一个保存历史的全局堆栈导航器
- c# - 如何禁用 SSMS 中的加密数据对有权访问数据库的人可见?
- node.js - MongoDB 正则表达式中的 AND 运算符
- javascript - 如何将画布宽度设置为画布对象/文本的宽度
- python-2.7 - 如何在 Python 2.7 中使用 Asterisk 替换文本文件中的几个不同字符?
- python - 在 Visual Studio Express 2017 中运行 python
- python - Python 和 Indesign - 如何运行脚本?
- arrays - 如何检查 Swift 中的数组计数变化