fix(economy): resolve startup NPE on Essentials currency format and dynamic validation
This commit is contained in:
@@ -2,6 +2,7 @@ package fr.luc.gamingcore.command;
|
||||
|
||||
import fr.luc.bettermccommands.BetterMcCommands;
|
||||
import fr.luc.bettermccommands.argument.Arguments;
|
||||
import fr.luc.bettermccommands.validation.ValidationResult;
|
||||
import fr.luc.gamingcore.Main;
|
||||
import fr.luc.gamingcore.manager.GuildManager;
|
||||
import fr.luc.gamingcore.manager.GuildResult;
|
||||
@@ -90,21 +91,39 @@ public class GuildCommands {
|
||||
.argument(Arguments.string("nom").description("Nom de la guilde (3-16 car)"))
|
||||
.argument(Arguments.string("tag").optional().description("Tag court (ex: LEG)"))
|
||||
|
||||
// Validations déclaratives
|
||||
.validate(context -> !guildManager.isInGuild(context.getPlayer().getUniqueId()),
|
||||
msg.get("guild.already_in_guild"))
|
||||
.validate(context -> GUILD_NAME_PATTERN.matcher(context.getString("nom")).matches(),
|
||||
msg.get("guild.invalid_name"))
|
||||
.validate(context -> guildManager.getGuildByName(context.getString("nom")) == null,
|
||||
msg.get("guild.name_taken", "{guild}", ""))
|
||||
// Validations dynamiques
|
||||
.validate(context -> {
|
||||
if (guildManager.isInGuild(context.getPlayer().getUniqueId())) {
|
||||
return ValidationResult.invalid(msg.get("guild.already_in_guild"));
|
||||
}
|
||||
return ValidationResult.valid();
|
||||
})
|
||||
.validate(context -> {
|
||||
String name = context.getString("nom");
|
||||
if (!GUILD_NAME_PATTERN.matcher(name).matches()) {
|
||||
return ValidationResult.invalid(msg.get("guild.invalid_name"));
|
||||
}
|
||||
if (guildManager.getGuildByName(name) != null) {
|
||||
return ValidationResult.invalid(msg.get("guild.name_taken", "{guild}", name));
|
||||
}
|
||||
return ValidationResult.valid();
|
||||
})
|
||||
.validate(context -> {
|
||||
Chunk chunk = context.getPlayer().getLocation().getChunk();
|
||||
return !guildManager.isChunkClaimed(chunk.getWorld().getName(), chunk.getX(), chunk.getZ());
|
||||
}, msg.get("guild.creation.chunk_already_claimed"))
|
||||
.validate(context -> guildManager.getEconomyManager().has(context.getPlayer(), creationCost),
|
||||
msg.get("guild.creation.insufficient_funds", "{cost}", guildManager.getEconomyManager().format(creationCost)))
|
||||
if (guildManager.isChunkClaimed(chunk.getWorld().getName(), chunk.getX(), chunk.getZ())) {
|
||||
return ValidationResult.invalid(msg.get("guild.creation.chunk_already_claimed"));
|
||||
}
|
||||
return ValidationResult.valid();
|
||||
})
|
||||
.validate(context -> {
|
||||
if (!guildManager.getEconomyManager().has(context.getPlayer(), creationCost)) {
|
||||
return ValidationResult.invalid(msg.get("guild.creation.insufficient_funds",
|
||||
"{cost}", guildManager.getEconomyManager().format(creationCost)));
|
||||
}
|
||||
return ValidationResult.valid();
|
||||
})
|
||||
|
||||
// Confirmation avec détails du claim et du coût
|
||||
// Confirmation préalable avec rappel
|
||||
.requireConfirmation(Duration.ofSeconds(20))
|
||||
|
||||
.executes(context -> {
|
||||
|
||||
@@ -112,7 +112,11 @@ public class EconomyManager {
|
||||
*/
|
||||
public String format(double amount) {
|
||||
if (isAvailable()) {
|
||||
return plugin.getEconomy().format(amount);
|
||||
try {
|
||||
return plugin.getEconomy().format(amount);
|
||||
} catch (Throwable ignored) {
|
||||
// Fallback si le provider d'économie (ex: EssentialsX) n'est pas encore initialisé
|
||||
}
|
||||
}
|
||||
return numberFormat.format(amount) + " $";
|
||||
}
|
||||
|
||||
@@ -9,3 +9,5 @@ depend:
|
||||
- Vault
|
||||
softdepend:
|
||||
- WorldEdit
|
||||
- Essentials
|
||||
- EssentialsX
|
||||
|
||||
Reference in New Issue
Block a user