/ / Por que meu preenchimento só preenche a direção positiva xe z? - javascript, minecraft, flood-fill

Por que meu preenchimento só preenche a direção xey positiva? - javascript, minecraft, flood-fill

Abaixo está um JavaScript de uma interface noCustoms NPC mod que é executado com minecraft. É suposto estar executando uma rotina de preenchimento. Só preenche corretamente o x positivo e o z positivo da posição inicial. No minecraft x & z estão no plano horizontal y é o eixo vertical.

var node1 = {
xy: []
};
var blockp;
//starting block type and position
blockp = world.getBlock(npc.getBlockX(), npc.getBlockY() - 1, npc.getBlockZ() + 1);
node1.xy[0] = npc.getBlockX();
node1.xy[1] = npc.getBlockZ() + 1;
node1.xy[2] = npc.getBlockY() - 1;
//
var floodfill = function(nameb, node) {
if (nameb == "minecraft:stone" ||
nameb == null) {
return;
}
var blkname;
//
world.setBlock(node.xy[0], node.xy[2], node.xy[1], world.createItem("minecraft:stone", 0, 1));
//
node.xy[0] = node.xy[0];
node.xy[1] = node.xy[1] + 1;
node.xy[2] = node.xy[2];
blkname = world.getBlock(node.xy[0], node.xy[2], node.xy[1]).name;
floodfill(blkname, node);
//
node.xy[0] = node.xy[0];
node.xy[1] = node.xy[1] - 1;
node.xy[2] = node.xy[2];
blkname = world.getBlock(node.xy[0], node.xy[2], node.xy[1]).name;
floodfill(blkname, node);
//
node.xy[0] = node.xy[0] + 1;
node.xy[1] = node.xy[1];
node.xy[2] = node.xy[2];
blkname = world.getBlock(node.xy[0], node.xy[2], node.xy[1]).name;
floodfill(blkname, node);
//
node.xy[0] = node.xy[0] - 1;
node.xy[1] = node.xy[1];
node.xy[2] = node.xy[2];
blkname = world.getBlock(node.xy[0], node.xy[2], node.xy[1]).name;
floodfill(blkname, node);
//
return;
}
floodfill(blockp.name, node1);

Respostas:

0 para resposta № 1

Basicamente, parece que você está "decrementando, mas na verdade" está apenas redefinindo para seus valores padrão. Dê uma olhada neste trecho aqui:

//
node.xy[0] = node.xy[0];
node.xy[1] = node.xy[1] + 1;
node.xy[2] = node.xy[2];
blkname = world.getBlock(node.xy[0], node.xy[2], node.xy[1]).name;
floodfill(blkname, node);
//
node.xy[0] = node.xy[0];
node.xy[1] = node.xy[1] - 1;
node.xy[2] = node.xy[2];
blkname = world.getBlock(node.xy[0], node.xy[2], node.xy[1]).name;
floodfill(blkname, node);

À primeira vista, parece que você está se movendo +1 e -1 de sua posição original. No entanto, como você está modificando a referência para node.xy[1], você está realmente configurando para +1, em seguida, +0.

Em vez disso, você pode considerar algo assim:

var xy0 = node.xy[0];
var xy1 = node.xy[1];
var xy2 = node.xy[2];

...

node.xy[0] = xy0 + 1;
...
node.xy[0] = xy0 - 1;

Desta forma você não está modificando a referência original.