Gestion des coordonnées d’une mort

Dans ce tutoriel, nous allons mettre en place un système pour afficher les coordonnées lors d’une mort.

Création du datapack

Comme à chaque fois, je créé un datapack. Je ne vais pas entrer dans le détail, la mise en place ayant déjà était expliquée à plusieurs reprises. Si tu n’es pas habitué, tu peux lire l’article sur la création d’un datapack.

Contenu du fichier pack.mcmeta :

				
					{
    "pack": {
        "pack_format": 6,
        "description": "Tuto Mangarmor - Tombe"
    }
}
				
			

Le fichier data/minecraft/tags/functions/load.json contient la fonction qui sera en charge de la mise en place des variables de scoreboard :

				
					{
	"values": [
		"mangarmor:grave/init"
	]
}
				
			

Fonction d'initialisation

Nous pouvons maintenant entrer dans le vif du sujet : la fonction d’initialisation. Je créé donc le fichier data/mangarmor/functions/grave/init.mcfunction. Je commence par créer une variable death de type deathCount qui a pour but d’afficher les morts dans la liste des joueurs (visible avec la touche tabulation du clavier). Ceci est totalement optionnel, le datapack n’utilisant pas cette variable.

				
					# Création d'un compteur de morts et affichage dans la liste des joueurs
scoreboard objectives add death deathCount "Morts"
scoreboard objectives setdisplay list death
				
			

Je créé ensuite la variable grave_death qui sera utilisée pour lancer une fonction lors de la mort d’un joueur.

				
					# Création d'une variable pour savoir si un joueur est mort récement
# Semblable au compteur de morts, il sera remis à 0 après chaque détection
scoreboard objectives add grave_death deathCount "Mort"
				
			

Afin de permettre aux joueurs de connaître le lieu de leur dernière mort, nous allons mettre en place la commande /trigger grave et l’activons dès maintenant pour tous les joueurs.

				
					# Création d'un objectif modifiable par le joueur avec la commande trigger
# Pour connaître le lieu de sa dernière mort : /trigger grave
scoreboard objectives add grave trigger "Tombe"
scoreboard players enable @a grave
				
			

Je créé ensuite les trois variables pour enregistrer les coordonnées du joueur.

				
					# Création des variables pour enregistrer les coordonnées de mort
scoreboard objectives add grave_x dummy "Mort : x"
scoreboard objectives add grave_y dummy "Mort : y"
scoreboard objectives add grave_z dummy "Mort : z"
				
			

Enfin, je termine avec un message pour confirmer le chargement du datapack et je charge la fonction loop.

				
					# Message pour confirmer le chargement du datapack
tellraw @a ["",{"text":"Tombe :","color":"gold"}," datapack chargé"]

# Première exécution de la fonction loop
function mangarmor:grave/loop
				
			

Fonction de boucle

Maintenant que les variables sont crées nous pouvons les utiliser. La fonction loop permet d’utiliser des commandes à intervalle régulier. Ici, je définis 1 tick car nous devons réagir dès la mort d’un joueur avant sa résurrection.

				
					# data/mangarmor/functions/grave/loop.mcfunction
# Appel de la fonction à chaque tick
schedule function mangarmor:grave/loop 1t

execute as @a[scores={grave_death=1..}] run function mangarmor:grave/death
execute as @a[scores={grave=1..}] run function mangarmor:grave/trigger
scoreboard players enable * grave
				
			

En cas de mort d’un joueur, la variable grave_death change de valeur. Je teste donc cette valeur pour lancer la fonction death dès qu’elle dépasse 0.

Quand un joueur utile la commande /trigger grave, sa valeur passe à 1 (la commande complète est /trigger grave set 1). Je détecte ce changement de valeur pour lancer la fonction trigger. Enfin, j’active la commande trigger pour tous les joueurs. Cela permet aux joueurs venant de se connecter de l’utiliser.

Enregistrement des coordonnées

Lors de la mort d’un joueur, la fonction death est exécutée. Je lance trois commandes pour enregistrer les coordonnées du joueur dans le scoreboard.

				
					# data/mangarmor/functions/grave/death.mcfunction
execute as @s store result score @s grave_x run data get entity @s Pos[0]
execute as @s store result score @s grave_y run data get entity @s Pos[1]
execute as @s store result score @s grave_z run data get entity @s Pos[2]

tellraw @a ["",{"text":"Tombe : ","color":"gold"},{"selector":"@s"},{"text":" est mort en "},{"score":{"name":"@s","objective":"grave_x"}},{"text":" "},{"score":{"name":"@s","objective":"grave_z"}}]
scoreboard players reset @s grave_death
				
			

J’affiche ensuite un message affichant à tous les joueurs les coordonnées du joueur mort. Enfin, je réinitialise la variable grave_death ce qui permettra de relancer la fonction à la prochaine mort.

Commande pour le joueur

Il ne reste plus qu’à mettre en place la fonction trigger. Ici, j’envoie un message au joueur lançant la fonction pour lui indiquer les coordonnées de sa dernière mort. Enfin, je passe la variable grave à 0 pour éviter que le message ne s’affiche en boucle.

				
					# data/mangarmor/functions/grave/trigger.mcfunction
tellraw @s ["",{"text":"Tombe : ","color":"gold"},{"text":"Ta dernière mort était en "},{"score":{"name":"@s","objective":"grave_x"}},{"text":" "},{"score":{"name":"@s","objective":"grave_y"}},{"text":" "},{"score":{"name":"@s","objective":"grave_z"}}]
scoreboard players set @s grave 0
				
			

Pour aller plus loin

Voici d’autres articles qui pourraient t’intéresser :

Loot boxes dans une boutique sur serveur Minecraft
Minecraft

Création de loot boxes

Le serveur Mang’Armor s’est démarqué en proposant aux joueurs des coffres disponibles grâce aux progrès. Nous allons voir aujourd’hui comment mettre en place ces boites au contenu aléatoire.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Sommaire

Partager

Partager sur facebook
Facebook
Partager sur twitter
Twitter