Je voulais faire un jeu de type "escape the room" dans Minecraft pour mes enfants. Est-il possible de permettre aux joueurs de ramasser et d'utiliser des objets spécifiques (par exemple, ramasser un seau, le remplir d'eau, éteindre le feu) mais de ne détruire aucun bloc (afin qu'ils ne puissent pas s'échapper de la pièce en cassant simplement les murs) ?
Réponses
Trop de publicités?Vous pouvez utiliser Étiquettes NBT sur un outil pour permettre à vos enfants de casser certains blocs avec cet outil
Till vous donne une pioche en pierre que vous pouvez utiliser pour casser la pierre et le minerai de fer, même si vous êtes en mode aventure, cette pioche sera également incassable, ce qui peut être bon dans votre cas :
/give @s minecraft:stone_pickaxe{Unbreakable:1,CanDestroy:["minecraft:stone","minecraft:iron_ore"]}
Utilisez ceci si vous voulez que la pioche se casse comme elle le ferait habituellement :
/give @s minecraft:stone_pickaxe{CanDestroy:["minecraft:stone","minecraft:iron_ore"]}
Cela vous donnera un seau que vous pourrez utiliser pour récupérer de l'eau :
/give @s minecraft:bucket{CanPlaceOn:["minecraft:water"]}
Et cela vous donnera un seau d'eau, où vous pouvez placer l'eau sur la pierre.
/give @s minecraft:water_bucket{CanPlaceOn:["minecraft:stone"]}
Note : Certaines étiquettes NBT sur un seau se remettent à zéro après l'avoir utilisé, je n'ai donc pas trouvé le moyen d'obtenir un seau qui peut prendre de l'eau ET la placer ailleurs.
Je recommande de n'utiliser que la première ou la deuxième commande, car il semble que cela ne fonctionne pas toujours avec les fluides.
Comme mentionné dans la réponse de l'utilisateur232393, CanDestroy
et CanPlaceOn
peut permettre à des objets spécifiques de se briser ou d'interagir avec des blocs spécifiques en mode Aventure. En fait, c'est le seul but de ces balises NBT.
Pour un seau qui peut prendre de l'eau et la placer, la configuration est un peu plus compliquée. Elle suppose également que vous souhaitez que l'eau puisse toujours être placée sur les mêmes blocs ; ce serait toutefois déjà une bonne idée, ne serait-ce que pour des raisons de cohérence - il sera plus facile pour vos enfants de comprendre que, par exemple, prismarine = vous pouvez placer de l'eau ici.
tl.dr. : Les datapacks à la rescousse.
Cette approche élimine également le besoin de préparer votre carte avec des éléments qui ont des balises NBT. Vous pouvez simplement utiliser les éléments du menu créatif et laisser le datapack s'occuper du reste.
D'abord, vous voulez un avancement. Donnez-lui le nom que vous voulez (je pense que les minuscules serpentines sont obligatoires) et placez-le dans votre datapack à l'adresse suivante data/<yournamespace>/advancements
où <yournamespace>
est un espace de nom de votre choix. Supposons que vous utilisiez maputils
comme espace de nom et nommez votre avancement pick_up_bucket
alors le fichier que vous créez doit être data/maputils/advancements/pick_up_bucket.json
.
Vous voulez un avancement qui n'est pas affiché dans le jeu, donc vous avez besoin d'un avancement parent non affiché. Le choix le plus simple est minecraft:recipes/root
. La récompense doit être une fonction de commande, par ex. handle_bucket
. En tant que déclencheur, vous devriez utiliser inventory_changed
avec un chèque pour un seau.
Voici le JSON complet :
{
"parent": "minecraft:recipes/root",
"criteria": {
"main": {
"trigger": "minecraft:inventory_changed",
"conditions": {
"items": [
"item": "minecraft:bucket"
]
}
}
},
"rewards": {
"function": "maputils:handle_bucket"
}
}
Maintenant, pour la fonction susmentionnée. Vous voudrez d'abord désactiver l'avancement, pour qu'il puisse être répété. Ensuite, vous devez enlever le seau ordinaire. Et enfin, vous devez distribuer le seau modifié avec les étiquettes NBT. (Note : Dans l'exemple ci-dessous, je suppose que vous voulez que le seau récupère l'eau à la fois de l'environnement et des chaudrons).
Donc, le fini data/maputils/functions/handle_bucket.mcfunction
ressemble à ça :
advancement revoke @s maputils:pick_up_bucket
clear @s minecraft:bucket
give @s minecraft:bucket{CanPlaceOn:["minecraft:water","minecraft:cauldron"]}
Maintenant, faites la même chose pour les seaux d'eau. N'oubliez pas de remplacer le CanPlaceOn
dans la dernière commande de la fonction avec les blocs sur lesquels vous voulez que vos enfants puissent placer de l'eau. S'il y a d'autres éléments qui sont censés fonctionner de la même manière (comme une balise qu'ils sont censés fabriquer et placer sur des blocs d'or, ou leur demander de casser un four et de le placer sur une trémie), procédez de la même manière.