织物替换世界中的块创建幽灵块

fabric replace blocks in world creates ghost blocks

上下文

我正在编写一个结构 mod 需要替换世界中的方块。

代码

我目前正在使用 World#setBlockState(pos, state)

BlockPos pos = new BlockPos(x, y, z);
BlockState state = Blocks.STONE.getDefaultState();
world.setBlockState(pos, state);
问题

这似乎可行,但如果我右键单击被替换的方块,它们会变回原来的方块

我也试过这个Block.replace(world.getBlockState(pos), state, world, pos),但是这个重现了同样的东西。

目前,mod 只能在客户端与 minecraft-1.17.1 一起使用。

问题

这是因为客户无法mod以那种方式改变世界吗?

如果不是,可能是什么问题,我该如何解决?

如你所说,是在客户端。所以,你可以改变一切,它只会是视觉的。

它在右键单击时替换了方块,因为服务器发送了世界上存在的真实方块(而不是视觉方块)。

如果你想做那样的事情,可能会很困难。所有在服务器上手动放置方块的客户端都是作弊,因为他们正在制作基本 minecraft 中不允许的东西。

但是,也许有可能:

  1. 使用event更改将要放置的方块,而不是放置默认的块然后再更改,您可以直接在服务器上更改。

  2. 运行 改变块的命令如/setblock (wiki)