[Présentation] Mes Plugins

Bearless_

Aventurier
24 Septembre 2023
13
0
1
18
Bien le Bonjour

Je suis un petit Développeur qui débute et je viens ici vous présentez mes plugins que j'ai réalisé entièrement seuls afin d'avoir des retours et de m'améliorer.

Mon Profil SpigotMC est: https://www.spigotmc.org/resources/authors/bearless.1881313/
Mon Github est: https://github.com/BearlessDev
Mon Discord de Support est: https://discord.gg/Y2gaXtdrG9

J'ai (pour le moment) fait 2 Plugin:

  • SuperSimpleFly: Il permet comme son nom l'indique de Simplement d'implémenté le Fly dans votre Monde/Lobby et de modifier comme bon vous semble tout les Messages/Permissions.
  • LobbyManager: il permet de Désactivé/Activé des fonctionnalités afin de simplement gérer votre Lobby, vous pouvez modifier les messages et permissions, désactivé/activé le spawn d'entité, le changement de météo, d'heures etc...
Voila je voulais juste vous partagez mes travaux afin de pouvoir m'améliorez dans la création de plugin Minecraft.

Cordialement,
Bearless_
 
Dernière édition:

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 404
190
487
247
21
Mìlhüsa
Bonjour,

Je vais reprendre un peu ce qu'a dit Detobel car a priori tu n'as pas vu ;
(diff) https://github.com/BearlessDev/LobbyManager/compare/f7b9a7c7bd13bef22bed33e113a8e697dcbd9ca3...main

Java:
if(plugin.getConfig().getBoolean("server.disable_default_quit_message")){
    e.setQuitMessage(plugin.getConfig().getString("server.custom_quit_message").replace("&", "§").replaceAll("%player%", player.getName()));
}

Le code n'est pas correct ; tu vas remplacer incorrectement des textes comme
%player% a quitté le lobby d'Adam & Eve !
par
%appdata% a quitté le lobby d'Adam § Eve !
Utilise ChatColor#translateAlternateColorCodes(char, String) pour vérifier qu'il s'agisse bien d'une esperluette de couleur.

De plus, je trouve que c'est mieux cognitivement de cacher l'implémentation :
Java:
if(plugin.hasCustomQuitMessage()) {
    e.setQuitMessage(plugin.getCustomQuitMessage(player));
}
Java:
// Main extends JavaPlugin
public String getCustomQuitMessage(Player p) {
    return ChatColor.translateAlternateColorCodes('&', this.getConfig().getString("server.custom_quit_message")).replaceAll("%player%", p.getDisplayName());
}
Car ce n'est pas à l'@EventHandler de se soucier d'où est stockée la configuration.

Java:
String world = plugin.getConfig().getString("world.spawn_world_name");
Double spawnX = plugin.getConfig().getDouble("world.spawn_X");
Double spawnY = plugin.getConfig().getDouble("world.spawn_Y");
Double spawnZ = plugin.getConfig().getDouble("world.spawn_Z");
int spawnYaw = plugin.getConfig().getInt("world.spawn_Yaw");
int spawnPitch = plugin.getConfig().getInt("world.spawn_Pitch");
Location loc = new Location(Bukkit.getWorld(world), spawnX, spawnY, spawnZ, spawnYaw, spawnPitch);
Tu peux simplement faire Location spawn = plugin.getConfig().getLocation("world.spawn");.

Java:
public class spawnCmd implements CommandExecutor {
    private Main plugin;
Par convention les classes s'écrivent en CamelCase (SpawnCmd), et comme tu as a priori l'autocomplétion pas besoin de compresser les noms (SpawnCommand) vu que dans tous les cas tu auras juste à écrire les premières lettres, ça sera plus lisible.

Et je sais que dans énormément de ressources en ligne ils appellent la classe principale du plugin Main, mais ça ne veut rien dire ; préfère mettre le nom du plugin (LobbyManager).


Tu as fait ton plugin avec IntelliJ, cela force les gens à utiliser IntelliJ pour modifier ton plugin. L'on .gitignore généralement les dossiers de l'IDE (*.iml, idea/) et l'on gère les dépendances et la création du .jar avec Maven.

Cordialement,
ShE3py
 

Bearless_

Aventurier
24 Septembre 2023
13
0
1
18
Bonjour,

Je vais reprendre un peu ce qu'a dit Detobel car a priori tu n'as pas vu ;
(diff) https://github.com/BearlessDev/LobbyManager/compare/f7b9a7c7bd13bef22bed33e113a8e697dcbd9ca3...main

Java:
if(plugin.getConfig().getBoolean("server.disable_default_quit_message")){
    e.setQuitMessage(plugin.getConfig().getString("server.custom_quit_message").replace("&", "§").replaceAll("%player%", player.getName()));
}

Le code n'est pas correct ; tu vas remplacer incorrectement des textes comme

par

Utilise ChatColor#translateAlternateColorCodes(char, String) pour vérifier qu'il s'agisse bien d'une esperluette de couleur.

De plus, je trouve que c'est mieux cognitivement de cacher l'implémentation :
Java:
if(plugin.hasCustomQuitMessage()) {
    e.setQuitMessage(plugin.getCustomQuitMessage(player));
}
Java:
// Main extends JavaPlugin
public String getCustomQuitMessage(Player p) {
    return ChatColor.translateAlternateColorCodes('&', this.getConfig().getString("server.custom_quit_message")).replaceAll("%player%", p.getDisplayName());
}
Car ce n'est pas à l'@EventHandler de se soucier d'où est stockée la configuration.

Java:
String world = plugin.getConfig().getString("world.spawn_world_name");
Double spawnX = plugin.getConfig().getDouble("world.spawn_X");
Double spawnY = plugin.getConfig().getDouble("world.spawn_Y");
Double spawnZ = plugin.getConfig().getDouble("world.spawn_Z");
int spawnYaw = plugin.getConfig().getInt("world.spawn_Yaw");
int spawnPitch = plugin.getConfig().getInt("world.spawn_Pitch");
Location loc = new Location(Bukkit.getWorld(world), spawnX, spawnY, spawnZ, spawnYaw, spawnPitch);
Tu peux simplement faire Location spawn = plugin.getConfig().getLocation("world.spawn");.

Java:
public class spawnCmd implements CommandExecutor {
    private Main plugin;
Par convention les classes s'écrivent en CamelCase (SpawnCmd), et comme tu as a priori l'autocomplétion pas besoin de compresser les noms (SpawnCommand) vu que dans tous les cas tu auras juste à écrire les premières lettres, ça sera plus lisible.

Et je sais que dans énormément de ressources en ligne ils appellent la classe principale du plugin Main, mais ça ne veut rien dire ; préfère mettre le nom du plugin (LobbyManager).


Tu as fait ton plugin avec IntelliJ, cela force les gens à utiliser IntelliJ pour modifier ton plugin. L'on .gitignore généralement les dossiers de l'IDE (*.iml, idea/) et l'on gère les dépendances et la création du .jar avec Maven.

Cordialement,
ShE3py
Merci pour t'es réponses, en faite je ne suis pas un expert en Java je fait sa par plaisir et comme passe temps, mais je reste bien évidement sérieux dans ce que je fait.

Ensuite ici:
Java:
if(plugin.hasCustomQuitMessage()) {
    e.setQuitMessage(plugin.getCustomQuitMessage(player));
}
Java:
// Main extends JavaPlugin
public String getCustomQuitMessage(Player p) {
    return ChatColor.translateAlternateColorCodes('&', this.getConfig().getString("server.custom_quit_message")).replaceAll("%player%", p.getDisplayName());
}
Si je fait sa je dois le faire pour tout les message, permission, boolean ?

Ensuite pour là:
Location spawn = plugin.getConfig().getLocation("world.spawn");
Je n'arrive pas à comprendre comment je le place dans la config, en faite comment juste avec sa il va trouver le x, y, z etc... comment je le set dans le config.yml ?

Ensuite pour le nom des class mes Events sont comme sa mais pas mes commandes jsp pas pourquoi j'avais jamais remarquer mais merci :).

Pour le nom de la class Principale je l'ai toujours appelé comme sa, j'y suis habitué c'est comme sa que je la retrouve facilement, donc je continuerais de l'appelé comme sa, par pure habitude et pour évité de me perdre.

Et enfin pour le compiler vu que je ne sais pas comment fonctionne maven (J'ai déjà essayé mais en vain), je préfère faire avec celui de base de Intelijj, et puis dans mes plugins je ne fait pas d'api spécifique donc je vois pas pourquoi des gens aurait besoin de modifier eux même mon plugin, je changerais peut être pour Maven quand je m'y connaitrais plus en Dev de plugin et que sa me seras plus utile.

En tout cas merci de ta réponse, je vais essayé d'appliquer certaine de tes correction.

Cordialement,
Bearless_