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.