Cambios de Bloque Virtuales

Los cambios de bloque virtuales le permiten hacer que parezca como si un bloque ha cambiado en el cliente sin realmente cambiar ningún bloque físico en el mundo.

Enviar un cambio de bloque virtual al cliente es tan simple como llamar al método Viewer#sendBlockChange(int, int, int, BlockState). Necesitará especificar las coordenadas del bloque que desea cambiar, así también como el nuevo BlockState. Un ejemplo es mostrado a continuación:

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

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

Esto lo hará parecer como si el bloque de las coordenadas 0, 65, 0 ha cambiado para un bloque de comando. Por supuesto, no está restringido al estado predeterminado de un bloque. Cualquier BlockState es aceptado por el método sendBlockChange().

Además, especificando tres número enteros para las coordenadas, puede también especificar un Vector3i. Un ejemplo del la utilización del método Viewer#sendBlockChange(Vector3i, BlockState) es mostrado a continuación:

import org.spongepowered.math.vector.Vector3i;

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

Truco

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

Reiniciar Cambios

Para reiniciar cualquier cambio que haya realizado al cliente en una ubicación específica, puede llamar al método Viewer#resetBlockChange(int, int, int). Por ejemplo, para reparar nuestro daño del ejemplo previo, podemos llamar al método resetBlockChange() especificando las coordenadas anteriores:

viewer.resetBlockChange(0, 65, 0);

Tenga en cuenta que además puede utilizar un Vector3i en lugar de los tres número enteros con este método también.