虚拟方块更改
虚拟方块更改(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
代替三个整数以使用这一方法。