From 2ba9aca5d107460de1d2a4c5d87f3d0f90521b7c Mon Sep 17 00:00:00 2001 From: aboreda12 Date: Sun, 7 Jun 2026 21:43:26 +0200 Subject: [PATCH 1/2] feat: Implement custom per-piece armor trim system - Added CustomArmorTrimData class to manage individual armor piece trims. - Introduced CustomTrimLocale for configuration entries related to armor trims. - Created CustomArmorTrimMenu for players to manage their armor trims. - Developed TrimPatternMenu and TrimMaterialMenu for selecting patterns and materials. - Updated SettingData to include custom armor trim data. - Enhanced Profile class to serialize and deserialize custom armor trim settings. - Modified ItemUtils to apply custom trims to armor pieces. - Updated CosmeticsManageMenu to link to the new custom armor trim menu. --- .../main/java/dev/lrxh/neptune/Neptune.java | 598 +++--- .../lrxh/neptune/configs/ConfigService.java | 153 +- .../neptune/configs/impl/CosmeticsLocale.java | 119 +- .../neptune/configs/impl/MenusLocale.java | 1777 +++++++++-------- .../configs/impl/handler/IDataAccessor.java | 288 +-- .../cosmetics/custom/CustomArmorTrimData.java | 143 ++ .../cosmetics/custom/CustomTrimLocale.java | 94 + .../cosmetics/menu/CosmeticsManageMenu.java | 4 +- .../custom/CustomArmorTrimMenu.java | 208 ++ .../armorTrims/custom/TrimMaterialMenu.java | 164 ++ .../armorTrims/custom/TrimPatternMenu.java | 177 ++ .../neptune/profile/data/SettingData.java | 2 + .../lrxh/neptune/profile/impl/Profile.java | 5 + .../dev/lrxh/neptune/utils/ItemUtils.java | 70 +- 14 files changed, 2385 insertions(+), 1417 deletions(-) create mode 100644 Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/custom/CustomArmorTrimData.java create mode 100644 Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/custom/CustomTrimLocale.java create mode 100644 Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/menu/armorTrims/custom/CustomArmorTrimMenu.java create mode 100644 Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/menu/armorTrims/custom/TrimMaterialMenu.java create mode 100644 Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/menu/armorTrims/custom/TrimPatternMenu.java diff --git a/Plugin/src/main/java/dev/lrxh/neptune/Neptune.java b/Plugin/src/main/java/dev/lrxh/neptune/Neptune.java index 084f37852..a8c2d5426 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/Neptune.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/Neptune.java @@ -1,265 +1,335 @@ -package dev.lrxh.neptune; - -import com.github.retrooper.packetevents.PacketEvents; -import com.github.retrooper.packetevents.event.PacketListenerPriority; -import com.jonahseguin.drink.CommandService; -import com.jonahseguin.drink.Drink; -import com.jonahseguin.drink.annotation.Text; -import com.jonahseguin.drink.provider.spigot.UUIDProvider; -import dev.lrxh.api.NeptuneAPI; -import dev.lrxh.api.NeptuneAPIImpl; -import dev.lrxh.blockChanger.BlockChanger; -import dev.lrxh.neptune.cache.Cache; -import dev.lrxh.neptune.commands.FollowCommand; -import dev.lrxh.neptune.commands.LeaveCommand; -import dev.lrxh.neptune.configs.ConfigService; -import dev.lrxh.neptune.configs.impl.ScoreboardLocale; -import dev.lrxh.neptune.configs.impl.SettingsLocale; -import dev.lrxh.neptune.feature.cosmetics.CosmeticService; -import dev.lrxh.neptune.feature.cosmetics.command.CosmeticsCommand; -import dev.lrxh.neptune.feature.customkit.command.CustomKitCommand; -import dev.lrxh.neptune.feature.customkit.listener.CustomKitListener; -import dev.lrxh.neptune.feature.divisions.DivisionService; -import dev.lrxh.neptune.feature.event.command.EventCommand; -import dev.lrxh.neptune.feature.event.listener.EventListener; -import dev.lrxh.neptune.feature.event.task.EventScheduleTask; -import dev.lrxh.neptune.feature.hotbar.HotbarService; -import dev.lrxh.neptune.feature.hotbar.listener.ItemListener; -import dev.lrxh.neptune.feature.itembrowser.ItemBrowserService; -import dev.lrxh.neptune.feature.leaderboard.LeaderboardService; -import dev.lrxh.neptune.feature.leaderboard.command.LeaderboardCommand; -import dev.lrxh.neptune.feature.leaderboard.task.LeaderboardTask; -import dev.lrxh.neptune.feature.party.command.PartyCommand; -import dev.lrxh.neptune.feature.queue.command.QueueCommand; -import dev.lrxh.neptune.feature.queue.command.QueueMenuCommand; -import dev.lrxh.neptune.feature.queue.command.QuickQueueCommand; -import dev.lrxh.neptune.feature.queue.tasks.QueueCheckTask; -import dev.lrxh.neptune.feature.queue.tasks.QueueMessageTask; -import dev.lrxh.neptune.feature.settings.Setting; -import dev.lrxh.neptune.feature.settings.command.SettingProvider; -import dev.lrxh.neptune.feature.settings.command.SettingsCommand; -import dev.lrxh.neptune.game.arena.Arena; -import dev.lrxh.neptune.game.arena.ArenaDuplicator; -import dev.lrxh.neptune.game.arena.ArenaService; -import dev.lrxh.neptune.game.arena.command.ArenaProvider; -import dev.lrxh.neptune.game.arena.listener.ArenaEditorChatListener; -import dev.lrxh.neptune.game.duel.command.DuelCommand; -import dev.lrxh.neptune.game.kit.Kit; -import dev.lrxh.neptune.game.kit.KitService; -import dev.lrxh.neptune.game.kit.command.KitEditorCommand; -import dev.lrxh.neptune.game.kit.command.KitProvider; -import dev.lrxh.neptune.game.kit.command.StatsCommand; -import dev.lrxh.neptune.game.kit.listener.KitEditorChatListener; -import dev.lrxh.neptune.game.kit.listener.KitEditorListener; -import dev.lrxh.neptune.game.match.MatchService; -import dev.lrxh.neptune.game.match.commands.MatchHistoryCommand; -import dev.lrxh.neptune.game.match.commands.SpectateCommand; -import dev.lrxh.neptune.game.match.listener.MatchListener; -import dev.lrxh.neptune.game.match.tasks.ArenaBoundaryCheckTask; -import dev.lrxh.neptune.main.MainCommand; -import dev.lrxh.neptune.profile.ProfileService; -import dev.lrxh.neptune.profile.listener.ProfileListener; -import dev.lrxh.neptune.providers.database.DatabaseService; -import dev.lrxh.neptune.providers.listeners.GlobalListener; -import dev.lrxh.neptune.providers.placeholder.PlaceholderImpl; -import dev.lrxh.neptune.scoreboard.ScoreboardAdapter; -import dev.lrxh.neptune.scoreboard.ScoreboardService; -import dev.lrxh.neptune.utils.GithubUtils; -import dev.lrxh.neptune.utils.ServerUtils; -import dev.lrxh.neptune.utils.menu.MenuListener; -import dev.lrxh.neptune.utils.menu.MenuRunnable; -import dev.lrxh.neptune.utils.sign.SignInputListener; -import dev.lrxh.neptune.utils.tasks.TaskScheduler; -import fr.mrmicky.fastboard.FastManager; -import lombok.Getter; -import lombok.Setter; -import org.bukkit.Difficulty; -import org.bukkit.GameRules; -import org.bukkit.World; -import org.bukkit.plugin.Plugin; -import org.bukkit.plugin.ServicePriority; -import org.bukkit.plugin.java.JavaPlugin; - -import java.util.Arrays; -import java.util.Optional; -import java.util.UUID; -import java.util.function.Consumer; - -@Getter -public final class Neptune extends JavaPlugin { - private static Neptune instance; - private Cache cache; - private boolean placeholder = false; - @Setter - private boolean allowMatches; - private boolean arenaGenerationDisabled; - private boolean duplicatesEnabled; - - private boolean errored; - - public static Neptune get() { - return instance; - } - - public void setErrored() { - errored = true; - } - - @Override - public void onEnable() { - instance = this; - allowMatches = false; - loadManager(); - initAPI(); - allowMatches = true; - } - - private void initAPI() { - getServer().getServicesManager().register( - NeptuneAPI.class, - new NeptuneAPIImpl(ProfileService.get(), MatchService.get(), KitService.get(), ScoreboardService.get(), - ArenaService.get(), DivisionService.get(), CosmeticService.get(), ItemBrowserService.get()), - this, - ServicePriority.Normal); - ServerUtils.info("Neptune API Initialized"); - } - - private void loadManager() { - ConfigService.get().load(); - arenaGenerationDisabled = !SettingsLocale.DYNAMIC_ARENA_GENERATION.getBoolean(); - - loadExtensions(); - if (!isEnabled()) - return; - - new DatabaseService(); - if (!isEnabled()) - return; - - BlockChanger.initialize(this); - ArenaService.get().load(); - if (arenaGenerationDisabled) { - duplicatesEnabled = ArenaDuplicator.isAvailable(); - if (duplicatesEnabled) { - ArenaService.get().setupDuplicatesWorld(); - ArenaService.get().loadDuplicates(); - } else { - ServerUtils.error("FastAsyncWorldEdit is not installed - arena duplicates are disabled."); - } - } - KitService.get().load(); - this.cache = new Cache(); - HotbarService.get().load(); - CosmeticService.get().load(); - DivisionService.get().load(); - LeaderboardService.get().load(); - ItemBrowserService.get().preloadSections(); - - registerListeners(); - loadCommandManager(); - loadTasks(); - loadWorlds(); - - if (ScoreboardLocale.ENABLED_SCOREBOARD.getBoolean()) { - new FastManager(this, new ScoreboardAdapter()); - } - - GithubUtils.loadGitInfo(); - - ServerUtils.info("Loaded Successfully"); - } - - private void registerListeners() { - Arrays.asList( - new ProfileListener(), - new MatchListener(), - new GlobalListener(), - new ItemListener(), - new MenuListener(), - new ArenaEditorChatListener(), - new KitEditorChatListener(), - new KitEditorListener(), - new CustomKitListener()) - .forEach(listener -> getServer().getPluginManager().registerEvents(listener, this)); - - getServer().getPluginManager().registerEvents(new EventListener(), this); - - PacketEvents.getAPI().getEventManager().registerListener(new SignInputListener(), PacketListenerPriority.NORMAL); - } - - private void loadExtensions() { - placeholder = loadExtension("PlaceholderAPI"); - if (placeholder) { - ServerUtils.info("Placeholder API found, loading expansion."); - new PlaceholderImpl(this).register(); - } - } - - private boolean loadExtension(String pluginName) { - Plugin plugin = getServer().getPluginManager().getPlugin(pluginName); - return plugin != null && plugin.isEnabled(); - } - - private void loadWorlds() { - for (World world : getServer().getWorlds()) { - world.setGameRule(GameRules.SHOW_ADVANCEMENT_MESSAGES, false); - world.setGameRule(GameRules.ADVANCE_WEATHER, false); - world.setGameRule(GameRules.ADVANCE_TIME, false); - world.setGameRule(GameRules.IMMEDIATE_RESPAWN, true); - world.setDifficulty(Difficulty.HARD); - } - } - - private void loadTasks() { - new QueueCheckTask().start(20L); - new QueueMessageTask().start(100L); - new LeaderboardTask().start(SettingsLocale.LEADERBOARD_UPDATE_TIME.getInt()); - new ArenaBoundaryCheckTask().start(20L); - new MenuRunnable().start(20L); - if (SettingsLocale.EVENT_AUTO_SCHEDULE_ENABLED.getBoolean()) new EventScheduleTask().start(20L); - } - - private void loadCommandManager() { - CommandService drink = Drink.get(this); - drink.bind(Kit.class).toProvider(new KitProvider()); - drink.bind(Arena.class).toProvider(new ArenaProvider()); - drink.bind(UUID.class).toProvider(new UUIDProvider()); - drink.bind(Setting.class).toProvider(new SettingProvider()); - drink.bind(Kit.class).annotatedWith(Text.class).toProvider(new KitProvider()); - - drink.register(new KitEditorCommand(), "kiteditor").setDefaultCommandIsHelp(true); - drink.register(new StatsCommand(), "stats").setDefaultCommandIsHelp(true); - drink.register(new PartyCommand(), "party", "p"); - drink.register(new FollowCommand(), "follow"); - drink.register(new QueueCommand(), "queue").registerSub(new QueueMenuCommand()); - drink.register(new DuelCommand(), "duel", "1v1").setDefaultCommandIsHelp(true); - drink.register(new LeaveCommand(), "leave", "forfeit", "spawn", "l", "ff"); - drink.register(new LeaderboardCommand(), "leaderboard", "lbs", "lb", "leaderboard") - .setDefaultCommandIsHelp(true); - drink.register(new SettingsCommand(), "settings").setDefaultCommandIsHelp(true); - drink.register(new SpectateCommand(), "spec", "spectate"); - drink.register(new MainCommand(), "neptune"); - drink.register(new CosmeticsCommand(), "cosmetics"); - drink.register(new MatchHistoryCommand(), "matchhistory").setDefaultCommandIsHelp(true); - drink.register(new QuickQueueCommand(), "quickqueue"); - drink.register(new CustomKitCommand(), "customkits", "ck"); - drink.register(new EventCommand(), "event"); - drink.registerCommands(); - } - - @Override - public void onDisable() { - if (!errored) { - stopService(KitService.get(), KitService::save); - stopService(ArenaService.get(), ArenaService::save); - } - stopService(MatchService.get(), MatchService::stopAllGames); - stopService(TaskScheduler.get(), TaskScheduler::stopAllTasks); - stopService(ProfileService.get(), ProfileService::saveAll); - stopService(cache, Cache::save); - } - - public void stopService(T service, Consumer consumer) { - Optional.ofNullable(service).ifPresent(consumer); - } +package dev.lrxh.neptune; + +import com.github.retrooper.packetevents.PacketEvents; +import com.github.retrooper.packetevents.event.PacketListenerPriority; +import com.jonahseguin.drink.CommandService; +import com.jonahseguin.drink.Drink; +import com.jonahseguin.drink.annotation.Text; +import com.jonahseguin.drink.provider.spigot.UUIDProvider; +import dev.lrxh.api.NeptuneAPI; +import dev.lrxh.api.NeptuneAPIImpl; +import dev.lrxh.blockChanger.BlockChanger; +import dev.lrxh.neptune.cache.Cache; +import dev.lrxh.neptune.commands.FollowCommand; +import dev.lrxh.neptune.commands.LeaveCommand; +import dev.lrxh.neptune.configs.ConfigService; +import dev.lrxh.neptune.configs.impl.ScoreboardLocale; +import dev.lrxh.neptune.configs.impl.SettingsLocale; +import dev.lrxh.neptune.feature.cosmetics.CosmeticService; +import dev.lrxh.neptune.feature.cosmetics.command.CosmeticsCommand; +import dev.lrxh.neptune.feature.customkit.command.CustomKitCommand; +import dev.lrxh.neptune.feature.customkit.listener.CustomKitListener; +import dev.lrxh.neptune.feature.divisions.DivisionService; +import dev.lrxh.neptune.feature.event.command.EventCommand; +import dev.lrxh.neptune.feature.event.listener.EventListener; +import dev.lrxh.neptune.feature.event.task.EventScheduleTask; +import dev.lrxh.neptune.feature.hotbar.HotbarService; +import dev.lrxh.neptune.feature.hotbar.listener.ItemListener; +import dev.lrxh.neptune.feature.itembrowser.ItemBrowserService; +import dev.lrxh.neptune.feature.leaderboard.LeaderboardService; +import dev.lrxh.neptune.feature.leaderboard.command.LeaderboardCommand; +import dev.lrxh.neptune.feature.leaderboard.task.LeaderboardTask; +import dev.lrxh.neptune.feature.party.command.PartyCommand; +import dev.lrxh.neptune.feature.queue.command.QueueCommand; +import dev.lrxh.neptune.feature.queue.command.QueueMenuCommand; +import dev.lrxh.neptune.feature.queue.command.QuickQueueCommand; +import dev.lrxh.neptune.feature.queue.tasks.QueueCheckTask; +import dev.lrxh.neptune.feature.queue.tasks.QueueMessageTask; +import dev.lrxh.neptune.feature.settings.Setting; +import dev.lrxh.neptune.feature.settings.command.SettingProvider; +import dev.lrxh.neptune.feature.settings.command.SettingsCommand; +import dev.lrxh.neptune.game.arena.Arena; +import dev.lrxh.neptune.game.arena.ArenaDuplicator; +import dev.lrxh.neptune.game.arena.ArenaService; +import dev.lrxh.neptune.game.arena.command.ArenaProvider; +import dev.lrxh.neptune.game.arena.listener.ArenaEditorChatListener; +import dev.lrxh.neptune.game.duel.command.DuelCommand; +import dev.lrxh.neptune.game.kit.Kit; +import dev.lrxh.neptune.game.kit.KitService; +import dev.lrxh.neptune.game.kit.command.KitEditorCommand; +import dev.lrxh.neptune.game.kit.command.KitProvider; +import dev.lrxh.neptune.game.kit.command.StatsCommand; +import dev.lrxh.neptune.game.kit.listener.KitEditorChatListener; +import dev.lrxh.neptune.game.kit.listener.KitEditorListener; +import dev.lrxh.neptune.game.match.MatchService; +import dev.lrxh.neptune.game.match.commands.MatchHistoryCommand; +import dev.lrxh.neptune.game.match.commands.SpectateCommand; +import dev.lrxh.neptune.game.match.listener.MatchListener; +import dev.lrxh.neptune.game.match.tasks.ArenaBoundaryCheckTask; +import dev.lrxh.neptune.main.MainCommand; +import dev.lrxh.neptune.profile.ProfileService; +import dev.lrxh.neptune.profile.listener.ProfileListener; +import dev.lrxh.neptune.providers.database.DatabaseService; +import dev.lrxh.neptune.providers.listeners.GlobalListener; +import dev.lrxh.neptune.providers.placeholder.PlaceholderImpl; +import dev.lrxh.neptune.scoreboard.ScoreboardAdapter; +import dev.lrxh.neptune.scoreboard.ScoreboardService; +import dev.lrxh.neptune.utils.GithubUtils; +import dev.lrxh.neptune.utils.ServerUtils; +import dev.lrxh.neptune.utils.menu.MenuListener; +import dev.lrxh.neptune.utils.menu.MenuRunnable; +import dev.lrxh.neptune.utils.sign.SignInputListener; +import dev.lrxh.neptune.utils.tasks.TaskScheduler; +import fr.mrmicky.fastboard.FastManager; +import lombok.Getter; +import lombok.Setter; +import org.bukkit.Difficulty; +import org.bukkit.permissions.Permission; +import org.bukkit.permissions.PermissionDefault; +import org.bukkit.GameRules; +import org.bukkit.World; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.ServicePriority; +import org.bukkit.plugin.java.JavaPlugin; + +import java.util.Arrays; +import java.util.Optional; +import java.util.UUID; +import java.util.function.Consumer; + +@Getter +public final class Neptune extends JavaPlugin { + private static Neptune instance; + private Cache cache; + private boolean placeholder = false; + @Setter + private boolean allowMatches; + private boolean arenaGenerationDisabled; + private boolean duplicatesEnabled; + + private boolean errored; + + public static Neptune get() { + return instance; + } + + public void setErrored() { + errored = true; + } + + @Override + public void onEnable() { + instance = this; + allowMatches = false; + loadManager(); + initAPI(); + registerPermissions(); + allowMatches = true; + } + + private void initAPI() { + getServer().getServicesManager().register( + NeptuneAPI.class, + new NeptuneAPIImpl(ProfileService.get(), MatchService.get(), KitService.get(), ScoreboardService.get(), + ArenaService.get(), DivisionService.get(), CosmeticService.get(), ItemBrowserService.get()), + this, + ServicePriority.Normal); + ServerUtils.info("Neptune API Initialized"); + } + + private void loadManager() { + ConfigService.get().load(); + arenaGenerationDisabled = !SettingsLocale.DYNAMIC_ARENA_GENERATION.getBoolean(); + + loadExtensions(); + if (!isEnabled()) + return; + + new DatabaseService(); + if (!isEnabled()) + return; + + BlockChanger.initialize(this); + ArenaService.get().load(); + if (arenaGenerationDisabled) { + duplicatesEnabled = ArenaDuplicator.isAvailable(); + if (duplicatesEnabled) { + ArenaService.get().setupDuplicatesWorld(); + ArenaService.get().loadDuplicates(); + } else { + ServerUtils.error("FastAsyncWorldEdit is not installed - arena duplicates are disabled."); + } + } + KitService.get().load(); + this.cache = new Cache(); + HotbarService.get().load(); + CosmeticService.get().load(); + DivisionService.get().load(); + LeaderboardService.get().load(); + ItemBrowserService.get().preloadSections(); + + registerListeners(); + loadCommandManager(); + loadTasks(); + loadWorlds(); + + if (ScoreboardLocale.ENABLED_SCOREBOARD.getBoolean()) { + new FastManager(this, new ScoreboardAdapter()); + } + + GithubUtils.loadGitInfo(); + + ServerUtils.info("Loaded Successfully"); + } + + private void registerListeners() { + Arrays.asList( + new ProfileListener(), + new MatchListener(), + new GlobalListener(), + new ItemListener(), + new MenuListener(), + new ArenaEditorChatListener(), + new KitEditorChatListener(), + new KitEditorListener(), + new CustomKitListener()) + .forEach(listener -> getServer().getPluginManager().registerEvents(listener, this)); + + getServer().getPluginManager().registerEvents(new EventListener(), this); + + PacketEvents.getAPI().getEventManager().registerListener(new SignInputListener(), PacketListenerPriority.NORMAL); + } + + private void loadExtensions() { + placeholder = loadExtension("PlaceholderAPI"); + if (placeholder) { + ServerUtils.info("Placeholder API found, loading expansion."); + new PlaceholderImpl(this).register(); + } + } + + private boolean loadExtension(String pluginName) { + Plugin plugin = getServer().getPluginManager().getPlugin(pluginName); + return plugin != null && plugin.isEnabled(); + } + + private void loadWorlds() { + for (World world : getServer().getWorlds()) { + world.setGameRule(GameRules.SHOW_ADVANCEMENT_MESSAGES, false); + world.setGameRule(GameRules.ADVANCE_WEATHER, false); + world.setGameRule(GameRules.ADVANCE_TIME, false); + world.setGameRule(GameRules.IMMEDIATE_RESPAWN, true); + world.setDifficulty(Difficulty.HARD); + } + } + + private void loadTasks() { + new QueueCheckTask().start(20L); + new QueueMessageTask().start(100L); + new LeaderboardTask().start(SettingsLocale.LEADERBOARD_UPDATE_TIME.getInt()); + new ArenaBoundaryCheckTask().start(20L); + new MenuRunnable().start(20L); + if (SettingsLocale.EVENT_AUTO_SCHEDULE_ENABLED.getBoolean()) new EventScheduleTask().start(20L); + } + + private void loadCommandManager() { + CommandService drink = Drink.get(this); + drink.bind(Kit.class).toProvider(new KitProvider()); + drink.bind(Arena.class).toProvider(new ArenaProvider()); + drink.bind(UUID.class).toProvider(new UUIDProvider()); + drink.bind(Setting.class).toProvider(new SettingProvider()); + drink.bind(Kit.class).annotatedWith(Text.class).toProvider(new KitProvider()); + + drink.register(new KitEditorCommand(), "kiteditor").setDefaultCommandIsHelp(true); + drink.register(new StatsCommand(), "stats").setDefaultCommandIsHelp(true); + drink.register(new PartyCommand(), "party", "p"); + drink.register(new FollowCommand(), "follow"); + drink.register(new QueueCommand(), "queue").registerSub(new QueueMenuCommand()); + drink.register(new DuelCommand(), "duel", "1v1").setDefaultCommandIsHelp(true); + drink.register(new LeaveCommand(), "leave", "forfeit", "spawn", "l", "ff"); + drink.register(new LeaderboardCommand(), "leaderboard", "lbs", "lb", "leaderboard") + .setDefaultCommandIsHelp(true); + drink.register(new SettingsCommand(), "settings").setDefaultCommandIsHelp(true); + drink.register(new SpectateCommand(), "spec", "spectate"); + drink.register(new MainCommand(), "neptune"); + drink.register(new CosmeticsCommand(), "cosmetics"); + drink.register(new MatchHistoryCommand(), "matchhistory").setDefaultCommandIsHelp(true); + drink.register(new QuickQueueCommand(), "quickqueue"); + drink.register(new CustomKitCommand(), "customkits", "ck"); + drink.register(new EventCommand(), "event"); + drink.registerCommands(); + } + + @Override + public void onDisable() { + if (!errored) { + stopService(KitService.get(), KitService::save); + stopService(ArenaService.get(), ArenaService::save); + } + stopService(MatchService.get(), MatchService::stopAllGames); + stopService(TaskScheduler.get(), TaskScheduler::stopAllTasks); + stopService(ProfileService.get(), ProfileService::saveAll); + stopService(cache, Cache::save); + } + + public void stopService(T service, Consumer consumer) { + Optional.ofNullable(service).ifPresent(consumer); + } + + /** + * Registers all cosmetic trim permissions. + */ + private void registerPermissions() { + // Patterns + String[] patterns = { + "bolt","coast","dune","eye","flow","host","raiser","rib", + "sentry","shaper","silence","snout","spire","tide","vex", + "wayfinder","ward","wild" + }; + // Materials + String[] materials = { + "amethyst","copper","diamond","emerald","gold","iron", + "lapis","netherite","quartz","redstone" + }; + // Armor slots + String[] slots = {"helmet","chestplate","leggings","boots"}; + + // Register individual permissions first. + for (String p : patterns) { + safeAddPermission("neptune.cosmetics.trim.pattern." + p, PermissionDefault.FALSE); + } + for (String m : materials) { + safeAddPermission("neptune.cosmetics.trim.material." + m, PermissionDefault.FALSE); + } + for (String s : slots) { + safeAddPermission("neptune.cosmetics.trim." + s, PermissionDefault.FALSE); + } + + // Wildcard. grant all patterns. + java.util.Map patternChildren = new java.util.HashMap<>(); + for (String p : patterns) patternChildren.put("neptune.cosmetics.trim.pattern." + p, true); + safeAddPermission("neptune.cosmetics.trim.pattern.*", PermissionDefault.FALSE, patternChildren); + + // Wildcard. grant all materials. + java.util.Map materialChildren = new java.util.HashMap<>(); + for (String m : materials) materialChildren.put("neptune.cosmetics.trim.material." + m, true); + safeAddPermission("neptune.cosmetics.trim.material.*", PermissionDefault.FALSE, materialChildren); + + // Root wildcard. grants all. + java.util.Map rootChildren = new java.util.HashMap<>(); + rootChildren.put("neptune.cosmetics.trim.pattern.*", true); + rootChildren.put("neptune.cosmetics.trim.material.*", true); + for (String s : slots) rootChildren.put("neptune.cosmetics.trim." + s, true); + safeAddPermission("neptune.cosmetics.trim.*", PermissionDefault.FALSE, rootChildren); + + // Admin permission + safeAddPermission("neptune.admin", PermissionDefault.OP); + } + + private void safeAddPermission(String node, PermissionDefault def) { + safeAddPermission(node, def, null); + } + + private void safeAddPermission(String node, PermissionDefault def, + java.util.Map children) { + try { + if (getServer().getPluginManager().getPermission(node) != null) return; + Permission perm = children != null + ? new Permission(node, def, children) + : new Permission(node, def); + getServer().getPluginManager().addPermission(perm); + } catch (Exception ignored) { + + } + } } \ No newline at end of file diff --git a/Plugin/src/main/java/dev/lrxh/neptune/configs/ConfigService.java b/Plugin/src/main/java/dev/lrxh/neptune/configs/ConfigService.java index adb7f29e1..d52100424 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/configs/ConfigService.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/configs/ConfigService.java @@ -1,75 +1,78 @@ -package dev.lrxh.neptune.configs; - -import dev.lrxh.neptune.configs.impl.*; -import dev.lrxh.neptune.utils.ConfigFile; -import lombok.Getter; - - -@Getter -public class ConfigService { - private static ConfigService instance; - private ConfigFile messagesConfig; - private ConfigFile arenasConfig; - private ConfigFile kitsConfig; - private ConfigFile mainConfig; - private ConfigFile scoreboardConfig; - private ConfigFile hotbarConfig; - private ConfigFile menusConfig; - private ConfigFile divisionsConfig; - private ConfigFile cosmeticsConfig; - private ConfigFile killMessagesConfig; - private ConfigFile armorTrimsConfig; - private ConfigFile shieldPatternsConfig; - private ConfigFile soundsConfig; - private ConfigFile signsConfig; - - public static ConfigService get() { - if (instance == null) instance = new ConfigService(); - - return instance; - } - - public void load() { - messagesConfig = new ConfigFile("messages"); - arenasConfig = new ConfigFile("arenas"); - kitsConfig = new ConfigFile("kits"); - mainConfig = new ConfigFile("settings"); - scoreboardConfig = new ConfigFile("scoreboard"); - hotbarConfig = new ConfigFile("hotbar"); - menusConfig = new ConfigFile("menus"); - divisionsConfig = new ConfigFile("divisions"); - cosmeticsConfig = new ConfigFile("cosmetics"); - killMessagesConfig = new ConfigFile("kill-messages"); - armorTrimsConfig = new ConfigFile("armor-trims"); - soundsConfig = new ConfigFile("sounds"); - shieldPatternsConfig = new ConfigFile("shield-patterns"); - signsConfig = new ConfigFile("signs"); - - initialize(); - } - - public void initialize() { - HotbarLocale.LOBBY_PARTY_CREATE_NAME.load(); - MessagesLocale.MATCH_FOUND.load(); - SettingsLocale.SPAWN_LOCATION.load(); - MenusLocale.FILTER_NAME.load(); - ScoreboardLocale.TITLE.load(); - CosmeticsLocale.LIGHTNING_DISPLAY_NAME.load(); - SoundsLocale.MATCH_START.load(); - SignsLocale.CUSTOM_KIT_NAME.load(); - - HotbarLocale.LOBBY_PARTY_CREATE_NAME.update(); - MessagesLocale.MATCH_FOUND.update(); - SettingsLocale.SPAWN_LOCATION.update(); - MenusLocale.FILTER_NAME.update(); - ScoreboardLocale.TITLE.update(); - CosmeticsLocale.LIGHTNING_DISPLAY_NAME.update(); - SoundsLocale.MATCH_START.update(); - SignsLocale.CUSTOM_KIT_NAME.update(); - - MessagesLocale.EVENT_ANNOUNCE.load(); - MessagesLocale.EVENT_ANNOUNCE.update(); - ScoreboardLocale.IN_EVENT_LMS.load(); - ScoreboardLocale.IN_EVENT_LMS.update(); - } -} +package dev.lrxh.neptune.configs; + +import dev.lrxh.neptune.configs.impl.*; +import dev.lrxh.neptune.feature.cosmetics.custom.CustomTrimLocale; +import dev.lrxh.neptune.utils.ConfigFile; +import lombok.Getter; + + +@Getter +public class ConfigService { + private static ConfigService instance; + private ConfigFile messagesConfig; + private ConfigFile arenasConfig; + private ConfigFile kitsConfig; + private ConfigFile mainConfig; + private ConfigFile scoreboardConfig; + private ConfigFile hotbarConfig; + private ConfigFile menusConfig; + private ConfigFile divisionsConfig; + private ConfigFile cosmeticsConfig; + private ConfigFile killMessagesConfig; + private ConfigFile armorTrimsConfig; + private ConfigFile shieldPatternsConfig; + private ConfigFile soundsConfig; + private ConfigFile signsConfig; + + public static ConfigService get() { + if (instance == null) instance = new ConfigService(); + + return instance; + } + + public void load() { + messagesConfig = new ConfigFile("messages"); + arenasConfig = new ConfigFile("arenas"); + kitsConfig = new ConfigFile("kits"); + mainConfig = new ConfigFile("settings"); + scoreboardConfig = new ConfigFile("scoreboard"); + hotbarConfig = new ConfigFile("hotbar"); + menusConfig = new ConfigFile("menus"); + divisionsConfig = new ConfigFile("divisions"); + cosmeticsConfig = new ConfigFile("cosmetics"); + killMessagesConfig = new ConfigFile("kill-messages"); + armorTrimsConfig = new ConfigFile("armor-trims"); + soundsConfig = new ConfigFile("sounds"); + shieldPatternsConfig = new ConfigFile("shield-patterns"); + signsConfig = new ConfigFile("signs"); + + initialize(); + } + + public void initialize() { + HotbarLocale.LOBBY_PARTY_CREATE_NAME.load(); + MessagesLocale.MATCH_FOUND.load(); + SettingsLocale.SPAWN_LOCATION.load(); + MenusLocale.FILTER_NAME.load(); + ScoreboardLocale.TITLE.load(); + CosmeticsLocale.LIGHTNING_DISPLAY_NAME.load(); + SoundsLocale.MATCH_START.load(); + SignsLocale.CUSTOM_KIT_NAME.load(); + CustomTrimLocale.ENABLED.load(); + + HotbarLocale.LOBBY_PARTY_CREATE_NAME.update(); + MessagesLocale.MATCH_FOUND.update(); + SettingsLocale.SPAWN_LOCATION.update(); + MenusLocale.FILTER_NAME.update(); + ScoreboardLocale.TITLE.update(); + CosmeticsLocale.LIGHTNING_DISPLAY_NAME.update(); + SoundsLocale.MATCH_START.update(); + SignsLocale.CUSTOM_KIT_NAME.update(); + CustomTrimLocale.ENABLED.update(); + + MessagesLocale.EVENT_ANNOUNCE.load(); + MessagesLocale.EVENT_ANNOUNCE.update(); + ScoreboardLocale.IN_EVENT_LMS.load(); + ScoreboardLocale.IN_EVENT_LMS.update(); + } +} diff --git a/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/CosmeticsLocale.java b/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/CosmeticsLocale.java index 1d0cbb144..40e43604d 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/CosmeticsLocale.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/CosmeticsLocale.java @@ -1,57 +1,62 @@ -package dev.lrxh.neptune.configs.impl; - -import dev.lrxh.neptune.configs.ConfigService; -import dev.lrxh.neptune.configs.impl.handler.DataType; -import dev.lrxh.neptune.configs.impl.handler.IDataAccessor; -import dev.lrxh.neptune.utils.ConfigFile; -import lombok.Getter; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -@Getter -public enum CosmeticsLocale implements IDataAccessor { - NONE_DISPLAY_NAME("KILL-EFFECTS.NONE.DISPLAY-NAME", DataType.STRING, "&bNone"), - NONE_SLOT("KILL-EFFECTS.NONE.SLOT", DataType.INT, "10"), - NONE_MATERIAL("KILL-EFFECTS.NONE.MATERIAL", DataType.STRING, "BARRIER"), - LIGHTNING_DISPLAY_NAME("KILL-EFFECTS.LIGHTNING.DISPLAY-NAME", DataType.STRING, "&bLightning"), - LIGHTNING_SLOT("KILL-EFFECTS.LIGHTNING.SLOT", DataType.INT, "11"), - LIGHTNING_MATERIAL("KILL-EFFECTS.LIGHTNING.MATERIAL", DataType.STRING, "NETHER_STAR"), - FIREWORKS_DISPLAY_NAME("KILL-EFFECTS.FIREWORKS.DISPLAY-NAME", DataType.STRING, "&bFireworks"), - FIREWORKS_SLOT("KILL-EFFECTS.FIREWORKS.SLOT", DataType.INT, "12"), - FIREWORKS_MATERIAL("KILL-EFFECTS.FIREWORKS.MATERIAL", DataType.STRING, "FIREWORK_ROCKET"), - ANGRY_DISPLAY_NAME("KILL-EFFECTS.ANGRY.DISPLAY-NAME", DataType.STRING, "&bAngry"), - ANGRY_SLOT("KILL-EFFECTS.ANGRY.SLOT", DataType.INT, "13"), - ANGRY_MATERIAL("KILL-EFFECTS.ANGRY.MATERIAL", DataType.STRING, "REDSTONE"), - HEARTS_DISPLAY_NAME("KILL-EFFECTS.HEARTS.DISPLAY-NAME", DataType.STRING, "&bHearts"), - HEARTS_SLOT("KILL-EFFECTS.HEARTS.SLOT", DataType.INT, "14"), - HEARTS_MATERIAL("KILL-EFFECTS.HEARTS.MATERIAL", DataType.STRING, "SUNFLOWER"), - LAVA_DISPLAY_NAME("KILL-EFFECTS.LAVA.DISPLAY-NAME", DataType.STRING, "&bLava"), - LAVA_SLOT("KILL-EFFECTS.LAVA.SLOT", DataType.INT, "15"), - LAVA_MATERIAL("KILL-EFFECTS.LAVA.MATERIAL", DataType.STRING, "LAVA_BUCKET"); - private final String path; - private final String comment; - private final List defaultValue = new ArrayList<>(); - private final DataType dataType; - - CosmeticsLocale(String path, DataType dataType, String... defaultValue) { - this.path = path; - this.comment = null; - this.defaultValue.addAll(Arrays.asList(defaultValue)); - this.dataType = dataType; - } - - @Override - public String getHeader() { - return ""; - } - - @Override - public ConfigFile getConfigFile() { - return ConfigService.get().getCosmeticsConfig(); - } - - public void update() { - } -} +package dev.lrxh.neptune.configs.impl; + +import dev.lrxh.neptune.configs.ConfigService; +import dev.lrxh.neptune.configs.impl.handler.DataType; +import dev.lrxh.neptune.configs.impl.handler.IDataAccessor; +import dev.lrxh.neptune.utils.ConfigFile; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@Getter +public enum CosmeticsLocale implements IDataAccessor { + NONE_DISPLAY_NAME("KILL-EFFECTS.NONE.DISPLAY-NAME", DataType.STRING, "&bNone"), + NONE_SLOT("KILL-EFFECTS.NONE.SLOT", DataType.INT, "10"), + NONE_MATERIAL("KILL-EFFECTS.NONE.MATERIAL", DataType.STRING, "BARRIER"), + LIGHTNING_DISPLAY_NAME("KILL-EFFECTS.LIGHTNING.DISPLAY-NAME", DataType.STRING, "&bLightning"), + LIGHTNING_SLOT("KILL-EFFECTS.LIGHTNING.SLOT", DataType.INT, "11"), + LIGHTNING_MATERIAL("KILL-EFFECTS.LIGHTNING.MATERIAL", DataType.STRING, "NETHER_STAR"), + FIREWORKS_DISPLAY_NAME("KILL-EFFECTS.FIREWORKS.DISPLAY-NAME", DataType.STRING, "&bFireworks"), + FIREWORKS_SLOT("KILL-EFFECTS.FIREWORKS.SLOT", DataType.INT, "12"), + FIREWORKS_MATERIAL("KILL-EFFECTS.FIREWORKS.MATERIAL", DataType.STRING, "FIREWORK_ROCKET"), + ANGRY_DISPLAY_NAME("KILL-EFFECTS.ANGRY.DISPLAY-NAME", DataType.STRING, "&bAngry"), + ANGRY_SLOT("KILL-EFFECTS.ANGRY.SLOT", DataType.INT, "13"), + ANGRY_MATERIAL("KILL-EFFECTS.ANGRY.MATERIAL", DataType.STRING, "REDSTONE"), + HEARTS_DISPLAY_NAME("KILL-EFFECTS.HEARTS.DISPLAY-NAME", DataType.STRING, "&bHearts"), + HEARTS_SLOT("KILL-EFFECTS.HEARTS.SLOT", DataType.INT, "14"), + HEARTS_MATERIAL("KILL-EFFECTS.HEARTS.MATERIAL", DataType.STRING, "SUNFLOWER"), + LAVA_DISPLAY_NAME("KILL-EFFECTS.LAVA.DISPLAY-NAME", DataType.STRING, "&bLava"), + LAVA_SLOT("KILL-EFFECTS.LAVA.SLOT", DataType.INT, "15"), + LAVA_MATERIAL("KILL-EFFECTS.LAVA.MATERIAL", DataType.STRING, "LAVA_BUCKET"); + private final String path; + private final String comment; + private final List defaultValue = new ArrayList<>(); + private final DataType dataType; + + CosmeticsLocale(String path, DataType dataType, String... defaultValue) { + this.path = path; + this.comment = null; + this.defaultValue.addAll(Arrays.asList(defaultValue)); + this.dataType = dataType; + } + + @Override + public String getHeader() { + return ""; + } + + @Override + public ConfigFile getConfigFile() { + return ConfigService.get().getCosmeticsConfig(); + } + + @Override + public boolean resetUnknown() { + return false; + } + + public void update() { + } +} diff --git a/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/MenusLocale.java b/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/MenusLocale.java index 9fb8f931f..bb526f07e 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/MenusLocale.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/MenusLocale.java @@ -1,867 +1,910 @@ -package dev.lrxh.neptune.configs.impl; - -import dev.lrxh.neptune.configs.ConfigService; -import dev.lrxh.neptune.configs.impl.handler.DataType; -import dev.lrxh.neptune.configs.impl.handler.IDataAccessor; -import dev.lrxh.neptune.utils.ConfigFile; -import lombok.Getter; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -@Getter -public enum MenusLocale implements IDataAccessor { - FILTER_MATERIAL("FILTER.MATERIAL", "Filter Item for menus.", DataType.STRING, "BLACK_STAINED_GLASS_PANE"), - FILTER_NAME("FILTER.NAME", "Filter Item name.", DataType.STRING, ""), - PAGINATION_NEXT_PAGE_ENABLED_NAME("PAGINATION.NEXT.ENABLED.NAME", DataType.STRING, "&aNext Page"), - PAGINATION_NEXT_PAGE_ENABLED_MATERIAL("PAGINATION.NEXT.ENABLED.MATERIAL", DataType.STRING, "PAPER"), - PAGINATION_NEXT_PAGE_ENABLED_LORE("PAGINATION.NEXT.ENABLED.LORE", DataType.STRING_LIST, - "&eClick here to jump", - "&e to the next page."), - - PAGINATION_NEXT_PAGE_DISABLED_NAME("PAGINATION.NEXT.DISABLED.NAME", DataType.STRING, "&7Next Page"), - PAGINATION_NEXT_PAGE_DISABLED_MATERIAL("PAGINATION.NEXT.DISABLED.MATERIAL", DataType.STRING, "REDSTONE"), - PAGINATION_NEXT_PAGE_DISABLED_LORE("PAGINATION.NEXT.DISABLED.LORE", DataType.STRING_LIST, - "&eThere is no available", - "&e next page."), - - PAGINATION_PREVIOUS_PAGE_ENABLED_NAME("PAGINATION.PREVIOUS.ENABLED.NAME", DataType.STRING, "&aPrevious Page"), - PAGINATION_PREVIOUS_PAGE_ENABLED_MATERIAL("PAGINATION.PREVIOUS.ENABLED.MATERIAL", DataType.STRING, "PAPER"), - PAGINATION_PREVIOUS_PAGE_ENABLED_LORE("PAGINATION.PREVIOUS.ENABLED.LORE", DataType.STRING_LIST, - "&eClick here to jump", - "&e to the previous page."), - - PAGINATION_PREVIOUS_PAGE_DISABLED_NAME("PAGINATION.PREVIOUS.DISABLED.NAME", DataType.STRING, "&7Previous Page"), - PAGINATION_PREVIOUS_PAGE_DISABLED_MATERIAL("PAGINATION.PREVIOUS.DISABLED.MATERIAL", DataType.STRING, - "REDSTONE"), - PAGINATION_PREVIOUS_PAGE_DISABLED_LORE("PAGINATION.PREVIOUS.DISABLED.LORE", DataType.STRING_LIST, - "&eThere is no available", - "&e previous page."), - PAGINATION_CURRENT_PAGE_NAME("PAGINATION.CURRENT_PAGE.NAME", DataType.STRING, - "&fPage: &e/"), - PAGINATION_CURRENT_PAGE_MATERIAL("PAGINATION.CURRENT_PAGE.MATERIAL", DataType.STRING, - "BOOK"), - PAGINATION_CURRENT_PAGE_SLOT("PAGINATION.CURRENT_PAGE.SLOT", DataType.INT, - "4"), - QUEUE_SELECT_KIT_NAME("QUEUE.SELECT.NAME", DataType.STRING, "&b"), - QUEUE_SELECT_SIZE("QUEUE.SELECT.SIZE", DataType.INT, "36"), - QUEUE_SELECT_FILTER("QUEUE.SELECT.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), - QUEUE_SELECT_TITLE("QUEUE.SELECT.TITLE", DataType.STRING, "&7Select Kit"), - QUEUE_SELECT_LORE("QUEUE.SELECT.LORE", DataType.STRING_LIST, "", - " &f&7* &fIn Fights: &b", - " &f&7* &fQueued: &b", - " ", - "&a&lClick to play!"), - KIT_EDITOR_SELECT_KIT_NAME("KIT_EDITOR.SELECT.NAME", DataType.STRING, "&b"), - KIT_EDITOR_SELECT_SIZE("KIT_EDITOR.SELECT.SIZE", DataType.INT, "36"), - KIT_EDITOR_SELECT_FILTER("KIT_EDITOR.SELECT.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), - KIT_EDITOR_SELECT_TITLE("KIT_EDITOR.SELECT.TITLE", DataType.STRING, "&7Kit Editor"), - KIT_EDITOR_SELECT_LORE("KIT_EDITOR.SELECT.LORE", DataType.STRING_LIST, "", " &aClick to edit kit"), - STAT_KIT_NAME("STAT.NAME", DataType.STRING, "&b"), - STAT_SIZE("STAT.SIZE", DataType.INT, "36"), - STAT_FILTER("STAT.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), - STAT_TITLE("STAT.TITLE", DataType.STRING, "&7 Statistics"), - STAT_LORE("STAT.LORE", DataType.STRING_LIST, - " &f&7* &fWins: &b", - " &f&7* &fElo: &b", - " &f&7* &fLosses: &b", - " &f&7* &fCurrent Streak: &b", - " &f&7* &fBest Streak: &b", - " &f&7* &fDivision: &b", - " &f&7* &fK/D &b"), - MATCH_LIST_TITLE("MATCH.LIST.TITLE", DataType.STRING, "&7Select Match"), - MATCH_LIST_SIZE("MATCH_LIST.SIZE", DataType.INT, "54"), - MATCH_LIST_STARTING_SLOT("MATCH_LIST.STARTING-SLOT", DataType.INT, "10"), - MATCH_LIST_FILTER("MATCH_LIST.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "BORDER"), - MATCH_LIST_ITEM_NAME("MATCH_LIST.ITEM.NAME", DataType.STRING, - "&c &7vs &9"), - MATCH_LIST_ITEM_LORE("MATCH_LIST.ITEM.LORE", DataType.STRING_LIST, - "&fArena: &b", - "&fKit: &b", - "", - "&a&lClick to watch match!"), - DUEL_TITLE("DUEL.TITLE", DataType.STRING, "Select Kit | "), - DUEL_SIZE("DUEL.SIZE", DataType.INT, "36"), - DUEL_FILTER("DUEL.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), - DUEL_ITEM_NAME("DUEL.ITEM.NAME", DataType.STRING, "&b"), - DUEL_LORE("DUEL.LORE", DataType.STRING_LIST, - "", - "&a&lClick to select kit!"), - DUEL_CUSTOM_KIT_BUTTON_SLOT("DUEL.CUSTOM_KIT.SLOT", DataType.INT, "35"), - DUEL_CUSTOM_KIT_BUTTON_MATERIAL("DUEL.CUSTOM_KIT.MATERIAL", DataType.STRING, "NETHER_STAR"), - DUEL_CUSTOM_KIT_BUTTON_NAME("DUEL.CUSTOM_KIT.NAME", DataType.STRING, "&bCustom Kits"), - DUEL_CUSTOM_KIT_BUTTON_LORE("DUEL.CUSTOM_KIT.LORE", DataType.STRING_LIST, - "", - "&a&lClick to duel with a custom kit!"), - DUEL_CUSTOM_KIT_TITLE("DUEL.CUSTOM_KIT.TITLE", DataType.STRING, "Select Custom Kit | "), - DUEL_CUSTOM_KIT_ITEM_LORE("DUEL.CUSTOM_KIT.ITEM.LORE", DataType.STRING_LIST, - "", - "&a&lClick to duel with this kit!"), - ROUNDS_TITLE("ROUNDS.TITLE", DataType.STRING, "Select Rounds Amount | "), - ROUNDS_SIZE("ROUNDS.SIZE", DataType.INT, "27"), - ROUNDS_STARTING_SLOT("DUEL.STARTING-SLOT", DataType.INT, "10"), - ROUNDS_FILTER("ROUNDS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), - ROUNDS_ITEM_NAME("ROUNDS.ITEM.NAME", DataType.STRING, "&bFirst to &b&l"), - ROUNDS_ITEM_MATERIAL("ROUNDS.ITEM.MATERIAL", DataType.STRING, "MAP"), - ROUNDS_LORE("ROUNDS.LORE", DataType.STRING_LIST, - "", - "&a&lClick to select rounds amount!"), - ROUNDS_LIST("ROUNDS.AMOUNT", "Change the amount of rounds available", DataType.STRING, - "1, 3, 5, 6, 10, 15, 20"), - ARENA_TITLE("ARENA.TITLE", DataType.STRING, "Select Arena | "), - ARENA_FILTER("ARENA.FILTER-TYPE", DataType.STRING, "FILL"), - ARENA_SIZE("ARENA.SIZE", DataType.INT, "27"), - ARENA_LIST_STARTING_SLOT("ARENA.LIST.STARTING-SLOT", DataType.INT, "1"), - ARENA_ITEM_NAME("ARENA.ITEM.NAME", DataType.STRING, "&b"), - ARENA_ITEM_LORE("ARENA.ITEM.LORE", DataType.STRING_LIST, "", "&fSelect as the battle arena"), - ARENA_RANDOM_ITEM_NAME("ARENA.RANDOM_ITEM.NAME", DataType.STRING, "&bRandom Arena"), - ARENA_RANDOM_ITEM_SLOT("ARENA.RANDOM_ITEM.SLOT", DataType.INT, "0"), - ARENA_RANDOM_ITEM_MATERIAL("ARENA.RANDOM_ITEM.MATERIAL", DataType.STRING, "FILLED_MAP"), - ARENA_RANDOM_ITEM_LORE("ARENA.RANDOM_ITEM.LORE", DataType.STRING_LIST, "", - "&fSelect a random arena as the battle arena"), - MATCH_HISTORY_TITLE("MATCH_HISTORY.TITLE", DataType.STRING, "&7Match History"), - MATCH_HISTORY_SIZE("MATCH_HISTORY.SIZE", DataType.INT, "27"), - MATCH_HISTORY_STARTING_SLOT("MATCH_HISTORY.STARTING-SLOT", DataType.INT, "10"), - MATCH_HISTORY_FILTER("MATCH_HISTORY.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), - MATCH_HISTORY_ITEM_NAME("MATCH_HISTORY.ITEM.NAME", DataType.STRING, "&b &fvs &b "), - MATCH_HISTORY_LORE("MATCH_HISTORY.LORE", DataType.STRING_LIST, - "&7&m-------------------", - "&fWinner: &a", - "&fLoser: &c", - "&fDate: &b", - "&fArena: &b", - "&7&m-------------------"), - MATCH_HISTORY_WON("MATCH_HISTORY.WON", DataType.STRING, "&aWon"), - MATCH_HISTORY_LOST("MATCH_HISTORY.LOST", DataType.STRING, "&cLost"), - - MATCH_SPECTATE_TITLE("MATCH_SPECTATE_TELEPORT.TITLE", DataType.STRING, "&7Teleport to a player"), - MATCH_SPECTATE_STARTING_SLOT("MATCH_SPECTATE_TELEPORT.STARTING-SLOT", DataType.INT, "10"), - MATCH_SPECTATE_FILTER("MATCH_SPECTATE_TELEPORT.FILTER_TYPE", DataType.STRING, "FILL"), - MATCH_SPECTATE_NAME("MATCH_SPECTATE_TELEPORT.ITEM.NAME", DataType.STRING, "&b"), - MATCH_SPECTATE_LORE("MATCH_SPECTATE_TELEPORT.ITEM.LORE", DataType.STRING_LIST, "", "&fTeleport to: &b"), - LEADERBOARD_SIZE("LEADERBOARD.SIZE", DataType.INT, "36"), - LEADERBOARD_FILTER("LEADERBOARD.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), - LEADERBOARD_ITEM_NAME("LEADERBOARD.ITEM.NAME", DataType.STRING, "&b Top 10"), - LEADERBOARD_LORE("LEADERBOARD.LORE", DataType.STRING_LIST, - "&b#1. &f &7- &b ", - "&b#2. &f &7- &b ", - "&b#3. &f &7- &b ", - "&b#4. &f &7- &b ", - "&b#5. &f &7- &b ", - "&b#6. &f &7- &b ", - "&b#7. &f &7- &b ", - "&b#8. &f &7- &b ", - "&b#9. &f &7- &b ", - "&b#10. &f &7- &b "), - LEADERBOARD_TYPES_KILLS_SLOT("LEADERBOARD.TYPES.KILLS.SLOT", DataType.INT, "2"), - LEADERBOARD_TYPES_KILLS_TITLE("LEADERBOARD.TYPES.KILLS.TITLE", DataType.STRING, - "&7Kills Leaderboards"), - LEADERBOARD_TYPES_KILLS_ENABLED_NAME("LEADERBOARD.TYPES.KILLS.ENABLED.NAME", DataType.STRING, - "&aKills Leaderboard"), - LEADERBOARD_TYPES_KILLS_DISABLED_NAME("LEADERBOARD.TYPES.KILLS.DISABLED.NAME", DataType.STRING, - "&cKills Leaderboard"), - LEADERBOARD_TYPES_KILLS_ENABLED_LORE("LEADERBOARD.TYPES.KILLS.ENABLED.LORE", DataType.STRING_LIST, - " ", - "&7Click to view kills leaderboard"), - LEADERBOARD_TYPES_KILLS_DISABLED_LORE("LEADERBOARD.TYPES.KILLS.DISABLED.LORE", DataType.STRING_LIST, - " ", - "&7Click to view kills leaderboard"), - LEADERBOARD_TYPES_KILLS_ENABLED_MATERIAL("LEADERBOARD.TYPES.KILLS.ENABLED.MATERIAL", DataType.STRING, - "LIME_DYE"), - LEADERBOARD_TYPES_KILLS_DISABLED_MATERIAL("LEADERBOARD.TYPES.KILLS.DISABLED.MATERIAL", DataType.STRING, - "GRAY_DYE"), - - LEADERBOARD_TYPES_ELO_TITLE("LEADERBOARD.TYPES.ELO.TITLE", DataType.STRING, - "&7Elo Leaderboards"), - LEADERBOARD_TYPES_ELO_SLOT("LEADERBOARD.TYPES.ELO.SLOT", DataType.INT, "4"), - LEADERBOARD_TYPES_ELO_ENABLED_NAME("LEADERBOARD.TYPES.ELO.ENABLED.NAME", DataType.STRING, - "&aElo Leaderboard"), - LEADERBOARD_TYPES_ELO_DISABLED_NAME("LEADERBOARD.TYPES.ELO.DISABLED.NAME", DataType.STRING, - "&cElo Leaderboard"), - LEADERBOARD_TYPES_ELO_ENABLED_LORE("LEADERBOARD.TYPES.ELO.ENABLED.LORE", DataType.STRING_LIST, - " ", - "&7Click to view elo leaderboard"), - LEADERBOARD_TYPES_ELO_DISABLED_LORE("LEADERBOARD.TYPES.ELO.DISABLED.LORE", DataType.STRING_LIST, - " ", - "&7Click to view elo leaderboard"), - LEADERBOARD_TYPES_ELO_ENABLED_MATERIAL("LEADERBOARD.TYPES.ELO.ENABLED.MATERIAL", DataType.STRING, - "LIME_DYE"), - LEADERBOARD_TYPES_ELO_DISABLED_MATERIAL("LEADERBOARD.TYPES.ELO.DISABLED.MATERIAL", DataType.STRING, - "GRAY_DYE"), - - LEADERBOARD_TYPES_BEST_WIN_STREAK_TITLE("LEADERBOARD.TYPES.BEST_WIN_STREAK.TITLE", DataType.STRING, - "&7Best Win Streak Leaderboards"), - LEADERBOARD_TYPES_BEST_WIN_STREAK_SLOT("LEADERBOARD.TYPES.BEST_WIN_STREAK.SLOT", DataType.INT, "29"), - LEADERBOARD_TYPES_BEST_WIN_STREAK_ENABLED_NAME("LEADERBOARD.TYPES.BEST_WIN_STREAK.ENABLED.NAME", - DataType.STRING, - "&aBest Win Streaks Leaderboard"), - LEADERBOARD_TYPES_BEST_WIN_STREAK_DISABLED_NAME("LEADERBOARD.TYPES.BEST_WIN_STREAK.DISABLED.NAME", - DataType.STRING, - "&cBest Win Streaks Leaderboard"), - LEADERBOARD_TYPES_BEST_WIN_STREAK_ENABLED_LORE("LEADERBOARD.TYPES.BEST_WIN_STREAK.ENABLED.LORE", - DataType.STRING_LIST, - " ", - "&7Click to view best win streak leaderboards"), - LEADERBOARD_TYPES_BEST_WIN_STREAK_DISABLED_LORE("LEADERBOARD.TYPES.BEST_WIN_STREAK.DISABLED.LORE", - DataType.STRING_LIST, - " ", - "&7Click to view best win streak leaderboards"), - LEADERBOARD_TYPES_BEST_WIN_STREAK_ENABLED_MATERIAL("LEADERBOARD.TYPES.BEST_WIN_STREAK.ENABLED.MATERIAL", - DataType.STRING, - "LIME_DYE"), - LEADERBOARD_TYPES_BEST_WIN_STREAK_DISABLED_MATERIAL("LEADERBOARD.TYPES.BEST_WIN_STREAK.DISABLED.MATERIAL", - DataType.STRING, - "GRAY_DYE"), - - LEADERBOARD_TYPES_WINS_SLOT("LEADERBOARD.TYPES.WINS.SLOT", DataType.INT, "31"), - LEADERBOARD_TYPES_WINS_TITLE("LEADERBOARD.TYPES.WINS.TITLE", DataType.STRING, - "&7Wins Leaderboards"), - LEADERBOARD_TYPES_WINS_ENABLED_NAME("LEADERBOARD.TYPES.WINS.ENABLED.NAME", DataType.STRING, - "&aWins Leaderboard"), - LEADERBOARD_TYPES_WINS_DISABLED_NAME("LEADERBOARD.TYPES.WINS.DISABLED.NAME", DataType.STRING, - "&cWins Leaderboard"), - LEADERBOARD_TYPES_WINS_ENABLED_LORE("LEADERBOARD.TYPES.WINS.ENABLED.LORE", DataType.STRING_LIST, - " ", - "&7Click to view wins leaderboards"), - LEADERBOARD_TYPES_WINS_DISABLED_LORE("LEADERBOARD.TYPES.WINS.DISABLED.LORE", DataType.STRING_LIST, - " ", - "&7Click to view wins leaderboards"), - LEADERBOARD_TYPES_WINS_ENABLED_MATERIAL("LEADERBOARD.TYPES.WINS.ENABLED.MATERIAL", DataType.STRING, - "LIME_DYE"), - LEADERBOARD_TYPES_WINS_DISABLED_MATERIAL("LEADERBOARD.TYPES.WINS.DISABLED.MATERIAL", DataType.STRING, - "GRAY_DYE"), - - LEADERBOARD_TYPES_LOSSES_SLOT("LEADERBOARD.TYPES.LOSSES.SLOT", DataType.INT, "33"), - LEADERBOARD_TYPES_LOSSES_TITLE("LEADERBOARD.TYPES.LOSSES.TITLE", DataType.STRING, - "&7Losses Leaderboards"), - LEADERBOARD_TYPES_LOSSES_ENABLED_NAME("LEADERBOARD.TYPES.LOSSES.ENABLED.NAME", DataType.STRING, - "&aLosses Leaderboard"), - LEADERBOARD_TYPES_LOSSES_DISABLED_NAME("LEADERBOARD.TYPES.LOSSES.DISABLED.NAME", DataType.STRING, - "&cLosses Leaderboard"), - LEADERBOARD_TYPES_LOSSES_ENABLED_LORE("LEADERBOARD.TYPES.LOSSES.ENABLED.LORE", DataType.STRING_LIST, - " ", - "&7Click to view losses leaderboards"), - LEADERBOARD_TYPES_LOSSES_DISABLED_LORE("LEADERBOARD.TYPES.LOSSES.DISABLED.LORE", DataType.STRING_LIST, - " ", - "&7Click to view losses leaderboards"), - LEADERBOARD_TYPES_LOSSES_ENABLED_MATERIAL("LEADERBOARD.TYPES.LOSSES.ENABLED.MATERIAL", DataType.STRING, - "LIME_DYE"), - LEADERBOARD_TYPES_LOSSES_DISABLED_MATERIAL("LEADERBOARD.TYPES.LOSSES.DISABLED.MATERIAL", DataType.STRING, - "GRAY_DYE"), - - LEADERBOARD_TYPES_DEATHS_TITLE("LEADERBOARD.TYPES.DEATHS.TITLE", DataType.STRING, - "&7Deaths Leaderboards"), - LEADERBOARD_TYPES_DEATHS_SLOT("LEADERBOARD.TYPES.DEATHS.SLOT", DataType.INT, "6"), - LEADERBOARD_TYPES_DEATHS_ENABLED_NAME("LEADERBOARD.TYPES.DEATHS.ENABLED.NAME", DataType.STRING, - "&aDeaths Leaderboard"), - LEADERBOARD_TYPES_DEATHS_DISABLED_NAME("LEADERBOARD.TYPES.DEATHS.DISABLED.NAME", DataType.STRING, - "&cDeaths Leaderboard"), - LEADERBOARD_TYPES_DEATHS_ENABLED_LORE("LEADERBOARD.TYPES.DEATHS.ENABLED.LORE", DataType.STRING_LIST, - " ", - "&7Click to view win streak leaderboards"), - LEADERBOARD_TYPES_DEATHS_DISABLED_LORE("LEADERBOARD.TYPES.DEATHS.DISABLED.LORE", DataType.STRING_LIST, - " ", - "&7Click to view death leaderboards"), - LEADERBOARD_TYPES_DEATHS_ENABLED_MATERIAL("LEADERBOARD.TYPES.DEATHS.ENABLED.MATERIAL", DataType.STRING, - "LIME_DYE"), - LEADERBOARD_TYPES_DEATHS_DISABLED_MATERIAL("LEADERBOARD.TYPES.DEATHS.DISABLED.MATERIAL", DataType.STRING, - "GRAY_DYE"), - - PARTY_SETTINGS_TITLE("PARTY.SETTINGS.NAME", DataType.STRING, "&7Party Settings"), - PARTY_SETTINGS_SIZE("PARTY.SETTINGS.SIZE", DataType.INT, "27"), - PARTY_SETTINGS_FILTER("PARTY.SETTINGS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), - PARTY_SETTINGS_PRIVACY_TITLE("PARTY.SETTINGS.PRIVACY.NAME", DataType.STRING, "&bPublic Party"), - PARTY_SETTINGS_PRIVACY_MATERIAL("PARTY.SETTINGS.PRIVACY.MATERIAL", DataType.STRING, "OAK_SIGN"), - PARTY_SETTINGS_PRIVACY_SLOT("PARTY.SETTINGS.PRIVACY.SLOT", DataType.INT, "10"), - PARTY_SETTINGS_PRIVACY_ENABLED_LORE("PARTY.SETTINGS.PRIVACY.ENABLED-LORE", DataType.STRING_LIST, - "&7Would you like for players to", - "&7join without inviting them?", - "", - " &a&l▶ &aEnabled", - " &7&l▶ &7Disabled", - " ", - "&cClick to disable."), - PARTY_SETTINGS_PRIVACY_DISABLED_LORE("PARTY.SETTINGS.PRIVACY.DISABLED-LORE", DataType.STRING_LIST, - "&7Would you like for players to", - "&7join without inviting them?", - "", - " &7&l▶ &7Enabled", - " &c&l▶ &cDisabled", - " ", - "&aClick to enable."), - PARTY_SETTINGS_MAX_SIZE_TITLE("PARTY.SETTINGS.MAX_SIZE.NAME", DataType.STRING, "&bPlayer Limit"), - PARTY_SETTINGS_MAX_SIZE_MATERIAL("PARTY.SETTINGS.MAX_SIZE.MATERIAL", DataType.STRING, "OAK_SIGN"), - PARTY_SETTINGS_MAX_SIZE_SLOT("PARTY.SETTINGS.MAX_SIZE.SLOT", DataType.INT, "11"), - PARTY_SETTINGS_MAX_SIZE_LORE("PARTY.SETTINGS.MAX_SIZE.ENABLED-LORE", DataType.STRING_LIST, - "&7Set the maximum size of the party.", - "", - "&7Current Size: ", - "", - "&aClick to increase.", - "&cRight Click to decrease."), - PARTY_SETTINGS_ADVERTISEMENTS_TITLE("PARTY.SETTINGS.ADVERTISEMENTS.NAME", DataType.STRING, "&bAdvertisements"), - PARTY_SETTINGS_ADVERTISEMENTS_MATERIAL("PARTY.SETTINGS.ADVERTISEMENTS.MATERIAL", DataType.STRING, "OAK_SIGN"), - PARTY_SETTINGS_ADVERTISEMENTS_SLOT("PARTY.SETTINGS.ADVERTISEMENTS.SLOT", DataType.INT, "12"), - PARTY_SETTINGS_ADVERTISEMENTS_LORE_NO_COOLDOWN("PARTY.SETTINGS.ADVERTISEMENTS_NO_COOLDOWN", - DataType.STRING_LIST, - "&7Send a message which", - "&7has an invitation to your party.", - "", - "&aClick to advertise."), - PARTY_SETTINGS_ADVERTISEMENTS_LORE_COOLDOWN("PARTY.SETTINGS.ADVERTISEMENTS_COOLDOWN", DataType.STRING_LIST, - "&7Send a message which", - "&7has an invitation to your party.", - "", - "&cCooldown ."), - PARTY_EVENTS_TITLE("PARTY.EVENTS.NAME", DataType.STRING, "&7Party Events"), - PARTY_EVENTS_SIZE("PARTY.EVENTS.SIZE", DataType.INT, "27"), - PARTY_EVENTS_FILTER("PARTY.EVENTS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), - PARTY_EVENTS_SPLIT_MATERIAL("PARTY.EVENTS.SPLIT.MATERIAL", DataType.STRING, "DIAMOND_SWORD"), - PARTY_EVENTS_SPLIT_SLOT("PARTY.EVENTS.SPLIT.SLOT", DataType.INT, "10"), - PARTY_EVENTS_SPLIT_NAME("PARTY.EVENTS.SPLIT.NAME", DataType.STRING, "&bParty Split"), - PARTY_EVENTS_SPLIT_LORE("PARTY.EVENTS.SPLIT.LORE", DataType.STRING_LIST, - "&7Split the party into", - "&7two teams and fight.", - " ", - "&a&lClick to start event!"), - PARTY_EVENTS_FFA_MATERIAL("PARTY.EVENTS.FFA.MATERIAL", DataType.STRING, "GOLDEN_AXE"), - PARTY_EVENTS_FFA_SLOT("PARTY.EVENTS.FFA.SLOT", DataType.INT, "12"), - PARTY_EVENTS_FFA_NAME("PARTY.EVENTS.FFA.NAME", DataType.STRING, "&bParty FFA"), - PARTY_EVENTS_FFA_LORE("PARTY.EVENTS.FFA.LORE", DataType.STRING_LIST, - "&7Players fight each other", - "&7till one is standing.", - " ", - "&a&lClick to start event!"), - - PARTY_EVENTS_KIT_SELECT_TITLE("PARTY.EVENTS.KIT.SELECT.TITLE", DataType.STRING, "&bKit Select"), - PARTY_EVENTS_KIT_SELECT_NAME("PARTY.EVENTS.KIT.SELECT.ITEM-NAME", DataType.STRING, "&b"), - PARTY_EVENTS_KIT_SELECT_LORE("PARTY.EVENTS.KIT.SELECT.LORE", DataType.STRING_LIST, " ", - "&a&lClick to select kit"), - PARTY_EVENTS_KIT_SELECT_SIZE("PARTY.EVENTS.KIT.SELECT.SIZE", DataType.INT, "27"), - - PARTY_DUEL_TITLE("PARTY.DUEL.NAME", DataType.STRING, "&6Party Duel"), - PARTY_DUEL_STARTING_SLOT("PARTY.DUEL.STARTING-SLOT", DataType.INT, "1"), - - PARTY_DUEL_SIZE("PARTY.DUEL.SIZE", DataType.INT, "54"), - PARTY_DUEL_FILTER("PARTY.DUEL.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), - PARTY_DUEL_PARTY_TITLE("PARTY.DUEL.PARTY.TITLE", DataType.STRING, "&e's party"), - PARTY_DUEL_PARTY_LORE("PARTY.DUEL.PARTY.MEMBER", DataType.STRING_LIST, "&7- &f"), - - DIVISIONS_TITLE("DIVISIONS.TITLE", DataType.STRING, "&7Divisions"), - DIVISIONS_SIZE("DIVISIONS.SIZE", DataType.INT, "36"), - DIVISIONS_FILTER("DIVISIONS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), - DIVISIONS_ITEM_NAME("DIVISIONS.ITEM.NAME", DataType.STRING, ""), - DIVISIONS_LORE("DIVISIONS.LORE", DataType.STRING_LIST, - "&7To reach this rank, you", "&7need elo."), - PASSED_DIVISIONS_ITEM_NAME("DIVISIONS.PASSED.ITEM.NAME", DataType.STRING, "&a✅ "), - PASSED_DIVISIONS_LORE("DIVISIONS.PASSED.LORE", DataType.STRING_LIST, - "&7You have already reached", "&7this rank."), - DIVISIONS_ELO_BUTTON_ENABLED("DIVISIONS.ELO_BUTTON.ENABLED", DataType.BOOLEAN, "true"), - DIVISIONS_ELO_BUTTON_MATERIAL("DIVISIONS.ELO_BUTTON.MATERIAL", DataType.STRING, "COAL_BLOCK"), - DIVISIONS_ELO_BUTTON_SLOT("DIVISIONS.ELO_BUTTON.SLOT", DataType.INT, "31"), - DIVISIONS_ELO_BUTTON_NAME("DIVISIONS.ELO_BUTTON.NAME", DataType.STRING, "&aYour Elo: &b"), - DIVISIONS_ELO_BUTTON_LORE("DIVISIONS.ELO_BUTTON.LORE", DataType.STRING_LIST, - ""), - SETTINGS_TITLE("SETTINGS.TITLE", DataType.STRING, "&7Profile Settings"), - SETTINGS_SIZE("SETTINGS.SIZE", DataType.INT, "27"), - SETTINGS_FILTER("SETTINGS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), - - SETTINGS_PLAYER_VISIBILITY_MATERIAL("SETTINGS.PLAYER-VISIBILITY.MATERIAL", DataType.STRING, "ENDER_EYE"), - SETTINGS_PLAYER_VISIBILITY_TITLE("SETTINGS.PLAYER-VISIBILITY.NAME", DataType.STRING, "&bPlayer Visibility"), - SETTINGS_PLAYER_VISIBILITY_LORE_ENABLED("SETTINGS.PLAYER-VISIBILITY.LORE_ENABLED", DataType.STRING_LIST, - "&7Toggle Player Visibility", - "&7in spawn.", - "", - " &a&l▶ &aEnabled", - " &7&l▶ &7Disabled", - " ", - "&cClick to disable."), - SETTINGS_PLAYER_VISIBILITY_LORE_DISABLED("SETTINGS.PLAYER-VISIBILITY.LORE_DISABLED", DataType.STRING_LIST, - "&7Toggle Player Visibility", - "&7in spawn.", - "", - " &7&l▶ &7Enabled", - " &c&l▶ &cDisabled", - " ", - "&aClick to enable."), - SETTINGS_PLAYER_VISIBILITY_SLOT("SETTINGS.PLAYER-VISIBILITY.SLOT", DataType.INT, "10"), - SETTINGS_ALLOW_SPECTATORS_MATERIAL("SETTINGS.ALLOW-SPECTATORS.MATERIAL", DataType.STRING, "EGG"), - SETTINGS_ALLOW_SPECTATORS_TITLE("SETTINGS.ALLOW-SPECTATORS.NAME", DataType.STRING, "&bAllow Spectators"), - SETTINGS_ALLOW_SPECTATORS_LORE_ENABLED("SETTINGS.ALLOW-SPECTATORS.LORE_ENABLED", DataType.STRING_LIST, - "&7Allow Spectators to", - "&7spectate your match.", - "", - " &a&l▶ &aEnabled", - " &7&l▶ &7Disabled", - " ", - "&cClick to disable."), - SETTINGS_ALLOW_SPECTATORS_LORE_DISABLED("SETTINGS.ALLOW-SPECTATORS.LORE_DISABLED", DataType.STRING_LIST, - "&7Allow Spectators to", - "&7spectate your match.", - "", - " &7&l▶ &7Enabled", - " &c&l▶ &cDisabled", - " ", - "&aClick to enable."), - SETTINGS_ALLOW_SPECTATORS_SLOT("SETTINGS.ALLOW-SPECTATORS.SLOT", DataType.INT, "11"), - SETTINGS_ALLOW_DUEL_REQUESTS_MATERIAL("SETTINGS.ALLOW-DUEL-REQUESTS.MATERIAL", DataType.STRING, - "DIAMOND_SWORD"), - SETTINGS_ALLOW_DUEL_REQUESTS_TITLE("SETTINGS.ALLOW-DUEL-REQUESTS.NAME", DataType.STRING, - "&bAllow Duel requests"), - SETTINGS_ALLOW_DUEL_REQUESTS_LORE_ENABLED("SETTINGS.ALLOW-DUEL-REQUESTS.LORE_ENABLED", DataType.STRING_LIST, - "&7Allow players to", - "&7send you duel requests.", - "", - " &a&l▶ &aEnabled", - " &7&l▶ &7Disabled", - " ", - "&cClick to disable."), - SETTINGS_ALLOW_DUEL_REQUESTS_LORE_DISABLED("SETTINGS.ALLOW-DUEL-REQUESTS.LORE_DISABLED", DataType.STRING_LIST, - "&7Allow players to", - "&7send you duel requests.", - "", - " &7&l▶ &7Enabled", - " &c&l▶ &cDisabled", - " ", - "&aClick to enable."), - SETTINGS_ALLOW_DUEL_REQUESTS_SLOT("SETTINGS.ALLOW-DUEL-REQUESTS.SLOT", DataType.INT, "12"), - SETTINGS_ALLOW_PARTY_REQUESTS_MATERIAL("SETTINGS.ALLOW-PARTY-REQUESTS.MATERIAL", DataType.STRING, "STICK"), - SETTINGS_ALLOW_PARTY_REQUESTS_TITLE("SETTINGS.ALLOW-PARTY-REQUESTS.NAME", DataType.STRING, - "&bAllow Party requests"), - SETTINGS_ALLOW_PARTY_REQUESTS_LORE_ENABLED("SETTINGS.ALLOW-PARTY-REQUESTS.LORE_ENABLED", DataType.STRING_LIST, - "&7Allow players to", - "&7send you party requests.", - "", - " &a&l▶ &aEnabled", - " &7&l▶ &7Disabled", - " ", - "&cClick to disable."), - SETTINGS_ALLOW_PARTY_REQUESTS_LORE_DISABLED("SETTINGS.ALLOW-PARTY-REQUESTS.LORE_DISABLED", DataType.STRING_LIST, - "&7Allow players to", - "&7send you party requests.", - "", - " &7&l▶ &7Enabled", - " &c&l▶ &cDisabled", - " ", - "&aClick to enable."), - SETTINGS_ALLOW_PARTY_REQUESTS_SLOT("SETTINGS.ALLOW-PARTY-REQUESTS.SLOT", DataType.INT, "13"), - SETTINGS_PING_RANGE_MATERIAL("SETTINGS.PING-RANGE.MATERIAL", DataType.STRING, "BOOK"), - SETTINGS_PING_RANGE_TITLE("SETTINGS.PING-RANGE.NAME", DataType.STRING, "&bPing Range"), - SETTINGS_PING_RANGE_LORE("SETTINGS.PING-RANGE.LORE", DataType.STRING_LIST, - "&7Set Max ping you", - "&7can match against.", - "", - " &7Current Ping-range: &b", - " ", - "&a + Left Click to increase", - "&c - Right Click to decrease"), - SETTINGS_PING_RANGE_SLOT("SETTINGS.PING-RANGE.SLOT", DataType.INT, "14"), - SETTINGS_COSMETICS_MATERIAL("SETTINGS.SETTINGS.COSMETICS.MATERIAL", DataType.STRING, "CAKE"), - SETTINGS_COSMETICS_TITLE("SETTINGS.SETTINGS.COSMETICS.NAME", DataType.STRING, "&bManage Cosmetics"), - SETTINGS_COSMETICS_LORE("SETTINGS.SETTINGS.COSMETICS.LORE", DataType.STRING_LIST, - "&7Manage unlocked cosmetics", - "", - " &7Current Kill Effect: &b", - " &7Current Kill Message: &b", - " &7Current Armor Trim: &b", - " &7Current Shield Pattern: &b", - " ", - "&aClick to open cosmetics menu"), - SETTINGS_COSMETICS_SLOT("SETTINGS.SETTINGS.COSMETICS.SLOT", DataType.INT, "15"), - COSMETICS_SIZE("SETTINGS.COSMETICS.SIZE", DataType.INT, "27"), - COSMETICS_FILTER("SETTINGS.COSMETICS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), - COSMETICS_TITLE("SETTINGS.COSMETICS.TITLE", DataType.STRING, "&7Cosmetics Management"), - KILL_EFFECTS_SLOT("SETTINGS.COSMETICS.KILL-EFFECTS.SLOT", DataType.INT, "10"), - KILL_EFFECTS_NAME("SETTINGS.COSMETICS.KILL-EFFECTS.NAME", DataType.STRING, "&bKill Effects"), - KILL_EFFECTS_LORE("SETTINGS.COSMETICS.KILL-EFFECTS.LORE", DataType.STRING_LIST, - "&7View all available kill effects", " ", "&aClick to open"), - KILL_EFFECTS_MATERIAL("SETTINGS.COSMETICS.KILL-EFFECTS.MATERIAL", DataType.STRING, "REDSTONE"), - KILL_EFFECTS_TITLE("SETTINGS.KILL-EFFECTS.TITLE", DataType.STRING, "&7Kill Effects"), - KILL_EFFECTS_SIZE("SETTINGS.KILL-EFFECTS.SIZE", DataType.INT, "27"), - KILL_EFFECTS_FILTER("SETTINGS.KILL-EFFECTS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), - KILL_EFFECTS_NAME_SELECTED("SETTINGS.KILL-EFFECTS.SELECTED.NAME", DataType.STRING, - " &7&o(Selected)"), - KILL_EFFECTS_NAME_NOT_SELECTED("SETTINGS.KILL-EFFECTS.UNSELECTED.NAME", DataType.STRING, ""), - KILL_EFFECTS_SELECTED_LORE("SETTINGS.KILL-EFFECTS.SELECTED.LORE", DataType.STRING_LIST, - " ", "&eCurrently Selected"), - KILL_EFFECTS_UNSELECTED_LORE("SETTINGS.KILL-EFFECTS.UNSELECTED.LORE", DataType.STRING_LIST, - " ", "&aClick to select"), - KILL_EFFECTS_NO_PERMISSION_LORE("SETTINGS.KILL-EFFECTS.NO-PERMISSION.LORE", DataType.STRING_LIST, - " ", "&cNo permission"), - SETTINGS_MENU_SOUNDS_MATERIAL("SETTINGS.MENU-SOUNDS.MATERIAL", DataType.STRING, "BOOK"), - SETTINGS_MENU_SOUNDS_TITLE("SETTINGS.MENU-SOUNDS.NAME", DataType.STRING, "&bMenu Sounds"), - SETTINGS_MENU_SOUNDS_LORE_ENABLED("SETTINGS.MENU-SOUNDS.LORE_ENABLED", DataType.STRING_LIST, - "&7Play a sound when clicking.", - "&7a button", - " ", - " &a&l▶ &aEnabled", - " &7&l▶ &7Disabled", - " ", - "&cClick to disable."), - SETTINGS_MENU_SOUNDS_LORE_DISABLED("SETTINGS.MENU-SOUNDS.LORE_DISABLED", DataType.STRING_LIST, - "&7Play a sound when clicking", - "&7a button.", - "", - " &7&l▶ &7Enabled", - " &c&l▶ &cDisabled", - " ", - "&aClick to enable."), - SETTINGS_MENU_SOUNDS_SLOT("SETTINGS.MENU-SOUNDS.SLOT", DataType.INT, "16"), - KILL_MESSAGES_TITLE("SETTINGS.KILL-MESSAGES.TITLE", DataType.STRING, "&7Kill Messages"), - KILL_MESSAGES_SIZE("SETTINGS.KILL-MESSAGES.SIZE", DataType.INT, "27"), - KILL_MESSAGES_FILTER("SETTINGS.KILL-MESSAGES.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), - KILL_MESSAGES_SLOT("SETTINGS.COSMETICS.KILL-MESSAGES.SLOT", DataType.INT, "11"), - KILL_MESSAGES_NAME("SETTINGS.COSMETICS.KILL-MESSAGES.NAME", DataType.STRING, "&bKill Messages"), - KILL_MESSAGES_MATERIAL("SETTINGS.COSMETICS.KILL-MESSAGES.MATERIAL", DataType.STRING, "BOOK"), - KILL_MESSAGES_LORE("SETTINGS.COSMETICS.KILL-MESSAGES.LORE", DataType.STRING_LIST, - "&7View all available kill messages", " ", "&aClick to open"), - KILL_MESSAGES_NAME_SELECTED("SETTINGS.KILL-MESSAGES.SELECTED.NAME", DataType.STRING, - " &7&o(Selected)"), - KILL_MESSAGES_NAME_NOT_SELECTED("SETTINGS.KILL-MESSAGES.UNSELECTED.NAME", DataType.STRING, ""), - KILL_MESSAGES_SELECTED_LORE("SETTINGS.KILL-MESSAGES.SELECTED.LORE", DataType.STRING_LIST, - " ", - "", - " ", - "&eCurrently Selected"), - KILL_MESSAGES_UNSELECTED_LORE("SETTINGS.KILL-MESSAGES.UNSELECTED.LORE", DataType.STRING_LIST, - " ", - "", - " ", - "&aClick to select"), - KILL_MESSAGES_NO_PERMISSION_LORE("SETTINGS.KILL-MESSAGES.NO-PERMISSION.LORE", DataType.STRING_LIST, - " ", - "", - " ", - "&cNo permission"), - ARMOR_TRIMS_TITLE("SETTINGS.ARMOR-TRIMS.TITLE", DataType.STRING, "&7Armor Trims"), - ARMOR_TRIMS_FILTER("SETTINGS.ARMOR-TRIMS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), - ARMOR_TRIMS_SLOT("SETTINGS.COSMETICS.ARMOR-TRIMS.SLOT", DataType.INT, "12"), - ARMOR_TRIMS_NAME("SETTINGS.COSMETICS.ARMOR-TRIMS.NAME", DataType.STRING, "&bArmor Trims"), - ARMOR_TRIMS_MATERIAL("SETTINGS.COSMETICS.ARMOR-TRIMS.MATERIAL", DataType.STRING, "NETHERITE_CHESTPLATE"), - ARMOR_TRIMS_LORE("SETTINGS.COSMETICS.ARMOR-TRIMS.LORE", DataType.STRING_LIST, - "&7View all available armor trims", " ", "&aClick to open"), - ARMOR_TRIMS_NAME_SELECTED("SETTINGS.ARMOR-TRIMS.SELECTED.NAME", DataType.STRING, - " &7&o(Selected)"), - ARMOR_TRIMS_NAME_NOT_SELECTED("SETTINGS.ARMOR-TRIMS.UNSELECTED.NAME", DataType.STRING, ""), - ARMOR_TRIMS_DISPLAY_HELMET_MATERIAL("SETTINGS.ARMOR-TRIMS.DISPLAY.HELMET.MATERIAL", DataType.STRING, "netherite_helmet"), - ARMOR_TRIMS_DISPLAY_CHESTPLATE_MATERIAL("SETTINGS.ARMOR-TRIMS.DISPLAY.CHESTPLATE.MATERIAL", DataType.STRING, "netherite_chestplate"), - ARMOR_TRIMS_DISPLAY_LEGGINGS_MATERIAL("SETTINGS.ARMOR-TRIMS.DISPLAY.LEGGINGS.MATERIAL", DataType.STRING, "netherite_leggings"), - ARMOR_TRIMS_DISPLAY_BOOTS_MATERIAL("SETTINGS.ARMOR-TRIMS.DISPLAY.BOOTS.MATERIAL", DataType.STRING, "netherite_boots"), - ARMOR_TRIMS_SELECTED_LORE("SETTINGS.ARMOR-TRIMS.SELECTED.LORE", DataType.STRING_LIST, - " ", - "", - " ", - "&eCurrently Selected"), - ARMOR_TRIMS_UNSELECTED_LORE("SETTINGS.ARMOR-TRIMS.UNSELECTED.LORE", DataType.STRING_LIST, - " ", - "", - " ", - "&aClick to select"), - ARMOR_TRIMS_NO_PERMISSION_LORE("SETTINGS.ARMOR-TRIMS.NO-PERMISSION.LORE", DataType.STRING_LIST, - " ", - "", - " ", - "&cNo permission"), - SHIELD_PATTERNS_TITLE("SETTINGS.SHIELD-PATTERNS.TITLE", DataType.STRING, "&7Shield Patterns"), - SHIELD_PATTERNS_SIZE("SETTINGS.SHIELD-PATTERNS.SIZE", DataType.INT, "27"), - SHIELD_PATTERNS_FILTER("SETTINGS.SHIELD-PATTERNS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), - SHIELD_PATTERNS_SLOT("SETTINGS.COSMETICS.SHIELD-PATTERNS.SLOT", DataType.INT, "13"), - SHIELD_PATTERNS_NAME("SETTINGS.COSMETICS.SHIELD-PATTERNS.NAME", DataType.STRING, "&bShield Patterns"), - SHIELD_PATTERNS_MATERIAL("SETTINGS.COSMETICS.SHIELD-PATTERNS.MATERIAL", DataType.STRING, "SHIELD"), - SHIELD_PATTERNS_LORE("SETTINGS.COSMETICS.SHIELD-PATTERNS.LORE", DataType.STRING_LIST, - "&7View all available shield pattern", " ", "&aClick to open"), - SHIELD_PATTERNS_NAME_SELECTED("SETTINGS.SHIELD-PATTERNS.SELECTED.NAME", DataType.STRING, - " &7&o(Selected)"), - SHIELD_PATTERNS_NAME_NOT_SELECTED("SETTINGS.SHIELD-PATTERNS.UNSELECTED.NAME", DataType.STRING, ""), - SHIELD_PATTERNS_SELECTED_LORE("SETTINGS.SHIELD-PATTERNS.SELECTED.LORE", DataType.STRING_LIST, - " ", - " ", - " ", - "&eCurrently Selected"), - SHIELD_PATTERNS_UNSELECTED_LORE("SETTINGS.SHIELD-PATTERNS.UNSELECTED.LORE", DataType.STRING_LIST, - " ", - " ", - " ", - "&aClick to select"), - SHIELD_PATTERNS_NO_PERMISSION_LORE("SETTINGS.SHIELD-PATTERNS.NO-PERMISSION.LORE", DataType.STRING_LIST, - " ", - " ", - " ", - "&cNo permission"), - - CUSTOM_KIT_TITLE("CUSTOM_KIT.MENU.TITLE", DataType.STRING, "&bCustom Kits"), - CUSTOM_KIT_HOST_TITLE("CUSTOM_KIT.MENU.HOST_TITLE", DataType.STRING, "&bSelect a Kit to Host"), - CUSTOM_KIT_SIZE("CUSTOM_KIT.MENU.SIZE", DataType.INT, "27"), - CUSTOM_KIT_FILTER("CUSTOM_KIT.MENU.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "NONE"), - CUSTOM_KIT_ITEM_NAME("CUSTOM_KIT.MENU.KIT.NAME", DataType.STRING, ""), - CUSTOM_KIT_ITEM_MANAGE_LORE("CUSTOM_KIT.MENU.KIT.MANAGE-LORE", DataType.STRING_LIST, "&7Click to manage"), - CUSTOM_KIT_ITEM_HOST_LORE("CUSTOM_KIT.MENU.KIT.HOST-LORE", DataType.STRING_LIST, "&aClick to host this kit"), - CUSTOM_KIT_CREATE_SLOT("CUSTOM_KIT.MENU.CREATE.SLOT", DataType.INT, "22"), - CUSTOM_KIT_CREATE_MATERIAL("CUSTOM_KIT.MENU.CREATE.MATERIAL", DataType.STRING, "LIME_DYE"), - CUSTOM_KIT_CREATE_NAME("CUSTOM_KIT.MENU.CREATE.NAME", DataType.STRING, "&aCreate Kit"), - CUSTOM_KIT_CREATE_LORE("CUSTOM_KIT.MENU.CREATE.LORE", DataType.STRING_LIST, "&7Kits: &f&7/&f"), - - CUSTOM_KIT_MANAGE_TITLE("CUSTOM_KIT.MANAGE.TITLE", DataType.STRING, "&bEditing: "), - CUSTOM_KIT_MANAGE_SIZE("CUSTOM_KIT.MANAGE.SIZE", DataType.INT, "45"), - CUSTOM_KIT_MANAGE_FILTER("CUSTOM_KIT.MANAGE.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), - CUSTOM_KIT_MANAGE_EDIT_ITEMS_SLOT("CUSTOM_KIT.MANAGE.EDIT-ITEMS.SLOT", DataType.INT, "10"), - CUSTOM_KIT_MANAGE_EDIT_ITEMS_MATERIAL("CUSTOM_KIT.MANAGE.EDIT-ITEMS.MATERIAL", DataType.STRING, "CHEST"), - CUSTOM_KIT_MANAGE_EDIT_ITEMS_NAME("CUSTOM_KIT.MANAGE.EDIT-ITEMS.NAME", DataType.STRING, "&aEdit Items"), - CUSTOM_KIT_MANAGE_RULES_SLOT("CUSTOM_KIT.MANAGE.RULES.SLOT", DataType.INT, "11"), - CUSTOM_KIT_MANAGE_RULES_MATERIAL("CUSTOM_KIT.MANAGE.RULES.MATERIAL", DataType.STRING, "COMPARATOR"), - CUSTOM_KIT_MANAGE_RULES_NAME("CUSTOM_KIT.MANAGE.RULES.NAME", DataType.STRING, "&eRules"), - CUSTOM_KIT_MANAGE_ARENAS_SLOT("CUSTOM_KIT.MANAGE.ARENAS.SLOT", DataType.INT, "12"), - CUSTOM_KIT_MANAGE_ARENAS_MATERIAL("CUSTOM_KIT.MANAGE.ARENAS.MATERIAL", DataType.STRING, "MAP"), - CUSTOM_KIT_MANAGE_ARENAS_NAME("CUSTOM_KIT.MANAGE.ARENAS.NAME", DataType.STRING, "&eArenas"), - CUSTOM_KIT_MANAGE_WHITELIST_SLOT("CUSTOM_KIT.MANAGE.WHITELIST.SLOT", DataType.INT, "13"), - CUSTOM_KIT_MANAGE_WHITELIST_MATERIAL("CUSTOM_KIT.MANAGE.WHITELIST.MATERIAL", DataType.STRING, "GRASS_BLOCK"), - CUSTOM_KIT_MANAGE_WHITELIST_NAME("CUSTOM_KIT.MANAGE.WHITELIST.NAME", DataType.STRING, "&eWhitelisted Blocks"), - CUSTOM_KIT_MANAGE_EFFECTS_SLOT("CUSTOM_KIT.MANAGE.EFFECTS.SLOT", DataType.INT, "14"), - CUSTOM_KIT_MANAGE_EFFECTS_MATERIAL("CUSTOM_KIT.MANAGE.EFFECTS.MATERIAL", DataType.STRING, "BREWING_STAND"), - CUSTOM_KIT_MANAGE_EFFECTS_NAME("CUSTOM_KIT.MANAGE.EFFECTS.NAME", DataType.STRING, "&ePotion Effects"), - CUSTOM_KIT_MANAGE_ICON_SLOT("CUSTOM_KIT.MANAGE.ICON.SLOT", DataType.INT, "15"), - CUSTOM_KIT_MANAGE_ICON_MATERIAL("CUSTOM_KIT.MANAGE.ICON.MATERIAL", DataType.STRING, "ITEM_FRAME"), - CUSTOM_KIT_MANAGE_ICON_NAME("CUSTOM_KIT.MANAGE.ICON.NAME", DataType.STRING, "&eSet Icon"), - CUSTOM_KIT_MANAGE_HEALTH_SLOT("CUSTOM_KIT.MANAGE.HEALTH.SLOT", DataType.INT, "16"), - CUSTOM_KIT_MANAGE_HEALTH_MATERIAL("CUSTOM_KIT.MANAGE.HEALTH.MATERIAL", DataType.STRING, "GOLDEN_APPLE"), - CUSTOM_KIT_MANAGE_HEALTH_NAME("CUSTOM_KIT.MANAGE.HEALTH.NAME", DataType.STRING, "&eSet Health"), - CUSTOM_KIT_MANAGE_HEALTH_LORE("CUSTOM_KIT.MANAGE.HEALTH.LORE", DataType.STRING_LIST, "&7Current: &f"), - CUSTOM_KIT_MANAGE_DELETE_SLOT("CUSTOM_KIT.MANAGE.DELETE.SLOT", DataType.INT, "31"), - CUSTOM_KIT_MANAGE_DELETE_MATERIAL("CUSTOM_KIT.MANAGE.DELETE.MATERIAL", DataType.STRING, "TNT"), - CUSTOM_KIT_MANAGE_DELETE_NAME("CUSTOM_KIT.MANAGE.DELETE.NAME", DataType.STRING, "&cDelete Kit"), - CUSTOM_KIT_MANAGE_DELETE_LORE("CUSTOM_KIT.MANAGE.DELETE.LORE", DataType.STRING_LIST, "&7Shift-click to delete"), - CUSTOM_KIT_MANAGE_RETURN_SLOT("CUSTOM_KIT.MANAGE.RETURN-SLOT", DataType.INT, "40"), - - CUSTOM_KIT_RULES_TITLE("CUSTOM_KIT.RULES.TITLE", DataType.STRING, "&eCustom Kit Rules"), - CUSTOM_KIT_RULES_SIZE("CUSTOM_KIT.RULES.SIZE", DataType.INT, "54"), - - KIT_RULE_HIDDEN_ENABLED_NAME("KIT_RULES.HIDDEN.ENABLED-NAME", DataType.STRING, "&aHidden"), - KIT_RULE_HIDDEN_DISABLED_NAME("KIT_RULES.HIDDEN.DISABLED-NAME", DataType.STRING, "&cHidden"), - KIT_RULE_HIDDEN_LORE("KIT_RULES.HIDDEN.LORE", DataType.STRING_LIST, "&7If the kit shouldn't appear in the queue and party events menu (Used mainly for FFA-only kits)", "", "&7Click to toggle"), - KIT_RULE_HIDDEN_MATERIAL("KIT_RULES.HIDDEN.MATERIAL", DataType.STRING, "REDSTONE_TORCH"), - KIT_RULE_BUILD_ENABLED_NAME("KIT_RULES.BUILD.ENABLED-NAME", DataType.STRING, "&aBuild"), - KIT_RULE_BUILD_DISABLED_NAME("KIT_RULES.BUILD.DISABLED-NAME", DataType.STRING, "&cBuild"), - KIT_RULE_BUILD_LORE("KIT_RULES.BUILD.LORE", DataType.STRING_LIST, "&7Allow/Deny Players to place and break blocks placed by them.", "", "&7Click to toggle"), - KIT_RULE_BUILD_MATERIAL("KIT_RULES.BUILD.MATERIAL", DataType.STRING, "LAVA_BUCKET"), - KIT_RULE_HUNGER_ENABLED_NAME("KIT_RULES.HUNGER.ENABLED-NAME", DataType.STRING, "&aHunger"), - KIT_RULE_HUNGER_DISABLED_NAME("KIT_RULES.HUNGER.DISABLED-NAME", DataType.STRING, "&cHunger"), - KIT_RULE_HUNGER_LORE("KIT_RULES.HUNGER.LORE", DataType.STRING_LIST, "&7Allow/Deny Players losing Hunger", "", "&7Click to toggle"), - KIT_RULE_HUNGER_MATERIAL("KIT_RULES.HUNGER.MATERIAL", DataType.STRING, "COOKED_BEEF"), - KIT_RULE_SUMO_ENABLED_NAME("KIT_RULES.SUMO.ENABLED-NAME", DataType.STRING, "&aSumo"), - KIT_RULE_SUMO_DISABLED_NAME("KIT_RULES.SUMO.DISABLED-NAME", DataType.STRING, "&cSumo"), - KIT_RULE_SUMO_LORE("KIT_RULES.SUMO.LORE", DataType.STRING_LIST, "&7Allow/Deny Sumo", "", "&7Click to toggle"), - KIT_RULE_SUMO_MATERIAL("KIT_RULES.SUMO.MATERIAL", DataType.STRING, "LEAD"), - KIT_RULE_FALL_DAMAGE_ENABLED_NAME("KIT_RULES.FALL_DAMAGE.ENABLED-NAME", DataType.STRING, "&aFall Damage"), - KIT_RULE_FALL_DAMAGE_DISABLED_NAME("KIT_RULES.FALL_DAMAGE.DISABLED-NAME", DataType.STRING, "&cFall Damage"), - KIT_RULE_FALL_DAMAGE_LORE("KIT_RULES.FALL_DAMAGE.LORE", DataType.STRING_LIST, "&7Allow/Deny Player to take Fall Damage", "", "&7Click to toggle"), - KIT_RULE_FALL_DAMAGE_MATERIAL("KIT_RULES.FALL_DAMAGE.MATERIAL", DataType.STRING, "DIAMOND"), - KIT_RULE_DENY_MOVEMENT_ENABLED_NAME("KIT_RULES.DENY_MOVEMENT.ENABLED-NAME", DataType.STRING, "&aDeny Movement"), - KIT_RULE_DENY_MOVEMENT_DISABLED_NAME("KIT_RULES.DENY_MOVEMENT.DISABLED-NAME", DataType.STRING, "&cDeny Movement"), - KIT_RULE_DENY_MOVEMENT_LORE("KIT_RULES.DENY_MOVEMENT.LORE", DataType.STRING_LIST, "&7Allow/Deny Movement on match start", "", "&7Click to toggle"), - KIT_RULE_DENY_MOVEMENT_MATERIAL("KIT_RULES.DENY_MOVEMENT.MATERIAL", DataType.STRING, "WATER_BUCKET"), - KIT_RULE_BOXING_ENABLED_NAME("KIT_RULES.BOXING.ENABLED-NAME", DataType.STRING, "&aBoxing"), - KIT_RULE_BOXING_DISABLED_NAME("KIT_RULES.BOXING.DISABLED-NAME", DataType.STRING, "&cBoxing"), - KIT_RULE_BOXING_LORE("KIT_RULES.BOXING.LORE", DataType.STRING_LIST, "&7Allow/Deny Boxing", "", "&7Click to toggle"), - KIT_RULE_BOXING_MATERIAL("KIT_RULES.BOXING.MATERIAL", DataType.STRING, "DIAMOND_CHESTPLATE"), - KIT_RULE_ALLOW_ARENA_BREAK_ENABLED_NAME("KIT_RULES.ALLOW_ARENA_BREAK.ENABLED-NAME", DataType.STRING, "&aArena Break"), - KIT_RULE_ALLOW_ARENA_BREAK_DISABLED_NAME("KIT_RULES.ALLOW_ARENA_BREAK.DISABLED-NAME", DataType.STRING, "&cArena Break"), - KIT_RULE_ALLOW_ARENA_BREAK_LORE("KIT_RULES.ALLOW_ARENA_BREAK.LORE", DataType.STRING_LIST, "&7Allow Players to break blocks from the arena (They need to be whitelisted)", "", "&7Click to toggle"), - KIT_RULE_ALLOW_ARENA_BREAK_MATERIAL("KIT_RULES.ALLOW_ARENA_BREAK.MATERIAL", DataType.STRING, "WOODEN_AXE"), - KIT_RULE_DAMAGE_ENABLED_NAME("KIT_RULES.DAMAGE.ENABLED-NAME", DataType.STRING, "&aDamage"), - KIT_RULE_DAMAGE_DISABLED_NAME("KIT_RULES.DAMAGE.DISABLED-NAME", DataType.STRING, "&cDamage"), - KIT_RULE_DAMAGE_LORE("KIT_RULES.DAMAGE.LORE", DataType.STRING_LIST, "&7Allow/Deny Players to take Damage", "", "&7Click to toggle"), - KIT_RULE_DAMAGE_MATERIAL("KIT_RULES.DAMAGE.MATERIAL", DataType.STRING, "DIAMOND_SWORD"), - KIT_RULE_SATURATION_HEAL_ENABLED_NAME("KIT_RULES.SATURATION_HEAL.ENABLED-NAME", DataType.STRING, "&aNatural Regeneration"), - KIT_RULE_SATURATION_HEAL_DISABLED_NAME("KIT_RULES.SATURATION_HEAL.DISABLED-NAME", DataType.STRING, "&cNatural Regeneration"), - KIT_RULE_SATURATION_HEAL_LORE("KIT_RULES.SATURATION_HEAL.LORE", DataType.STRING_LIST, "&7If Players should regen from saturation", "", "&7Click to toggle"), - KIT_RULE_SATURATION_HEAL_MATERIAL("KIT_RULES.SATURATION_HEAL.MATERIAL", DataType.STRING, "GOLDEN_APPLE"), - KIT_RULE_SHOW_HP_ENABLED_NAME("KIT_RULES.SHOW_HP.ENABLED-NAME", DataType.STRING, "&aShow Health"), - KIT_RULE_SHOW_HP_DISABLED_NAME("KIT_RULES.SHOW_HP.DISABLED-NAME", DataType.STRING, "&cShow Health"), - KIT_RULE_SHOW_HP_LORE("KIT_RULES.SHOW_HP.LORE", DataType.STRING_LIST, "&7If players should see their enemies health under their name", "", "&7Click to toggle"), - KIT_RULE_SHOW_HP_MATERIAL("KIT_RULES.SHOW_HP.MATERIAL", DataType.STRING, "APPLE"), - KIT_RULE_ALLOW_KIT_EDITOR_ENABLED_NAME("KIT_RULES.ALLOW_KIT_EDITOR.ENABLED-NAME", DataType.STRING, "&aAllow Kit Editor"), - KIT_RULE_ALLOW_KIT_EDITOR_DISABLED_NAME("KIT_RULES.ALLOW_KIT_EDITOR.DISABLED-NAME", DataType.STRING, "&cAllow Kit Editor"), - KIT_RULE_ALLOW_KIT_EDITOR_LORE("KIT_RULES.ALLOW_KIT_EDITOR.LORE", DataType.STRING_LIST, "&7If players should be able to modify this kit in kiteditor.", "", "&7Click to toggle"), - KIT_RULE_ALLOW_KIT_EDITOR_MATERIAL("KIT_RULES.ALLOW_KIT_EDITOR.MATERIAL", DataType.STRING, "WOODEN_AXE"), - KIT_RULE_ALLOW_PARTY_ENABLED_NAME("KIT_RULES.ALLOW_PARTY.ENABLED-NAME", DataType.STRING, "&aAllow Party Events"), - KIT_RULE_ALLOW_PARTY_DISABLED_NAME("KIT_RULES.ALLOW_PARTY.DISABLED-NAME", DataType.STRING, "&cAllow Party Events"), - KIT_RULE_ALLOW_PARTY_LORE("KIT_RULES.ALLOW_PARTY.LORE", DataType.STRING_LIST, "&7If players should be able to play this kit in party events.", "", "&7Click to toggle"), - KIT_RULE_ALLOW_PARTY_MATERIAL("KIT_RULES.ALLOW_PARTY.MATERIAL", DataType.STRING, "PARROT_SPAWN_EGG"), - KIT_RULE_BED_WARS_ENABLED_NAME("KIT_RULES.BED_WARS.ENABLED-NAME", DataType.STRING, "&aBedwars"), - KIT_RULE_BED_WARS_DISABLED_NAME("KIT_RULES.BED_WARS.DISABLED-NAME", DataType.STRING, "&cBedwars"), - KIT_RULE_BED_WARS_LORE("KIT_RULES.BED_WARS.LORE", DataType.STRING_LIST, "&7Allow/Deny Bedwars", "", "&7Click to toggle"), - KIT_RULE_BED_WARS_MATERIAL("KIT_RULES.BED_WARS.MATERIAL", DataType.STRING, "RED_BED"), - KIT_RULE_PARKOUR_ENABLED_NAME("KIT_RULES.PARKOUR.ENABLED-NAME", DataType.STRING, "&aParkour"), - KIT_RULE_PARKOUR_DISABLED_NAME("KIT_RULES.PARKOUR.DISABLED-NAME", DataType.STRING, "&cParkour"), - KIT_RULE_PARKOUR_LORE("KIT_RULES.PARKOUR.LORE", DataType.STRING_LIST, "&7Allow/Deny Parkour", "", "&7Click to toggle"), - KIT_RULE_PARKOUR_MATERIAL("KIT_RULES.PARKOUR.MATERIAL", DataType.STRING, "ENDER_PEARL"), - KIT_RULE_RESET_ARENA_AFTER_ROUND_ENABLED_NAME("KIT_RULES.RESET_ARENA_AFTER_ROUND.ENABLED-NAME", DataType.STRING, "&aReset Arena After Round"), - KIT_RULE_RESET_ARENA_AFTER_ROUND_DISABLED_NAME("KIT_RULES.RESET_ARENA_AFTER_ROUND.DISABLED-NAME", DataType.STRING, "&cReset Arena After Round"), - KIT_RULE_RESET_ARENA_AFTER_ROUND_LORE("KIT_RULES.RESET_ARENA_AFTER_ROUND.LORE", DataType.STRING_LIST, "&7If the arena should be reset after the round", "", "&7Click to toggle"), - KIT_RULE_RESET_ARENA_AFTER_ROUND_MATERIAL("KIT_RULES.RESET_ARENA_AFTER_ROUND.MATERIAL", DataType.STRING, "BARRIER"), - KIT_RULE_DROPPER_ENABLED_NAME("KIT_RULES.DROPPER.ENABLED-NAME", DataType.STRING, "&aDropper"), - KIT_RULE_DROPPER_DISABLED_NAME("KIT_RULES.DROPPER.DISABLED-NAME", DataType.STRING, "&cDropper"), - KIT_RULE_DROPPER_LORE("KIT_RULES.DROPPER.LORE", DataType.STRING_LIST, "&7Allow/Deny Dropper", "", "&7Click to toggle"), - KIT_RULE_DROPPER_MATERIAL("KIT_RULES.DROPPER.MATERIAL", DataType.STRING, "DROPPER"), - KIT_RULE_ENDERPEARL_COOLDOWN_ENABLED_NAME("KIT_RULES.ENDERPEARL_COOLDOWN.ENABLED-NAME", DataType.STRING, "&aEnderpearl cooldown"), - KIT_RULE_ENDERPEARL_COOLDOWN_DISABLED_NAME("KIT_RULES.ENDERPEARL_COOLDOWN.DISABLED-NAME", DataType.STRING, "&cEnderpearl cooldown"), - KIT_RULE_ENDERPEARL_COOLDOWN_LORE("KIT_RULES.ENDERPEARL_COOLDOWN.LORE", DataType.STRING_LIST, "&7Enderpearls have a 15s delay when being used.", "", "&7Click to toggle"), - KIT_RULE_ENDERPEARL_COOLDOWN_MATERIAL("KIT_RULES.ENDERPEARL_COOLDOWN.MATERIAL", DataType.STRING, "ENDER_PEARL"), - KIT_RULE_SATURATION_ENABLED_NAME("KIT_RULES.SATURATION.ENABLED-NAME", DataType.STRING, "&aSaturation"), - KIT_RULE_SATURATION_DISABLED_NAME("KIT_RULES.SATURATION.DISABLED-NAME", DataType.STRING, "&cSaturation"), - KIT_RULE_SATURATION_LORE("KIT_RULES.SATURATION.LORE", DataType.STRING_LIST, "&7Allow/Deny Saturation from eating", "", "&7Click to toggle"), - KIT_RULE_SATURATION_MATERIAL("KIT_RULES.SATURATION.MATERIAL", DataType.STRING, "ENCHANTED_GOLDEN_APPLE"), - KIT_RULE_AUTO_IGNITE_ENABLED_NAME("KIT_RULES.AUTO_IGNITE.ENABLED-NAME", DataType.STRING, "&aAuto Ignite"), - KIT_RULE_AUTO_IGNITE_DISABLED_NAME("KIT_RULES.AUTO_IGNITE.DISABLED-NAME", DataType.STRING, "&cAuto Ignite"), - KIT_RULE_AUTO_IGNITE_LORE("KIT_RULES.AUTO_IGNITE.LORE", DataType.STRING_LIST, "&7Whether to automatically ignite TNT / creepers", "", "&7Click to toggle"), - KIT_RULE_AUTO_IGNITE_MATERIAL("KIT_RULES.AUTO_IGNITE.MATERIAL", DataType.STRING, "TNT"), - KIT_RULE_ROUNDS_MATERIAL("KIT_RULES.ROUNDS.MATERIAL", DataType.STRING, "GOLDEN_AXE"), - KIT_RULE_ROUNDS_NAME("KIT_RULES.ROUNDS.NAME", DataType.STRING, "&eRounds: &a"), - KIT_RULE_ROUNDS_LORE("KIT_RULES.ROUNDS.LORE", DataType.STRING_LIST, - "&7Players must win this many", - "&7rounds to win the match.", - "", - "&aLeft-Click to increase", - "&cRight-Click to decrease"), - CUSTOM_KIT_ARENAS_TITLE("CUSTOM_KIT.ARENAS.TITLE", DataType.STRING, "&eSelect Arenas"), - CUSTOM_KIT_ARENAS_SIZE("CUSTOM_KIT.ARENAS.SIZE", DataType.INT, "54"), - CUSTOM_KIT_ARENAS_ITEM_NAME("CUSTOM_KIT.ARENAS.ITEM-NAME", DataType.STRING, "&f"), - CUSTOM_KIT_ARENAS_SELECTED_LORE("CUSTOM_KIT.ARENAS.SELECTED-LORE", DataType.STRING_LIST, "&aSelected", "&7Click to toggle"), - CUSTOM_KIT_ARENAS_UNSELECTED_LORE("CUSTOM_KIT.ARENAS.UNSELECTED-LORE", DataType.STRING_LIST, "&cNot selected", "&7Click to toggle"), - CUSTOM_KIT_WHITELIST_TITLE("CUSTOM_KIT.WHITELIST.TITLE", DataType.STRING, "&eWhitelisted Blocks"), - CUSTOM_KIT_WHITELIST_SIZE("CUSTOM_KIT.WHITELIST.SIZE", DataType.INT, "54"), - CUSTOM_KIT_WHITELIST_ADD_MATERIAL("CUSTOM_KIT.WHITELIST.ADD.MATERIAL", DataType.STRING, "GREEN_STAINED_GLASS_PANE"), - CUSTOM_KIT_WHITELIST_ADD_NAME("CUSTOM_KIT.WHITELIST.ADD.NAME", DataType.STRING, "&aAdd Block"), - CUSTOM_KIT_WHITELIST_ITEM_NAME("CUSTOM_KIT.WHITELIST.ITEM-NAME", DataType.STRING, "&f"), - CUSTOM_KIT_WHITELIST_REMOVE_LORE("CUSTOM_KIT.WHITELIST.REMOVE-LORE", DataType.STRING_LIST, "&cClick to remove"), - CUSTOM_KIT_EFFECTS_TITLE("CUSTOM_KIT.EFFECTS.TITLE", DataType.STRING, "&ePotion Effects"), - CUSTOM_KIT_EFFECTS_SIZE("CUSTOM_KIT.EFFECTS.SIZE", DataType.INT, "54"), - CUSTOM_KIT_EFFECTS_ITEM_NAME("CUSTOM_KIT.EFFECTS.ITEM-NAME", DataType.STRING, "&f"), - CUSTOM_KIT_EFFECTS_ENABLED_LORE("CUSTOM_KIT.EFFECTS.ENABLED-LORE", DataType.STRING, "&aLevel "), - CUSTOM_KIT_EFFECTS_DISABLED_LORE("CUSTOM_KIT.EFFECTS.DISABLED-LORE", DataType.STRING, "&cDisabled"), - CUSTOM_KIT_EFFECTS_TOGGLE_LORE("CUSTOM_KIT.EFFECTS.TOGGLE-LORE", DataType.STRING, "&7Left: toggle &7Right: level up"), - CUSTOM_KIT_EDITOR_TITLE("CUSTOM_KIT.EDITOR.TITLE", DataType.STRING, "&bEdit Items"), - CUSTOM_KIT_EDITOR_SIZE("CUSTOM_KIT.EDITOR.SIZE", DataType.INT, "54"), - CUSTOM_KIT_EDITOR_ITEM_LORE("CUSTOM_KIT.EDITOR.ITEM-LORE", DataType.STRING_LIST, - " ", "&aLeft-click to enchant", "&cRight-click to remove", "&eShift-right-click to set amount"), - CUSTOM_KIT_EDITOR_EMPTY_MATERIAL("CUSTOM_KIT.EDITOR.EMPTY.MATERIAL", DataType.STRING, "GRAY_STAINED_GLASS_PANE"), - CUSTOM_KIT_EDITOR_EMPTY_NAME("CUSTOM_KIT.EDITOR.EMPTY.NAME", DataType.STRING, "&7Empty"), - CUSTOM_KIT_EDITOR_SLOT_MATERIAL("CUSTOM_KIT.EDITOR.SLOT.MATERIAL", DataType.STRING, "LIGHT_GRAY_STAINED_GLASS_PANE"), - CUSTOM_KIT_EDITOR_HELMET_NAME("CUSTOM_KIT.EDITOR.SLOT.HELMET", DataType.STRING, "&7Helmet"), - CUSTOM_KIT_EDITOR_CHESTPLATE_NAME("CUSTOM_KIT.EDITOR.SLOT.CHESTPLATE", DataType.STRING, "&7Chestplate"), - CUSTOM_KIT_EDITOR_LEGGINGS_NAME("CUSTOM_KIT.EDITOR.SLOT.LEGGINGS", DataType.STRING, "&7Leggings"), - CUSTOM_KIT_EDITOR_BOOTS_NAME("CUSTOM_KIT.EDITOR.SLOT.BOOTS", DataType.STRING, "&7Boots"), - CUSTOM_KIT_EDITOR_OFFHAND_NAME("CUSTOM_KIT.EDITOR.SLOT.OFFHAND", DataType.STRING, "&7Off Hand"), - CUSTOM_KIT_EDITOR_ADD_LORE("CUSTOM_KIT.EDITOR.ADD-LORE", DataType.STRING_LIST, "&8Click to add an item"), - CUSTOM_KIT_ENCHANT_TITLE("CUSTOM_KIT.ENCHANT.TITLE", DataType.STRING, "&dSelect an Enchantment"), - CUSTOM_KIT_ENCHANT_SIZE("CUSTOM_KIT.ENCHANT.SIZE", DataType.INT, "54"), - CUSTOM_KIT_ENCHANT_LEVEL_TITLE("CUSTOM_KIT.ENCHANT.LEVEL-TITLE", DataType.STRING, "&dSelect Level"), - CUSTOM_KIT_ENCHANT_LEVEL_SIZE("CUSTOM_KIT.ENCHANT.LEVEL-SIZE", DataType.INT, "27"), - CUSTOM_KIT_ENCHANT_ITEM_NAME("CUSTOM_KIT.ENCHANT.ITEM-NAME", DataType.STRING, "&d"), - CUSTOM_KIT_ENCHANT_APPLIED_LORE("CUSTOM_KIT.ENCHANT.APPLIED-LORE", DataType.STRING, "&aApplied: level "), - CUSTOM_KIT_ENCHANT_MAX_LORE("CUSTOM_KIT.ENCHANT.MAX-LORE", DataType.STRING, "&7Max level: "), - CUSTOM_KIT_ENCHANT_SELECT_LORE("CUSTOM_KIT.ENCHANT.SELECT-LORE", DataType.STRING, "&7Click to choose a level"), - CUSTOM_KIT_ENCHANT_LEVEL_NAME("CUSTOM_KIT.ENCHANT.LEVEL-NAME", DataType.STRING, "&dLevel "), - CUSTOM_KIT_ENCHANT_REMOVE_NAME("CUSTOM_KIT.ENCHANT.REMOVE-NAME", DataType.STRING, "&cRemove Enchantment"), - - CUSTOM_KIT_LISTINGS_TITLE("CUSTOM_KIT.LISTINGS.TITLE", DataType.STRING, "&bCustom Kit Listings"), - CUSTOM_KIT_LISTINGS_SIZE("CUSTOM_KIT.LISTINGS.SIZE", DataType.INT, "54"), - CUSTOM_KIT_LISTINGS_NAME("CUSTOM_KIT.LISTINGS.NAME", DataType.STRING, "&a &7- "), - CUSTOM_KIT_LISTINGS_LORE("CUSTOM_KIT.LISTINGS.LORE", DataType.STRING_LIST, "&7Click to join this match"), - CUSTOM_KIT_JOIN_QUEUE_SLOT("CUSTOM_KIT.LISTINGS.JOIN-QUEUE.SLOT", DataType.INT, "0"), - CUSTOM_KIT_JOIN_QUEUE_MATERIAL("CUSTOM_KIT.LISTINGS.JOIN-QUEUE.MATERIAL", DataType.STRING, "PAPER"), - CUSTOM_KIT_JOIN_QUEUE_NAME("CUSTOM_KIT.LISTINGS.JOIN-QUEUE.NAME", DataType.STRING, "&eJoin Queue"), - CUSTOM_KIT_JOIN_QUEUE_LORE("CUSTOM_KIT.LISTINGS.JOIN-QUEUE.LORE", DataType.STRING_LIST, - "&7Host one of your kits so", "&7others can join it."), - CUSTOM_KIT_QUEUE_BUTTON_SLOT("CUSTOM_KIT.QUEUE-BUTTON.SLOT", DataType.INT, "35"), - CUSTOM_KIT_QUEUE_BUTTON_MATERIAL("CUSTOM_KIT.QUEUE-BUTTON.MATERIAL", DataType.STRING, "NETHERITE_SWORD"), - CUSTOM_KIT_QUEUE_BUTTON_NAME("CUSTOM_KIT.QUEUE-BUTTON.NAME", DataType.STRING, "&bCustom Kits"), - CUSTOM_KIT_QUEUE_BUTTON_LORE("CUSTOM_KIT.QUEUE-BUTTON.LORE", DataType.STRING_LIST, "&7Join a player-hosted custom kit"), - - ITEM_BROWSER_SEARCH_NAME("ITEM_BROWSER.SEARCH.NAME", DataType.STRING, "&eSearch"), - ITEM_BROWSER_SEARCH_MATERIAL("ITEM_BROWSER.SEARCH.MATERIAL", DataType.STRING, "OAK_SIGN"), - ITEM_BROWSER_SEARCH_SLOT("ITEM_BROWSER.SEARCH.SLOT", DataType.INT, "45"), - ITEM_BROWSER_ITEM_LORE("ITEM_BROWSER.ITEM.LORE", DataType.STRING_LIST, "", "&eClick to select"), - - EVENT_ADMIN_TITLE("EVENT.ADMIN.TITLE", DataType.STRING, "&7Select Event Type"), - EVENT_ADMIN_SIZE("EVENT.ADMIN.SIZE", DataType.INT, "27"), - EVENT_ADMIN_FILTER("EVENT.ADMIN.FILTER", "FILL, BORDER, NONE", DataType.STRING, "FILL"), - EVENT_TYPE_TOURNAMENT_NAME("EVENT.TYPE.TOURNAMENT.NAME", DataType.STRING, "&bTournament"), - EVENT_TYPE_TOURNAMENT_MATERIAL("EVENT.TYPE.TOURNAMENT.MATERIAL", DataType.STRING, "GOLDEN_SWORD"), - EVENT_TYPE_TOURNAMENT_LORE("EVENT.TYPE.TOURNAMENT.LORE", DataType.STRING_LIST, "&7Single-elimination bracket", "&71v1 matches", " ", "&aClick to start!"), - EVENT_TYPE_TOURNAMENT_SLOT("EVENT.TYPE.TOURNAMENT.SLOT", DataType.INT, "11"), - EVENT_TYPE_LMS_NAME("EVENT.TYPE.LMS.NAME", DataType.STRING, "&bLast Man Standing"), - EVENT_TYPE_LMS_MATERIAL("EVENT.TYPE.LMS.MATERIAL", DataType.STRING, "IRON_SWORD"), - EVENT_TYPE_LMS_LORE("EVENT.TYPE.LMS.LORE", DataType.STRING_LIST, "&7FFA - last player alive wins", " ", "&aClick to start!"), - EVENT_TYPE_LMS_SLOT("EVENT.TYPE.LMS.SLOT", DataType.INT, "12"), - EVENT_TYPE_SUMO_NAME("EVENT.TYPE.SUMO.NAME", DataType.STRING, "&bSumo"), - EVENT_TYPE_SUMO_MATERIAL("EVENT.TYPE.SUMO.MATERIAL", DataType.STRING, "LEAD"), - EVENT_TYPE_SUMO_LORE("EVENT.TYPE.SUMO.LORE", DataType.STRING_LIST, "&7Knock opponents off the platform", "&7Bracket-style", " ", "&aClick to start!"), - EVENT_TYPE_SUMO_SLOT("EVENT.TYPE.SUMO.SLOT", DataType.INT, "14"), - EVENT_KIT_SELECT_TITLE("EVENT.KIT_SELECT.TITLE", DataType.STRING, "&7Select Kit"), - EVENT_KIT_SELECT_SIZE("EVENT.KIT_SELECT.SIZE", DataType.INT, "36"), - EVENT_KIT_CUSTOM_NAME("EVENT.KIT_SELECT.CUSTOM.NAME", DataType.STRING, "&bCustom Kit"), - EVENT_KIT_CUSTOM_MATERIAL("EVENT.KIT_SELECT.CUSTOM.MATERIAL", DataType.STRING, "NETHERITE_SWORD"), - EVENT_KIT_CUSTOM_LORE("EVENT.KIT_SELECT.CUSTOM.LORE", DataType.STRING_LIST, "&7Use one of your custom kits", " ", "&aClick to select!"); - - private final String path; - private final String comment; - private final List defaultValue = new ArrayList<>(); - private final DataType dataType; - - MenusLocale(String path, @Nullable String comment, DataType dataType, String... defaultValue) { - this.path = path; - this.comment = comment; - this.defaultValue.addAll(Arrays.asList(defaultValue)); - this.dataType = dataType; - } - - MenusLocale(String path, DataType dataType, String... defaultValue) { - this.path = path; - this.comment = null; - this.defaultValue.addAll(Arrays.asList(defaultValue)); - this.dataType = dataType; - } - - @Override - public String getHeader() { - return ""; - } - - @Override - public ConfigFile getConfigFile() { - return ConfigService.get().getMenusConfig(); - } - - public void update() { - MATCH_LIST_ITEM_NAME.set( - MATCH_LIST_ITEM_NAME.getString() - .replaceAll("", "") - .replaceAll("", "") - ); - STAT_LORE.set( - STAT_LORE.getStringList().stream().map(str -> - str - .replaceAll("", "") - .replaceAll("", "") - .replaceAll("", "") - .replaceAll("", "") - .replaceAll("", "") - ).toList() - ); - SETTINGS_PING_RANGE_LORE.set( - SETTINGS_PING_RANGE_LORE.getStringList().stream().map(str -> - str - .replaceAll("", "") - ).toList() - ); - if (MATCH_LIST_SIZE.getInt() == 36) MATCH_LIST_SIZE.set(54); - if (MATCH_LIST_STARTING_SLOT.getInt() == 10 && MATCH_LIST_FILTER.getString().equals("FILTER")) - MATCH_LIST_FILTER.set("BORDER"); - if (MATCH_LIST_STARTING_SLOT.getInt() == 10) MATCH_LIST_STARTING_SLOT.set(1); - if (MATCH_LIST_STARTING_SLOT.getInt() == 0) MATCH_LIST_STARTING_SLOT.set(1); - getConfigFile().save(); - } -} +package dev.lrxh.neptune.configs.impl; + +import dev.lrxh.neptune.configs.ConfigService; +import dev.lrxh.neptune.configs.impl.handler.DataType; +import dev.lrxh.neptune.configs.impl.handler.IDataAccessor; +import dev.lrxh.neptune.utils.ConfigFile; +import lombok.Getter; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@Getter +public enum MenusLocale implements IDataAccessor { + FILTER_MATERIAL("FILTER.MATERIAL", "Filter Item for menus.", DataType.STRING, "BLACK_STAINED_GLASS_PANE"), + FILTER_NAME("FILTER.NAME", "Filter Item name.", DataType.STRING, ""), + PAGINATION_NEXT_PAGE_ENABLED_NAME("PAGINATION.NEXT.ENABLED.NAME", DataType.STRING, "&aNext Page"), + PAGINATION_NEXT_PAGE_ENABLED_MATERIAL("PAGINATION.NEXT.ENABLED.MATERIAL", DataType.STRING, "PAPER"), + PAGINATION_NEXT_PAGE_ENABLED_LORE("PAGINATION.NEXT.ENABLED.LORE", DataType.STRING_LIST, + "&eClick here to jump", + "&e to the next page."), + + PAGINATION_NEXT_PAGE_DISABLED_NAME("PAGINATION.NEXT.DISABLED.NAME", DataType.STRING, "&7Next Page"), + PAGINATION_NEXT_PAGE_DISABLED_MATERIAL("PAGINATION.NEXT.DISABLED.MATERIAL", DataType.STRING, "REDSTONE"), + PAGINATION_NEXT_PAGE_DISABLED_LORE("PAGINATION.NEXT.DISABLED.LORE", DataType.STRING_LIST, + "&eThere is no available", + "&e next page."), + + PAGINATION_PREVIOUS_PAGE_ENABLED_NAME("PAGINATION.PREVIOUS.ENABLED.NAME", DataType.STRING, "&aPrevious Page"), + PAGINATION_PREVIOUS_PAGE_ENABLED_MATERIAL("PAGINATION.PREVIOUS.ENABLED.MATERIAL", DataType.STRING, "PAPER"), + PAGINATION_PREVIOUS_PAGE_ENABLED_LORE("PAGINATION.PREVIOUS.ENABLED.LORE", DataType.STRING_LIST, + "&eClick here to jump", + "&e to the previous page."), + + PAGINATION_PREVIOUS_PAGE_DISABLED_NAME("PAGINATION.PREVIOUS.DISABLED.NAME", DataType.STRING, "&7Previous Page"), + PAGINATION_PREVIOUS_PAGE_DISABLED_MATERIAL("PAGINATION.PREVIOUS.DISABLED.MATERIAL", DataType.STRING, + "REDSTONE"), + PAGINATION_PREVIOUS_PAGE_DISABLED_LORE("PAGINATION.PREVIOUS.DISABLED.LORE", DataType.STRING_LIST, + "&eThere is no available", + "&e previous page."), + PAGINATION_CURRENT_PAGE_NAME("PAGINATION.CURRENT_PAGE.NAME", DataType.STRING, + "&fPage: &e/"), + PAGINATION_CURRENT_PAGE_MATERIAL("PAGINATION.CURRENT_PAGE.MATERIAL", DataType.STRING, + "BOOK"), + PAGINATION_CURRENT_PAGE_SLOT("PAGINATION.CURRENT_PAGE.SLOT", DataType.INT, + "4"), + QUEUE_SELECT_KIT_NAME("QUEUE.SELECT.NAME", DataType.STRING, "&b"), + QUEUE_SELECT_SIZE("QUEUE.SELECT.SIZE", DataType.INT, "36"), + QUEUE_SELECT_FILTER("QUEUE.SELECT.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + QUEUE_SELECT_TITLE("QUEUE.SELECT.TITLE", DataType.STRING, "&7Select Kit"), + QUEUE_SELECT_LORE("QUEUE.SELECT.LORE", DataType.STRING_LIST, "", + " &f&7* &fIn Fights: &b", + " &f&7* &fQueued: &b", + " ", + "&a&lClick to play!"), + KIT_EDITOR_SELECT_KIT_NAME("KIT_EDITOR.SELECT.NAME", DataType.STRING, "&b"), + KIT_EDITOR_SELECT_SIZE("KIT_EDITOR.SELECT.SIZE", DataType.INT, "36"), + KIT_EDITOR_SELECT_FILTER("KIT_EDITOR.SELECT.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + KIT_EDITOR_SELECT_TITLE("KIT_EDITOR.SELECT.TITLE", DataType.STRING, "&7Kit Editor"), + KIT_EDITOR_SELECT_LORE("KIT_EDITOR.SELECT.LORE", DataType.STRING_LIST, "", " &aClick to edit kit"), + STAT_KIT_NAME("STAT.NAME", DataType.STRING, "&b"), + STAT_SIZE("STAT.SIZE", DataType.INT, "36"), + STAT_FILTER("STAT.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + STAT_TITLE("STAT.TITLE", DataType.STRING, "&7 Statistics"), + STAT_LORE("STAT.LORE", DataType.STRING_LIST, + " &f&7* &fWins: &b", + " &f&7* &fElo: &b", + " &f&7* &fLosses: &b", + " &f&7* &fCurrent Streak: &b", + " &f&7* &fBest Streak: &b", + " &f&7* &fDivision: &b", + " &f&7* &fK/D &b"), + MATCH_LIST_TITLE("MATCH.LIST.TITLE", DataType.STRING, "&7Select Match"), + MATCH_LIST_SIZE("MATCH_LIST.SIZE", DataType.INT, "54"), + MATCH_LIST_STARTING_SLOT("MATCH_LIST.STARTING-SLOT", DataType.INT, "10"), + MATCH_LIST_FILTER("MATCH_LIST.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "BORDER"), + MATCH_LIST_ITEM_NAME("MATCH_LIST.ITEM.NAME", DataType.STRING, + "&c &7vs &9"), + MATCH_LIST_ITEM_LORE("MATCH_LIST.ITEM.LORE", DataType.STRING_LIST, + "&fArena: &b", + "&fKit: &b", + "", + "&a&lClick to watch match!"), + DUEL_TITLE("DUEL.TITLE", DataType.STRING, "Select Kit | "), + DUEL_SIZE("DUEL.SIZE", DataType.INT, "36"), + DUEL_FILTER("DUEL.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + DUEL_ITEM_NAME("DUEL.ITEM.NAME", DataType.STRING, "&b"), + DUEL_LORE("DUEL.LORE", DataType.STRING_LIST, + "", + "&a&lClick to select kit!"), + DUEL_CUSTOM_KIT_BUTTON_SLOT("DUEL.CUSTOM_KIT.SLOT", DataType.INT, "35"), + DUEL_CUSTOM_KIT_BUTTON_MATERIAL("DUEL.CUSTOM_KIT.MATERIAL", DataType.STRING, "NETHER_STAR"), + DUEL_CUSTOM_KIT_BUTTON_NAME("DUEL.CUSTOM_KIT.NAME", DataType.STRING, "&bCustom Kits"), + DUEL_CUSTOM_KIT_BUTTON_LORE("DUEL.CUSTOM_KIT.LORE", DataType.STRING_LIST, + "", + "&a&lClick to duel with a custom kit!"), + DUEL_CUSTOM_KIT_TITLE("DUEL.CUSTOM_KIT.TITLE", DataType.STRING, "Select Custom Kit | "), + DUEL_CUSTOM_KIT_ITEM_LORE("DUEL.CUSTOM_KIT.ITEM.LORE", DataType.STRING_LIST, + "", + "&a&lClick to duel with this kit!"), + ROUNDS_TITLE("ROUNDS.TITLE", DataType.STRING, "Select Rounds Amount | "), + ROUNDS_SIZE("ROUNDS.SIZE", DataType.INT, "27"), + ROUNDS_STARTING_SLOT("DUEL.STARTING-SLOT", DataType.INT, "10"), + ROUNDS_FILTER("ROUNDS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + ROUNDS_ITEM_NAME("ROUNDS.ITEM.NAME", DataType.STRING, "&bFirst to &b&l"), + ROUNDS_ITEM_MATERIAL("ROUNDS.ITEM.MATERIAL", DataType.STRING, "MAP"), + ROUNDS_LORE("ROUNDS.LORE", DataType.STRING_LIST, + "", + "&a&lClick to select rounds amount!"), + ROUNDS_LIST("ROUNDS.AMOUNT", "Change the amount of rounds available", DataType.STRING, + "1, 3, 5, 6, 10, 15, 20"), + ARENA_TITLE("ARENA.TITLE", DataType.STRING, "Select Arena | "), + ARENA_FILTER("ARENA.FILTER-TYPE", DataType.STRING, "FILL"), + ARENA_SIZE("ARENA.SIZE", DataType.INT, "27"), + ARENA_LIST_STARTING_SLOT("ARENA.LIST.STARTING-SLOT", DataType.INT, "1"), + ARENA_ITEM_NAME("ARENA.ITEM.NAME", DataType.STRING, "&b"), + ARENA_ITEM_LORE("ARENA.ITEM.LORE", DataType.STRING_LIST, "", "&fSelect as the battle arena"), + ARENA_RANDOM_ITEM_NAME("ARENA.RANDOM_ITEM.NAME", DataType.STRING, "&bRandom Arena"), + ARENA_RANDOM_ITEM_SLOT("ARENA.RANDOM_ITEM.SLOT", DataType.INT, "0"), + ARENA_RANDOM_ITEM_MATERIAL("ARENA.RANDOM_ITEM.MATERIAL", DataType.STRING, "FILLED_MAP"), + ARENA_RANDOM_ITEM_LORE("ARENA.RANDOM_ITEM.LORE", DataType.STRING_LIST, "", + "&fSelect a random arena as the battle arena"), + MATCH_HISTORY_TITLE("MATCH_HISTORY.TITLE", DataType.STRING, "&7Match History"), + MATCH_HISTORY_SIZE("MATCH_HISTORY.SIZE", DataType.INT, "27"), + MATCH_HISTORY_STARTING_SLOT("MATCH_HISTORY.STARTING-SLOT", DataType.INT, "10"), + MATCH_HISTORY_FILTER("MATCH_HISTORY.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + MATCH_HISTORY_ITEM_NAME("MATCH_HISTORY.ITEM.NAME", DataType.STRING, "&b &fvs &b "), + MATCH_HISTORY_LORE("MATCH_HISTORY.LORE", DataType.STRING_LIST, + "&7&m-------------------", + "&fWinner: &a", + "&fLoser: &c", + "&fDate: &b", + "&fArena: &b", + "&7&m-------------------"), + MATCH_HISTORY_WON("MATCH_HISTORY.WON", DataType.STRING, "&aWon"), + MATCH_HISTORY_LOST("MATCH_HISTORY.LOST", DataType.STRING, "&cLost"), + + MATCH_SPECTATE_TITLE("MATCH_SPECTATE_TELEPORT.TITLE", DataType.STRING, "&7Teleport to a player"), + MATCH_SPECTATE_STARTING_SLOT("MATCH_SPECTATE_TELEPORT.STARTING-SLOT", DataType.INT, "10"), + MATCH_SPECTATE_FILTER("MATCH_SPECTATE_TELEPORT.FILTER_TYPE", DataType.STRING, "FILL"), + MATCH_SPECTATE_NAME("MATCH_SPECTATE_TELEPORT.ITEM.NAME", DataType.STRING, "&b"), + MATCH_SPECTATE_LORE("MATCH_SPECTATE_TELEPORT.ITEM.LORE", DataType.STRING_LIST, "", "&fTeleport to: &b"), + LEADERBOARD_SIZE("LEADERBOARD.SIZE", DataType.INT, "36"), + LEADERBOARD_FILTER("LEADERBOARD.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + LEADERBOARD_ITEM_NAME("LEADERBOARD.ITEM.NAME", DataType.STRING, "&b Top 10"), + LEADERBOARD_LORE("LEADERBOARD.LORE", DataType.STRING_LIST, + "&b#1. &f &7- &b ", + "&b#2. &f &7- &b ", + "&b#3. &f &7- &b ", + "&b#4. &f &7- &b ", + "&b#5. &f &7- &b ", + "&b#6. &f &7- &b ", + "&b#7. &f &7- &b ", + "&b#8. &f &7- &b ", + "&b#9. &f &7- &b ", + "&b#10. &f &7- &b "), + LEADERBOARD_TYPES_KILLS_SLOT("LEADERBOARD.TYPES.KILLS.SLOT", DataType.INT, "2"), + LEADERBOARD_TYPES_KILLS_TITLE("LEADERBOARD.TYPES.KILLS.TITLE", DataType.STRING, + "&7Kills Leaderboards"), + LEADERBOARD_TYPES_KILLS_ENABLED_NAME("LEADERBOARD.TYPES.KILLS.ENABLED.NAME", DataType.STRING, + "&aKills Leaderboard"), + LEADERBOARD_TYPES_KILLS_DISABLED_NAME("LEADERBOARD.TYPES.KILLS.DISABLED.NAME", DataType.STRING, + "&cKills Leaderboard"), + LEADERBOARD_TYPES_KILLS_ENABLED_LORE("LEADERBOARD.TYPES.KILLS.ENABLED.LORE", DataType.STRING_LIST, + " ", + "&7Click to view kills leaderboard"), + LEADERBOARD_TYPES_KILLS_DISABLED_LORE("LEADERBOARD.TYPES.KILLS.DISABLED.LORE", DataType.STRING_LIST, + " ", + "&7Click to view kills leaderboard"), + LEADERBOARD_TYPES_KILLS_ENABLED_MATERIAL("LEADERBOARD.TYPES.KILLS.ENABLED.MATERIAL", DataType.STRING, + "LIME_DYE"), + LEADERBOARD_TYPES_KILLS_DISABLED_MATERIAL("LEADERBOARD.TYPES.KILLS.DISABLED.MATERIAL", DataType.STRING, + "GRAY_DYE"), + + LEADERBOARD_TYPES_ELO_TITLE("LEADERBOARD.TYPES.ELO.TITLE", DataType.STRING, + "&7Elo Leaderboards"), + LEADERBOARD_TYPES_ELO_SLOT("LEADERBOARD.TYPES.ELO.SLOT", DataType.INT, "4"), + LEADERBOARD_TYPES_ELO_ENABLED_NAME("LEADERBOARD.TYPES.ELO.ENABLED.NAME", DataType.STRING, + "&aElo Leaderboard"), + LEADERBOARD_TYPES_ELO_DISABLED_NAME("LEADERBOARD.TYPES.ELO.DISABLED.NAME", DataType.STRING, + "&cElo Leaderboard"), + LEADERBOARD_TYPES_ELO_ENABLED_LORE("LEADERBOARD.TYPES.ELO.ENABLED.LORE", DataType.STRING_LIST, + " ", + "&7Click to view elo leaderboard"), + LEADERBOARD_TYPES_ELO_DISABLED_LORE("LEADERBOARD.TYPES.ELO.DISABLED.LORE", DataType.STRING_LIST, + " ", + "&7Click to view elo leaderboard"), + LEADERBOARD_TYPES_ELO_ENABLED_MATERIAL("LEADERBOARD.TYPES.ELO.ENABLED.MATERIAL", DataType.STRING, + "LIME_DYE"), + LEADERBOARD_TYPES_ELO_DISABLED_MATERIAL("LEADERBOARD.TYPES.ELO.DISABLED.MATERIAL", DataType.STRING, + "GRAY_DYE"), + + LEADERBOARD_TYPES_BEST_WIN_STREAK_TITLE("LEADERBOARD.TYPES.BEST_WIN_STREAK.TITLE", DataType.STRING, + "&7Best Win Streak Leaderboards"), + LEADERBOARD_TYPES_BEST_WIN_STREAK_SLOT("LEADERBOARD.TYPES.BEST_WIN_STREAK.SLOT", DataType.INT, "29"), + LEADERBOARD_TYPES_BEST_WIN_STREAK_ENABLED_NAME("LEADERBOARD.TYPES.BEST_WIN_STREAK.ENABLED.NAME", + DataType.STRING, + "&aBest Win Streaks Leaderboard"), + LEADERBOARD_TYPES_BEST_WIN_STREAK_DISABLED_NAME("LEADERBOARD.TYPES.BEST_WIN_STREAK.DISABLED.NAME", + DataType.STRING, + "&cBest Win Streaks Leaderboard"), + LEADERBOARD_TYPES_BEST_WIN_STREAK_ENABLED_LORE("LEADERBOARD.TYPES.BEST_WIN_STREAK.ENABLED.LORE", + DataType.STRING_LIST, + " ", + "&7Click to view best win streak leaderboards"), + LEADERBOARD_TYPES_BEST_WIN_STREAK_DISABLED_LORE("LEADERBOARD.TYPES.BEST_WIN_STREAK.DISABLED.LORE", + DataType.STRING_LIST, + " ", + "&7Click to view best win streak leaderboards"), + LEADERBOARD_TYPES_BEST_WIN_STREAK_ENABLED_MATERIAL("LEADERBOARD.TYPES.BEST_WIN_STREAK.ENABLED.MATERIAL", + DataType.STRING, + "LIME_DYE"), + LEADERBOARD_TYPES_BEST_WIN_STREAK_DISABLED_MATERIAL("LEADERBOARD.TYPES.BEST_WIN_STREAK.DISABLED.MATERIAL", + DataType.STRING, + "GRAY_DYE"), + + LEADERBOARD_TYPES_WINS_SLOT("LEADERBOARD.TYPES.WINS.SLOT", DataType.INT, "31"), + LEADERBOARD_TYPES_WINS_TITLE("LEADERBOARD.TYPES.WINS.TITLE", DataType.STRING, + "&7Wins Leaderboards"), + LEADERBOARD_TYPES_WINS_ENABLED_NAME("LEADERBOARD.TYPES.WINS.ENABLED.NAME", DataType.STRING, + "&aWins Leaderboard"), + LEADERBOARD_TYPES_WINS_DISABLED_NAME("LEADERBOARD.TYPES.WINS.DISABLED.NAME", DataType.STRING, + "&cWins Leaderboard"), + LEADERBOARD_TYPES_WINS_ENABLED_LORE("LEADERBOARD.TYPES.WINS.ENABLED.LORE", DataType.STRING_LIST, + " ", + "&7Click to view wins leaderboards"), + LEADERBOARD_TYPES_WINS_DISABLED_LORE("LEADERBOARD.TYPES.WINS.DISABLED.LORE", DataType.STRING_LIST, + " ", + "&7Click to view wins leaderboards"), + LEADERBOARD_TYPES_WINS_ENABLED_MATERIAL("LEADERBOARD.TYPES.WINS.ENABLED.MATERIAL", DataType.STRING, + "LIME_DYE"), + LEADERBOARD_TYPES_WINS_DISABLED_MATERIAL("LEADERBOARD.TYPES.WINS.DISABLED.MATERIAL", DataType.STRING, + "GRAY_DYE"), + + LEADERBOARD_TYPES_LOSSES_SLOT("LEADERBOARD.TYPES.LOSSES.SLOT", DataType.INT, "33"), + LEADERBOARD_TYPES_LOSSES_TITLE("LEADERBOARD.TYPES.LOSSES.TITLE", DataType.STRING, + "&7Losses Leaderboards"), + LEADERBOARD_TYPES_LOSSES_ENABLED_NAME("LEADERBOARD.TYPES.LOSSES.ENABLED.NAME", DataType.STRING, + "&aLosses Leaderboard"), + LEADERBOARD_TYPES_LOSSES_DISABLED_NAME("LEADERBOARD.TYPES.LOSSES.DISABLED.NAME", DataType.STRING, + "&cLosses Leaderboard"), + LEADERBOARD_TYPES_LOSSES_ENABLED_LORE("LEADERBOARD.TYPES.LOSSES.ENABLED.LORE", DataType.STRING_LIST, + " ", + "&7Click to view losses leaderboards"), + LEADERBOARD_TYPES_LOSSES_DISABLED_LORE("LEADERBOARD.TYPES.LOSSES.DISABLED.LORE", DataType.STRING_LIST, + " ", + "&7Click to view losses leaderboards"), + LEADERBOARD_TYPES_LOSSES_ENABLED_MATERIAL("LEADERBOARD.TYPES.LOSSES.ENABLED.MATERIAL", DataType.STRING, + "LIME_DYE"), + LEADERBOARD_TYPES_LOSSES_DISABLED_MATERIAL("LEADERBOARD.TYPES.LOSSES.DISABLED.MATERIAL", DataType.STRING, + "GRAY_DYE"), + + LEADERBOARD_TYPES_DEATHS_TITLE("LEADERBOARD.TYPES.DEATHS.TITLE", DataType.STRING, + "&7Deaths Leaderboards"), + LEADERBOARD_TYPES_DEATHS_SLOT("LEADERBOARD.TYPES.DEATHS.SLOT", DataType.INT, "6"), + LEADERBOARD_TYPES_DEATHS_ENABLED_NAME("LEADERBOARD.TYPES.DEATHS.ENABLED.NAME", DataType.STRING, + "&aDeaths Leaderboard"), + LEADERBOARD_TYPES_DEATHS_DISABLED_NAME("LEADERBOARD.TYPES.DEATHS.DISABLED.NAME", DataType.STRING, + "&cDeaths Leaderboard"), + LEADERBOARD_TYPES_DEATHS_ENABLED_LORE("LEADERBOARD.TYPES.DEATHS.ENABLED.LORE", DataType.STRING_LIST, + " ", + "&7Click to view win streak leaderboards"), + LEADERBOARD_TYPES_DEATHS_DISABLED_LORE("LEADERBOARD.TYPES.DEATHS.DISABLED.LORE", DataType.STRING_LIST, + " ", + "&7Click to view death leaderboards"), + LEADERBOARD_TYPES_DEATHS_ENABLED_MATERIAL("LEADERBOARD.TYPES.DEATHS.ENABLED.MATERIAL", DataType.STRING, + "LIME_DYE"), + LEADERBOARD_TYPES_DEATHS_DISABLED_MATERIAL("LEADERBOARD.TYPES.DEATHS.DISABLED.MATERIAL", DataType.STRING, + "GRAY_DYE"), + + PARTY_SETTINGS_TITLE("PARTY.SETTINGS.NAME", DataType.STRING, "&7Party Settings"), + PARTY_SETTINGS_SIZE("PARTY.SETTINGS.SIZE", DataType.INT, "27"), + PARTY_SETTINGS_FILTER("PARTY.SETTINGS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + PARTY_SETTINGS_PRIVACY_TITLE("PARTY.SETTINGS.PRIVACY.NAME", DataType.STRING, "&bPublic Party"), + PARTY_SETTINGS_PRIVACY_MATERIAL("PARTY.SETTINGS.PRIVACY.MATERIAL", DataType.STRING, "OAK_SIGN"), + PARTY_SETTINGS_PRIVACY_SLOT("PARTY.SETTINGS.PRIVACY.SLOT", DataType.INT, "10"), + PARTY_SETTINGS_PRIVACY_ENABLED_LORE("PARTY.SETTINGS.PRIVACY.ENABLED-LORE", DataType.STRING_LIST, + "&7Would you like for players to", + "&7join without inviting them?", + "", + " &a&l▶ &aEnabled", + " &7&l▶ &7Disabled", + " ", + "&cClick to disable."), + PARTY_SETTINGS_PRIVACY_DISABLED_LORE("PARTY.SETTINGS.PRIVACY.DISABLED-LORE", DataType.STRING_LIST, + "&7Would you like for players to", + "&7join without inviting them?", + "", + " &7&l▶ &7Enabled", + " &c&l▶ &cDisabled", + " ", + "&aClick to enable."), + PARTY_SETTINGS_MAX_SIZE_TITLE("PARTY.SETTINGS.MAX_SIZE.NAME", DataType.STRING, "&bPlayer Limit"), + PARTY_SETTINGS_MAX_SIZE_MATERIAL("PARTY.SETTINGS.MAX_SIZE.MATERIAL", DataType.STRING, "OAK_SIGN"), + PARTY_SETTINGS_MAX_SIZE_SLOT("PARTY.SETTINGS.MAX_SIZE.SLOT", DataType.INT, "11"), + PARTY_SETTINGS_MAX_SIZE_LORE("PARTY.SETTINGS.MAX_SIZE.ENABLED-LORE", DataType.STRING_LIST, + "&7Set the maximum size of the party.", + "", + "&7Current Size: ", + "", + "&aClick to increase.", + "&cRight Click to decrease."), + PARTY_SETTINGS_ADVERTISEMENTS_TITLE("PARTY.SETTINGS.ADVERTISEMENTS.NAME", DataType.STRING, "&bAdvertisements"), + PARTY_SETTINGS_ADVERTISEMENTS_MATERIAL("PARTY.SETTINGS.ADVERTISEMENTS.MATERIAL", DataType.STRING, "OAK_SIGN"), + PARTY_SETTINGS_ADVERTISEMENTS_SLOT("PARTY.SETTINGS.ADVERTISEMENTS.SLOT", DataType.INT, "12"), + PARTY_SETTINGS_ADVERTISEMENTS_LORE_NO_COOLDOWN("PARTY.SETTINGS.ADVERTISEMENTS_NO_COOLDOWN", + DataType.STRING_LIST, + "&7Send a message which", + "&7has an invitation to your party.", + "", + "&aClick to advertise."), + PARTY_SETTINGS_ADVERTISEMENTS_LORE_COOLDOWN("PARTY.SETTINGS.ADVERTISEMENTS_COOLDOWN", DataType.STRING_LIST, + "&7Send a message which", + "&7has an invitation to your party.", + "", + "&cCooldown ."), + PARTY_EVENTS_TITLE("PARTY.EVENTS.NAME", DataType.STRING, "&7Party Events"), + PARTY_EVENTS_SIZE("PARTY.EVENTS.SIZE", DataType.INT, "27"), + PARTY_EVENTS_FILTER("PARTY.EVENTS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + PARTY_EVENTS_SPLIT_MATERIAL("PARTY.EVENTS.SPLIT.MATERIAL", DataType.STRING, "DIAMOND_SWORD"), + PARTY_EVENTS_SPLIT_SLOT("PARTY.EVENTS.SPLIT.SLOT", DataType.INT, "10"), + PARTY_EVENTS_SPLIT_NAME("PARTY.EVENTS.SPLIT.NAME", DataType.STRING, "&bParty Split"), + PARTY_EVENTS_SPLIT_LORE("PARTY.EVENTS.SPLIT.LORE", DataType.STRING_LIST, + "&7Split the party into", + "&7two teams and fight.", + " ", + "&a&lClick to start event!"), + PARTY_EVENTS_FFA_MATERIAL("PARTY.EVENTS.FFA.MATERIAL", DataType.STRING, "GOLDEN_AXE"), + PARTY_EVENTS_FFA_SLOT("PARTY.EVENTS.FFA.SLOT", DataType.INT, "12"), + PARTY_EVENTS_FFA_NAME("PARTY.EVENTS.FFA.NAME", DataType.STRING, "&bParty FFA"), + PARTY_EVENTS_FFA_LORE("PARTY.EVENTS.FFA.LORE", DataType.STRING_LIST, + "&7Players fight each other", + "&7till one is standing.", + " ", + "&a&lClick to start event!"), + + PARTY_EVENTS_KIT_SELECT_TITLE("PARTY.EVENTS.KIT.SELECT.TITLE", DataType.STRING, "&bKit Select"), + PARTY_EVENTS_KIT_SELECT_NAME("PARTY.EVENTS.KIT.SELECT.ITEM-NAME", DataType.STRING, "&b"), + PARTY_EVENTS_KIT_SELECT_LORE("PARTY.EVENTS.KIT.SELECT.LORE", DataType.STRING_LIST, " ", + "&a&lClick to select kit"), + PARTY_EVENTS_KIT_SELECT_SIZE("PARTY.EVENTS.KIT.SELECT.SIZE", DataType.INT, "27"), + + PARTY_DUEL_TITLE("PARTY.DUEL.NAME", DataType.STRING, "&6Party Duel"), + PARTY_DUEL_STARTING_SLOT("PARTY.DUEL.STARTING-SLOT", DataType.INT, "1"), + + PARTY_DUEL_SIZE("PARTY.DUEL.SIZE", DataType.INT, "54"), + PARTY_DUEL_FILTER("PARTY.DUEL.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + PARTY_DUEL_PARTY_TITLE("PARTY.DUEL.PARTY.TITLE", DataType.STRING, "&e's party"), + PARTY_DUEL_PARTY_LORE("PARTY.DUEL.PARTY.MEMBER", DataType.STRING_LIST, "&7- &f"), + + DIVISIONS_TITLE("DIVISIONS.TITLE", DataType.STRING, "&7Divisions"), + DIVISIONS_SIZE("DIVISIONS.SIZE", DataType.INT, "36"), + DIVISIONS_FILTER("DIVISIONS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + DIVISIONS_ITEM_NAME("DIVISIONS.ITEM.NAME", DataType.STRING, ""), + DIVISIONS_LORE("DIVISIONS.LORE", DataType.STRING_LIST, + "&7To reach this rank, you", "&7need elo."), + PASSED_DIVISIONS_ITEM_NAME("DIVISIONS.PASSED.ITEM.NAME", DataType.STRING, "&a✅ "), + PASSED_DIVISIONS_LORE("DIVISIONS.PASSED.LORE", DataType.STRING_LIST, + "&7You have already reached", "&7this rank."), + DIVISIONS_ELO_BUTTON_ENABLED("DIVISIONS.ELO_BUTTON.ENABLED", DataType.BOOLEAN, "true"), + DIVISIONS_ELO_BUTTON_MATERIAL("DIVISIONS.ELO_BUTTON.MATERIAL", DataType.STRING, "COAL_BLOCK"), + DIVISIONS_ELO_BUTTON_SLOT("DIVISIONS.ELO_BUTTON.SLOT", DataType.INT, "31"), + DIVISIONS_ELO_BUTTON_NAME("DIVISIONS.ELO_BUTTON.NAME", DataType.STRING, "&aYour Elo: &b"), + DIVISIONS_ELO_BUTTON_LORE("DIVISIONS.ELO_BUTTON.LORE", DataType.STRING_LIST, + ""), + SETTINGS_TITLE("SETTINGS.TITLE", DataType.STRING, "&7Profile Settings"), + SETTINGS_SIZE("SETTINGS.SIZE", DataType.INT, "27"), + SETTINGS_FILTER("SETTINGS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + + SETTINGS_PLAYER_VISIBILITY_MATERIAL("SETTINGS.PLAYER-VISIBILITY.MATERIAL", DataType.STRING, "ENDER_EYE"), + SETTINGS_PLAYER_VISIBILITY_TITLE("SETTINGS.PLAYER-VISIBILITY.NAME", DataType.STRING, "&bPlayer Visibility"), + SETTINGS_PLAYER_VISIBILITY_LORE_ENABLED("SETTINGS.PLAYER-VISIBILITY.LORE_ENABLED", DataType.STRING_LIST, + "&7Toggle Player Visibility", + "&7in spawn.", + "", + " &a&l▶ &aEnabled", + " &7&l▶ &7Disabled", + " ", + "&cClick to disable."), + SETTINGS_PLAYER_VISIBILITY_LORE_DISABLED("SETTINGS.PLAYER-VISIBILITY.LORE_DISABLED", DataType.STRING_LIST, + "&7Toggle Player Visibility", + "&7in spawn.", + "", + " &7&l▶ &7Enabled", + " &c&l▶ &cDisabled", + " ", + "&aClick to enable."), + SETTINGS_PLAYER_VISIBILITY_SLOT("SETTINGS.PLAYER-VISIBILITY.SLOT", DataType.INT, "10"), + SETTINGS_ALLOW_SPECTATORS_MATERIAL("SETTINGS.ALLOW-SPECTATORS.MATERIAL", DataType.STRING, "EGG"), + SETTINGS_ALLOW_SPECTATORS_TITLE("SETTINGS.ALLOW-SPECTATORS.NAME", DataType.STRING, "&bAllow Spectators"), + SETTINGS_ALLOW_SPECTATORS_LORE_ENABLED("SETTINGS.ALLOW-SPECTATORS.LORE_ENABLED", DataType.STRING_LIST, + "&7Allow Spectators to", + "&7spectate your match.", + "", + " &a&l▶ &aEnabled", + " &7&l▶ &7Disabled", + " ", + "&cClick to disable."), + SETTINGS_ALLOW_SPECTATORS_LORE_DISABLED("SETTINGS.ALLOW-SPECTATORS.LORE_DISABLED", DataType.STRING_LIST, + "&7Allow Spectators to", + "&7spectate your match.", + "", + " &7&l▶ &7Enabled", + " &c&l▶ &cDisabled", + " ", + "&aClick to enable."), + SETTINGS_ALLOW_SPECTATORS_SLOT("SETTINGS.ALLOW-SPECTATORS.SLOT", DataType.INT, "11"), + SETTINGS_ALLOW_DUEL_REQUESTS_MATERIAL("SETTINGS.ALLOW-DUEL-REQUESTS.MATERIAL", DataType.STRING, + "DIAMOND_SWORD"), + SETTINGS_ALLOW_DUEL_REQUESTS_TITLE("SETTINGS.ALLOW-DUEL-REQUESTS.NAME", DataType.STRING, + "&bAllow Duel requests"), + SETTINGS_ALLOW_DUEL_REQUESTS_LORE_ENABLED("SETTINGS.ALLOW-DUEL-REQUESTS.LORE_ENABLED", DataType.STRING_LIST, + "&7Allow players to", + "&7send you duel requests.", + "", + " &a&l▶ &aEnabled", + " &7&l▶ &7Disabled", + " ", + "&cClick to disable."), + SETTINGS_ALLOW_DUEL_REQUESTS_LORE_DISABLED("SETTINGS.ALLOW-DUEL-REQUESTS.LORE_DISABLED", DataType.STRING_LIST, + "&7Allow players to", + "&7send you duel requests.", + "", + " &7&l▶ &7Enabled", + " &c&l▶ &cDisabled", + " ", + "&aClick to enable."), + SETTINGS_ALLOW_DUEL_REQUESTS_SLOT("SETTINGS.ALLOW-DUEL-REQUESTS.SLOT", DataType.INT, "12"), + SETTINGS_ALLOW_PARTY_REQUESTS_MATERIAL("SETTINGS.ALLOW-PARTY-REQUESTS.MATERIAL", DataType.STRING, "STICK"), + SETTINGS_ALLOW_PARTY_REQUESTS_TITLE("SETTINGS.ALLOW-PARTY-REQUESTS.NAME", DataType.STRING, + "&bAllow Party requests"), + SETTINGS_ALLOW_PARTY_REQUESTS_LORE_ENABLED("SETTINGS.ALLOW-PARTY-REQUESTS.LORE_ENABLED", DataType.STRING_LIST, + "&7Allow players to", + "&7send you party requests.", + "", + " &a&l▶ &aEnabled", + " &7&l▶ &7Disabled", + " ", + "&cClick to disable."), + SETTINGS_ALLOW_PARTY_REQUESTS_LORE_DISABLED("SETTINGS.ALLOW-PARTY-REQUESTS.LORE_DISABLED", DataType.STRING_LIST, + "&7Allow players to", + "&7send you party requests.", + "", + " &7&l▶ &7Enabled", + " &c&l▶ &cDisabled", + " ", + "&aClick to enable."), + SETTINGS_ALLOW_PARTY_REQUESTS_SLOT("SETTINGS.ALLOW-PARTY-REQUESTS.SLOT", DataType.INT, "13"), + SETTINGS_PING_RANGE_MATERIAL("SETTINGS.PING-RANGE.MATERIAL", DataType.STRING, "BOOK"), + SETTINGS_PING_RANGE_TITLE("SETTINGS.PING-RANGE.NAME", DataType.STRING, "&bPing Range"), + SETTINGS_PING_RANGE_LORE("SETTINGS.PING-RANGE.LORE", DataType.STRING_LIST, + "&7Set Max ping you", + "&7can match against.", + "", + " &7Current Ping-range: &b", + " ", + "&a + Left Click to increase", + "&c - Right Click to decrease"), + SETTINGS_PING_RANGE_SLOT("SETTINGS.PING-RANGE.SLOT", DataType.INT, "14"), + SETTINGS_COSMETICS_MATERIAL("SETTINGS.SETTINGS.COSMETICS.MATERIAL", DataType.STRING, "CAKE"), + SETTINGS_COSMETICS_TITLE("SETTINGS.SETTINGS.COSMETICS.NAME", DataType.STRING, "&bManage Cosmetics"), + SETTINGS_COSMETICS_LORE("SETTINGS.SETTINGS.COSMETICS.LORE", DataType.STRING_LIST, + "&7Manage unlocked cosmetics", + "", + " &7Current Kill Effect: &b", + " &7Current Kill Message: &b", + " &7Current Armor Trim: &b", + " &7Current Shield Pattern: &b", + " ", + "&aClick to open cosmetics menu"), + SETTINGS_COSMETICS_SLOT("SETTINGS.SETTINGS.COSMETICS.SLOT", DataType.INT, "15"), + COSMETICS_SIZE("SETTINGS.COSMETICS.SIZE", DataType.INT, "27"), + COSMETICS_FILTER("SETTINGS.COSMETICS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + COSMETICS_TITLE("SETTINGS.COSMETICS.TITLE", DataType.STRING, "&7Cosmetics Management"), + KILL_EFFECTS_SLOT("SETTINGS.COSMETICS.KILL-EFFECTS.SLOT", DataType.INT, "10"), + KILL_EFFECTS_NAME("SETTINGS.COSMETICS.KILL-EFFECTS.NAME", DataType.STRING, "&bKill Effects"), + KILL_EFFECTS_LORE("SETTINGS.COSMETICS.KILL-EFFECTS.LORE", DataType.STRING_LIST, + "&7View all available kill effects", " ", "&aClick to open"), + KILL_EFFECTS_MATERIAL("SETTINGS.COSMETICS.KILL-EFFECTS.MATERIAL", DataType.STRING, "REDSTONE"), + KILL_EFFECTS_TITLE("SETTINGS.KILL-EFFECTS.TITLE", DataType.STRING, "&7Kill Effects"), + KILL_EFFECTS_SIZE("SETTINGS.KILL-EFFECTS.SIZE", DataType.INT, "27"), + KILL_EFFECTS_FILTER("SETTINGS.KILL-EFFECTS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + KILL_EFFECTS_NAME_SELECTED("SETTINGS.KILL-EFFECTS.SELECTED.NAME", DataType.STRING, + " &7&o(Selected)"), + KILL_EFFECTS_NAME_NOT_SELECTED("SETTINGS.KILL-EFFECTS.UNSELECTED.NAME", DataType.STRING, ""), + KILL_EFFECTS_SELECTED_LORE("SETTINGS.KILL-EFFECTS.SELECTED.LORE", DataType.STRING_LIST, + " ", "&eCurrently Selected"), + KILL_EFFECTS_UNSELECTED_LORE("SETTINGS.KILL-EFFECTS.UNSELECTED.LORE", DataType.STRING_LIST, + " ", "&aClick to select"), + KILL_EFFECTS_NO_PERMISSION_LORE("SETTINGS.KILL-EFFECTS.NO-PERMISSION.LORE", DataType.STRING_LIST, + " ", "&cNo permission"), + SETTINGS_MENU_SOUNDS_MATERIAL("SETTINGS.MENU-SOUNDS.MATERIAL", DataType.STRING, "BOOK"), + SETTINGS_MENU_SOUNDS_TITLE("SETTINGS.MENU-SOUNDS.NAME", DataType.STRING, "&bMenu Sounds"), + SETTINGS_MENU_SOUNDS_LORE_ENABLED("SETTINGS.MENU-SOUNDS.LORE_ENABLED", DataType.STRING_LIST, + "&7Play a sound when clicking.", + "&7a button", + " ", + " &a&l▶ &aEnabled", + " &7&l▶ &7Disabled", + " ", + "&cClick to disable."), + SETTINGS_MENU_SOUNDS_LORE_DISABLED("SETTINGS.MENU-SOUNDS.LORE_DISABLED", DataType.STRING_LIST, + "&7Play a sound when clicking", + "&7a button.", + "", + " &7&l▶ &7Enabled", + " &c&l▶ &cDisabled", + " ", + "&aClick to enable."), + SETTINGS_MENU_SOUNDS_SLOT("SETTINGS.MENU-SOUNDS.SLOT", DataType.INT, "16"), + KILL_MESSAGES_TITLE("SETTINGS.KILL-MESSAGES.TITLE", DataType.STRING, "&7Kill Messages"), + KILL_MESSAGES_SIZE("SETTINGS.KILL-MESSAGES.SIZE", DataType.INT, "27"), + KILL_MESSAGES_FILTER("SETTINGS.KILL-MESSAGES.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + KILL_MESSAGES_SLOT("SETTINGS.COSMETICS.KILL-MESSAGES.SLOT", DataType.INT, "11"), + KILL_MESSAGES_NAME("SETTINGS.COSMETICS.KILL-MESSAGES.NAME", DataType.STRING, "&bKill Messages"), + KILL_MESSAGES_MATERIAL("SETTINGS.COSMETICS.KILL-MESSAGES.MATERIAL", DataType.STRING, "BOOK"), + KILL_MESSAGES_LORE("SETTINGS.COSMETICS.KILL-MESSAGES.LORE", DataType.STRING_LIST, + "&7View all available kill messages", " ", "&aClick to open"), + KILL_MESSAGES_NAME_SELECTED("SETTINGS.KILL-MESSAGES.SELECTED.NAME", DataType.STRING, + " &7&o(Selected)"), + KILL_MESSAGES_NAME_NOT_SELECTED("SETTINGS.KILL-MESSAGES.UNSELECTED.NAME", DataType.STRING, ""), + KILL_MESSAGES_SELECTED_LORE("SETTINGS.KILL-MESSAGES.SELECTED.LORE", DataType.STRING_LIST, + " ", + "", + " ", + "&eCurrently Selected"), + KILL_MESSAGES_UNSELECTED_LORE("SETTINGS.KILL-MESSAGES.UNSELECTED.LORE", DataType.STRING_LIST, + " ", + "", + " ", + "&aClick to select"), + KILL_MESSAGES_NO_PERMISSION_LORE("SETTINGS.KILL-MESSAGES.NO-PERMISSION.LORE", DataType.STRING_LIST, + " ", + "", + " ", + "&cNo permission"), + ARMOR_TRIMS_TITLE("SETTINGS.ARMOR-TRIMS.TITLE", DataType.STRING, "&7Armor Trims"), + ARMOR_TRIMS_FILTER("SETTINGS.ARMOR-TRIMS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + ARMOR_TRIMS_SLOT("SETTINGS.COSMETICS.ARMOR-TRIMS.SLOT", DataType.INT, "12"), + ARMOR_TRIMS_NAME("SETTINGS.COSMETICS.ARMOR-TRIMS.NAME", DataType.STRING, "&bArmor Trims"), + ARMOR_TRIMS_MATERIAL("SETTINGS.COSMETICS.ARMOR-TRIMS.MATERIAL", DataType.STRING, "NETHERITE_CHESTPLATE"), + ARMOR_TRIMS_LORE("SETTINGS.COSMETICS.ARMOR-TRIMS.LORE", DataType.STRING_LIST, + "&7View all available armor trims", " ", "&aClick to open"), + ARMOR_TRIMS_NAME_SELECTED("SETTINGS.ARMOR-TRIMS.SELECTED.NAME", DataType.STRING, + " &7&o(Selected)"), + ARMOR_TRIMS_NAME_NOT_SELECTED("SETTINGS.ARMOR-TRIMS.UNSELECTED.NAME", DataType.STRING, ""), + ARMOR_TRIMS_DISPLAY_HELMET_MATERIAL("SETTINGS.ARMOR-TRIMS.DISPLAY.HELMET.MATERIAL", DataType.STRING, "netherite_helmet"), + ARMOR_TRIMS_DISPLAY_CHESTPLATE_MATERIAL("SETTINGS.ARMOR-TRIMS.DISPLAY.CHESTPLATE.MATERIAL", DataType.STRING, "netherite_chestplate"), + ARMOR_TRIMS_DISPLAY_LEGGINGS_MATERIAL("SETTINGS.ARMOR-TRIMS.DISPLAY.LEGGINGS.MATERIAL", DataType.STRING, "netherite_leggings"), + ARMOR_TRIMS_DISPLAY_BOOTS_MATERIAL("SETTINGS.ARMOR-TRIMS.DISPLAY.BOOTS.MATERIAL", DataType.STRING, "netherite_boots"), + ARMOR_TRIMS_SELECTED_LORE("SETTINGS.ARMOR-TRIMS.SELECTED.LORE", DataType.STRING_LIST, + " ", + "", + " ", + "&eCurrently Selected"), + ARMOR_TRIMS_UNSELECTED_LORE("SETTINGS.ARMOR-TRIMS.UNSELECTED.LORE", DataType.STRING_LIST, + " ", + "", + " ", + "&aClick to select"), + ARMOR_TRIMS_NO_PERMISSION_LORE("SETTINGS.ARMOR-TRIMS.NO-PERMISSION.LORE", DataType.STRING_LIST, + " ", + "", + " ", + "&cNo permission"), + SHIELD_PATTERNS_TITLE("SETTINGS.SHIELD-PATTERNS.TITLE", DataType.STRING, "&7Shield Patterns"), + SHIELD_PATTERNS_SIZE("SETTINGS.SHIELD-PATTERNS.SIZE", DataType.INT, "27"), + SHIELD_PATTERNS_FILTER("SETTINGS.SHIELD-PATTERNS.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + SHIELD_PATTERNS_SLOT("SETTINGS.COSMETICS.SHIELD-PATTERNS.SLOT", DataType.INT, "13"), + SHIELD_PATTERNS_NAME("SETTINGS.COSMETICS.SHIELD-PATTERNS.NAME", DataType.STRING, "&bShield Patterns"), + SHIELD_PATTERNS_MATERIAL("SETTINGS.COSMETICS.SHIELD-PATTERNS.MATERIAL", DataType.STRING, "SHIELD"), + SHIELD_PATTERNS_LORE("SETTINGS.COSMETICS.SHIELD-PATTERNS.LORE", DataType.STRING_LIST, + "&7View all available shield pattern", " ", "&aClick to open"), + SHIELD_PATTERNS_NAME_SELECTED("SETTINGS.SHIELD-PATTERNS.SELECTED.NAME", DataType.STRING, + " &7&o(Selected)"), + SHIELD_PATTERNS_NAME_NOT_SELECTED("SETTINGS.SHIELD-PATTERNS.UNSELECTED.NAME", DataType.STRING, ""), + SHIELD_PATTERNS_SELECTED_LORE("SETTINGS.SHIELD-PATTERNS.SELECTED.LORE", DataType.STRING_LIST, + " ", + " ", + " ", + "&eCurrently Selected"), + SHIELD_PATTERNS_UNSELECTED_LORE("SETTINGS.SHIELD-PATTERNS.UNSELECTED.LORE", DataType.STRING_LIST, + " ", + " ", + " ", + "&aClick to select"), + SHIELD_PATTERNS_NO_PERMISSION_LORE("SETTINGS.SHIELD-PATTERNS.NO-PERMISSION.LORE", DataType.STRING_LIST, + " ", + " ", + " ", + "&cNo permission"), + + CUSTOM_KIT_TITLE("CUSTOM_KIT.MENU.TITLE", DataType.STRING, "&bCustom Kits"), + CUSTOM_KIT_HOST_TITLE("CUSTOM_KIT.MENU.HOST_TITLE", DataType.STRING, "&bSelect a Kit to Host"), + CUSTOM_KIT_SIZE("CUSTOM_KIT.MENU.SIZE", DataType.INT, "27"), + CUSTOM_KIT_FILTER("CUSTOM_KIT.MENU.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "NONE"), + CUSTOM_KIT_ITEM_NAME("CUSTOM_KIT.MENU.KIT.NAME", DataType.STRING, ""), + CUSTOM_KIT_ITEM_MANAGE_LORE("CUSTOM_KIT.MENU.KIT.MANAGE-LORE", DataType.STRING_LIST, "&7Click to manage"), + CUSTOM_KIT_ITEM_HOST_LORE("CUSTOM_KIT.MENU.KIT.HOST-LORE", DataType.STRING_LIST, "&aClick to host this kit"), + CUSTOM_KIT_CREATE_SLOT("CUSTOM_KIT.MENU.CREATE.SLOT", DataType.INT, "22"), + CUSTOM_KIT_CREATE_MATERIAL("CUSTOM_KIT.MENU.CREATE.MATERIAL", DataType.STRING, "LIME_DYE"), + CUSTOM_KIT_CREATE_NAME("CUSTOM_KIT.MENU.CREATE.NAME", DataType.STRING, "&aCreate Kit"), + CUSTOM_KIT_CREATE_LORE("CUSTOM_KIT.MENU.CREATE.LORE", DataType.STRING_LIST, "&7Kits: &f&7/&f"), + + CUSTOM_KIT_MANAGE_TITLE("CUSTOM_KIT.MANAGE.TITLE", DataType.STRING, "&bEditing: "), + CUSTOM_KIT_MANAGE_SIZE("CUSTOM_KIT.MANAGE.SIZE", DataType.INT, "45"), + CUSTOM_KIT_MANAGE_FILTER("CUSTOM_KIT.MANAGE.FILTER-TYPE", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + CUSTOM_KIT_MANAGE_EDIT_ITEMS_SLOT("CUSTOM_KIT.MANAGE.EDIT-ITEMS.SLOT", DataType.INT, "10"), + CUSTOM_KIT_MANAGE_EDIT_ITEMS_MATERIAL("CUSTOM_KIT.MANAGE.EDIT-ITEMS.MATERIAL", DataType.STRING, "CHEST"), + CUSTOM_KIT_MANAGE_EDIT_ITEMS_NAME("CUSTOM_KIT.MANAGE.EDIT-ITEMS.NAME", DataType.STRING, "&aEdit Items"), + CUSTOM_KIT_MANAGE_RULES_SLOT("CUSTOM_KIT.MANAGE.RULES.SLOT", DataType.INT, "11"), + CUSTOM_KIT_MANAGE_RULES_MATERIAL("CUSTOM_KIT.MANAGE.RULES.MATERIAL", DataType.STRING, "COMPARATOR"), + CUSTOM_KIT_MANAGE_RULES_NAME("CUSTOM_KIT.MANAGE.RULES.NAME", DataType.STRING, "&eRules"), + CUSTOM_KIT_MANAGE_ARENAS_SLOT("CUSTOM_KIT.MANAGE.ARENAS.SLOT", DataType.INT, "12"), + CUSTOM_KIT_MANAGE_ARENAS_MATERIAL("CUSTOM_KIT.MANAGE.ARENAS.MATERIAL", DataType.STRING, "MAP"), + CUSTOM_KIT_MANAGE_ARENAS_NAME("CUSTOM_KIT.MANAGE.ARENAS.NAME", DataType.STRING, "&eArenas"), + CUSTOM_KIT_MANAGE_WHITELIST_SLOT("CUSTOM_KIT.MANAGE.WHITELIST.SLOT", DataType.INT, "13"), + CUSTOM_KIT_MANAGE_WHITELIST_MATERIAL("CUSTOM_KIT.MANAGE.WHITELIST.MATERIAL", DataType.STRING, "GRASS_BLOCK"), + CUSTOM_KIT_MANAGE_WHITELIST_NAME("CUSTOM_KIT.MANAGE.WHITELIST.NAME", DataType.STRING, "&eWhitelisted Blocks"), + CUSTOM_KIT_MANAGE_EFFECTS_SLOT("CUSTOM_KIT.MANAGE.EFFECTS.SLOT", DataType.INT, "14"), + CUSTOM_KIT_MANAGE_EFFECTS_MATERIAL("CUSTOM_KIT.MANAGE.EFFECTS.MATERIAL", DataType.STRING, "BREWING_STAND"), + CUSTOM_KIT_MANAGE_EFFECTS_NAME("CUSTOM_KIT.MANAGE.EFFECTS.NAME", DataType.STRING, "&ePotion Effects"), + CUSTOM_KIT_MANAGE_ICON_SLOT("CUSTOM_KIT.MANAGE.ICON.SLOT", DataType.INT, "15"), + CUSTOM_KIT_MANAGE_ICON_MATERIAL("CUSTOM_KIT.MANAGE.ICON.MATERIAL", DataType.STRING, "ITEM_FRAME"), + CUSTOM_KIT_MANAGE_ICON_NAME("CUSTOM_KIT.MANAGE.ICON.NAME", DataType.STRING, "&eSet Icon"), + CUSTOM_KIT_MANAGE_HEALTH_SLOT("CUSTOM_KIT.MANAGE.HEALTH.SLOT", DataType.INT, "16"), + CUSTOM_KIT_MANAGE_HEALTH_MATERIAL("CUSTOM_KIT.MANAGE.HEALTH.MATERIAL", DataType.STRING, "GOLDEN_APPLE"), + CUSTOM_KIT_MANAGE_HEALTH_NAME("CUSTOM_KIT.MANAGE.HEALTH.NAME", DataType.STRING, "&eSet Health"), + CUSTOM_KIT_MANAGE_HEALTH_LORE("CUSTOM_KIT.MANAGE.HEALTH.LORE", DataType.STRING_LIST, "&7Current: &f"), + CUSTOM_KIT_MANAGE_DELETE_SLOT("CUSTOM_KIT.MANAGE.DELETE.SLOT", DataType.INT, "31"), + CUSTOM_KIT_MANAGE_DELETE_MATERIAL("CUSTOM_KIT.MANAGE.DELETE.MATERIAL", DataType.STRING, "TNT"), + CUSTOM_KIT_MANAGE_DELETE_NAME("CUSTOM_KIT.MANAGE.DELETE.NAME", DataType.STRING, "&cDelete Kit"), + CUSTOM_KIT_MANAGE_DELETE_LORE("CUSTOM_KIT.MANAGE.DELETE.LORE", DataType.STRING_LIST, "&7Shift-click to delete"), + CUSTOM_KIT_MANAGE_RETURN_SLOT("CUSTOM_KIT.MANAGE.RETURN-SLOT", DataType.INT, "40"), + + CUSTOM_KIT_RULES_TITLE("CUSTOM_KIT.RULES.TITLE", DataType.STRING, "&eCustom Kit Rules"), + CUSTOM_KIT_RULES_SIZE("CUSTOM_KIT.RULES.SIZE", DataType.INT, "54"), + + KIT_RULE_HIDDEN_ENABLED_NAME("KIT_RULES.HIDDEN.ENABLED-NAME", DataType.STRING, "&aHidden"), + KIT_RULE_HIDDEN_DISABLED_NAME("KIT_RULES.HIDDEN.DISABLED-NAME", DataType.STRING, "&cHidden"), + KIT_RULE_HIDDEN_LORE("KIT_RULES.HIDDEN.LORE", DataType.STRING_LIST, "&7If the kit shouldn't appear in the queue and party events menu (Used mainly for FFA-only kits)", "", "&7Click to toggle"), + KIT_RULE_HIDDEN_MATERIAL("KIT_RULES.HIDDEN.MATERIAL", DataType.STRING, "REDSTONE_TORCH"), + KIT_RULE_BUILD_ENABLED_NAME("KIT_RULES.BUILD.ENABLED-NAME", DataType.STRING, "&aBuild"), + KIT_RULE_BUILD_DISABLED_NAME("KIT_RULES.BUILD.DISABLED-NAME", DataType.STRING, "&cBuild"), + KIT_RULE_BUILD_LORE("KIT_RULES.BUILD.LORE", DataType.STRING_LIST, "&7Allow/Deny Players to place and break blocks placed by them.", "", "&7Click to toggle"), + KIT_RULE_BUILD_MATERIAL("KIT_RULES.BUILD.MATERIAL", DataType.STRING, "LAVA_BUCKET"), + KIT_RULE_HUNGER_ENABLED_NAME("KIT_RULES.HUNGER.ENABLED-NAME", DataType.STRING, "&aHunger"), + KIT_RULE_HUNGER_DISABLED_NAME("KIT_RULES.HUNGER.DISABLED-NAME", DataType.STRING, "&cHunger"), + KIT_RULE_HUNGER_LORE("KIT_RULES.HUNGER.LORE", DataType.STRING_LIST, "&7Allow/Deny Players losing Hunger", "", "&7Click to toggle"), + KIT_RULE_HUNGER_MATERIAL("KIT_RULES.HUNGER.MATERIAL", DataType.STRING, "COOKED_BEEF"), + KIT_RULE_SUMO_ENABLED_NAME("KIT_RULES.SUMO.ENABLED-NAME", DataType.STRING, "&aSumo"), + KIT_RULE_SUMO_DISABLED_NAME("KIT_RULES.SUMO.DISABLED-NAME", DataType.STRING, "&cSumo"), + KIT_RULE_SUMO_LORE("KIT_RULES.SUMO.LORE", DataType.STRING_LIST, "&7Allow/Deny Sumo", "", "&7Click to toggle"), + KIT_RULE_SUMO_MATERIAL("KIT_RULES.SUMO.MATERIAL", DataType.STRING, "LEAD"), + KIT_RULE_FALL_DAMAGE_ENABLED_NAME("KIT_RULES.FALL_DAMAGE.ENABLED-NAME", DataType.STRING, "&aFall Damage"), + KIT_RULE_FALL_DAMAGE_DISABLED_NAME("KIT_RULES.FALL_DAMAGE.DISABLED-NAME", DataType.STRING, "&cFall Damage"), + KIT_RULE_FALL_DAMAGE_LORE("KIT_RULES.FALL_DAMAGE.LORE", DataType.STRING_LIST, "&7Allow/Deny Player to take Fall Damage", "", "&7Click to toggle"), + KIT_RULE_FALL_DAMAGE_MATERIAL("KIT_RULES.FALL_DAMAGE.MATERIAL", DataType.STRING, "DIAMOND"), + KIT_RULE_DENY_MOVEMENT_ENABLED_NAME("KIT_RULES.DENY_MOVEMENT.ENABLED-NAME", DataType.STRING, "&aDeny Movement"), + KIT_RULE_DENY_MOVEMENT_DISABLED_NAME("KIT_RULES.DENY_MOVEMENT.DISABLED-NAME", DataType.STRING, "&cDeny Movement"), + KIT_RULE_DENY_MOVEMENT_LORE("KIT_RULES.DENY_MOVEMENT.LORE", DataType.STRING_LIST, "&7Allow/Deny Movement on match start", "", "&7Click to toggle"), + KIT_RULE_DENY_MOVEMENT_MATERIAL("KIT_RULES.DENY_MOVEMENT.MATERIAL", DataType.STRING, "WATER_BUCKET"), + KIT_RULE_BOXING_ENABLED_NAME("KIT_RULES.BOXING.ENABLED-NAME", DataType.STRING, "&aBoxing"), + KIT_RULE_BOXING_DISABLED_NAME("KIT_RULES.BOXING.DISABLED-NAME", DataType.STRING, "&cBoxing"), + KIT_RULE_BOXING_LORE("KIT_RULES.BOXING.LORE", DataType.STRING_LIST, "&7Allow/Deny Boxing", "", "&7Click to toggle"), + KIT_RULE_BOXING_MATERIAL("KIT_RULES.BOXING.MATERIAL", DataType.STRING, "DIAMOND_CHESTPLATE"), + KIT_RULE_ALLOW_ARENA_BREAK_ENABLED_NAME("KIT_RULES.ALLOW_ARENA_BREAK.ENABLED-NAME", DataType.STRING, "&aArena Break"), + KIT_RULE_ALLOW_ARENA_BREAK_DISABLED_NAME("KIT_RULES.ALLOW_ARENA_BREAK.DISABLED-NAME", DataType.STRING, "&cArena Break"), + KIT_RULE_ALLOW_ARENA_BREAK_LORE("KIT_RULES.ALLOW_ARENA_BREAK.LORE", DataType.STRING_LIST, "&7Allow Players to break blocks from the arena (They need to be whitelisted)", "", "&7Click to toggle"), + KIT_RULE_ALLOW_ARENA_BREAK_MATERIAL("KIT_RULES.ALLOW_ARENA_BREAK.MATERIAL", DataType.STRING, "WOODEN_AXE"), + KIT_RULE_DAMAGE_ENABLED_NAME("KIT_RULES.DAMAGE.ENABLED-NAME", DataType.STRING, "&aDamage"), + KIT_RULE_DAMAGE_DISABLED_NAME("KIT_RULES.DAMAGE.DISABLED-NAME", DataType.STRING, "&cDamage"), + KIT_RULE_DAMAGE_LORE("KIT_RULES.DAMAGE.LORE", DataType.STRING_LIST, "&7Allow/Deny Players to take Damage", "", "&7Click to toggle"), + KIT_RULE_DAMAGE_MATERIAL("KIT_RULES.DAMAGE.MATERIAL", DataType.STRING, "DIAMOND_SWORD"), + KIT_RULE_SATURATION_HEAL_ENABLED_NAME("KIT_RULES.SATURATION_HEAL.ENABLED-NAME", DataType.STRING, "&aNatural Regeneration"), + KIT_RULE_SATURATION_HEAL_DISABLED_NAME("KIT_RULES.SATURATION_HEAL.DISABLED-NAME", DataType.STRING, "&cNatural Regeneration"), + KIT_RULE_SATURATION_HEAL_LORE("KIT_RULES.SATURATION_HEAL.LORE", DataType.STRING_LIST, "&7If Players should regen from saturation", "", "&7Click to toggle"), + KIT_RULE_SATURATION_HEAL_MATERIAL("KIT_RULES.SATURATION_HEAL.MATERIAL", DataType.STRING, "GOLDEN_APPLE"), + KIT_RULE_SHOW_HP_ENABLED_NAME("KIT_RULES.SHOW_HP.ENABLED-NAME", DataType.STRING, "&aShow Health"), + KIT_RULE_SHOW_HP_DISABLED_NAME("KIT_RULES.SHOW_HP.DISABLED-NAME", DataType.STRING, "&cShow Health"), + KIT_RULE_SHOW_HP_LORE("KIT_RULES.SHOW_HP.LORE", DataType.STRING_LIST, "&7If players should see their enemies health under their name", "", "&7Click to toggle"), + KIT_RULE_SHOW_HP_MATERIAL("KIT_RULES.SHOW_HP.MATERIAL", DataType.STRING, "APPLE"), + KIT_RULE_ALLOW_KIT_EDITOR_ENABLED_NAME("KIT_RULES.ALLOW_KIT_EDITOR.ENABLED-NAME", DataType.STRING, "&aAllow Kit Editor"), + KIT_RULE_ALLOW_KIT_EDITOR_DISABLED_NAME("KIT_RULES.ALLOW_KIT_EDITOR.DISABLED-NAME", DataType.STRING, "&cAllow Kit Editor"), + KIT_RULE_ALLOW_KIT_EDITOR_LORE("KIT_RULES.ALLOW_KIT_EDITOR.LORE", DataType.STRING_LIST, "&7If players should be able to modify this kit in kiteditor.", "", "&7Click to toggle"), + KIT_RULE_ALLOW_KIT_EDITOR_MATERIAL("KIT_RULES.ALLOW_KIT_EDITOR.MATERIAL", DataType.STRING, "WOODEN_AXE"), + KIT_RULE_ALLOW_PARTY_ENABLED_NAME("KIT_RULES.ALLOW_PARTY.ENABLED-NAME", DataType.STRING, "&aAllow Party Events"), + KIT_RULE_ALLOW_PARTY_DISABLED_NAME("KIT_RULES.ALLOW_PARTY.DISABLED-NAME", DataType.STRING, "&cAllow Party Events"), + KIT_RULE_ALLOW_PARTY_LORE("KIT_RULES.ALLOW_PARTY.LORE", DataType.STRING_LIST, "&7If players should be able to play this kit in party events.", "", "&7Click to toggle"), + KIT_RULE_ALLOW_PARTY_MATERIAL("KIT_RULES.ALLOW_PARTY.MATERIAL", DataType.STRING, "PARROT_SPAWN_EGG"), + KIT_RULE_BED_WARS_ENABLED_NAME("KIT_RULES.BED_WARS.ENABLED-NAME", DataType.STRING, "&aBedwars"), + KIT_RULE_BED_WARS_DISABLED_NAME("KIT_RULES.BED_WARS.DISABLED-NAME", DataType.STRING, "&cBedwars"), + KIT_RULE_BED_WARS_LORE("KIT_RULES.BED_WARS.LORE", DataType.STRING_LIST, "&7Allow/Deny Bedwars", "", "&7Click to toggle"), + KIT_RULE_BED_WARS_MATERIAL("KIT_RULES.BED_WARS.MATERIAL", DataType.STRING, "RED_BED"), + KIT_RULE_PARKOUR_ENABLED_NAME("KIT_RULES.PARKOUR.ENABLED-NAME", DataType.STRING, "&aParkour"), + KIT_RULE_PARKOUR_DISABLED_NAME("KIT_RULES.PARKOUR.DISABLED-NAME", DataType.STRING, "&cParkour"), + KIT_RULE_PARKOUR_LORE("KIT_RULES.PARKOUR.LORE", DataType.STRING_LIST, "&7Allow/Deny Parkour", "", "&7Click to toggle"), + KIT_RULE_PARKOUR_MATERIAL("KIT_RULES.PARKOUR.MATERIAL", DataType.STRING, "ENDER_PEARL"), + KIT_RULE_RESET_ARENA_AFTER_ROUND_ENABLED_NAME("KIT_RULES.RESET_ARENA_AFTER_ROUND.ENABLED-NAME", DataType.STRING, "&aReset Arena After Round"), + KIT_RULE_RESET_ARENA_AFTER_ROUND_DISABLED_NAME("KIT_RULES.RESET_ARENA_AFTER_ROUND.DISABLED-NAME", DataType.STRING, "&cReset Arena After Round"), + KIT_RULE_RESET_ARENA_AFTER_ROUND_LORE("KIT_RULES.RESET_ARENA_AFTER_ROUND.LORE", DataType.STRING_LIST, "&7If the arena should be reset after the round", "", "&7Click to toggle"), + KIT_RULE_RESET_ARENA_AFTER_ROUND_MATERIAL("KIT_RULES.RESET_ARENA_AFTER_ROUND.MATERIAL", DataType.STRING, "BARRIER"), + KIT_RULE_DROPPER_ENABLED_NAME("KIT_RULES.DROPPER.ENABLED-NAME", DataType.STRING, "&aDropper"), + KIT_RULE_DROPPER_DISABLED_NAME("KIT_RULES.DROPPER.DISABLED-NAME", DataType.STRING, "&cDropper"), + KIT_RULE_DROPPER_LORE("KIT_RULES.DROPPER.LORE", DataType.STRING_LIST, "&7Allow/Deny Dropper", "", "&7Click to toggle"), + KIT_RULE_DROPPER_MATERIAL("KIT_RULES.DROPPER.MATERIAL", DataType.STRING, "DROPPER"), + KIT_RULE_ENDERPEARL_COOLDOWN_ENABLED_NAME("KIT_RULES.ENDERPEARL_COOLDOWN.ENABLED-NAME", DataType.STRING, "&aEnderpearl cooldown"), + KIT_RULE_ENDERPEARL_COOLDOWN_DISABLED_NAME("KIT_RULES.ENDERPEARL_COOLDOWN.DISABLED-NAME", DataType.STRING, "&cEnderpearl cooldown"), + KIT_RULE_ENDERPEARL_COOLDOWN_LORE("KIT_RULES.ENDERPEARL_COOLDOWN.LORE", DataType.STRING_LIST, "&7Enderpearls have a 15s delay when being used.", "", "&7Click to toggle"), + KIT_RULE_ENDERPEARL_COOLDOWN_MATERIAL("KIT_RULES.ENDERPEARL_COOLDOWN.MATERIAL", DataType.STRING, "ENDER_PEARL"), + KIT_RULE_SATURATION_ENABLED_NAME("KIT_RULES.SATURATION.ENABLED-NAME", DataType.STRING, "&aSaturation"), + KIT_RULE_SATURATION_DISABLED_NAME("KIT_RULES.SATURATION.DISABLED-NAME", DataType.STRING, "&cSaturation"), + KIT_RULE_SATURATION_LORE("KIT_RULES.SATURATION.LORE", DataType.STRING_LIST, "&7Allow/Deny Saturation from eating", "", "&7Click to toggle"), + KIT_RULE_SATURATION_MATERIAL("KIT_RULES.SATURATION.MATERIAL", DataType.STRING, "ENCHANTED_GOLDEN_APPLE"), + KIT_RULE_AUTO_IGNITE_ENABLED_NAME("KIT_RULES.AUTO_IGNITE.ENABLED-NAME", DataType.STRING, "&aAuto Ignite"), + KIT_RULE_AUTO_IGNITE_DISABLED_NAME("KIT_RULES.AUTO_IGNITE.DISABLED-NAME", DataType.STRING, "&cAuto Ignite"), + KIT_RULE_AUTO_IGNITE_LORE("KIT_RULES.AUTO_IGNITE.LORE", DataType.STRING_LIST, "&7Whether to automatically ignite TNT / creepers", "", "&7Click to toggle"), + KIT_RULE_AUTO_IGNITE_MATERIAL("KIT_RULES.AUTO_IGNITE.MATERIAL", DataType.STRING, "TNT"), + KIT_RULE_ROUNDS_MATERIAL("KIT_RULES.ROUNDS.MATERIAL", DataType.STRING, "GOLDEN_AXE"), + KIT_RULE_ROUNDS_NAME("KIT_RULES.ROUNDS.NAME", DataType.STRING, "&eRounds: &a"), + KIT_RULE_ROUNDS_LORE("KIT_RULES.ROUNDS.LORE", DataType.STRING_LIST, + "&7Players must win this many", + "&7rounds to win the match.", + "", + "&aLeft-Click to increase", + "&cRight-Click to decrease"), + CUSTOM_KIT_ARENAS_TITLE("CUSTOM_KIT.ARENAS.TITLE", DataType.STRING, "&eSelect Arenas"), + CUSTOM_KIT_ARENAS_SIZE("CUSTOM_KIT.ARENAS.SIZE", DataType.INT, "54"), + CUSTOM_KIT_ARENAS_ITEM_NAME("CUSTOM_KIT.ARENAS.ITEM-NAME", DataType.STRING, "&f"), + CUSTOM_KIT_ARENAS_SELECTED_LORE("CUSTOM_KIT.ARENAS.SELECTED-LORE", DataType.STRING_LIST, "&aSelected", "&7Click to toggle"), + CUSTOM_KIT_ARENAS_UNSELECTED_LORE("CUSTOM_KIT.ARENAS.UNSELECTED-LORE", DataType.STRING_LIST, "&cNot selected", "&7Click to toggle"), + CUSTOM_KIT_WHITELIST_TITLE("CUSTOM_KIT.WHITELIST.TITLE", DataType.STRING, "&eWhitelisted Blocks"), + CUSTOM_KIT_WHITELIST_SIZE("CUSTOM_KIT.WHITELIST.SIZE", DataType.INT, "54"), + CUSTOM_KIT_WHITELIST_ADD_MATERIAL("CUSTOM_KIT.WHITELIST.ADD.MATERIAL", DataType.STRING, "GREEN_STAINED_GLASS_PANE"), + CUSTOM_KIT_WHITELIST_ADD_NAME("CUSTOM_KIT.WHITELIST.ADD.NAME", DataType.STRING, "&aAdd Block"), + CUSTOM_KIT_WHITELIST_ITEM_NAME("CUSTOM_KIT.WHITELIST.ITEM-NAME", DataType.STRING, "&f"), + CUSTOM_KIT_WHITELIST_REMOVE_LORE("CUSTOM_KIT.WHITELIST.REMOVE-LORE", DataType.STRING_LIST, "&cClick to remove"), + CUSTOM_KIT_EFFECTS_TITLE("CUSTOM_KIT.EFFECTS.TITLE", DataType.STRING, "&ePotion Effects"), + CUSTOM_KIT_EFFECTS_SIZE("CUSTOM_KIT.EFFECTS.SIZE", DataType.INT, "54"), + CUSTOM_KIT_EFFECTS_ITEM_NAME("CUSTOM_KIT.EFFECTS.ITEM-NAME", DataType.STRING, "&f"), + CUSTOM_KIT_EFFECTS_ENABLED_LORE("CUSTOM_KIT.EFFECTS.ENABLED-LORE", DataType.STRING, "&aLevel "), + CUSTOM_KIT_EFFECTS_DISABLED_LORE("CUSTOM_KIT.EFFECTS.DISABLED-LORE", DataType.STRING, "&cDisabled"), + CUSTOM_KIT_EFFECTS_TOGGLE_LORE("CUSTOM_KIT.EFFECTS.TOGGLE-LORE", DataType.STRING, "&7Left: toggle &7Right: level up"), + CUSTOM_KIT_EDITOR_TITLE("CUSTOM_KIT.EDITOR.TITLE", DataType.STRING, "&bEdit Items"), + CUSTOM_KIT_EDITOR_SIZE("CUSTOM_KIT.EDITOR.SIZE", DataType.INT, "54"), + CUSTOM_KIT_EDITOR_ITEM_LORE("CUSTOM_KIT.EDITOR.ITEM-LORE", DataType.STRING_LIST, + " ", "&aLeft-click to enchant", "&cRight-click to remove", "&eShift-right-click to set amount"), + CUSTOM_KIT_EDITOR_EMPTY_MATERIAL("CUSTOM_KIT.EDITOR.EMPTY.MATERIAL", DataType.STRING, "GRAY_STAINED_GLASS_PANE"), + CUSTOM_KIT_EDITOR_EMPTY_NAME("CUSTOM_KIT.EDITOR.EMPTY.NAME", DataType.STRING, "&7Empty"), + CUSTOM_KIT_EDITOR_SLOT_MATERIAL("CUSTOM_KIT.EDITOR.SLOT.MATERIAL", DataType.STRING, "LIGHT_GRAY_STAINED_GLASS_PANE"), + CUSTOM_KIT_EDITOR_HELMET_NAME("CUSTOM_KIT.EDITOR.SLOT.HELMET", DataType.STRING, "&7Helmet"), + CUSTOM_KIT_EDITOR_CHESTPLATE_NAME("CUSTOM_KIT.EDITOR.SLOT.CHESTPLATE", DataType.STRING, "&7Chestplate"), + CUSTOM_KIT_EDITOR_LEGGINGS_NAME("CUSTOM_KIT.EDITOR.SLOT.LEGGINGS", DataType.STRING, "&7Leggings"), + CUSTOM_KIT_EDITOR_BOOTS_NAME("CUSTOM_KIT.EDITOR.SLOT.BOOTS", DataType.STRING, "&7Boots"), + CUSTOM_KIT_EDITOR_OFFHAND_NAME("CUSTOM_KIT.EDITOR.SLOT.OFFHAND", DataType.STRING, "&7Off Hand"), + CUSTOM_KIT_EDITOR_ADD_LORE("CUSTOM_KIT.EDITOR.ADD-LORE", DataType.STRING_LIST, "&8Click to add an item"), + CUSTOM_KIT_ENCHANT_TITLE("CUSTOM_KIT.ENCHANT.TITLE", DataType.STRING, "&dSelect an Enchantment"), + CUSTOM_KIT_ENCHANT_SIZE("CUSTOM_KIT.ENCHANT.SIZE", DataType.INT, "54"), + CUSTOM_KIT_ENCHANT_LEVEL_TITLE("CUSTOM_KIT.ENCHANT.LEVEL-TITLE", DataType.STRING, "&dSelect Level"), + CUSTOM_KIT_ENCHANT_LEVEL_SIZE("CUSTOM_KIT.ENCHANT.LEVEL-SIZE", DataType.INT, "27"), + CUSTOM_KIT_ENCHANT_ITEM_NAME("CUSTOM_KIT.ENCHANT.ITEM-NAME", DataType.STRING, "&d"), + CUSTOM_KIT_ENCHANT_APPLIED_LORE("CUSTOM_KIT.ENCHANT.APPLIED-LORE", DataType.STRING, "&aApplied: level "), + CUSTOM_KIT_ENCHANT_MAX_LORE("CUSTOM_KIT.ENCHANT.MAX-LORE", DataType.STRING, "&7Max level: "), + CUSTOM_KIT_ENCHANT_SELECT_LORE("CUSTOM_KIT.ENCHANT.SELECT-LORE", DataType.STRING, "&7Click to choose a level"), + CUSTOM_KIT_ENCHANT_LEVEL_NAME("CUSTOM_KIT.ENCHANT.LEVEL-NAME", DataType.STRING, "&dLevel "), + CUSTOM_KIT_ENCHANT_REMOVE_NAME("CUSTOM_KIT.ENCHANT.REMOVE-NAME", DataType.STRING, "&cRemove Enchantment"), + + CUSTOM_KIT_LISTINGS_TITLE("CUSTOM_KIT.LISTINGS.TITLE", DataType.STRING, "&bCustom Kit Listings"), + CUSTOM_KIT_LISTINGS_SIZE("CUSTOM_KIT.LISTINGS.SIZE", DataType.INT, "54"), + CUSTOM_KIT_LISTINGS_NAME("CUSTOM_KIT.LISTINGS.NAME", DataType.STRING, "&a &7- "), + CUSTOM_KIT_LISTINGS_LORE("CUSTOM_KIT.LISTINGS.LORE", DataType.STRING_LIST, "&7Click to join this match"), + CUSTOM_KIT_JOIN_QUEUE_SLOT("CUSTOM_KIT.LISTINGS.JOIN-QUEUE.SLOT", DataType.INT, "0"), + CUSTOM_KIT_JOIN_QUEUE_MATERIAL("CUSTOM_KIT.LISTINGS.JOIN-QUEUE.MATERIAL", DataType.STRING, "PAPER"), + CUSTOM_KIT_JOIN_QUEUE_NAME("CUSTOM_KIT.LISTINGS.JOIN-QUEUE.NAME", DataType.STRING, "&eJoin Queue"), + CUSTOM_KIT_JOIN_QUEUE_LORE("CUSTOM_KIT.LISTINGS.JOIN-QUEUE.LORE", DataType.STRING_LIST, + "&7Host one of your kits so", "&7others can join it."), + CUSTOM_KIT_QUEUE_BUTTON_SLOT("CUSTOM_KIT.QUEUE-BUTTON.SLOT", DataType.INT, "35"), + CUSTOM_KIT_QUEUE_BUTTON_MATERIAL("CUSTOM_KIT.QUEUE-BUTTON.MATERIAL", DataType.STRING, "NETHERITE_SWORD"), + CUSTOM_KIT_QUEUE_BUTTON_NAME("CUSTOM_KIT.QUEUE-BUTTON.NAME", DataType.STRING, "&bCustom Kits"), + CUSTOM_KIT_QUEUE_BUTTON_LORE("CUSTOM_KIT.QUEUE-BUTTON.LORE", DataType.STRING_LIST, "&7Join a player-hosted custom kit"), + + ITEM_BROWSER_SEARCH_NAME("ITEM_BROWSER.SEARCH.NAME", DataType.STRING, "&eSearch"), + ITEM_BROWSER_SEARCH_MATERIAL("ITEM_BROWSER.SEARCH.MATERIAL", DataType.STRING, "OAK_SIGN"), + ITEM_BROWSER_SEARCH_SLOT("ITEM_BROWSER.SEARCH.SLOT", DataType.INT, "45"), + ITEM_BROWSER_ITEM_LORE("ITEM_BROWSER.ITEM.LORE", DataType.STRING_LIST, "", "&eClick to select"), + + EVENT_ADMIN_TITLE("EVENT.ADMIN.TITLE", DataType.STRING, "&7Select Event Type"), + EVENT_ADMIN_SIZE("EVENT.ADMIN.SIZE", DataType.INT, "27"), + EVENT_ADMIN_FILTER("EVENT.ADMIN.FILTER", "FILL, BORDER, NONE", DataType.STRING, "FILL"), + EVENT_TYPE_TOURNAMENT_NAME("EVENT.TYPE.TOURNAMENT.NAME", DataType.STRING, "&bTournament"), + EVENT_TYPE_TOURNAMENT_MATERIAL("EVENT.TYPE.TOURNAMENT.MATERIAL", DataType.STRING, "GOLDEN_SWORD"), + EVENT_TYPE_TOURNAMENT_LORE("EVENT.TYPE.TOURNAMENT.LORE", DataType.STRING_LIST, "&7Single-elimination bracket", "&71v1 matches", " ", "&aClick to start!"), + EVENT_TYPE_TOURNAMENT_SLOT("EVENT.TYPE.TOURNAMENT.SLOT", DataType.INT, "11"), + EVENT_TYPE_LMS_NAME("EVENT.TYPE.LMS.NAME", DataType.STRING, "&bLast Man Standing"), + EVENT_TYPE_LMS_MATERIAL("EVENT.TYPE.LMS.MATERIAL", DataType.STRING, "IRON_SWORD"), + EVENT_TYPE_LMS_LORE("EVENT.TYPE.LMS.LORE", DataType.STRING_LIST, "&7FFA - last player alive wins", " ", "&aClick to start!"), + EVENT_TYPE_LMS_SLOT("EVENT.TYPE.LMS.SLOT", DataType.INT, "12"), + EVENT_TYPE_SUMO_NAME("EVENT.TYPE.SUMO.NAME", DataType.STRING, "&bSumo"), + EVENT_TYPE_SUMO_MATERIAL("EVENT.TYPE.SUMO.MATERIAL", DataType.STRING, "LEAD"), + EVENT_TYPE_SUMO_LORE("EVENT.TYPE.SUMO.LORE", DataType.STRING_LIST, "&7Knock opponents off the platform", "&7Bracket-style", " ", "&aClick to start!"), + EVENT_TYPE_SUMO_SLOT("EVENT.TYPE.SUMO.SLOT", DataType.INT, "14"), + EVENT_KIT_SELECT_TITLE("EVENT.KIT_SELECT.TITLE", DataType.STRING, "&7Select Kit"), + EVENT_KIT_SELECT_SIZE("EVENT.KIT_SELECT.SIZE", DataType.INT, "36"), + EVENT_KIT_CUSTOM_NAME("EVENT.KIT_SELECT.CUSTOM.NAME", DataType.STRING, "&bCustom Kit"), + EVENT_KIT_CUSTOM_MATERIAL("EVENT.KIT_SELECT.CUSTOM.MATERIAL", DataType.STRING, "NETHERITE_SWORD"), + EVENT_KIT_CUSTOM_LORE("EVENT.KIT_SELECT.CUSTOM.LORE", DataType.STRING_LIST, "&7Use one of your custom kits", " ", "&aClick to select!"), + + // Global GUI Borders & Accents + GUI_BORDER_MATERIAL("GUI.BORDER.MATERIAL", + "Material used for border/filler panes across all GUIs", + DataType.STRING, "BLACK_STAINED_GLASS_PANE"), + GUI_ACCENT_MATERIAL("GUI.ACCENT.MATERIAL", + "Material used for accent panes (e.g. beside armor slots in trim menu)", + DataType.STRING, "CYAN_STAINED_GLASS_PANE"), + + // Armor Trim Customizer (page 1) + ARMOR_TRIM_MENU_TITLE("COSMETICS.ARMOR-TRIM.MENU.TITLE", + DataType.STRING, "&8\u2694 &b&lArmor Trim Customizer"), + ARMOR_TRIM_INFO_SLOT("COSMETICS.ARMOR-TRIM.MENU.INFO.SLOT", DataType.INT, "22"), + ARMOR_TRIM_INFO_MATERIAL("COSMETICS.ARMOR-TRIM.MENU.INFO.MATERIAL", DataType.STRING, "BOOK"), + ARMOR_TRIM_INFO_NAME("COSMETICS.ARMOR-TRIM.MENU.INFO.NAME", + DataType.STRING, "&b&lHow to Customize"), + ARMOR_TRIM_INFO_LORE("COSMETICS.ARMOR-TRIM.MENU.INFO.LORE", DataType.STRING_LIST, + "&8\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500", + "&7Click any armor piece to", + "&7choose a &bpattern &7then a &ematerial&7.", + " ", + "&cRight-click &7a piece to remove its trim."), + ARMOR_TRIM_CLEAR_SLOT("COSMETICS.ARMOR-TRIM.MENU.CLEAR.SLOT", DataType.INT, "49"), + ARMOR_TRIM_CLEAR_MATERIAL_HAS("COSMETICS.ARMOR-TRIM.MENU.CLEAR.MATERIAL-HAS", + DataType.STRING, "BARRIER"), + ARMOR_TRIM_CLEAR_MATERIAL_EMPTY("COSMETICS.ARMOR-TRIM.MENU.CLEAR.MATERIAL-EMPTY", + DataType.STRING, "GRAY_STAINED_GLASS_PANE"), + ARMOR_TRIM_CLEAR_NAME_HAS("COSMETICS.ARMOR-TRIM.MENU.CLEAR.NAME-HAS", + DataType.STRING, "&c&lClear All Trims"), + ARMOR_TRIM_CLEAR_NAME_EMPTY("COSMETICS.ARMOR-TRIM.MENU.CLEAR.NAME-EMPTY", + DataType.STRING, "&8No Trims Applied"), + ARMOR_TRIM_CLEAR_LORE_HAS("COSMETICS.ARMOR-TRIM.MENU.CLEAR.LORE-HAS", DataType.STRING_LIST, + "&7Removes all custom trims.", " ", "&cClick to confirm"), + ARMOR_TRIM_CLEAR_LORE_EMPTY("COSMETICS.ARMOR-TRIM.MENU.CLEAR.LORE-EMPTY", DataType.STRING_LIST, + "&7You have no trims set."), + + // Armor Trim — Pattern selector (page 2) + ARMOR_TRIM_PATTERN_TITLE_PREFIX("COSMETICS.ARMOR-TRIM.PATTERN.TITLE-PREFIX", + DataType.STRING, "&8\u00bb &b&lSelect Pattern &8| &7"), + + // Armor Trim — Material selector (page 3) + ARMOR_TRIM_MATERIAL_TITLE_PREFIX("COSMETICS.ARMOR-TRIM.MATERIAL.TITLE-PREFIX", + DataType.STRING, "&8\u00bb &b&lSelect Material &8| &7"); + + private final String path; + private final String comment; + private final List defaultValue = new ArrayList<>(); + private final DataType dataType; + + MenusLocale(String path, @Nullable String comment, DataType dataType, String... defaultValue) { + this.path = path; + this.comment = comment; + this.defaultValue.addAll(Arrays.asList(defaultValue)); + this.dataType = dataType; + } + + MenusLocale(String path, DataType dataType, String... defaultValue) { + this.path = path; + this.comment = null; + this.defaultValue.addAll(Arrays.asList(defaultValue)); + this.dataType = dataType; + } + + @Override + public String getHeader() { + return ""; + } + + @Override + public ConfigFile getConfigFile() { + return ConfigService.get().getMenusConfig(); + } + + public void update() { + MATCH_LIST_ITEM_NAME.set( + MATCH_LIST_ITEM_NAME.getString() + .replaceAll("", "") + .replaceAll("", "") + ); + STAT_LORE.set( + STAT_LORE.getStringList().stream().map(str -> + str + .replaceAll("", "") + .replaceAll("", "") + .replaceAll("", "") + .replaceAll("", "") + .replaceAll("", "") + ).toList() + ); + SETTINGS_PING_RANGE_LORE.set( + SETTINGS_PING_RANGE_LORE.getStringList().stream().map(str -> + str + .replaceAll("", "") + ).toList() + ); + if (MATCH_LIST_SIZE.getInt() == 36) MATCH_LIST_SIZE.set(54); + if (MATCH_LIST_STARTING_SLOT.getInt() == 10 && MATCH_LIST_FILTER.getString().equals("FILTER")) + MATCH_LIST_FILTER.set("BORDER"); + if (MATCH_LIST_STARTING_SLOT.getInt() == 10) MATCH_LIST_STARTING_SLOT.set(1); + if (MATCH_LIST_STARTING_SLOT.getInt() == 0) MATCH_LIST_STARTING_SLOT.set(1); + getConfigFile().save(); + } +} diff --git a/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/handler/IDataAccessor.java b/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/handler/IDataAccessor.java index 7b0d42147..b328cd6b2 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/handler/IDataAccessor.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/handler/IDataAccessor.java @@ -1,139 +1,149 @@ -package dev.lrxh.neptune.configs.impl.handler; - -import dev.lrxh.neptune.Neptune; -import dev.lrxh.neptune.utils.ConfigFile; -import org.bukkit.configuration.ConfigurationSection; - -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.Set; -import java.util.stream.Collectors; - -public interface IDataAccessor { - - Neptune plugin = Neptune.get(); - - default String getString() { - return getConfigFile().getConfiguration().getString(getPath()); - } - - default List getStringList() { - return getConfigFile().getConfiguration().getStringList(getPath()); - } - - default int getInt() { - return getConfigFile().getConfiguration().getInt(getPath()); - } - - default List getList(Class type) { - return Objects.requireNonNull(getConfigFile().getConfiguration().getList(getPath())) - .stream() - .filter(type::isInstance) - .map(type::cast) - .toList(); - } - - default boolean getBoolean() { - return getConfigFile().getConfiguration().getBoolean(getPath()); - } - - default boolean resetUnknown() { - return true; - } - - String getHeader(); - - String getPath(); - - String getComment(); - - List getDefaultValue(); - - DataType getDataType(); - - ConfigFile getConfigFile(); - - default void applyHeader() { - String header = getHeader(); - if (!header.isEmpty()) { - getConfigFile().getConfiguration().options().setHeader(List.of(header)); - } - } - - default void setValue(String path, List rawValue, DataType type) { - switch (type) { - case LIST -> getConfigFile().getConfiguration().set(path, rawValue); - case STRING_LIST -> - getConfigFile().getConfiguration().set(path, rawValue.stream().map(String::valueOf).toList()); - case STRING -> getConfigFile().getConfiguration().set(path, String.valueOf(rawValue.getFirst())); - case INT -> - getConfigFile().getConfiguration().set(path, Integer.parseInt(String.valueOf(rawValue.getFirst()))); - case BOOLEAN -> - getConfigFile().getConfiguration().set(path, Boolean.parseBoolean(String.valueOf(rawValue.getFirst()))); - } - } - - default void set(Object value) { - getConfigFile().getConfiguration().set(getPath(), value); - } - - default void comment(String path, String comment) { - if (comment != null) { - getConfigFile().getConfiguration() - .setInlineComments(path, Collections.singletonList(comment)); - getConfigFile().save(); - } - } - - default void load() { - applyHeader(); - var cfgFile = getConfigFile(); - if (cfgFile == null) return; - - var root = cfgFile.getConfiguration(); - var accessors = List.of(this.getClass().getEnumConstants()); - - for (var a : accessors) { - if (root.get(a.getPath()) == null) { - setValue(a.getPath(), a.getDefaultValue(), a.getDataType()); - comment(a.getPath(), a.getComment()); - } - } - - if (resetUnknown()) { - var valid = accessors.stream() - .map(IDataAccessor::getPath) - .collect(Collectors.toSet()); - cleanupSection(root, "", valid); - } - - cfgFile.save(); - } - - - private void cleanupSection(ConfigurationSection section, - String parentPath, - Set validPaths) { - for (String key : section.getKeys(false)) { - String fullPath = parentPath.isEmpty() ? key : (parentPath + "." + key); - - if (section.isConfigurationSection(key)) { - cleanupSection(section.getConfigurationSection(key), fullPath, validPaths); - - ConfigurationSection nested = section.getConfigurationSection(key); - boolean hasValidChild = validPaths.stream().anyMatch(p -> p.startsWith(fullPath + ".")); - if (nested.getKeys(false).isEmpty() && !hasValidChild) { - section.set(key, null); - } - - } else { - if (!validPaths.contains(fullPath)) { - section.set(key, null); - } - } - } - } - - void update(); -} +package dev.lrxh.neptune.configs.impl.handler; + +import dev.lrxh.neptune.Neptune; +import dev.lrxh.neptune.utils.ConfigFile; +import org.bukkit.configuration.ConfigurationSection; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; + +public interface IDataAccessor { + + Neptune plugin = Neptune.get(); + + default String getString() { + String val = getConfigFile().getConfiguration().getString(getPath()); + if (val == null && !getDefaultValue().isEmpty()) return getDefaultValue().get(0); + return val; + } + + default List getStringList() { + List val = getConfigFile().getConfiguration().getStringList(getPath()); + if (val.isEmpty() && !getDefaultValue().isEmpty()) return getDefaultValue(); + return val; + } + + default int getInt() { + if (getConfigFile().getConfiguration().get(getPath()) == null && !getDefaultValue().isEmpty()) { + try { return Integer.parseInt(getDefaultValue().get(0)); } catch (NumberFormatException ignored) {} + } + return getConfigFile().getConfiguration().getInt(getPath()); + } + + default boolean getBoolean() { + if (getConfigFile().getConfiguration().get(getPath()) == null && !getDefaultValue().isEmpty()) { + try { return Boolean.parseBoolean(getDefaultValue().get(0)); } catch (Exception ignored) {} + } + return getConfigFile().getConfiguration().getBoolean(getPath()); + } + + default List getList(Class type) { + return Objects.requireNonNull(getConfigFile().getConfiguration().getList(getPath())) + .stream() + .filter(type::isInstance) + .map(type::cast) + .toList(); + } + + default boolean resetUnknown() { + return true; + } + + String getHeader(); + + String getPath(); + + String getComment(); + + List getDefaultValue(); + + DataType getDataType(); + + ConfigFile getConfigFile(); + + default void applyHeader() { + String header = getHeader(); + if (!header.isEmpty()) { + getConfigFile().getConfiguration().options().setHeader(List.of(header)); + } + } + + default void setValue(String path, List rawValue, DataType type) { + switch (type) { + case LIST -> getConfigFile().getConfiguration().set(path, rawValue); + case STRING_LIST -> + getConfigFile().getConfiguration().set(path, rawValue.stream().map(String::valueOf).toList()); + case STRING -> getConfigFile().getConfiguration().set(path, String.valueOf(rawValue.getFirst())); + case INT -> + getConfigFile().getConfiguration().set(path, Integer.parseInt(String.valueOf(rawValue.getFirst()))); + case BOOLEAN -> + getConfigFile().getConfiguration().set(path, Boolean.parseBoolean(String.valueOf(rawValue.getFirst()))); + } + } + + default void set(Object value) { + getConfigFile().getConfiguration().set(getPath(), value); + } + + default void comment(String path, String comment) { + if (comment != null) { + getConfigFile().getConfiguration() + .setInlineComments(path, Collections.singletonList(comment)); + getConfigFile().save(); + } + } + + default void load() { + applyHeader(); + var cfgFile = getConfigFile(); + if (cfgFile == null) return; + + var root = cfgFile.getConfiguration(); + var accessors = List.of(this.getClass().getEnumConstants()); + + for (var a : accessors) { + if (root.get(a.getPath()) == null) { + setValue(a.getPath(), a.getDefaultValue(), a.getDataType()); + comment(a.getPath(), a.getComment()); + } + } + + if (resetUnknown()) { + var valid = accessors.stream() + .map(IDataAccessor::getPath) + .collect(Collectors.toSet()); + cleanupSection(root, "", valid); + } + + cfgFile.save(); + } + + + private void cleanupSection(ConfigurationSection section, + String parentPath, + Set validPaths) { + for (String key : section.getKeys(false)) { + String fullPath = parentPath.isEmpty() ? key : (parentPath + "." + key); + + if (section.isConfigurationSection(key)) { + cleanupSection(section.getConfigurationSection(key), fullPath, validPaths); + + ConfigurationSection nested = section.getConfigurationSection(key); + boolean hasValidChild = validPaths.stream().anyMatch(p -> p.startsWith(fullPath + ".")); + if (nested.getKeys(false).isEmpty() && !hasValidChild) { + section.set(key, null); + } + + } else { + if (!validPaths.contains(fullPath)) { + section.set(key, null); + } + } + } + } + + void update(); +} diff --git a/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/custom/CustomArmorTrimData.java b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/custom/CustomArmorTrimData.java new file mode 100644 index 000000000..bac6dfa88 --- /dev/null +++ b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/custom/CustomArmorTrimData.java @@ -0,0 +1,143 @@ +package dev.lrxh.neptune.feature.cosmetics.custom; + +import lombok.Getter; +import lombok.Setter; +import org.bukkit.NamespacedKey; +import org.bukkit.Registry; +import org.bukkit.inventory.meta.trim.ArmorTrim; +import org.bukkit.inventory.meta.trim.TrimMaterial; +import org.bukkit.inventory.meta.trim.TrimPattern; + +/** + * Stores a player's custom per-piece armor trim selections. + * Each armor slot (helmet, chestplate, leggings, boots) can have a different + * trim pattern and material, completely independent of the pre-built ArmorTrimPackages. + */ +@Getter +@Setter +public class CustomArmorTrimData { + + /** Trim data for each slot. Null = no trim for that slot. */ + private TrimEntry helmetTrim; + private TrimEntry chestplateTrim; + private TrimEntry leggingsTrim; + private TrimEntry bootsTrim; + + /** Whether per-piece custom trim is active (overrides ArmorTrimPackage) */ + private boolean active = false; + + public CustomArmorTrimData() {} + + public TrimEntry getTrimForSlot(ArmorSlot slot) { + return switch (slot) { + case HELMET -> helmetTrim; + case CHESTPLATE -> chestplateTrim; + case LEGGINGS -> leggingsTrim; + case BOOTS -> bootsTrim; + }; + } + + public void setTrimForSlot(ArmorSlot slot, TrimEntry entry) { + switch (slot) { + case HELMET -> helmetTrim = entry; + case CHESTPLATE -> chestplateTrim = entry; + case LEGGINGS -> leggingsTrim = entry; + case BOOTS -> bootsTrim = entry; + } + } + + public void clearSlot(ArmorSlot slot) { + setTrimForSlot(slot, null); + } + + public void clearAll() { + helmetTrim = null; + chestplateTrim = null; + leggingsTrim = null; + bootsTrim = null; + active = false; + } + + public boolean hasAnyTrim() { + return helmetTrim != null || chestplateTrim != null + || leggingsTrim != null || bootsTrim != null; + } + + // Serialization helpers + + public String serialize() { + StringBuilder sb = new StringBuilder(active ? "1" : "0").append(";"); + sb.append(serializeEntry(helmetTrim)).append(";"); + sb.append(serializeEntry(chestplateTrim)).append(";"); + sb.append(serializeEntry(leggingsTrim)).append(";"); + sb.append(serializeEntry(bootsTrim)); + return sb.toString(); + } + + private String serializeEntry(TrimEntry e) { + if (e == null) return "-"; + return e.getPattern() + ":" + e.getMaterial(); + } + + public static CustomArmorTrimData deserialize(String data) { + CustomArmorTrimData result = new CustomArmorTrimData(); + if (data == null || data.isEmpty() || data.equals("null")) return result; + try { + String[] parts = data.split(";"); + result.active = parts[0].equals("1"); + if (parts.length > 1) result.helmetTrim = deserializeEntry(parts[1]); + if (parts.length > 2) result.chestplateTrim = deserializeEntry(parts[2]); + if (parts.length > 3) result.leggingsTrim = deserializeEntry(parts[3]); + if (parts.length > 4) result.bootsTrim = deserializeEntry(parts[4]); + } catch (Exception ignored) {} + return result; + } + + private static TrimEntry deserializeEntry(String s) { + if (s == null || s.equals("-")) return null; + String[] parts = s.split(":"); + if (parts.length < 2) return null; + return new TrimEntry(parts[0], parts[1]); + } + + // Inner classes + + public enum ArmorSlot { + HELMET("Helmet", "NETHERITE_HELMET"), + CHESTPLATE("Chestplate", "NETHERITE_CHESTPLATE"), + LEGGINGS("Leggings", "NETHERITE_LEGGINGS"), + BOOTS("Boots", "NETHERITE_BOOTS"); + + public final String displayName; + public final String defaultMaterial; + + ArmorSlot(String displayName, String defaultMaterial) { + this.displayName = displayName; + this.defaultMaterial = defaultMaterial; + } + } + + @Getter + @Setter + public static class TrimEntry { + private final String pattern; + private final String material; + + public TrimEntry(String pattern, String material) { + this.pattern = pattern; + this.material = material; + } + + /** Build a Bukkit ArmorTrim from registry keys. Returns null if keys are invalid. */ + public ArmorTrim toArmorTrim() { + try { + TrimPattern p = Registry.TRIM_PATTERN.get(NamespacedKey.minecraft(pattern)); + TrimMaterial m = Registry.TRIM_MATERIAL.get(NamespacedKey.minecraft(material)); + if (p == null || m == null) return null; + return new ArmorTrim(m, p); + } catch (Exception e) { + return null; + } + } + } +} diff --git a/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/custom/CustomTrimLocale.java b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/custom/CustomTrimLocale.java new file mode 100644 index 000000000..a5889d2f1 --- /dev/null +++ b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/custom/CustomTrimLocale.java @@ -0,0 +1,94 @@ +package dev.lrxh.neptune.feature.cosmetics.custom; + +import dev.lrxh.neptune.configs.ConfigService; +import dev.lrxh.neptune.configs.impl.handler.DataType; +import dev.lrxh.neptune.configs.impl.handler.IDataAccessor; +import dev.lrxh.neptune.utils.ConfigFile; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * Config entries for the custom per-piece armor trim system. + * Stored in cosmetics.yml under CUSTOM_TRIM section. + */ +@Getter +public enum CustomTrimLocale implements IDataAccessor { + + ENABLED("CUSTOM_TRIM.ENABLED", "Whether the custom per-piece trim system is enabled", DataType.BOOLEAN, "true"), + + // List of trim materials available in the picker GUI + MATERIALS("CUSTOM_TRIM.AVAILABLE_MATERIALS", + "Trim material registry keys. See: https://minecraft.wiki/w/Smithing_Template#Trim_materials", + DataType.STRING_LIST, + "amethyst", "copper", "diamond", "emerald", "gold", + "iron", "lapis", "netherite", "quartz", "redstone"), + + // List of trim patterns available in the picker GUI + PATTERNS("CUSTOM_TRIM.AVAILABLE_PATTERNS", + "Trim pattern registry keys. See: https://minecraft.wiki/w/Smithing_Template#Trim_patterns", + DataType.STRING_LIST, + "bolt", "coast", "dune", "eye", "flow", "host", + "raiser", "rib", "sentry", "shaper", "silence", + "snout", "spire", "tide", "vex", "wayfinder", + "ward", "wild"), + + // ---- GUI text ---- + MENU_TITLE("CUSTOM_TRIM.MENU.TITLE", DataType.STRING, "&b&lCustom Armor Trims"), + PIECE_MENU_TITLE("CUSTOM_TRIM.MENU.PIECE_TITLE", DataType.STRING, "&b&lEdit "), + MATERIAL_ROW_LABEL("CUSTOM_TRIM.MENU.MATERIAL_LABEL", DataType.STRING, "&7Material: &b"), + PATTERN_ROW_LABEL("CUSTOM_TRIM.MENU.PATTERN_LABEL", DataType.STRING, "&7Pattern: &b"), + + NO_TRIM_NAME("CUSTOM_TRIM.MENU.NO_TRIM_NAME", DataType.STRING, "&cNo Trim"), + NO_TRIM_LORE("CUSTOM_TRIM.MENU.NO_TRIM_LORE", DataType.STRING_LIST, + "&7Remove the trim from this piece"), + + CLEAR_ALL_NAME("CUSTOM_TRIM.MENU.CLEAR_ALL_NAME", DataType.STRING, "&cClear All Trims"), + CLEAR_ALL_LORE("CUSTOM_TRIM.MENU.CLEAR_ALL_LORE", DataType.STRING_LIST, + "&7Remove all custom trims and revert to package"), + + ACTIVATE_NAME("CUSTOM_TRIM.MENU.ACTIVATE_NAME", DataType.STRING, "&aActivate Custom Trims"), + DEACTIVATE_NAME("CUSTOM_TRIM.MENU.DEACTIVATE_NAME", DataType.STRING, "&cDeactivate Custom Trims"), + TOGGLE_LORE("CUSTOM_TRIM.MENU.TOGGLE_LORE", DataType.STRING_LIST, + "&7Toggle whether your custom per-piece", + "&7trims override the selected package"), + + SELECTED_GLOW("CUSTOM_TRIM.MENU.SELECTED_GLOW", "Whether selected material/pattern glows", DataType.BOOLEAN, "true"); + + private final String path; + private final String comment; + private final List defaultValue = new ArrayList<>(); + private final DataType dataType; + + CustomTrimLocale(String path, DataType dataType, String... vals) { + this.path = path; + this.comment = null; + defaultValue.addAll(Arrays.asList(vals)); + this.dataType = dataType; + } + + CustomTrimLocale(String path, String comment, DataType dataType, String... vals) { + this.path = path; + this.comment = comment; + defaultValue.addAll(Arrays.asList(vals)); + this.dataType = dataType; + } + + @Override + public String getHeader() { return "Custom Per-Piece Armor Trim Configuration"; } + + @Override + public ConfigFile getConfigFile() { + return ConfigService.get().getCosmeticsConfig(); + } + + @Override + public boolean resetUnknown() { + return false; + } + + @Override + public void update() {} +} diff --git a/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/menu/CosmeticsManageMenu.java b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/menu/CosmeticsManageMenu.java index 63e4850c0..aeec2e973 100644 --- a/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/menu/CosmeticsManageMenu.java +++ b/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/menu/CosmeticsManageMenu.java @@ -1,7 +1,7 @@ package dev.lrxh.neptune.feature.cosmetics.menu; import dev.lrxh.neptune.configs.impl.MenusLocale; -import dev.lrxh.neptune.feature.cosmetics.menu.armorTrims.ArmorTrimsMenu; +import dev.lrxh.neptune.feature.cosmetics.menu.armorTrims.custom.CustomArmorTrimMenu; import dev.lrxh.neptune.feature.cosmetics.menu.killEffects.KillEffectsMenu; import dev.lrxh.neptune.feature.cosmetics.menu.killMessages.KillMessagesMenu; import dev.lrxh.neptune.feature.cosmetics.menu.shieldPatterns.ShieldPatternMenu; @@ -42,7 +42,7 @@ public List