Jump to content
×
×
  • Create New...

Créer un plugins pour le /sethome et /home


Recommended Posts

  • Bot

Bonjour,

 

voyant beaucoup de mes amis avoir du mal avec les coordonnées dans les plugins, et les sauvegardes de données simple, je vais faire un bref tutoriel sur le /sethome et home.

Requis :

 

Eclipse : https://eclipse.org/donwloads/

spigot : getspigot.org

JDK : http://urlz.fr/25xV/

 

 

 

Concrètement, le début ça change pas, vous ouvrez éclipse, vous créez un nouveau "JavaProject" et vous l’appelez comme vous voulez.

Je vais par exemple appelé le mien : "Funky emu"

 

113935Capture.PNG

On importe le spigot 1.8 dans le built Path :

114425Sans-titre.png

 

On va donc créer une nouvelle class, donc un nouveau package par la même occasion. J'en profite pour vous montrez comment faire les deux en même temps, vous faites un clique droit sur "src" et vous mettez directement "New --> Class" Puis vous complétez la case Package  et class :

114627Capture.PNG

Je vais par exemple les compléter comme ça :

Package = com.funky.fr

et Name = MainClass

 

Je fais au passage directement une nouvelle classe que j'appelle : VoidClass où l'ont va stocker le protocole de nos commandes.

115026Capture.PNG

 

Dans la classe Main, on va directement déclarer le plugins et la déclarer aussi comme un exécuteur de commande, n'oubliez pas d'importer le tout :

115311Capture.PNG

Vous allez en dessous du début de la class directement déclarer ceci, vous comprendrez plus tard :

public VoidClass vc;
 

115450Capture.PNG

 

Une fois ceci, on va récupérer le OnEnable (Astuce, au lieu de tout copier faire : "OnEn" et faite ctrl + espace:) !)

115624Capture.PNG

Tout ce qui va se trouver ici, va s''exécuter automatiquement au démarrage du plugins, on va donc afficher un message dans la console, ça peut toujours aider :

115731Capture.PNG

Voilà, maintenant on va se servir de ce "vc" de tout à l'heure (pas de mauvais jeu de mots svp) :

115858Capture.PNG

L'erreur est normal, c'est que pour l'instant il n'y a rien dans cette class, ignorez la.

On va maintenant créer une configuration sur le plugins, et lui donner une section nommée "Home" et sauvegarder les modifications :

		getConfig().options().copyDefaults(false);
	getConfig().createSection("Home");
	this.saveConfig();
 

110038Capture.PNG

Voilà ! On va passer à la class : VoidClass on reviendra dans la MainClass plus tard.

On va vite fait déclarer quelques trucs, pas besoin pour vous de le connaitre par coeur je vous le donne :

public MainClass plugin;
public  VoidClass (MainClass main){
this.plugin = main;
}
 

110330Capture.PNG

Maintenant on va créer un void, avec toutes les commandes qui vont s'exécuter quand on va taper la commande /sethome, donc autant l’appeler comme ça... :

110557Capture.PNG

On va se simplifier les choses et nommer le sender "p" comme player. On va par la suite récupérer ses coordonnées, je vous donne la méthode :

110742Capture.PNG

Comme ça, on pourra utiliser "loc" pour parler directement ses coordonnées, ça ira beaucoup plus vite.

Maintenant, on a ses coordonnées, il faut les sauvegarder, je vous propose de créer ces sections :

-"Home [Pseudo]"

-"Home [Pseudo] + coordonné x"

-"Home [Pseudo]+ coordonné y"

-"Home [Pseudo]+ coordonné z"

On va donc faire comme ça, en récupérant son pseudo avec le bon vieux "p.getname()" :

111950Capture.PNGBien sûr, on oublie pas de sauvegarder les modifications avec un "plugin.saveConfig()".

Maintenant on va récupérer ses coordonnées, et les désigner par 3 variables de type double (chiffres à virgule) :

111134Capture.PNG

Vous apprenez au passage à créer une variable si vous ne saviez pas le faire. Vous pouvez constater qu'on utilise le "loc" définie plutôt.

On va maintenant assigner ("set") ses données au configuration, puis les sauvegarder, on remplace donc le "createSection" par un set, puis on met une virgule à la fin, et on définie sur les variables, et j'ajoute un petit message au passage, comme ça on en a finie avec cette commande :

112045Capture.PNG

Code :

	public void OnCommandSetHome(CommandSender sender){
	Player p = (Player) sender;
	Location loc = p.getLocation();
	plugin.getConfig().createSection("Home" + p.getName());
	plugin.getConfig().createSection("Home" +p.getName()+".x");
	plugin.getConfig().createSection("Home" +p.getName()+".y");
	plugin.getConfig().createSection("Home" +p.getName()+".z");
	plugin.saveConfig();

	double x = loc.getBlockX();
	double y = loc.getBlockY();
	double z = loc.getBlockZ();

	plugin.getConfig().set("Home" +p.getName()+".x", Double.valueOf(x));
	plugin.getConfig().set("Home" +p.getName()+".y", Double.valueOf(y));
	plugin.getConfig().set("Home" +p.getName()+".z", Double.valueOf(z));
	plugin.saveConfig();
	p.sendMessage(ChatColor.GREEN+">>Résidence définie !");
}
 

 

 

On va donc maintenant s'attaque au /home donc on créer un void nommer "home", BWAH QUELLE ORIGINALITÉ :D, sauf que on doit définir celui-ci en boolean :

111621Capture.PNG

On va encore définir le sender par "p".

 

Maintenant on va mettre une condition :

SI(le joueur n'a pas définie son home) : ERROR

Sinon : [On le tp]

Si il n'a pas définie son home, la section home + [PSEUDO] est vite, soit elle est null. J’insiste sur ce mot car en java, il est très important.

 

La condition donne ça :

if(plugin.getConfig().getConfigurationSection("home"+ p.getName()) == null){
 

112239Capture.PNG

Si il n'a rien mit, on lui envoie un message :

112318Capture.PNG

Si il l'a fait, on va juste le téléporter aux coordonnées enregistrer, je vous donne directement les fonctions, et je vous les expliques :

 

112544Capture.PNG

A noter, que les variables ici sont privés, soit les variables du sethome et du home, malgré qu'elles ont le même nom de sont pas les même.

Toute la class donne ça  :

 

 

public class VoidClass {
public MainClass plugin;
public  VoidClass (MainClass main){
	this.plugin = main;
}

public void OnCommandSetHome(CommandSender sender){
	Player p = (Player) sender;
	Location loc = p.getLocation();
	plugin.getConfig().createSection("home" + p.getName());
	plugin.getConfig().createSection("home" +p.getName()+".x");
	plugin.getConfig().createSection("home" +p.getName()+".y");
	plugin.getConfig().createSection("home" +p.getName()+".z");
	plugin.saveConfig();

	double x = loc.getBlockX();
	double y = loc.getBlockY();
	double z = loc.getBlockZ();

	plugin.getConfig().set("home" +p.getName()+".x", Double.valueOf(x));
	plugin.getConfig().set("home" +p.getName()+".y", Double.valueOf(y));
	plugin.getConfig().set("home" +p.getName()+".z", Double.valueOf(z));
	plugin.saveConfig();
	p.sendMessage(ChatColor.GREEN+">>Résidence définie !");
}
public boolean OnCommandhome(CommandSender sender){
	Player p = (Player) sender;
	if(plugin.getConfig().getConfigurationSection("home"+ p.getName()) == null){
		p.sendMessage(ChatColor.RED+">>Définissez votre résidence avant de vous y téléporter !");
	}else{

	World world = Bukkit.getWorld("NOM"); //NOM = le nom de votre map, à vous le remplire selon votre nom.
	double x = plugin.getConfig().getDouble("home" +p.getName()+".x");// On définie la fonction x sur la sauvegarde de x 
	double y = plugin.getConfig().getDouble("home" +p.getName()+".y");//La même avec y
	double z = plugin.getConfig().getDouble("home" +p.getName()+".z");//La même avec z.
	p.teleport(new Location(world, x, y, z)); //On le téléporte avec les variables
	p.sendMessage(ChatColor.GREEN+">>Vous avez été téléporté à votre résidence."); //On lui envoie une message.
	}
	return false;
}
}
 

 ou :

 

112700Capture.PNG

 

On va maintenant définir notre commande dans la MainClass :

On faite un petit onCommand, donc avec le ctrl+espace, ça va plus vite, vous supprimez la ligne du milieu et vous return "false" :

112850Capture.PNG

On définie donc les commandes, en faisant appelle à la classe nécessaire :

113002Capture.PNG

On fait de même pour l'autre :

113056Capture.PNG

Ça c'est fait, maintenant on passe à la dernière chose le plugin.yml :

Allez sur votre "src", faite New --> File --> Plugin.yml

113214Capture.PNG

Ensuite, vous le remplissez avec les informations obligatoire, ou plus si vous le souhaitez, j'ai déjà fait un tutoriel dessus, les informations qu'il vous faut au minimum sont :

113538Capture.PNG

main: com.funky.fr.MainClass
name: FUNKYEMU
version: 1.0.0
author: Ares
commands:
   sethome:
   home:
 

(4 espaces avant sethome et maison.)

 

Vous pouvez maintenant exporte et tester :

 

Le /sethome :

113632Capture.PNG

 

Le /home :

113941Capture.PNG

 

Voilà voilà, bonne continuation, si vous avez besoin d'aide, mp, skype ou ASQ, mais pas sur le poste !

 

Cordialement.

Edited by FBot
  • J'adore 1

090100logo.png 090149logo-4-bis.png

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.