MC-131346 a été corrigé, la nouvelle réponse à cette question est donc : Cela fonctionne. /give @s water_bucket{CanPlaceOn:["stone"]}
vous donne le seau d'eau approprié qui ne peut être placé que sur une pierre.
Voici l'ancienne réponse à titre de référence, au cas où vous joueriez avec une version plus ancienne :
Comme l'a dit OnePointZero , le plus souvent CanPlaceOn
devrait fonctionner pour les seaux, mais en raison de la présence de MC-131346 ce n'est pas le cas. Mais il existe un moyen plus simple de contourner ce problème :
Donnez au joueur un objet retexturé qu'il n'a généralement pas ailleurs dans votre carte et qui n'y apparaît pas non plus comme un bloc. Une idée serait un vide de structure ou, si le remodelage de l'objet est trop difficile, un jeune arbre, un lit, un rail ou tout autre objet pouvant être placé avec une texture différente de celle du bloc, à condition qu'il ne se trouve nulle part ailleurs dans la carte.
Ce poste doit avoir le CanPlaceOn
ici démontrée avec une pierre :
/give @s stone{CanPlaceOn:["sandstone"]}
Ensuite, vous suivez l'utilisation de cet élément, comme suit :
/scoreboard objectives add placedStone minecraft.used:minecraft.stone
Et chaque fois que quelqu'un le place, vous remplacez le bloc du monde par de l'eau :
/execute at @a[scores={placedStone=1..}] run fill ~-7 ~-7 ~-7 ~7 ~7 ~7 water replace stone
Heureusement /fill
met déjà à jour tous les blocs de manière cohérente, de sorte qu'il commencera à s'écouler automatiquement et que vous n'aurez pas à vous préoccuper des mises à jour incohérentes de /setblock
.
Il ne vous reste plus qu'à réinitialiser le tableau d'affichage pour une utilisation ultérieure :
/scoreboard players set @a[scores={placedStone=1..}] placedStone 0
Les deux derniers ordres sont utilisés pour répéter la chaîne de commandement ou une fonction. Le deuxième bloc de commandes peut être conditionnel.