Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 4 additions & 7 deletions src/main/java/fr/antidino/smp/CorePlugin.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package fr.antidino.smp;

import fr.antidino.smp.core.listeners.*;
import fr.antidino.smp.core.manager.MessageManager;
import fr.antidino.smp.core.manager.SlotExpander;
import fr.antidino.smp.core.manager.SlotManager;
import fr.antidino.smp.core.manager.codex.CodexListener;
Expand All @@ -20,9 +21,6 @@
import org.bukkit.NamespacedKey;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
Expand All @@ -32,6 +30,7 @@ public final class CorePlugin extends JavaPlugin {
public PerkManager perkManager;
public SlotManager slotManager;
public ConfigPerkManager configPerkManager;
public MessageManager messageManager;
public CodexMenu codexMenu;
public PerkTasks perkTasks;
public SlotExpander slotExpander;
Expand All @@ -42,6 +41,7 @@ public final class CorePlugin extends JavaPlugin {
public void onEnable() {
configPerkManager = new ConfigPerkManager(this);
initConfig();
messageManager = new MessageManager(this);

getServer().getPluginManager().registerEvents(new CraftingListener(this), this);
getServer().getPluginManager().registerEvents(new SmithingListener(this), this);
Expand Down Expand Up @@ -100,10 +100,7 @@ public int fullReload() {
}
return perkManager.getPerks().size();
}
public void reloadAllConfig() {
this.reloadConfig();
configPerkManager.ReloadConfig();
}

@Override
public void onDisable() {
if (perkTasks != null) {
Expand Down
58 changes: 34 additions & 24 deletions src/main/java/fr/antidino/smp/core/commands/AdminCommands.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import fr.antidino.smp.CorePlugin;
import fr.antidino.smp.core.SmithingRegisterAllItem;
import fr.antidino.smp.core.manager.MessageManager;
import fr.antidino.smp.core.manager.perk.AbstractPerk;
import fr.antidino.smp.librairie.ChatUtil;
import fr.antidino.smp.librairie.PDCBuilder;
Expand All @@ -19,53 +20,56 @@
import org.jetbrains.annotations.NotNull;
import org.jspecify.annotations.NonNull;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.*;

/**
* /perk reload : recharge config, perks et crafts
* /perk give <perk|slot_expander> [n] [niv] : donne un perk (niveau optionnel) ou l'item d'extension de slots
*/
public class AdminCommands implements CommandExecutor, TabCompleter {
private static final String EXPANDER_ID = "slot_expander";
MessageManager messageManager;
private final CorePlugin plugin;
public AdminCommands(CorePlugin plugin) {

this.plugin = plugin;
messageManager = plugin.messageManager;
}

@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String @NotNull [] args) {
if (args.length == 0) {
send(sender, "<gray>Usage : <yellow>/perk reload <gray>| <yellow>/perk give <perk|slot_expander> [nombre] [niveau]");
send(sender, messageManager.get("admin_command_usage"));
return true;
}
switch (args[0].toLowerCase(Locale.ROOT)) {
case "slot" -> slot(sender, args);

case "reload" -> {
int count = plugin.fullReload();
send(sender, "<green>Config rechargée : <white>" + count + " <green>perks, crafts et item de slots mis à jour.");
Map<String, String> vars = new HashMap<>();
vars.put("count", String.valueOf(count));
send(sender, messageManager.get("config_reloaded",vars));
}
case "give" -> give(sender, args);
default -> send(sender, "<red>Sous-commande inconnue. <gray>Essaie <yellow>/perk reload <gray>ou <yellow>/perk give");
default -> send(sender, messageManager.get("admin_command_usage"));
}
return true;
}
private void slot(CommandSender sender, String[] args) {
if (args.length < 2) {
send(sender, "<yellow><b>Usage : <b/>/perk slot [argument]");
send(sender, messageManager.get("slot_command_usage"));
return;
}
switch (args[1].toLowerCase(Locale.ROOT)) {
case "init" -> {
if (!(sender instanceof Player player)) {
send(sender, "<red>Only players can execute this command.");
send(sender, messageManager.get("player_only"));
break;
}
ItemStack item = player.getInventory().getItemInMainHand();
if (item.getType() == Material.AIR) {
send(sender, "<red>You must have an item in your hand!");
send(sender, messageManager.get("slot_item_in_hand"));
break;
}
if (!SmithingRegisterAllItem.getAllMaterials().contains(item.getType())) {
Expand All @@ -75,11 +79,11 @@ private void slot(CommandSender sender, String[] args) {
}
ItemStack updatedItem = plugin.pdcBuilder.initializeSlots(item);
player.getInventory().setItemInMainHand(updatedItem);
send(sender, "<green>Item successfully initialized!");
send(sender,messageManager.get("init_slot") );
}
case "apply" -> {
if (!(sender instanceof Player player)) {
send(sender, "<red>Only players can execute this command.");
send(sender, messageManager.get("player_only"));
break;
}

Expand All @@ -88,7 +92,7 @@ private void slot(CommandSender sender, String[] args) {


if (appliedItem.getType() == Material.AIR || perk.getType() == Material.AIR) {
send(sender, "<red>You must hold a perk in your main hand and an item in your off-hand!");
send(sender, messageManager.get("apply_perk_no_item"));
break;
}

Expand All @@ -102,7 +106,7 @@ private void slot(CommandSender sender, String[] args) {

ItemMeta perkMeta = perk.getItemMeta();
if (perkMeta == null || !perkMeta.getPersistentDataContainer().has(PDCBuilder.PERK_ID, PersistentDataType.STRING)) {
send(sender, "<red>The item in your main hand is not a valid perk!");
send(sender, messageManager.get("applied_perk_no_valid"));
break;
}

Expand All @@ -118,18 +122,17 @@ private void slot(CommandSender sender, String[] args) {
} else {
player.getInventory().setItemInMainHand(new ItemStack(Material.AIR));
}

send(sender, "<green>Perk successfully applied!");
send(sender, messageManager.get("applied_perk_success"));
}
}
}
private void give(CommandSender sender, String[] args) {
if (!(sender instanceof Player player)) {
send(sender, "<red>Commande réservée aux joueurs.");
send(sender, messageManager.get("player_only"));
return;
}
if (args.length < 2) {
send(sender, "<gray>Usage : <yellow>/perk give <perk|slot_expander> [nombre] [niveau]");
send(sender, messageManager.get("give_usage"));
return;
}

Expand All @@ -138,7 +141,9 @@ private void give(CommandSender sender, String[] args) {
try {
count = Math.clamp(Integer.parseInt(args[2]), 1, 64);
} catch (NumberFormatException e) {
send(sender, "<red>Nombre invalide : " + args[2]);
Map<String,String> vars = new HashMap<>();
vars.put("count", String.valueOf(args[2]));
send(sender,messageManager.get("give_invalid_number",vars));
return;
}
}
Expand All @@ -151,19 +156,25 @@ private void give(CommandSender sender, String[] args) {

AbstractPerk perk = plugin.perkManager.getPerk(args[1]);
if (perk == null) {
send(sender, "<red>Perk inconnu : " + args[1]);
Map<String,String> vars = new HashMap<>();
vars.put("count", String.valueOf(args[1]));
send(sender, messageManager.get("give_unknow_perk",vars));
return;
}
int level = 1;
if (args.length >= 4) {
try {
level = Integer.parseInt(args[3]);
} catch (NumberFormatException e) {
send(sender, "<red>Niveau invalide : " + args[3]);
Map<String,String> vars = new HashMap<>();
vars.put("count", String.valueOf(args[3]));
send(sender, messageManager.get("give_invalid_number",vars));
return;
}
if (level < 1 || level > perk.getMaxLevel()) {
send(sender, "<red>Niveau entre 1 et " + perk.getMaxLevel() + " pour ce perk.");
Map<String,String> vars = new HashMap<>();
vars.put("count", perk.getMaxLevel() + "");
send(sender,messageManager.get("give_invalid_level_amount",vars));
return;
}
}
Expand All @@ -172,9 +183,8 @@ private void give(CommandSender sender, String[] args) {
player.getInventory().addItem(item);
}
}

private void send(CommandSender sender, String message) {
sender.sendMessage(MiniMessage.miniMessage().deserialize(message));
private void send(CommandSender sender,Component message) {
sender.sendMessage(message);
}

@Override
Expand Down
5 changes: 2 additions & 3 deletions src/main/java/fr/antidino/smp/core/commands/PerksCommand.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package fr.antidino.smp.core.commands;

import fr.antidino.smp.CorePlugin;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
Expand All @@ -23,14 +22,14 @@ public PerksCommand(CorePlugin plugin) {
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
if (!(sender instanceof Player player)) {
sender.sendMessage("Commande réservée aux joueurs.");
sender.sendMessage(plugin.messageManager.get("player_only"));
return true;
}
if (args.length >= 1 && args[0].equalsIgnoreCase("codex")) {
plugin.codexMenu.openList(player, 0);
return true;
}
player.sendMessage(MiniMessage.miniMessage().deserialize("<gray>Usage : <yellow>/perks codex"));
player.sendMessage(plugin.messageManager.get("codex_usage"));
return true;
}

Expand Down
67 changes: 67 additions & 0 deletions src/main/java/fr/antidino/smp/core/manager/MessageManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
package fr.antidino.smp.core.manager;

import fr.antidino.smp.CorePlugin;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;

import java.util.HashMap;
import java.util.Map;

public class MessageManager {

private static final Logger log = LoggerFactory.getLogger(MessageManager.class);
private final CorePlugin plugin;
private final Map<String, String> cache = new HashMap<>();

public MessageManager(CorePlugin plugin) {
this.plugin = plugin;
reloadConfig();
}
public void reloadConfig() {
loadMessages(plugin.getConfig().getString("lang","fr_FR"));
}
public void loadMessages(String langCode) {
cache.clear();
File langFile = new File(plugin.getDataFolder(), "lang/" + langCode + ".yml");


if (!langFile.exists()) {
plugin.saveResource("lang/" + langCode + ".yml", false);
}

FileConfiguration config = YamlConfiguration.loadConfiguration(langFile);


for (String key : config.getKeys(true)) {
if (!config.isConfigurationSection(key)) {
String value = config.getString(key, "");
cache.put(key, value);
}
}
log.info("Loaded " + cache.size() + " messages.");
}


public Component get(String key, Map<String, String> replacements) {
String message = cache.getOrDefault(key, "<red>Message introuvable: " + key);

if (replacements != null) {
for (Map.Entry<String, String> entry : replacements.entrySet()) {
message = message.replace("%" + entry.getKey() + "%", entry.getValue());
}
}

return MiniMessage.miniMessage().deserialize(message);
}


public Component get(String key) {
return get(key, null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import fr.antidino.smp.CorePlugin;
import fr.antidino.smp.core.manager.perk.AbstractPerk;
import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
Expand Down Expand Up @@ -40,14 +39,16 @@ public void onClick(InventoryClickEvent event) {
case CodexMenu.BACK_SLOT: {
click(player);
plugin.codexMenu.openList(player, holder.page);
break;
}
case CodexMenu.GIVE_SLOT: {
click(player);
ItemStack result = plugin.codexMenu.result;
if (result == null || result.getType() == Material.AIR) return;
if (result.getItemMeta() == null) return;
player.getInventory().addItem(result);
player.sendMessage(MiniMessage.miniMessage().deserialize("<green>You Received 1 perk"));
player.sendMessage(plugin.messageManager.get("codex_give_success"));
break;
}
}
}
Expand Down
Loading
Loading