dimanche , 24 septembre 2017
Accueil / Astuces / [TestZone] #4 – Récupération d’items : wagonnet vs entités

[TestZone] #4 – Récupération d’items : wagonnet vs entités

[TestZone] #4 – Récupération d’items : wagonnet vs entités
5(100%) 9 votes

Bienvenue à toi, cher joueur, dans la zone de test ! Pour faire le tri entre les idées reçus, les légendes urbaines et autres informations, une seule solution : expérimenter nous-mêmes pour en vérifier leur exactitude. Ensemble, nous allons soumettre le jeu à l’analyse afin de démêler le vrai du faux.

Aujourd’hui, nous allons étudier la récupération des items par plusieurs entités comme les joueurs, les créatures et les wagonnets à entonnoir.

Cute Divider

Mise en contexte :

Tout joueur sait qu’il dispose d’un inventaire depuis qu’il a appuyé sur la touche E de son clavier, où il peut disposer du matériel mais également 4 emplacements pour ses pièces d’armure. Mais ce n’est pas propre au joueur : vous pouvez rencontrer des monstres portant des armures ou des outils.

Zombies dans une faille ayant récupérés des sacs d’encre


Certaines entités sont capables de récupérer les items : les joueurs évidemment, mais également certains monstres et les wagonnets à entonnoirs. Ces derniers sont utilisés dans beaucoup de systèmes. Nous allons nous intéresser à la zone où chaque type de créature peut récupérer un item.

Cute Divider

Montages expérimentaux :

L’objet ici est de déterminer une zone où une entité peut récupérer un item. Potentiellement, cette zone est une boite rectangulaire (un parallélépipède rectangle pour parler géométrie dans l’espace), il faudra donc définir cette zone selon les trois directions spatiales.

Vue du montage expérimental


Le principe est le suivant : nous allons recouvrir la plateforme en bas avec des items et nous allons faire apparaître la créature au milieu de la plateforme (au niveau du bloc noir). L’entité récupérera les items qu’elle peut atteindre : il restera donc une zone vide délimitée par les items restants.

2015-11-26_17.29.29Pour que l’expérience soit menée à bien, il faut les conditions suivantes :

  • lorsque nous allons recouvrir la plateforme, les items seront très proches et il y a donc un fort risque qu’ils forment des stacks. En utilisant des items non stackables (comme les casques), on limite ce problème.
  • une entité récupérant une pièce d’armure ne peut pas en récupérer une autre : nous allons donc évacuer les créatures hors de la zone de test et en invoquer une autre.

Note : on choisit la téléportation à cause notamment des zombies chevauchant des poulets qui auraient tendance à s’accumuler et à perturber l’apparition des prochaines créatures.

2015-11-25_14.56.53Une des difficultés sera de répartir équitablement les différents objets en les espaçant d’une distance fixe. C’est le but des cinq lignes de blocs de commandes qui font différentes répartitions :

  • 36 = 6×6 casques séparés de 1 bloc (ligne blanche)
  • 121 = 7×7 casques séparés de 0.5 bloc (ligne orange)
  • 441 = 21×21 casques séparés de 0.25 bloc (ligne magenta)
  • 676 = 26×26 casques séparés de 0.2 bloc (ligne bleu ciel)
  • 2 601 = 51×51 casques séparés de 0.1 bloc (ligne jaune)
2015-11-25_16.40.59Pour augmenter la précision horizontale, on peut automatiser le repérage des limites selon les axes x (rouge) et z (bleu). Voici le principe :

  • un ArmorStand est invoqué au milieu. Il invoque à son niveau un Item.
  • il avance de +1 en x jusqu’à ce que la créature ne puisse plus récupérer l’item.
  • il retourne dans la zone de récupération en reculant de 1.
  • on recommence le cycle en avançant de +0.1.

Le cycle est reproduit jusqu’à la précision désirée (ici, notre montage peut descendre à une précision proche de 10-9).

Partons du principe que la zone d’absorption est un pavé rectangulaire (ici en noir).TZLorsqu’on génère une grille, chaque item a la même coordonnée y, ce qui est l’équivalent d’un plan horizontal (en rose). Les objets qui seront absorbés sont l’intersection de la zone de récupération et de ce plan, ce qui forme une zone vide rectangulaire (représentée en rouge).

Donc nos expériences précédentes ne sont qu’une petite fraction de la zone de récupération, il va falloir trouver des méthodes pour balayer la dimension verticale.

Première méthode : déplacer la grille d’objets par rapport à l’entité immobile.TZ_P1Pour cela, on utilise des couches de neige qui permettent d’obtenir facilement des coupes séparée de 1/16 de bloc. Mais on devra utiliser une autre méthode pour des analyses plus rapprochées.

Seconde méthode : déplacer l’entité par rapport à la grille d’objets immobile.TZ_S1Pour cela, il suffit juste de modifier les coordonnées de la commande /summon de l’entité. Cela impose de recycler rapidement les entités pour éviter les erreurs de mesure dues à la gravité.

Remarque : on peut empêcher les monstres de tomber en enlevant l’IA de la créature, mais c’est chose impossible pour les wagonnets à entonnoir par exemple.

Maintenant que nous avons les outils, il ne reste plus qu’à faire les mesures des différentes zones de récupération.

Cute Divider

Analyse des résultats :

Nous allons tenter de rationaliser la récupération d’objets : on va étudier dans un premier temps les entités pouvant naturellement récupérer les items, puis généraliser les résultats avec d’autres créatures. Les cas particuliers seront étudiés dans un dernier temps.

Entités concernées par la récupération d’items naturellement

Certaines créatures, en plus du joueur, possèdent naturellement la capacité de récupérer des items :

2015-12-12_18.58.47Une partie des zombies peuvent récupérer des objets. Le pourcentage des zombies concernés varie avec différents paramètres, globalement rassemblés dans la difficulté locale (indiquée dans le mode Debug via F3).

Globalement, cette probabilité va de 0 à plus de 50% si vous avez une très grande difficulté locale.

2015-12-12_19.52.57Les Pigmen sont des entités différentes des zombies (leur nom dans le jeu est “PigZombie”).

Tout comme les zombies, la proportion de créatures capables de récupérer des items est très dépendante de la difficulté locale : des tests préliminaires ne montrent pas de différence avec celle des zombies.

2015-12-12_18.05.07Même constatation pour les squelettes. Le pourcentage ne semble pas varier selon le type de squelettes : les squelettes classiques ont autant de chance d’avoir cette capacité que les Wither squelettes à difficulté locale identique.

L’apparition avec une armure et la capacité à récupérer les objets ne semblent pas corrélées.

2015-12-12_17.40.27Depuis la 1.8, la reproduction des villageois a été modifiée et leur comportement changé : les fermiers peuvent désormais récolter les champs et les autres types de villageois peuvent être nourris en recevant la nourriture fabriquées par les fermiers. Seuls les villageois nourris pourront tomber amoureux et  procréer.

Lien entre hitbox et zone de récupération horizontale

La hitbox est une caractéristique de chaque entité, il serait intéressant de voir s’il existe une corrélation avec notre sujet :

hitbox_01Nous avions déjà introduit la notion de hitbox pour les blocs dans le Point Redstone  et nous sommes restés évasif pour les entités. Deux définitions existent :

  • la zone de collision : si vous frappez la zone de collision, vous infligerez des dégâts à l’entité correspondante.
  • la zone de pénétration : l’entité reste coincée si la zone de pénétration rentre en contact avec la zone de pénétration d’un bloc ou d’une autre entité.

Ces deux zones sont confondues en partie. Pour afficher la hitbox, on utilise le raccourci F3+B qui affiche la zone en blanc.

2015-12-05_19.07.18Deux moyens pour obtenir la largeur de la hitbox existent :

  • rapprocher l’entité le plus près d’une paroi et déduire la valeur à partir de ses coordonnées x et z.
  • regarder directement dans le code du jeu la valeur setSize de l’entité.

Comme vous pouvez le constater, les valeurs expérimentales et théoriques sont très proches. L’égalité n’est pas parfaite et les mesures ne sont pas forcément reproductibles. Nous nous limiterons donc à une précision de 10-5 chiffres significatifs pour les mesures par la suite.

Entité
Largeur
(issue du code)
Largeur
(expérimentale)
Poule (bébé)0,20,20000000298023224
Item0.250.25
Villageois (bébé)0,30,30000001192092896
Endermite0,40,40000000596046448
Chauve-souris0,50,5
Joueur0.60,600000023841858
Sorcière0,60,60000002384185714
Villageois (adulte)0,60,60000002384185746
Araignée venimeuse0,70,699999988079071
Gardien (normal)0,850,85000002384185792
Vache (adulte)0,90,89999997615814208
Poulpe0,950,949999988079071
Araignée1,41,3999999761581412
Cheval (adulte)1,41,399999976158142
Ghast44,0
2015-11-25_13.06.52Pour faire rapidement nos tests, nous allons utiliser une créature modèle : le Slime. A l’aide des commandes, on peut le faire devenir un cobaye de choix pour nos mesures :

  • on peut l’immobiliser facilement : il suffit de d’activer le tag NoAI avec la valeur 1b.
  • on peut activer la capacité à récupérer les items : on met le tag CanPickUpLoot à 1b.
  • on peut modifier sa taille et donc sa hitbox : elle est déterminée par la valeur du tag Size.

Dans un monde classique, les Slimes sont entre la taille 0 (minuscule) et la taille 2 (moyens). Mais rien n’empêche d’aller plus haut avec les commandes, ce que nous ferons pour les mesures.

2015-12-05_02.36.03On mesure dans chaque cas la largeur de la zone de récupération selon les deux directions horizontales. On remarque rapidement que la zone est carrée et centrée sur la créature. La relation est trouvée est affine (la courbe est une droite) :

    \[\left [ \text{largeur de la zone} \right ] = 0.5100 \times \left [ \text{taille du Slime} \right ] + 2.7600\]

Taille du Slime
Zone de récupération
(direction : ± x)
Zone de récupération
(direction : ± z)
02,76002,7600
13,27003,2700
23,78003,7800
34,29004,2900
44,80004,8000
55,31005,3100
65,82005,8200
76,33006,3300
86,84006,8400
97,35007,3500
107,86007,8600
118,37008,3700
128,88008,8800
139,39009,3900
149,90009,9000
1510,41010,410
1610,92010,920
1711,43011,430
1811,94011,940
1912,45012,450
2012,96012,960
2015-12-05_23.45.29On retrouve les mêmes résultats que précédemment :

  • une relation qui lie la largeur de la hitbox et de la zone de récupération varie de manière affine :

    \[\left [ \text{largeur de la zone} \right ] = \left [ \text{largeur de la hitbox} \right ] + 2.2500\]

  • la zone de récupération horizontale est centrée sur la créature. La zone de récupération, tout comme la hitbox sont des prismes à base carrée, contrairement à ce que l’affichage pourrait faire croire.
  • mais le résultat le plus important, c’est que le coefficient directeur est de 1. Cela signifie que la zone de récupération est calculée comme une couche sur la hitbox d’épaisseur constante (ici, c’est une épaisseur de 1.125, puisque l’épaisseur est présente deux fois dans la largeur totale de la zone).
    Entité
    Largeur
    (issue du code)
    Zone de récupération
    (direction : ± x)
    Zone de récupération
    (direction : ± z)
    Poule (bébé)0,22,45002,4500
    Villageois (bébé)0,32,55002,5500
    Endermite0,42,65002,6500
    Vache (bébé)0,452,70002,7000
    Chauve-souris0,52,75002,7500
    Sorcière0,62,85002,8500
    Villageois (adulte)0,62,85002,8500
    Araignée venimeuse0,72,95002,9500
    Gardien0,853,10003,1000
    Cochon0,93,15003,1500
    Vache (adulte)0,93,15003,1500
    Poulpe0,953,20003,2000
    Araignée1,43,65003,6500
    Cheval1,43,65003,6500
    Ghast46,25006,2500

Lien entre hitbox et zone de récupération verticale

Nous avons fait le travail pour 2 dimensions sur 3 du jeu. Si on a trouvé une bonne correspondance entre la hitbox et la largeur de la zone de récupération, nous ne sommes pas intéressés à la hauteur de cette zone.

On mesure dans chaque cas la hauteur de la zone de récupération selon la direction verticale. On remarque encore une relation une progression linéaire :

    \[\left [ \text{hauteur de la zone} \right ] = 0.5100 \times \left [ \text{taille du Slime} \right ] + 0.7600\]

Taille du Slime
Zone de récupération
(direction : - y)
Zone de récupération
(direction : + y)
Zone de récupération
(hauteur totale)
0-0,250000,510000,76000
1-0,250001,02001,2700
2-0,250001,53001,7800
3-0,250002,04002,2900
4-0,250002,55002,8000
5-0,250003,06003,3100
6-0,250003,57003,8200
7-0,250004,08004,3300
8-0,250004,59004,8400
9-0,250005,10005,3500
10-0,250005,61005,8600
11-0,250006,12006,3700
12-0,250006,63006,8800
13-0,250007,14007,3900
14-0,250007,65007,9000
15-0,250008,16008,4100
16-0,250008,67008,9200
17-0,250009,18009,4300
18-0,250009,69009,9400
19-0,2500010,20010,450
20-0,2500010,71010,960
2015-12-06_00.55.09On teste de nombreuses entités et la relation entre zone de récupération et hitbox semble se confirmer :

    \[\left [ \text{hauteur de la zone} \right ] = 0.5100 \times \left [ \text{hauteur du Slime} \right ] + 0.2500\]

Si on regarde le détail, on constate qu’on ne semble pas avoir un modèle avec une épaisseur constante : en bas, nous avons un espace fixe de 0.25 entre la hitbox et la fin de la zone de récupération alors que ces deux zones coïncident sur la partie haute.

Entité
Hauteur
(issue du code)
Zone de récupération
(selon - y)
Zone de récupération
(selon + y)
Zone de récupération
(total)
Endermite0,3-0,250000,300000,55000
Poule (bébé)0,35-0,250000,350000,60000
Araignée venimeuse0,5-0,250000,500000,75000
Poule (adulte)0,7-0,250000,700000,95000
Ocelot0,7-0,250000,700000,95000
Gardien0,85-0,250000,850001,10000
Araignée0,9-0,250000,900001,15000
Villageois (bébé)0,9-0,250000,900001,15000
Cochon (adulte)0,9-0,250000,900001,15000
Chauve-souris0,9-0,250000,900001,15000
Vache (adulte)1,3-0,250001,30001,5500
Cheval1,6-0,250001,60001,8500
Villageois (adulte)1,8-0,250001,80002,0500
Sorcière1,95-0,250001,95002,2000
Enderman2,9-0,250002,90003,1500
Ghast4,0-0,250004,00004,2500
Reste à expliquer des faits plus curieux comme dans le cas du bébé zombie :

  • la différence entre un zombie et un bébé zombie est un tag nommé IsBaby, choisi au moment de l’apparition.
  • le bébé zombie et le zombie ont la même hitbox : le contour en blanc est le même. Vous pouvez vérifier qu’on peut infliger des dégâts à un bébé zombie même si vous tapez visuellement au-dessus de sa tête.

Si on commence à faire les mesures, on se rend compte que les zones de récupération diffèrent :

Direction
Zombie
IsBaby : 0b
Bébé Zombie
IsBaby : 1b
- x
-1.4250-1.2750
+ x
1.4250 1.2750
- y
-0,25000-0,25000
+ y
1,9500 0,97500
- z
-1.4250-1.2750
+ z
1.4250 1.2750
 Dans la pratique, la zone de récupération a diminué dans toutes les directions, surtout verticale, alors que la zone de collision n’a pas bougé.

C’est un des cas où distinguer les zones de collision et de pénétration est important et peut se faire visuellement grâce aux marques rouges, même si elle est grandement trompeuse.

Remarque : les expériences ont été faites en version 1.8. En version 1.9, le bébé zombie a une hitbox différente qui correspond, comme pour les autres bébés animaux, à la diminution de moitié selon chacune des directions.

Le cas du wagonnet à entonnoir

Puisqu’il s’agit d’un objet spécialement créé pour la récupération des items, le wagonnet à entonnoir se révèle être une exception très intéressante dans la récupération d’items.

On effectue plusieurs mesures rapides avec des plans situés à différentes coordonnées y. On constate rapidement que la zone de récupération n’est pas comme précédemment mais séparée en deux parties :

  • une première zone en pavé droit au niveau du wagonnet.
  • une seconde zone, également en pavé droit, au-dessus du wagonnet.

Voilà ce qui fait du wagonnet à entonnoir une entité particulière dans la récupération d’items.

minecart_hopper_oldNous allons donc effectuer des expériences complémentaires pour définir plus en détail le contour des deux zones de récupérations :
Zone concernée
Dimension de la zone de récupération d'item
Zone inférieure± x-0,865+0,865
± y-0.368+0.660
± z-0,865+0,865
Zone supérieure± x-0.625+0.625
± y+0.660+1.960
± z-0.625+0.625
Il est intéressant de remarquer que les deux zones sont centrées horizontalement sur le wagonnet à entonnoir.

minecart_hopper_newLa version présentée correspond à la version actuelle, mais elle n’a pas toujours été ainsi. Le changement a été effectué lors du passage à la version 1.8.2. Effectuons les mesures :
Zone concernée
Dimension de la zone de récupération d'item
( version pré-1.8.2 )
Zone inférieure± x-0,865+0,865
± y-0,368+0,660
± z-0,865+0,865
Zone supérieure± x-0,125+1,125
± y+0,632+1,960
± z-0,125+1,125
On remarque que la zone supérieure était désaxée : la zone supérieure était décalée vers les axes positifs en x et en z. Ceci était très important d’en tenir compte dans les usines car cela signifiait qu’une partie des items au-dessus n’était pas ramassée.

Conséquences et applications

Il est bien beau de faire des expériences et de découvrir des lois, mais il est encore plus intéressant de leur trouver une utilité, que ce soit pour le jeu en lui-même pour fonctionner ou pour le joueur qui veut exploiter ces mécanismes à son avantage.

2015-12-13_03.20.51Prenons une créature avec un item situé de l’autre côté d’un bloc. En utilisant des cours d’eau par exemple, on peut coller les deux entités contre les parois du bloc. La question est : la créature peut-elle récupérer le bloc ?minecraftCalculons la distance qui sépare le centre des deux entités :

  • la moitié de la hitbox de la créature.
  • la largeur du bloc, soit 1 précisément.
  • la moitié de la hitbox d’un item, soit 0,25/2=0,125.

Ce qui correspond exactement à l’épaisseur de 1,125 autour de la hitbox mesurée : l’item n’est pas à l’intérieur de la zone (la surface ne compte pas, c’est en mathématiques ce que l’on nomme un ouvert), la créature ne le récupère donc pas.

La zone de récupération a donc été définie précisément pour ne pas récupérer d’item à travers un bloc. Sauf bien sûr si le bloc fait moins d’un bloc, comme un coffre par exemple (largeur totale de 0,876).

2015-12-13_03.25.29Le raisonnement peut être reproduit pour le wagonnet à entonnoir :

  • posé sur le sol, le wagonnet à entonnoir ne peut pas aspirer un item situé 2 blocs au-dessus de lui.
  • posé sur un rail, on surélève de 0,0625 bloc la zone de récupération, ce qui donne 1,96+0,0625=2,0225. L’item situé sur le bloc supérieur peut donc être récupéré.

On peut alors faire deux remarques :

  • si vous voulez aspirer un item sans rail, il faudra utiliser des blocs ayant une hitbox de hauteur inférieure à 0,96 bloc, ce qui est le cas par exemple du sable des âmes (0,875).
  • si on pose un tapis sur le bloc supérieur, on ajoute une épaisseur de 0.0625 bloc, ce qui annule le gain donné par le rail : l’item ne sera pas aspiré s’il est sur un tapis.
2015-12-13_03.39.28Pour un joueur, on remarque que la zone de récupération peut récupérer des items situés au bord d’un mur de 2 blocs de haut. Cette propriété a été utilisée par MathoX pour créer un piège dans un tunnel :

  • dès qu’un joueur passe, l’item est récupéré dans son inventaire (si c’est possible)
  • la disparition de l’item relâche la pression sur la plaque, arrêtant le courant qui rétracte les pistons. Le sol va alors se dérober sous les pieds du joueur.
  • Une fois activé (où lorsque l’item disparait naturellement), le distributeur va remettre un item à sa place et réamorcer le piège.

Cute Divider

Conclusion :

Nous avons terminé nos expérimentations sur les zones de récupération. Nous avons montré le lien étroit entre la hitbox de la créature et sa zone de récupération, ainsi que le cas très particulier du wagonnet à entonnoir. J’espère que cet article vous aura intéressé et que vous avez eu autant de plaisir à le lire que moi à l’écrire. N’hésitez pas à donner vos retours dans les commentaires, ainsi que des expériences que vous voudriez tester sur les mécaniques de jeu dans Minecraft. A bientôt dans la TestZone.

Cute Divider

Téléchargement :

Pour tester par vous-même, voici le monde de test utilisé pour obtenir les résultats présentés :

[1.8+] TestZone 4

A propos de brusicor02

Rédacteur sur Minecraft-France. Il est capable de s'amuser avec quelques câbles de redstone et des blocs de commande pendant des heures et d'en faire un circuit à la MacGyver.

Ceci vous intéresse peut être

Embellir

[Astuce] Embellir votre map [1.11.2]

Avec un peu de complexité et d'imagination, vous pourrez décorer des bâtiments entiers avec les armor stands ! Cette astuce va vous expliquer comment procéder pour créer ces petites décorations.

Rédiger une réponse

4 Commentaires sur "[TestZone] #4 – Récupération d’items : wagonnet vs entités"

Prévenez moi :
avatar
 
Trier par:   Commentaires récents | Commentaires ancients | Les mieux notés
The_MurmeX
Invité

J’adore tes articles : je suis fan ! Tu fais de plus en plus complexe mais j’ai un sujet simple à te proposer : les graines poussent plus vite lorsqu’elle sont plantées en ligne (j’ai testé sur 20 000 blés), pourrais-tu faire le test à ton tour ? Il est possible de parler également de la relation vitesse de pousse/lumière.
Encore un grand merci pour tes articles :)

Charon25
Membre

Enorme ! Continue, c’est super intéressant et bien fait !

(mais j’avais calculé la zone pour un joueur avant toi gnagnagnananère :p)

Seblor
Rédacteur

Encore un article très détaillé et bien expliqué.
Merci Brusi pour cette magnifique étude qui, je pense, servira à plus d’un.

wpDiscuz