我正在尝试在 Minecraft 中制作一个项目,该项目可以检测到该项目所选择的块下方最多六个块的块。因此,如果用手中的物品右键单击的块的 Y 级别为 70,则它应该查看直接位于其下方的所有块,直到 Y 级别 64,检查是否存在所需的块,然后继续执行脚本。但由于某种原因,for 循环的第一个语句中的positionClicked.getY() 被读取为零,并且似乎对值加六而不是减六(因为它检查最多正 6 Y 级别而不是减去负数6)。请注意,我唯一的脚本知识是 LUA 和 Minecraft 模组教程。这是我的代码:
BlockPos positionClicked = pContext.getClickedPos();
Player player = pContext.getPlayer();
boolean foundBlock = false;
for (int i = positionClicked.getY() - 6; i <= positionClicked.getY(); i++) {
BlockState state = pContext.getLevel().getBlockState(positionClicked.below(i));
if(isDirtBlock(state)) {
outputDirtBlockCoordinates(positionClicked.below(i), player, state.getBlock());
foundBlock = true;
break;
}
}
如果需要,我会尽力提供更清晰的解释。
你总是得到 0 的原因是因为你的一些数学不正确。
问题就在这里:
for (int i = positionClicked.getY() - 6; i <= positionClicked.getY(); i++) {
BlockState state = pContext.getLevel().getBlockState(positionClicked.below(i));
i
被设置为单击的 Y 位置,减去 6(从 70 得到 64)。第二行是获取点击位置下方的i
块。所以它会得到 y
=6
,5
,4
...处的区块,一直到 0。
我解决此问题的方法是通过将
i
初始化为 0,条件为 i > -6
,并使用 i
递减 i--
,使 for 循环迭代。