Résolu [datapack] [1.21.4] Détections de pressions de touches clavier

BlueFuSion348

Architecte en herbe
9 Mars 2012
91
1
18
120
33
Bonjour. J'ai un projet de map 1.21.4 avec datapack et on va dire que je coince ou j'hésite entre deux méthodes et leur amélioration possible.

J'ai un écran de jeu de 18x12 blocs et le joueur est en face, le problème c'est les inputs clavier pour contrôler le joueur armor_stand à l'écran.



Première méthode :
Code:
scoreboard players set @p[nbt={SelectedItem:{id:"minecraft:wither_skeleton_skull"}}] DIRECTION 1
scoreboard players set @p[nbt={SelectedItem:{id:"minecraft:zombie_head"}}] DIRECTION 2
scoreboard players set @p[nbt={SelectedItem:{id:"minecraft:player_head"}}] DIRECTION 3
scoreboard players set @p[nbt={SelectedItem:{id:"minecraft:creeper_head"}}] DIRECTION 4
scoreboard players set @p[nbt={SelectedItem:{id:"minecraft:soul_sand"}}] DIRECTION 5
[Puis mon code des conditions de touches pressées, du slot sélectionné.]

Avantages :
  • Efficace, ça répond bien.
  • Image nette contrairement à la méthode 2.

Inconvéniants :
  • Il y a une touche frein pour arrêter le mouvement continu.
  • Devoir reconfigurer les touches "1 2 3 4 5" des slots d'inventaire en "haut, bas, gauche, droite", plus "N" par exemple pour le frein.



Deuxième méthode :
Code:
execute at @p if entity @e[name=BAS,distance=..0.999] run scoreboard players set @p DIRECTION 1
tp @p[scores={DIRECTION=1}] 518 86 482.0 -90 0
execute at @p if entity @e[name=HAUT,distance=..0.999] run scoreboard players set @p DIRECTION 2
tp @p[scores={DIRECTION=2}] 518 86 482.0 -90 0
execute at @p if entity @e[name=GAUCHE,distance=..0.999] run scoreboard players set @p DIRECTION 3
tp @p[scores={DIRECTION=3}] 518 86 482.0 -90 0
execute at @p if entity @e[name=DROITE,distance=..0.999] run scoreboard players set @p DIRECTION 4
tp @p[scores={DIRECTION=4}] 518 86 482.0 -90 0
[Puis mon code des conditions de touches pressées.]
scoreboard players set @p DIRECTION 0

Avantages :
  • Efficace, ça répond bien.
  • Mouvement uniquement quand la touche est pressée ou maintenue.
  • Plus de touche frein.
  • Plus rien à configurer côté joueur.

Inconvénients :
  • Tremblements de l'écran dû aux légers mouvements perçus et aux tp
  • FOV ou dézoom en cas de double pression car sprint enclenché.



Mes questions :
  • Comment faire pour la méthode 2 pour enlever si possible les tremblements au maximum et le FOV du sprint ?
  • Comment faire une méthode 1 qui switcherait automatiquement de slot ? Un truc dans le genre. Pour ne plus avoir de touche frein, et que l'action ne se produit que quand la touche du slot est pressée, mais je crois que ce n'est pas possible à ma connaissance...
  • Quelle est la meilleure méthode selon vous ?



Merci d'avance :D
 
Dernière édition:
Plus personne ? Minecraft est mort ou vous êtes tous sur ChatGPT ? Mon problème est complexe pour ChatGPT il ne sait pas vraiment me conseiller ni choisir, et il y a pas mieux il me semble que ce que j'ai fait, donc, bon voilà...
 
Bonsoir,

Il n'y a jamais eu beaucoup de monde pour répondre aux questions, mais tu gagnerais à détailler un peu plus (style dire ce que tu fais avant de donner les commandes et à nous de nous démerder pour comprendre ce que tu fais/veux faire), et je n'ai pas vraiment compris ta 2nd méthode. Des captures d'écran pourraient aider ?

Cordialement,
ShE3py
 
Bonjour, bonsoir,

Je croyais avoir déjà bien détaillé mais je vais tenter de faire mieux, désolé.

La deuxième méthode : le joueur est positionné dans une croix d'armor_stand, un "+", il est au centre de 4 armor_stand, et ça détecte la direction quand il en touche un, le joueur est ensuite re-tp au centre sans cesse... Donc avec cette méthode, il y a des tremblements dû aux tp et un FOV dé-zoomé quand le joueur est en train de courir sur place, que j'aimerais supprimer...

Mon projet est en pause depuis un moment, mais en fait je reproduis la trilogie de jeu Flash Aqua Energizer, Acno's Energizer et Crypt Raider dans Minecraft. Le joueur est face à un écran de 18x12 blocs. C'est un genre de Sokoban/Boulder Dash. Et j'hésite entre deux système d'input... pour déplacer le personnage à l'écran.

La première méthode : c'est le slot de la barre d'inventaire du joueur qui fait la direction, mais le problème c'est qu'il y a un slot "frein", car sinon la direction est maintenue même quand aucune touche n'est enfoncée... Sinon là, aucun problème visuel, mais cette touche frein c'est très désagréable...

Donc j'aimerais si possible le meilleur choix ou une amélioration d'une méthode ou encore une troisième...

Merci d'avance ;D
 
Bonjour, bonsoir. C'est bon, il y a eu un miracle sur le subreddit MinecraftCommands, un certain Ericristian_bros m'a répondu et m'a apporté une méthode que je ne connaissais pas du tout.

Voici sa réponse, traduite en français :

« Comment faire une méthode 1 qui switcherait automatiquement de slot ? »

Vous ne pouvez pas changer lequel des 9 slots de la barre d'action est sélectionné à moins d'utiliser des mods.

« Quelle est la meilleure méthode selon vous ? »

Aucune des deux ci-dessus :

Code:
# Dans le chat
summon area_effect_cloud ~ ~ ~ {Tags:["camera"],Radius:0f,custom_particle:{type:"block",block_state:{Name:"minecraft:air"}}}

# Blocs de commande
execute as @a[tag=!bypass.camera] run ride @s mount @n[tag=camera,type=area_effect_cloud]
execute as @a if predicate {condition:"minecraft:entity_properties",entity:"this",predicate:{type_specific:{type:"minecraft:player",input:{forward:1b}}}} run say holding forward
execute as @a if predicate {condition:"minecraft:entity_properties",entity:"this",predicate:{type_specific:{type:"minecraft:player",input:{backward:1b}}}} run say holding backward
execute as @a if predicate {condition:"minecraft:entity_properties",entity:"this",predicate:{type_specific:{type:"minecraft:player",input:{left:1b}}}} run say holding left
execute as @a if predicate {condition:"minecraft:entity_properties",entity:"this",predicate:{type_specific:{type:"minecraft:player",input:{right:1b}}}} run say holding right
execute as @a if predicate {condition:"minecraft:entity_properties",entity:"this",predicate:{type_specific:{type:"minecraft:player",input:{sprint:1b}}}} run say holding sprint
execute as @a if predicate {condition:"minecraft:entity_properties",entity:"this",predicate:{type_specific:{type:"minecraft:player",input:{sneak:1b}}}} run say holding sneak

Avantages :
  • Réponse à 20 TPS (efficace, répond bien)
  • Pas de mouvement de caméra (image nette)
  • Rien à configurer côté joueur
  • Mouvement uniquement quand la touche est pressée ou maintenue
  • Plus de touche frein
  • Permet la détection de 6 touches différentes, 9 de plus si vous utilisez la barre d'action (donnée SelectedItemSlot)
Inconvénients :
  • Aucun
 
Dernière édition: