CommandBlock Impossible de detecter score heure minecraft clock

Lown

Aventurier
7 Juillet 2020
1
0
1
25
Bonjour, faisant une map j'y ai ajouté une clock en minutes et en heures.
Lorsque que je fais un execute as pour les minutes tout fonctionne mais pour les heures, rien ne se passe et même pas de message d'erreur..
Pour faire plus simple, à la minute 3 sur le scoreboard on peut dire que le command block fera la command /time set day. Ca ça fonctionne.
Par contre à l'heure 1 (donc après 59 minutes) si je mets n'importe quelle commande ça ne fonctionnera pas, je suis désespéré.
Voici le système :

PARTIE 1 - Scoreboards
: normal /scoreboard objectives add Temps dummy
chain always /scoreboard objectives add hiddenTime dummy
chain always /scoreboard objectives setdisplay sidebar Temps

PARTIE 2 - Armor stands : normal /summon armor_stand ~ ~ ~ <NoGravity:1b,CustomName:"{\"text\":\"Minutes\"}",CustomNameVisible:1b}
normal /summon armor_stand ~ ~ ~ <NoGravity:1b,CustomName:"{\"text\":\"Heures\"}",CustomNameVisible:1b}

PARTIE 3 - La clock en deux lignes
: Ligne 1 : normal /scoreboard players add @e[limit=1,name=Minutes] hiddenTime 1
chain always : /scoreboard players add Minutes Temps 1

Ligne 2 : normal /execute as @e[type=minecraft:armor_stand,limit=1,name=Minutes,scores={hiddenTime=59..}] run scoreboard players add Heures Temps 1

chain always /scoreboard players set @e[type=minecraft:armor_stand,limit=1,name=Minutes,scores={hiddenTime=59..}] hiddenTime -1

chain always /scoreboard players set Minutes Temps -1

chain always /scoreboard players set @e[type=minecraft:armor_stand,limit=1,name=Heures,scores={hiddenTime=59..}] hiddenTime 1

Pour ajouter un event à la minute 2 je fais repeat always : /execute as @e[type=minecraft:armor_stand,limit=1,name=Minutes,scores={hiddenTime=2}] run time set day
Hors, pour ajouter un event à l'heure 1 je n'y arrive pas.. Des idées peut-être?

Désolé pour le pavé pas clair :v
 

Oromis

Command-blocker slimesque
Staff
Modérateur
Support
11 Février 2014
3 345
2
1 053
297
24
Bretagne
Hey !
Tu sembles te compliquer la vie pour pas grand chose ! :p
Déjà, il semblerait que tu passes par une redstone clock, non ? Je ne vois pas de command-blocks en repeat.
Quelques notions préliminaires avant de t'expliquer un autre système :
  • Les command-blocks repeat s'activent tous les ticks
  • Il y a 20 ticks dans une seconde
  • Il y a 20 * 60 ticks dans une minutes
  • Il y a 60 minutes dans une heure
Prenons exemple pour le cas des heures, comme tu l'as bien fait, on ne compte que de 0 à 59 (ce qui fait bien 60 nombres).

Pour faire la chose simplement, on peut passer par la commande scoreboard players operation et l'opérateur modulo (%).
Petite explication sur cet opérateur :
Celui-ci est un opérateur binaire, il prend donc deux valeurs (comme le +, le - etc), une opération s'écrivant de la forme X % Y.
Cet opérateur renvoie le reste de la division euclidienne (entière) de X par Y.

Exemple :
63 % 2
Pour calculer cela, nous allons déjà trouver le plus grand nombre divisible par 2 et inférieur à 63. Ici, il s'agit nécessairement d'un nombre paire (en effet, tout nombre paire est divisible par 2), et c'est donc 62.
Pour trouver le reste : 62 - 63.
Ainsi, 63 = 2 * 62 + 1 (2 * [résultat de la division entière] + [reste]).

Comment s'en servir dans ce cas ?
Et bah c'est très simple ! Le modulo a pour avantage de rendre un nombre toujours (si X positif) compris entre 0 et Y (exclus). Ainsi, dans X % 60, le résultat sera toujours compris entre 0 et 59.
  • 58 % 60 = 58
  • 59 % 60 = 59
  • 60 % 60 = 0
  • 61 % 60 = 1
  • ...
Donc comme tu peux le voir... Notre compteur se reset tout seul, parfait pour les minutes !

Maintenant, comment savoir pour calculer les heures ?
Il suffit d'utiliser l'autre opérateur que j'ai mentionné : la division entière.
  • 58 / 60 = 0
  • 59 / 60 = 0
  • 60 / 60 = 1
  • 61 / 60 = 1
  • ...
Notre fonction va donc bien faire les heures !

Voici donc le système que je te propose :
  • Une valeur X qui s'incrémente à chaque tick, sans reset
  • Minutes = X / 1200 (20 * 60)
  • Heures = Minutes / 7200 (20 * 60 * 60)
  • Minutes = X % 72000
  • Heures = Heures % 1728000 (20 * 60 * 60 * 24)

Je peux détailler le système en commandes si tu le souhaites, mais je préfère te donner seulement cela pour que tu puisses essayer de le réaliser tout seul, ça t'aidera mieux à comprendre ceci que des commandes toutes faites !

Sinon, au lieu de passer par une entité, tu peux passer par un fake player :
scoreboard players set Minutes Timer 10
Pas besoin de sélecteurs comme ça ;)
 
  • J'aime
Reactions: Myuto