虚拟方块更改

虚拟方块更改(Virtual Block Changes)允许你对一个方块在客户端上看起来像是更改了一样,然而在服务端并没有变化。

向客户端发送一个虚拟方块更改十分简单,只需要调用 Viewer#sendBlockChange(int, int, int, BlockState) 方法即可。你只需要指定你想要更改的方块的坐标、以及其“新”的 BlockState。下面是一个示例:

import org.spongepowered.api.block.BlockTypes;
import org.spongepowered.api.effect.Viewer;

viewer.sendBlockChange(0, 65, 0, BlockTypes.COMMAND_BLOCK.getDefaultState());

这将使这个位于 0 65 0 的方块像是一个命令方块。当然,你并不只限于传输一个方块的默认状态。任何的 BlockState 都可以传入 sendBlockChange() 方法。

除了指定三个整数坐标,你还可以指定一个 Vector3i。下面是一个使用 Viewer#sendBlockChange(Vector3i, BlockState) 方法的例子:

import org.spongepowered.math.vector.Vector3i;

Vector3i vector = new Vector3i(0, 65, 0);
viewer.sendBlockChange(vector, BlockTypes.COMMAND_BLOCK.getDefaultState());

小技巧

If you wish to send a virtual block to all clients, you can now use BlockChangeFlags#NOTIFY_CLIENTS

重置更改

如果想要重置你对客户端的特定位置的任何更改,你可以调用 Viewer#resetBlockChange(int, int, int) 这一方法。例如,如果我们想要撤消对于前面的示例所带来的影响,我们就只需要指定之前的坐标,并调用 resetBlockChange() 方法:

viewer.resetBlockChange(0, 65, 0);

请注意,您也可以使用 Vector3i 代替三个整数以使用这一方法。