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.