Changements de Blocs Virtuels

Les changements de blocs virtuels vous permettent de faire paraître comme si un bloc a changé sur le client sans réellement modifier de bloc physique dans le monde.

Envoyer un changement de bloc virtuel au client est aussi simple que d’appeler la méthode Viewer#sendBlockChange(int, int, int, BlockState). Vous devrez spécifier les coordonnées du bloc que vous souhaitez modifier, ainsi que le nouveau BlockState. Un exemple est illustré ci-dessous :

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

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

Cela va faire paraître comme si le bloc aux coordonnées 0, 65, 0 a changé en un bloc de commande. Bien sûr, vous n’êtes pas limité à l’état par défaut d’un bloc. N’importe quel BlockState est accepté par la méthode sendBlockChange().

En plus de pouvoir spécifier trois entiers pour les coordonnées, vous pouvez aussi spécifier un Vector3i. Un exemple d’utilisation de la méthode Viewer#sendBlockChange(Vector3i, BlockState) est illustré ci-dessous :

import org.spongepowered.math.vector.Vector3i;

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

Astuce

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

Réinitialiser les Changements

Pour réinitialiser n’importe quel changement que vous avez fait au client à un endroit précis, vous pouvez appeler la méthode Viewer#resetBlockChange(int, int, int). Par exemple, pour annuler nos dommages de l’exemple précédent, nous pouvons appeler la méthode resetBlockChange() en spécifiant les mêmes coordonnées qu’avant :

viewer.resetBlockChange(0, 65, 0);

Notez que vous pouvez aussi utiliser un Vector3i à la place des trois entiers avec cette méthode aussi.