J'ai trouvé une option avec laquelle je peux vivre pour les minuteries multiples et je peux l'étendre à autant de fois que je veux. Elle utilise plusieurs fichiers de fonctions mais chaque minuterie peut être suivie et fonctionne indépendamment des autres minuteries. La solution ne nécessite qu'un seul bloc de commande répétitif. Vous pouvez démarrer le timer via un second bloc de commande (/fonction timer1Start par exemple), appeler la fonction timer1start directement dans la console, ou appeler timer1Start depuis une autre fonction.
Je suis en train de créer une fonction de construction de bataille. Il y aura donc un bouton sur lequel l'utilisateur cliquera et qui exécutera une autre fonction buildBattle. La fonction buildBattle, à son tour, appellera directement la fonction timer1Start. Avec 3 timers, je peux avoir 3 batailles de construction différentes en même temps, chacune sur son propre timer et chacune peut exécuter une fonction séparée une fois terminée.
Je suppose que la même chose pourrait être mise en place sans fonctions en utilisant un tas de blocs de commande - mais qui veut faire cela ;)
J'ai créé ces fichiers :
mondial :
- timerInit.mcfunction : exécutez cette fonction une seule fois pour configurer toutes les minuteries.
- TimerTick.mcfunction : mettez-le dans un bloc de commande répétitif qui s'exécute tous les 20 ticks.
fichiers timer1
- timer1start.mcfunction :
- règle la minuterie active sur 1 et démarre une minuterie de 15 secondes
- appeler /fonction timer1start pour démarrer le timer
- timer1tick.mcfunction : tout ce qui se trouve ici sera exécuté une fois par seconde.
- timer1done.mcfunction : tout ce qui se trouve ici sera exécuté une fois après l'expiration du timer1.
fichiers timer2
- timer2start.mcfunction :
- règle la minuterie active sur 2 et démarre une minuterie de 30 secondes
- appeler /fonction timer2start pour démarrer le timer
- timer2tick.mcfunction : tout ce qui se trouve ici sera exécuté une fois par seconde.
- timer2done.mcfunction : tout ce qui se trouve ici sera exécuté une fois après l'expiration du timer2.
fichiers timer3
- timer3start.mcfunction : règle la minuterie active sur 3 et démarre une minuterie de 45 secondes
- règle la minuterie active sur 3 et démarre une minuterie de 45 secondes
- appeler /fonction timer3start pour démarrer cette minuterie
- timer3tick.mcfunction : tout ce qui se trouve ici sera exécuté une fois par seconde.
- timer3done.mcfunction : tout ce qui se trouve ici sera exécuté une fois après l'expiration du timer3.
timerInit.mcfunction :
scoreboard objectives add timer1 dummy "Timer 1"
scoreboard objectives add timer2 dummy "Timer 2"
scoreboard objectives add timer3 dummy "Timer 3"
scoreboard objectives add activeTimer dummy "activeTimer"
TimerTick.mcfunction :
#update the 3 individual timers
scoreboard players remove timeTracker1 timer1 1
scoreboard players remove timeTracker2 timer2 1
scoreboard players remove timeTracker3 timer3 1
#synch each players timer with the time tracker 'player'
scoreboard players operation @a timer1 = timeTracker1 timer1
scoreboard players operation @a timer2 = timeTracker2 timer2
scoreboard players operation @a timer3 = timeTracker3 timer3
#update all players to show them their active timer in the side bar (optional)
execute @a[scores={activeTimer=1}] ~ ~ ~ scoreboard objectives setdisplay sidebar timer1
execute @a[scores={activeTimer=2}] ~ ~ ~ scoreboard objectives setdisplay sidebar timer2
execute @a[scores={activeTimer=3}] ~ ~ ~ scoreboard objectives setdisplay sidebar timer3
#execute something every second for the timers (for instance show time or some other command)
function timer1Tick
function timer2Tick
function timer3Tick
#execute these functions ONE TIME when the timer expires
execute @p[scores={timer1=-1}] ~ ~ ~ function timer1Done
execute @p[scores={timer2=-1}] ~ ~ ~ function timer2Done
execute @p[scores={timer3=-1}] ~ ~ ~ function timer3Done
timer1start.mcfunction
scoreboard players set @a timer1 15
scoreboard players set timeTracker1 timer1 15
scoreboard players set @a activeTimer 1
timer1tick.mcfunction :
#execute @a[scores={activeTimer=1}] ~ ~ ~ say hello
title @a[scores={timer1=10,activeTimer=1}] actionbar 10 seconds left
title @a[scores={timer1=9,activeTimer=1}] actionbar 9
title @a[scores={timer1=8,activeTimer=1}] actionbar 8
title @a[scores={timer1=7,activeTimer=1}] actionbar 7
title @a[scores={timer1=6,activeTimer=1}] actionbar 6
title @a[scores={timer1=5,activeTimer=1}] actionbar 5
title @a[scores={timer1=4,activeTimer=1}] actionbar 4
title @a[scores={timer1=3,activeTimer=1}] actionbar 3
title @a[scores={timer1=2,activeTimer=1}] actionbar 2
title @a[scores={timer1=1,activeTimer=1}] actionbar 1
title @a[scores={timer1=0,activeTimer=1}] actionbar Times up!
timer1Done.mcfunction
#do something when the timer completes
title @a[scores={timer1=..0}] actionbar timer 1 countdown complete
timer2start.mcfunction
scoreboard players set @a timer2 30
scoreboard players set timeTracker2 timer2 30
scoreboard players set @a activeTimer 2
timer2tick.mcfunction :
#do something when timer 2 executes
timer2Done.mcfunction :
#do something when timer 2 expires
timer3start.mcfunction
scoreboard players set @a timer3 45
scoreboard players set timeTracker3 timer3 45
scoreboard players set @a activeTimer 3
timer3tick.mcfunction :
#do something when timer 3 executes
timer3Done.mcfunction :
#do something when timer 3 expires