Salut à tous,
Aujourd'hui je vous fait un tutoriel pour crée sont propre plugin de spawn.
Voila donc pour se tutoriel vous aurez besoin de :
- Eclipse
- Java JDK
Ce tutoriel se déroulera en 2 étapes
1er étape : Installation des logiciels requis.
2éme étape : Création du plugin.
Partie 1 : Installation d’éclipse et Java JDK :
Rendez vous sur :
Puis vous télécharger la version Eclipse IDE for Java EE Developers
Aujourd'hui je vous fait un tutoriel pour crée sont propre plugin de spawn.
Voila donc pour se tutoriel vous aurez besoin de :
- Eclipse
- Java JDK
Ce tutoriel se déroulera en 2 étapes
1er étape : Installation des logiciels requis.
2éme étape : Création du plugin.
Partie 1 : Installation d’éclipse et Java JDK :
Rendez vous sur :
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
Puis vous télécharger la version Eclipse IDE for Java EE Developers

Apres la fin du téléchargement vous prenez le dossier
éclipse qui est compresser en .ZIP et vous le mettez sur votre bureau.
Une fois que vous l'avez mis vous ouvrez le dossier est cliquer sur Extrait tout .
Il va vous proposer un chemin vous le toucher pas,
et vous cochez la case ouvrir le dossier une fois l’opération terminée.
/!\Une fois le dossier ouvert ne le lancer pas car sinon vous aurez une erreur./!\
Cette erreur sera du au fait que vous n'avez pas JAVA JDK donc on va passez a son installation.
Installation de Java JDK
Rendez vous sur :
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.
Puis prenez la version correspondant a votre OS
pour moi sa sera Windows (x64) car je suis en 64 BITS
/!\ Prenez la version correspondante a votre architecture 32 ou 64 bits /!\

Une fois installer vous pouvez retourner sur le dossier d’éclipse et vous le lancer.
Pendant le chargement d’éclipse
il va vous demander ou voulez mettre la Workspace vous la mettez ou vous voulez.
Une fois le logiciel lancer vous allez voir apparaître a l'écran une fenêtre avec plein de Fenêtre a l’intérieur.
Nous allons garder la fenêtre Package Explorer

Nous somme maintenant pret a crée le plugin
2éme étape : Création du plugin.
A quoi sert ce plugin ?
Ce plugin sert a crée un point de spawn. Vous pourez vous y téléporter grâce a la /spawn et il servira comme premier point de spawn des nouveaux joueur sur votre serveur.
Pour configurer un point de spawn vous devrez faire /setspawn.
Maintenant nous allons aller dans Eclispe est nous allons crée notre projet
Vous faite
clique droit => New => Projet => Java Project

Vous mettez le nom de votre projet pour moi sa sera Tuto PL Spawn RG

Une fenetre va s'ouvrir vous cliquer sur NO !
Maintenant que notre projet est crée nous allons importé Bukkit.
Pour cela rendez vous sur
Vous devez être inscrit pour voir les liens ! Inscrivez-vous ou connectez-vous ici.

Et vous télécharger le spigot-1.7.2-R0.4-SNAPSHOT.jar
Une fois télécharger nous allons l'importer dans bukkit
Pour cela vous aller clique droit sur le projet
Properties => Java Build Path => Libraries => Add External Jars ...

Puis vous cliquer sur Add External Jars ...

et vous vous rendez dans téléchargement et vous cliquer sur le spigot puis vous cliquer sur ouvrir.
Et ensuite vous cliquer sur OK
Nous allons maintenant crée les différents packages du plugin.
Le package Launch qui va contenir les class :
- Launch
- Config
et le package Commandes (Cmd) qui va contenir les class :
- SetSpawnCmd
- SpawnCmd
Pour cela clique droit sur le dossier SRC puis
New => Package

et vous faite la même opération pour le package TutoRG.Spawn.Cmd
Maintenant nous allons crée la class Launch
donc vous faite clique droit sur le package TutoRG.Spawn.Launch et vous faite
New => Class
Pour moi elle s'apellera Launch

Maintenant que la class Launch est crée nous allons pouvoir crée les autres class du plugin donc vous refait la même opération sur le package TutoRG.Spawn.Launch et vous mettez dans name : Config.
Une fois cette class crée nous laissons le package TutoRG.Spawn.Launch.
Nous allons maintenant crée les class :
- SetSpawnCmd
- SpawnCmd
Vous fait la même opération que pour le package TutoRG.Spawn.Launch
Une fois tout sa crée vous devriez avoir ceci

Maintenant nous allons passer a la parti codage du plugin
donc rendez vous dans la class launch
Cette class servira a lancer le plugin elle regroupera les class des commande et de la config.

Code:
package TutoRG.Spawn.Launch;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import TutoRG.Spawn.Cmd.SetSpawnCmd;
import TutoRG.Spawn.Cmd.SpawnCmd;
public class Launch extends JavaPlugin {
private String prefix = "[TutoRG]" ;
private String phrase1 = "Le plugin est correctement charger !" ;
private String phrase2 = "Le fichier de configuration est correctement sauvegarder !" ;
public File configFile;
public static FileConfiguration config;
public HashMap<String, Long> cooldowns = new HashMap();
@Override
public void onEnable() {
System.out.println(prefix + phrase1);
this.configFile = new File(getDataFolder(), "config.yml");
config = YamlConfiguration.loadConfiguration(this.configFile);
try
{
config.save(this.configFile);
System.out.println(this.prefix + "Configuration crée avec succèe");
}
catch (IOException e)
{
System.out.println(this.prefix + "Erreur pendant la création de la configuration" + e);
}
getCommand("setspawn").setExecutor(new SetSpawnCmd(this));
// Commande pour définir le point de spawn
getCommand("spawn").setExecutor(new SpawnCmd(this));
//Commande pour se tp au point de spawn
}
@Override
public void onDisable() {
System.out.println(prefix + phrase2);
}
public void Teleport(Location spawn, Player p)
{
this.cooldowns.put(p.getName(), Long.valueOf(System.currentTimeMillis()));
boolean msge = getConfig().getBoolean("ConfigSpawn.Teleport_Message.Enabled");
String msg = getConfig().getString("ConfigSpawn.Teleport_Message.Message");
if (msge) {
p.sendMessage(msg.replaceAll("(&([a-f0-9]))", "§$2"));
}
p.teleport(spawn);
}
public void dTeleport(final Location spawn, final Player p)
{
int delays = getConfig().getInt("ConfigSpawn.Teleport_Delay.Delay");
p.sendMessage(ChatColor.GRAY + "Téléportation dans " + delays + " Second(s)...");
getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable()
{
public void run()
{
Launch.this.Teleport(spawn, p);
}
}, 20 * delays);
}
}
Vous allez avoir 2 erreur sur SetSpawnCmd et SpawnCmd ceci est tout a fait normal car nous n'avons pas encore remplie les class.
Nous allons passe a la class Config

Code:
package TutoRG.Spawn.Launch;
public class Config {
public static void setConfig() {
if (!Launch.config.contains("ConfigSpawn.Teleport_Message.Enabled")) {
Launch.config.set("ConfigSpawn.Teleport_Message.Enabled", Boolean.valueOf(true));
}
if (!Launch.config.contains("ConfigSpawn.Teleport_Message.Message")) {
Launch.config.set("ConfigSpawn.Teleport_Message.Message", "&aTéléporter au spawn");
}
if (!Launch.config.contains("ConfigSpawn.Cooldown.Enabled")) {
Launch.config.set("ConfigSpawn.Cooldown.Enabled", Boolean.valueOf(true));
}
if (!Launch.config.contains("ConfigSpawn.Cooldown.Cooldown")) {
Launch.config.set("ConfigSpawn.Cooldown.Cooldown", Integer.valueOf(60));
}
if (!Launch.config.contains("ConfigSpawn.Teleport_Delay.Enabled")) {
Launch.config.set("ConfigSpawn.Teleport_Delay.Enabled", Boolean.valueOf(true));
}
if (!Launch.config.contains("ConfigSpawn.Teleport_Delay.Delay")) {
Launch.config.set("ConfigSpawn.Teleport_Delay.Delay", Integer.valueOf(5));
}
if (!Launch.config.contains("ConfigSpawn.NewPlayerSpawn")) {
Launch.config.set("ConfigSpawn.NewPlayerSpawn", Boolean.valueOf(false));
}
if (!Launch.config.contains("ConfigSpawn.MultiWorldSpawns")) {
Launch.config.set("ConfigSpawn.MultiWorldSpawns", Boolean.valueOf(false));
}
}
}
Maintenant nous allons aller dans la class SetSpawnCmd

Code:
package TutoRG.Spawn.Cmd;
import TutoRG.Spawn.Launch.Launch;
import java.util.Set;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class SetSpawnCmd implements CommandExecutor {
Launch main;
public SetSpawnCmd(Launch plugin) {
this.main = plugin;
}
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (sender.getName() == "CONSOLE")
{
System.out.println("Vous ne pouvez pas executer cette commande depuis la console !");
return true;
}
Player p = (Player)sender;
String noPerm = ChatColor.DARK_RED + "Vous n'avez pas la permission !";
if (p.hasPermission("TutoRG.SetSpawn")) {
if (this.main.getConfig().getBoolean("ConfigSpawn.MultiWorldSpawns")) {
String world = p.getWorld().getName();
String location = p.getLocation().getBlockX() + ", " + p.getLocation().getBlockY() + ", " + p.getLocation().getBlockZ();
Float pitch = Float.valueOf(p.getLocation().getPitch());
Float yaw = Float.valueOf(p.getLocation().getYaw());
if (this.main.getConfig().contains("ConfigSpawn.Spawns." + world)) {
p.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.GOLD + "TutoRG Spawn" + ChatColor.DARK_GRAY + "]" + ChatColor.GREEN + " Point de spawn déplacer dans le monde '" + ChatColor.GOLD + world + ChatColor.GOLD + "'");
} else {
p.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.GOLD + "TutoRG Spawn" + ChatColor.DARK_GRAY + "]" + ChatColor.GREEN + " Point de spawn définie dans le monde '" + ChatColor.GOLD + world + ChatColor.GOLD + "'");
}
this.main.getConfig().set("ConfigSpawn.Spawns." + world + ".location", location);
this.main.getConfig().set("ConfigSpawn.Spawns." + world + ".pitch", pitch);
this.main.getConfig().set("ConfigSpawn.Spawns." + world + ".yaw", yaw);
this.main.saveConfig();
}
else if (this.main.getConfig().contains("ConfigSpawn.Spawns"))
{
Set spawns = this.main.getConfig().getConfigurationSection("ConfigSpawn.Spawns").getKeys(false);
String spawnsstr = spawns.toString().replace("[", "").replace("]", "");
String[] str = spawnsstr.split(", ");
String world = str[0];
String location = p.getLocation().getBlockX() + ", " + p.getLocation().getBlockY() + ", " + p.getLocation().getBlockZ();
Float pitch = Float.valueOf(p.getLocation().getPitch());
Float yaw = Float.valueOf(p.getLocation().getYaw());
if (this.main.getConfig().contains("ConfigSpawn.Spawns." + world)) {
p.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.GOLD + "TutoRG Spawn" + ChatColor.DARK_GRAY + "]" + ChatColor.GREEN + " Point de spawn déplacer dans le monde '" + ChatColor.GOLD + world + ChatColor.GOLD + "'");
} else {
p.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.GOLD + "TutoRG Spawn" + ChatColor.DARK_GRAY + "]" + ChatColor.GREEN + " Point de spawn définie dans le monde '" + ChatColor.GOLD + world + ChatColor.GOLD + "'");
}
this.main.getConfig().set("ConfigSpawn.Spawns." + world + ".location", location);
this.main.getConfig().set("ConfigSpawn.Spawns." + world + ".pitch", pitch);
this.main.getConfig().set("ConfigSpawn.Spawns." + world + ".yaw", yaw);
this.main.saveConfig();
}
else
{
String world = p.getWorld().getName();
String location = p.getLocation().getBlockX() + ", " + p.getLocation().getBlockY() + ", " + p.getLocation().getBlockZ();
Float pitch = Float.valueOf(p.getLocation().getPitch());
Float yaw = Float.valueOf(p.getLocation().getYaw());
if (this.main.getConfig().contains("ConfigSpawn.Spawns." + world)) {
p.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.GOLD + "TutoRG Spawn" + ChatColor.DARK_GRAY + "]" + ChatColor.GREEN + " Point de spawn déplacer dans le monde '" + ChatColor.GOLD + world + ChatColor.GOLD + "'");
} else {
p.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.GOLD + "TutoRG Spawn" + ChatColor.DARK_GRAY + "]" + ChatColor.GREEN + " Point de spawn définie dans le monde '" + ChatColor.GOLD + world + ChatColor.GOLD + "'");
}
this.main.getConfig().set("ConfigSpawn.Spawns." + world + ".location", location);
this.main.getConfig().set("ConfigSpawn.Spawns." + world + ".pitch", pitch);
this.main.getConfig().set("ConfigSpawn.Spawns." + world + ".yaw", yaw);
this.main.saveConfig();
}
}
else {
p.sendMessage(noPerm);
}
return true;
}
}
Une fois cette class terminé nous allons passer a la class SpawnCmd

Code:
package TutoRG.Spawn.Cmd;
import TutoRG.Spawn.Launch.Launch;
import java.util.Set;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class SpawnCmd
implements CommandExecutor
{
Launch main;
public SpawnCmd(Launch plugin)
{
this.main = plugin;
}
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
{
if (sender.getName() == "CONSOLE")
{
System.out.println("Vous ne pouvez pas executer cette commande depuis la console !");
return true;
}
Player p = (Player)sender;
String noPerm = ChatColor.DARK_RED + "Vous n'avez pas la permission !";
if (p.hasPermission("TutoRG.SpawnTp"))
{
boolean delay = this.main.getConfig().getBoolean("ConfigSpawn.plugin.Teleport_Delay.Enabled");
boolean cooldown = this.main.getConfig().getBoolean("ConfigSpawn.Cooldown.Enabled");
boolean multiworld = this.main.getConfig().getBoolean("ConfigSpawn.MultiWorldSpawns");
if (cooldown)
{
int cooldownTime = this.main.getConfig().getInt("ConfigSpawn.Cooldown.Cooldown");
if ((!p.hasPermission("TutoRG.SpawnTp.cooldown.bypass")) &&
(this.main.cooldowns.containsKey(sender.getName())))
{
long secondsLeft = ((Long)this.main.cooldowns.get(sender.getName())).longValue() / 1000L + cooldownTime - System.currentTimeMillis() / 1000L;
if (secondsLeft > 0L)
{
sender.sendMessage("Vous ne pouvez pas utiliser cette commande pendant " + secondsLeft + " second(s)!");
return true;
}
}
this.main.cooldowns.put(sender.getName(), Long.valueOf(System.currentTimeMillis()));
}
if ((delay) && (!p.hasPermission("TutoRG.SpawnTp.delay.bypass")))
{
if (multiworld)
{
if (this.main.getConfig().contains("ConfigSpawn.Spawns." + p.getWorld().getName())) {
this.main.dTeleport(getSpawnLocation(p.getWorld()), p);
} else {
p.sendMessage(ChatColor.RED + "Aucun point de spawn dans ce monde !");
}
}
else if (this.main.getConfig().contains("ConfigSpawn.Spawns"))
{
Set spawns = this.main.getConfig().getConfigurationSection("ConfigSpawn.Spawns").getKeys(false);
String spawnsstr = spawns.toString().replace("[", "").replace("]", "");
String[] str = spawnsstr.split(", ");
this.main.dTeleport(getSpawnLocation(this.main.getServer().getWorld(str[0])), p);
p.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.GOLD + "TutoRG Spawn" + ChatColor.DARK_GRAY + "]" + ChatColor.GREEN + " Vous avez était téléporter au spawn !");
}
else
{
p.sendMessage(ChatColor.RED + "Aucun point de spawn !");
}
}
else if (multiworld)
{
if (this.main.getConfig().contains("ConfigSpawn.Spawns." + p.getWorld().getName())) {
this.main.Teleport(getSpawnLocation(p.getWorld()), p);
} else {
p.sendMessage(ChatColor.RED + "Aucun point de spawn dans ce monde !");
}
}
else if (this.main.getConfig().contains("ConfigSpawn.Spawns"))
{
Set spawns = this.main.getConfig().getConfigurationSection("ConfigSpawn.Spawns").getKeys(false);
String spawnsstr = spawns.toString().replace("[", "").replace("]", "");
String[] str = spawnsstr.split(", ");
this.main.Teleport(getSpawnLocation(this.main.getServer().getWorld(str[0])), p);
p.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.GOLD + "TutoRG Spawn" + ChatColor.DARK_GRAY + "]" + ChatColor.GREEN + " Vous avez était téléporter au spawn !");
}
else
{
p.sendMessage(ChatColor.RED + "Aucun point de spawn !");
}
}
else
{
p.sendMessage(noPerm);
}
return true;
}
public Location getSpawnLocation(World w)
{
boolean multiworld = this.main.getConfig().getBoolean("ConfigSpawn.MultiWorldSpawns");
String worldName = "";
if (multiworld)
{
worldName = w.getName();
}
else
{
Set spawns = this.main.getConfig().getConfigurationSection("ConfigSpawn.Spawns").getKeys(false);
String spawnsstr = spawns.toString().replace("[", "").replace("]", "");
String[] str = spawnsstr.split(", ");
worldName = str[0];
}
String loc = this.main.getConfig().getString("ConfigSpawn.Spawns." + worldName + ".location");
Float pitch = Float.valueOf(Float.parseFloat(this.main.getConfig().getString("ConfigSpawn.Spawns." + worldName + ".pitch")));
Float yaw = Float.valueOf(Float.parseFloat(this.main.getConfig().getString("ConfigSpawn.Spawns." + worldName + ".yaw")));
String[] xyz = loc.split(", ");
Location SpawnLoc = new Location(w, Integer.parseInt(xyz[0]), Integer.parseInt(xyz[1]), Integer.parseInt(xyz[2]));
SpawnLoc.setPitch(pitch.floatValue());
SpawnLoc.setYaw(yaw.floatValue());
SpawnLoc.add(0.5D, 0.0D, 0.5D);
return SpawnLoc;
}
}
Nous avons terminé de coder le plugin maintenant nous allons crée le plugin.yml
Pour cela fait clique droit sur le projet:
New => File

Puis cliquer sur finish
Maintenant ouvrer le plugin.yml est mettez ceci a l'interieur
Code:
name: TutoRGSpawn
version: 1.0
author: faragnight18
main: TutoRG.Spawn.Launch.Launch
commands:
setspawn:
description: Definie le point de spawn
usage: /<command>
spawn:
description: Teleporte le joueur au point de spawn
usage: /<command>
Enregistrer le fichier puis fermer le est faite F5 pour refraichir Eclispe.
Nous allons exporter le plugin pour pouvoir l'utiliser.
Fait clique droit sur le projet puis:
Export => Jar File

=> vous selectionner ou vous voulez mettre le plugin pour moi il sera sur mon bureau => finish

Mettez le plugin dans votre serveur est lancer le !
Rendez vous dans minecraft pour tester le plugin.




Voila j'espère que mon tutoriel vous aura plus
Désoler pour mes fautes d'orthographe
Bonne journée a tous
Dernière édition: