Minecraft getClickedPos().GetY() 仅在 for 循环的第一个语句中读取为零,等等

问题描述 投票:0回答:1

我正在尝试在 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;
    }
}

如果需要,我会尽力提供更清晰的解释。

java for-loop minecraft minecraft-forge
1个回答
0
投票

你总是得到 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 循环迭代。

© www.soinside.com 2019 - 2024. All rights reserved.