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.BetterMcCommands;
|
||||||
import fr.luc.bettermccommands.argument.Arguments;
|
import fr.luc.bettermccommands.argument.Arguments;
|
||||||
|
import fr.luc.bettermccommands.validation.ValidationResult;
|
||||||
import fr.luc.gamingcore.Main;
|
import fr.luc.gamingcore.Main;
|
||||||
import fr.luc.gamingcore.manager.GuildManager;
|
import fr.luc.gamingcore.manager.GuildManager;
|
||||||
import fr.luc.gamingcore.manager.GuildResult;
|
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("nom").description("Nom de la guilde (3-16 car)"))
|
||||||
.argument(Arguments.string("tag").optional().description("Tag court (ex: LEG)"))
|
.argument(Arguments.string("tag").optional().description("Tag court (ex: LEG)"))
|
||||||
|
|
||||||
// Validations déclaratives
|
// Validations dynamiques
|
||||||
.validate(context -> !guildManager.isInGuild(context.getPlayer().getUniqueId()),
|
.validate(context -> {
|
||||||
msg.get("guild.already_in_guild"))
|
if (guildManager.isInGuild(context.getPlayer().getUniqueId())) {
|
||||||
.validate(context -> GUILD_NAME_PATTERN.matcher(context.getString("nom")).matches(),
|
return ValidationResult.invalid(msg.get("guild.already_in_guild"));
|
||||||
msg.get("guild.invalid_name"))
|
}
|
||||||
.validate(context -> guildManager.getGuildByName(context.getString("nom")) == null,
|
return ValidationResult.valid();
|
||||||
msg.get("guild.name_taken", "{guild}", ""))
|
})
|
||||||
|
.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 -> {
|
.validate(context -> {
|
||||||
Chunk chunk = context.getPlayer().getLocation().getChunk();
|
Chunk chunk = context.getPlayer().getLocation().getChunk();
|
||||||
return !guildManager.isChunkClaimed(chunk.getWorld().getName(), chunk.getX(), chunk.getZ());
|
if (guildManager.isChunkClaimed(chunk.getWorld().getName(), chunk.getX(), chunk.getZ())) {
|
||||||
}, msg.get("guild.creation.chunk_already_claimed"))
|
return ValidationResult.invalid(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)))
|
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))
|
.requireConfirmation(Duration.ofSeconds(20))
|
||||||
|
|
||||||
.executes(context -> {
|
.executes(context -> {
|
||||||
|
|||||||
@@ -112,7 +112,11 @@ public class EconomyManager {
|
|||||||
*/
|
*/
|
||||||
public String format(double amount) {
|
public String format(double amount) {
|
||||||
if (isAvailable()) {
|
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) + " $";
|
return numberFormat.format(amount) + " $";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,3 +9,5 @@ depend:
|
|||||||
- Vault
|
- Vault
|
||||||
softdepend:
|
softdepend:
|
||||||
- WorldEdit
|
- WorldEdit
|
||||||
|
- Essentials
|
||||||
|
- EssentialsX
|
||||||
|
|||||||
Reference in New Issue
Block a user