Accueil / Tutoriels / [Tutoriel] Vider aléatoirement un inventaire

[Tutoriel] Vider aléatoirement un inventaire

[Tutoriel] Vider aléatoirement un inventaire
4.56(91.11%) 9 votes

Ajouté en 1.4, le command block est aujourd’hui incontournable dans l’univers du map making. Il offre un très grand panel de fonctionnalités. Dès aujourd’hui, nous étudierons un système qui permettrait de vider de manière totalement aléatoire l’inventaire d’un joueur.

Ce système ne videra pas un nombre certain d’items dans chaque slots. Il videra plusieurs slots dans l’inventaire. Ce système pourra être vraiment pratique si vous souhaitez par exemple, faire un vidage d’inventaire personnalisé à la mort d’un joueur.

dividerLa structure

Débutons tout de suite par préparer le terrain. Vous noterez que le système devra se placer dans le vide et dans la zone de chunk chargés. Faites bien attention qu’il n’y ait rien au dessus ni en dessous !

Lors de votre première apparition sur un monde, le chunk concerné va être accompagné d’une région de 16×16 chunks qui seront constamment chargés. Vous devrez mettre votre système dans cette région si vous souhaitez qu’il fonctionne n’importe où sur votre monde ! (Sachez qu’un chunk équivaut à une région de 16 blocs par 16 blocs. Vous pouvez aussi déplacer ce chunk d’apparition en soumettant cette commande :

/setworldspawn x y z

(la plupart des map makers placent leur chunk d’apparition en coordonnées 0 0)


Une fois votre chunk d’apparition trouvé, creusez un grand cube de 16 blocs par 16 blocs. Ce qui devrait, normalement, vous donner ça :

Tutoriel - Inventaire

Vous n’oublierez pas de creuser jusqu’au vide ! Cassez la bedrock s’il y en a !


Sachez qu’un inventaire comporte 41 slots ! Placez alors 41 command blocks au dessus du vide comme ceci :

Tutoriel - Inventory

Globalement, vous devriez avoir un carré de 7 x 6 moins un command block. N’oubliez pas de placer les command blocks la tête en bas (c’est à dire la flèche montrant le sol).


Une fois terminé, placez une deuxième couche de command blocks mais mettez-les en chain et en always active :

Tutoriel - Inventory

Pour les placer plus rapidement, vous pouvez faire un /fill !

 

dividerLes commandes

Continuons le système avec les commandes. Tout d’abord, voici comment elles seront disposées :

Tutoriel - Inventory

Pour une meilleure compréhension je placerai les commandes comme indiqué. Mais il est bien conseillé de mélanger toutes les commandes pour avoir un effet aléatoire garanti.


Tout d’abord, faites apparaître une ArmorStand sur la première couche de blocs de commande :

/summon ArmorStand x y z {CustomName:"spread_inventory",NoGravity:1,CustomNameVisible:1,Marker:1,Small:1}

Cette commande fera donc apparaître une ArmorStand aux coordonnées indiquées. Cette dernière ce nommera “spread_inventory” et son nom sera toujours visible. Ensuite, sa hitbox sera réduite (Marker:1) ainsi que sa taille (Small:1).

Voici ce à quoi elle devrait ressembler :

Tutoriel - Inventory


Les premières commandes ne vont pas être difficiles puisqu’il s’agira de placer une seule et même commande dans tous les command blocks de la première couche :

/blockdata ~ ~ ~ {auto:0}

Cette commande exécutera  auto:0 sur lui-même. Ce NBT tag détermine si le bloc en question sera en Need redstone ou non (ici, l’auto:0 le passe en NeedRedstone).

Insérez donc cette commande dans chaque bloc de commande en mode Impulse.

Une fois terminé il reste le plus dur à faire. Assignez chaque command block à son slot. Commencez donc par placer les slots de la hotbar.

Par précaution et pour plus de pratique assignez un tag pour chaque commande. Ce qui permettra de ne clear que les joueurs ayant ce tag. La commande pour assigner un tag à un joueur :

/scoreboard players tag <joueur> add CInventory
  • /replaceitem entity @a[tag=CInventory] slot.hotbar.0 minecraft:air
  • /replaceitem entity @a[tag=CInventory] slot.hotbar.1 minecraft:air
  • /replaceitem entity @a[tag=CInventory] slot.hotbar.2 minecraft:air
  • /replaceitem entity @a[tag=CInventory] slot.hotbar.3 minecraft:air
  • /replaceitem entity @a[tag=CInventory] slot.hotbar.4 minecraft:air
  • /replaceitem entity @a[tag=CInventory] slot.hotbar.5 minecraft:air
  • /replaceitem entity @a[tag=CInventory] slot.hotbar.6 minecraft:air
  • /replaceitem entity @a[tag=CInventory] slot.hotbar.7 minecraft:air
  • /replaceitem entity @a[tag=CInventory] slot.hotbar.8 minecraft:air

Vous l’aurez sans doute compris, les slots partent de 0 à 8. Faites alors de même pour l’inventaire :

  • /replaceitem entity @a[tag=CInventory] slot.inventory.0 minecraft:air

  • /replaceitem entity @a[tag=CInventory] slot.inventory.26 minecraft:air

Normalement, il ne devrait rester que 5 blocs vide. Complétez-les avec ces commandes :

  • /replaceitem entity @a[tag=CInventory] slot.armor.head minecraft:air
  • /replaceitem entity @a[tag=CInventory] slot.armor.chest minecraft:air
  • /replaceitem entity @a[tag=CInventory] slot.armor.legs minecraft:air
  • /replaceitem entity @a[tag=CInventory] slot.armor.feet minecraft:air
  • /replaceitem entity @a[tag=CInventory] slot.weapon.offhand minecraft:air

Voilà pour la deuxième couche !

dividerActiver le système

C’est là que l’ArmorStand va nous être utile. Commencez déjà par créer un nouvel objectif nommé spread :

/scoreboard objectives add spread dummy

Ensuite, disposez 3 blocs de commande comme ceci :

Tutoriel - Inventory


Positionnez le premier command block en mode Repeat et les deux derniers en mode Chain (tous les command blocks devront être en Always Active !)

Continuez en insérant cette commande dans le bloc du bas :

/execute @e[type=ArmorStand,name=spread_inventory,score_spread_min=1] ~ ~ ~ /spreadplayers x z 0 5 false @e[name=spread_inventory]

Cette commande permettra de répartir l’ArmorStand dans un rayon précisé. Le centre de la zone sera défini en mettant les coordonnées x z. Ensuite, il faut lui expliquer le rayon maximum et minimum dans lequel il pourra se téléporter. Pour se faire, 0 sera le rayon minimum et 4 le rayon maximum. Nous ne nous attarderons pas sur la méta donnée “false”. Cette commande ne sera exécutée que si l’ArmorStand a un score minimum égal à un dans l’objectif spread.


Maintenant, nous allons essayer de trouver le centre de la zone.

Regardez votre système :

Tutoriel - Inventory

Essayez de repérer quel est le bloc de commande qui se situe le plus au centre de votre système. Une fois trouvé, insérez ses coordonnées x z dans la commande précédente.

Continuez donc votre système et cette commande dans le bloc suivant :

scoreboard players remove @e[type=ArmorStand,name=spread_inventory,score_spread_min=1] spread 1

Cette commande retira 1 à toute ArmorStand nommées “spread_inventory” ayant un score minimum de 1 dans l’objectif spread.

Enfin, placez cette commande dans le dernier bloc :

execute @e[type=ArmorStand,name=spread_inventory,score_spread_min=1] ~ ~ ~ blockdata ~ ~-1 ~ {auto:1}

Cette commande est la plus importante puisqu’il s’agira d’exécuter un blockdata auto:1 sur toute les entités ayant un score minimum de 1 dans l’objectif spread. Ce blockdata permettra de passer tous les command blocks en dessous de l’ArmorStand en mode AlwaysActive (mais uniquement si celle-ci a un score conforme).

Il ne reste maintenant qu’à poser un command block en mode impulse et à insérer la commande suivante. Vous pourrez l’activer à temps voulu !

/scoreboard players set @e[name=spread_inventory,type=ArmorStand] spread 25

Cette commande assignera donc un score à toutes les entités étant une ArmorStand et qui ont pour nom “spread_inventory’. Ce score est modifiable et permettra de définir combien de fois l’ArmorStand devra être téléportée (et donc le nombre de slots clear). Notez aussi que l’ArmorStand peut repasser deux  fois sur le même bloc !

Vous vous demandez pourquoi le système doit se placer au dessus du vide ? Eh bien tout simplement parce qu’il est impossible de “spread” une entité au dessus du néant. Et donc, le taux de téléportations au dessus des blocs de commande reste beaucoup plus fidèle.


Et maintenant, si on testait le système ?

Tutoriel - InventoryJe suis riiiiiiche !

Tutoriel - InventoryNooon ! Mes précieux diamants !


Voilà, le système est à présent terminé. Faites-en bon usage et laissez courir votre imagination ! Si vous rencontrez un quelconque problème, faite-le savoir dans les commentaires de l’article !

Image de Une réalisée par Freeze’

A propos de AsiliS

Curieux ? Alors vas voir mon site : http://asilis.top/ Bisou <3

Ceci vous intéresse peut être

MCreator

[Logiciel] MCreator [1.7.10 – 1.10.2]

MCreator est un logiciel qui vous permettra de créer des mods Minecraft sans connaissances de programmation en Java.

7 commentaires

  1. , Merci !

    Vraiment pas idiote ton idée. J’vais y songer ^^

  2. ahahhh si 😜
    J’y est réfléchi pdt mes cours, y’a 2-3 moyens de faire un truc avec un nombre précis de slots, on en discute Discord stv 😉
  3. Encore une fois un très bon article! tu devrais faire un tuto pour faire Des réponse a un message (en cliquant dans le tchat ça active un command block)
  4. Aha merci beaucoup à tous !

    Pour bien te répondre , il est impossible de faire un système qui permettrait de retirer un nombre de slots bien précis. Le /spread sert à répartir aléatoirement une entité dans un rayon donné. Mais, il est totalement possible que l’entité sois téléportée deux fois au même endroit (Donc, ici, sur un même bloc). Bien que ça reste très rare, à cause de ce léger problème, je suis dans l’incapacité de présenter un système pouvant répondre à ta requête.

  5. Tres bon article bien détaillé 😉
    Étrangement, des que j’ai vu le titre de l’article sur la notif de mon telephone, j’ai tout de suite su que c’était de toi ahah ! C’est que j’ai eu droit à l’avant première aussi 😜

    Sinon, je penses que tu aurais aussi pu présenter une variation de ton système permettant une suppression de X slots aléatoirement, en plus de celui présenté ci-dessus, qui lui, supprime entre 1 et X slots aléatoirement avec X la valeur entrée dans le score “spread”).

    Et dernière précision, a moins de ne pas comprendre le mécanisme interne du spreadplayer, je ne vois pas en quoi mélanger l’ordre des commandblocks dans la grille donnerait un meilleur aléatoire 😉

  6. J’aime bien cette série de tuto sur les commands blocks, très pratique ;)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *