Nous exploitons un serveur moddé avec Serene Seasons et j'aimerais activer la règle de jeu du cycle des saisons chaque fois que des joueurs sont en ligne, puis à nouveau lorsque tout le monde est hors ligne. Je ne semble pas avoir de fonctionnalités de tâches automatisées sur mon tableau de bord de serveur, donc je me demande comment je pourrais le faire avec des commandblocks ou s'il existe d'autres options alternatives.
Réponse
Trop de publicités?Simple
Si vous ne vous souciez pas de le faire fonctionner à chaque coche, voici la solution la plus simple:
/execute if entity @a[limit=1] run gamerule DoSeasonsCycle true
/execute unless entity @a[limit=1] run gamerule DoSeasonsCycle false
La seule raison pour laquelle je donne une solution plus complexe par la suite est que je ne suis pas sûr si cela inonderait les journaux du serveur.
Un peu plus
Mais si vous voulez l'exécuter une seule fois, et ne pas utiliser de datapacks:
Réponse en bref:
Exécutez une fois dans votre chat:
/scoreboard objectives add AnyPlayer dummy
/scoreboard players set $State AnyPlayer 0
En boucle:
/execute if score $State AnyPlayer matches 0 if entity @a[limit=1] run gamerule DoSeasonsCycle true
/execute if score $State AnyPlayer matches 0 if entity @a[limit=1] run scoreboard players set $State AnyPlayer 1
/execute if score $State AnyPlayer matches 1 unless entity @a[limit=1] run gamerule DoSeasonsCycle false
/execute if score $State AnyPlayer matches 1 unless entity @a[limit=1] run scoreboard players set $State AnyPlayer 0
Explication
Nous avons besoin d'un scoreboard pour suivre les états:
- 0: Aucun joueur
- Si 0 et qu'il y a un joueur : Quelqu'un vient de se connecter
- 1: Au moins un joueur
- Si 1 et qu'il n'y a pas de joueur : Dernière personne partie
Créez le scoreboard et définissez son état initial à 0:
/scoreboard objectives add AnyPlayer dummy
/scoreboard players set $State AnyPlayer 0
L'idée est, si vous n'avez pas de joueurs et que le score est défini à 1 (ce qui signifie qu'il y en avait), exécutez les commandes suivies de réinitialiser le score à 0. L'idée opposée s'applique.
Si les joueurs partent:
/execute if score $State AnyPlayer matches 1 unless entity @a[limit=1] run (votre commande gamerule ici, définie sur false)
/execute if score $State AnyPlayer matches 1 unless entity @a[limit=1] run scoreboard players set $State AnyPlayer 0
Une fois qu'un joueur rejoint:
/execute if score $State AnyPlayer matches 0 if entity @a[limit=1] run (votre commande gamerule ici, définie sur true)
/execute if score $State AnyPlayer matches 0 if entity @a[limit=1] run scoreboard players set $State AnyPlayer 1