Bonjour,
Plusieurs problèmes avec ton code actuel, sans compter le fait que ce sont des captures d'écran et que donc je suis obligé de le recopier à la main ;
Java:
ProxiedPlayer p = (ProxiedPlayer) sender;
Ta commande ne fonctionnera pas si l'exécuteur n'est pas un joueur, or ta commande est censée devoir marcher sur la console.
Java:
Configuration file = Main.Instance().getFile("banliste");
- Préfère nommer ta classe principale d'un plugin « Foo »
FooPlugin
ou équivalant, parce que si tu veux utiliser un autre plugin qui a aussi appelé sa classe principale Main
bah tu seras obligé d'écrire truc.machine.bidule.Main
pour l'utiliser.
- Les fonctions en Java s'écrivent en camalCase, donc
FooPlugin.instance()
au lieu de FooPlugin.Instance()
.
- Les fichiers doivent avoir des extensions, donc
"banlist.yml"
.
- Ta variable n'est pas un fichier mais une configuration, donc
config
au lieu de file
comme nom.
Java:
"/tempban [Joueur] [Temps] [Unité] [Raison]"
La convention dans Minecraft est d'indiquer les paramètres entre chevrons et de rajouter en plus des crochets si ceux-ci sont optionnels ; de plus tout est en minuscules :
Java:
"/tempban <joueur> <durée> [<raison>]"
Java:
String arg1 = args[0];
UUID uuid = UUID.nameUUIDFromBytes("...");
Désolé mais
args[0]
qui s'appelle
arg1
c'est un peu chelou, de plus ta commande ne fonctionnera pas en
online-mode=true
. Utilise Bukkit :
Java:
OfflinePlayer toBan = Bukkit.getOfflinePlayer(args[0]);
if(!toBan.hasPlayedBefore()) {
// le joueur ne s'est jamais connecté sur le serveur
}
Ensuite, toujours dans le premier screenshot :
Java:
Integer nb = Integer.parseInt(args[1] /* temps */);
if(args[2] /* unité */.equals("s")) {
config.set("blablabla", nb + System.currentTimeMillis()));
}
Second screenshot :
Java:
if(System.currentTimeMillis() > config.get("blablabla")) { ... }
Aucun langage de programmation ne va s'amuser à convertir des secondes en millisecondes dans une addition de nombres sans unité, donc oui tu rentres toujours dans la condition parce que ton bannissement est mille fois plus cours que la durée que tu as mise dans la commande.
De plus la commande crashera si jamais le joueur n'entre pas un nombre entier, et un joueur peut entrer un nombre négatif.
Ensuite dans ton code tu t'amuses à accéder directement à ton fichier de configuration ; créer une classe dédiée :
Java:
public class BanEntry {
private final Configuration config;
public BanEntry(Configuration config) {
this.config = config;
}
public Blabla getBlabla() {
this.config.get("blabla");
}
public void setBlabla(Blabla blabla) {
this.config.set("blabla", blabla);
}
}
Comme ça ton code ressemblera à
Java:
BanEntry entry = ...;
if(myBlabla == entry.getBlabla()) { ... }
Comme ça si un jour tu veux stocker les données sur une base de données, tu auras juste à modifier
getBlabla()
et
setBlabla()
dans un seul fichier, au lieu de modifier absolument tout ton code source en espérant ne pas avoir oublié un endroit.
Par contre j'avais déjà répondu à ta question il y a quatre mois ?
https://minecraft.fr/forum/threads/plugin-bans-temporaire.269258/post-1840705
Cordialement,
ShE3py