Bonsoir,
Si tu veux récupérer le résultat d'un calcul sous forme de
String
, tu peux aussi passer par l'API de scripting :
Java:
public class ScriptEngines {
private static final ScriptEngineManager MANAGER = new ScriptEngineManager();
public static ScriptEngine create() {
ScriptEngine engine = MANAGER.getEngineByName("JavaScript");
if(engine == null)
throw new UnsupportedOperationException("JavaScript is not supported");
return engine;
}
}
public class Foo {
public static void bar() {
ScriptEngine js = ScriptEngines.create();
String expr = "(2 + 4) * 2";
// TODO: si 'expr' est donné par le joueur,
// vérifier qu'il ne peut pas faire exécuter du code sur
// le serveur (à voir si c'est possible),
// avec une expression régulière par ex.
try {
int result = ((Number) js.eval(expr)).intValue();
// result = 12
}
catch(ScriptException | ClassCastException | NullPointerException e) {
// ScriptException: 'expr' n'est pas une expression valide (ex: « 1 + »)
// ClassCastException: 'expr' n'est pas un nombre (ex: « abc »)
// NullPointerException: 'expr' ne renvoie rien (ex: « print("hmmm") »)
e.printStackTrace();
}
}
}
Pour lire le nombre que le joueur a dit :
Java:
@EventHandler
public void onPlayerChat(AsyncPlayerChatEvent e) {
String message = e.getMessage();
int nb;
try {
nb = Integer.parseInt(message);
}
catch(NumberFormatException ignored) {
return; // 'message' n'est pas un nombre entier
}
// faire qqch avec 'nb'
}
Après si tu veux avoir des nombres décimaux, passe par des floats/doubles, mais du coup tu ne peux plus comparer avec
==
parce que sinon tu auras quelques petites erreurs, du type
0.1 + 0.2 == 0.30000000000000004 (!= 0.3)
.
Et sinon pour associer une valeur à un joueur, ne passe pas par une
Map<Player, T>
mais par une
Map<UUID, T>
, la première ne supporte pas les reconnexion.
Tu peux éventuellement passer par une
WeakHashMap<Player, T>
, mais bon elle ne supporte toujours pas les reconnexions, et faut comprendre ce qu'est une
WeakReference<T>, et pourquoi elles doivent être utilisées dans ce cas.
Cordialement,
ShE3py.