From 3da6b2972e1018e649316127a7a4634b45ceef4a Mon Sep 17 00:00:00 2001 From: Telesphoreo Date: Tue, 19 May 2026 17:59:35 -0400 Subject: [PATCH] Pass through the messages and clean them up --- .../java/dev/plex/command/PlexCommand.java | 27 +++- .../java/dev/plex/command/ServerCommand.java | 27 +++- .../dev/plex/command/impl/AdminChatCMD.java | 3 +- .../dev/plex/command/impl/BanListCommand.java | 4 +- .../command/impl/BcastLoginMessageCMD.java | 2 +- .../dev/plex/command/impl/BlockEditCMD.java | 16 +- .../dev/plex/command/impl/MobLimitCMD.java | 8 +- .../dev/plex/command/impl/MobPurgeCMD.java | 4 +- .../java/dev/plex/command/impl/PlexCMD.java | 4 +- .../java/dev/plex/command/impl/ToggleCMD.java | 42 +++-- .../java/dev/plex/command/impl/UnbanCMD.java | 3 +- .../plex/listener/impl/CommandListener.java | 5 +- .../dev/plex/listener/impl/MenuListener.java | 6 +- .../plex/menu/impl/PunishedPlayerMenu.java | 11 +- .../dev/plex/menu/impl/PunishmentMenu.java | 9 +- .../java/dev/plex/menu/impl/ToggleMenu.java | 49 +++--- .../plex/menu/pagination/PageableMenu.java | 31 ++-- .../dev/plex/services/impl/TimingService.java | 3 +- .../java/dev/plex/util/UpdateChecker.java | 27 ++-- server/src/main/resources/messages.yml | 147 +++++++++++++----- 20 files changed, 291 insertions(+), 137 deletions(-) diff --git a/api/src/main/java/dev/plex/command/PlexCommand.java b/api/src/main/java/dev/plex/command/PlexCommand.java index 31d37ad..1efa1f9 100644 --- a/api/src/main/java/dev/plex/command/PlexCommand.java +++ b/api/src/main/java/dev/plex/command/PlexCommand.java @@ -105,7 +105,7 @@ public abstract class PlexCommand extends Command catch (PlayerNotFoundException | CommandFailException | ConsoleOnlyException | ConsoleMustDefinePlayerException | PlayerNotBannedException | NumberFormatException ex) { - send(sender, mmString(ex.getMessage())); + send(sender, exceptionComponent(ex)); } return true; } @@ -192,12 +192,33 @@ public abstract class PlexCommand extends Command protected Component usage() { - return Component.text("Correct Usage: ").color(NamedTextColor.YELLOW).append(componentFromString(getUsage()).color(NamedTextColor.GRAY)); + return messageComponent("correctUsagePrefix").append(componentFromString(getUsage()).color(NamedTextColor.GRAY)); } protected Component usage(String s) { - return Component.text("Correct Usage: ").color(NamedTextColor.YELLOW).append(componentFromString(s).color(NamedTextColor.GRAY)); + return messageComponent("correctUsagePrefix").append(componentFromString(s).color(NamedTextColor.GRAY)); + } + + private Component exceptionComponent(RuntimeException ex) + { + if (ex instanceof PlayerNotFoundException && "PlayerNotFoundException".equals(ex.getMessage())) + { + return messageComponent("playerNotFound"); + } + if (ex instanceof PlayerNotBannedException && "PlayerNotBannedException".equals(ex.getMessage())) + { + return messageComponent("playerNotBanned"); + } + if (ex instanceof ConsoleOnlyException && "ConsoleOnlyException".equals(ex.getMessage())) + { + return messageComponent("consoleOnly"); + } + if (ex instanceof ConsoleMustDefinePlayerException && "ConsoleMustDefinePlayerException".equals(ex.getMessage())) + { + return messageComponent("consoleMustDefinePlayer"); + } + return mmString(ex.getMessage()); } protected Player getNonNullPlayer(String name) diff --git a/server/src/main/java/dev/plex/command/ServerCommand.java b/server/src/main/java/dev/plex/command/ServerCommand.java index 02f82d6..043dc51 100644 --- a/server/src/main/java/dev/plex/command/ServerCommand.java +++ b/server/src/main/java/dev/plex/command/ServerCommand.java @@ -170,7 +170,7 @@ public abstract class ServerCommand extends Command implements PluginIdentifiabl catch (PlayerNotFoundException | CommandFailException | ConsoleOnlyException | ConsoleMustDefinePlayerException | PlayerNotBannedException | NumberFormatException ex) { - send(sender, PlexUtils.mmDeserialize(ex.getMessage())); + send(sender, exceptionComponent(ex)); } return true; } @@ -385,7 +385,7 @@ public abstract class ServerCommand extends Command implements PluginIdentifiabl */ protected Component usage() { - return Component.text("Correct Usage: ").color(NamedTextColor.YELLOW).append(componentFromString(this.getUsage()).color(NamedTextColor.GRAY)); + return messageComponent("correctUsagePrefix").append(componentFromString(this.getUsage()).color(NamedTextColor.GRAY)); } /** @@ -397,7 +397,28 @@ public abstract class ServerCommand extends Command implements PluginIdentifiabl */ protected Component usage(String s) { - return Component.text("Correct Usage: ").color(NamedTextColor.YELLOW).append(componentFromString(s).color(NamedTextColor.GRAY)); + return messageComponent("correctUsagePrefix").append(componentFromString(s).color(NamedTextColor.GRAY)); + } + + private Component exceptionComponent(RuntimeException ex) + { + if (ex instanceof PlayerNotFoundException && "PlayerNotFoundException".equals(ex.getMessage())) + { + return messageComponent("playerNotFound"); + } + if (ex instanceof PlayerNotBannedException && "PlayerNotBannedException".equals(ex.getMessage())) + { + return messageComponent("playerNotBanned"); + } + if (ex instanceof ConsoleOnlyException && "ConsoleOnlyException".equals(ex.getMessage())) + { + return messageComponent("consoleOnly"); + } + if (ex instanceof ConsoleMustDefinePlayerException && "ConsoleMustDefinePlayerException".equals(ex.getMessage())) + { + return messageComponent("consoleMustDefinePlayer"); + } + return PlexUtils.mmDeserialize(ex.getMessage()); } protected Player getNonNullPlayer(String name) diff --git a/server/src/main/java/dev/plex/command/impl/AdminChatCMD.java b/server/src/main/java/dev/plex/command/impl/AdminChatCMD.java index e0667f0..c6690d3 100644 --- a/server/src/main/java/dev/plex/command/impl/AdminChatCMD.java +++ b/server/src/main/java/dev/plex/command/impl/AdminChatCMD.java @@ -16,7 +16,6 @@ import java.util.List; import java.util.UUID; import net.kyori.adventure.text.Component; -import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -37,7 +36,7 @@ public class AdminChatCMD extends ServerCommand { player = plugin.getPlayerCache().getPlexPlayer(playerSender.getUniqueId()); player.setStaffChat(!player.isStaffChat()); - return messageComponent("adminChatToggled", BooleanUtils.toStringOnOff(player.isStaffChat())); + return messageComponent("adminChatToggled", messageString(player.isStaffChat() ? "stateOn" : "stateOff")); } return usage(); } diff --git a/server/src/main/java/dev/plex/command/impl/BanListCommand.java b/server/src/main/java/dev/plex/command/impl/BanListCommand.java index 011859d..123e244 100755 --- a/server/src/main/java/dev/plex/command/impl/BanListCommand.java +++ b/server/src/main/java/dev/plex/command/impl/BanListCommand.java @@ -27,7 +27,7 @@ public class BanListCommand extends ServerCommand { plugin.getPunishmentManager().getActiveBans().whenComplete((punishments, throwable) -> { - send(sender, mmString("Active Bans (" + punishments.size() + "): " + StringUtils.join(punishments.stream().map(Punishment::getPunishedUsername).collect(Collectors.toList()), ", "))); + send(sender, messageComponent("activeBansList", punishments.size(), StringUtils.join(punishments.stream().map(Punishment::getPunishedUsername).collect(Collectors.toList()), ", "))); }); return null; } @@ -47,7 +47,7 @@ public class BanListCommand extends ServerCommand plugin.getPunishmentManager().getActiveBans().whenComplete((punishments, throwable) -> { punishments.forEach(plugin.getPunishmentManager()::unban); - send(sender, mmString("Unbanned " + punishments.size() + " players.")); + send(sender, messageComponent("unbannedPlayers", punishments.size())); }); } return null; diff --git a/server/src/main/java/dev/plex/command/impl/BcastLoginMessageCMD.java b/server/src/main/java/dev/plex/command/impl/BcastLoginMessageCMD.java index c23a80a..8fc0c9d 100644 --- a/server/src/main/java/dev/plex/command/impl/BcastLoginMessageCMD.java +++ b/server/src/main/java/dev/plex/command/impl/BcastLoginMessageCMD.java @@ -46,7 +46,7 @@ public class BcastLoginMessageCMD extends ServerCommand } else { - return mmString("This player does not have a login message."); + return messageComponent("playerHasNoLoginMessage"); } return null; diff --git a/server/src/main/java/dev/plex/command/impl/BlockEditCMD.java b/server/src/main/java/dev/plex/command/impl/BlockEditCMD.java index 13debcd..ea3f9a0 100644 --- a/server/src/main/java/dev/plex/command/impl/BlockEditCMD.java +++ b/server/src/main/java/dev/plex/command/impl/BlockEditCMD.java @@ -39,18 +39,18 @@ public class BlockEditCMD extends ServerCommand int count = 0; for (String player : bl.blockedPlayers.stream().toList()) { - send(sender, "- " + player); + send(sender, messageComponent("blockeditListEntry", player)); ++count; } if (count == 0) { - send(sender, "- none"); + send(sender, messageComponent("blockeditListNone")); } return null; } else if (args[0].equalsIgnoreCase("purge")) { - PlexUtils.broadcast(messageComponent("unblockingEdits", sender.getName(), "all players")); + PlexUtils.broadcast(messageComponent("unblockingEdits", sender.getName(), messageString("blockeditAllPlayers"))); int count = 0; for (String player : bl.blockedPlayers.stream().toList()) { @@ -60,11 +60,11 @@ public class BlockEditCMD extends ServerCommand ++count; } } - return messageComponent("blockeditSize", "Unblocked", count); + return messageComponent("blockeditSize", messageString("blockeditUnblockedAction"), count); } else if (args[0].equalsIgnoreCase("all")) { - PlexUtils.broadcast(messageComponent("blockingEdits", sender.getName(), "all non-admins")); + PlexUtils.broadcast(messageComponent("blockingEdits", sender.getName(), messageString("blockeditAllNonAdmins"))); int count = 0; for (final Player player : Bukkit.getOnlinePlayers()) { @@ -75,7 +75,7 @@ public class BlockEditCMD extends ServerCommand } } - return messageComponent("blockeditSize", "Blocked", count); + return messageComponent("blockeditSize", messageString("blockeditBlockedAction"), count); } final Player player = getNonNullPlayer(args[0]); @@ -88,14 +88,14 @@ public class BlockEditCMD extends ServerCommand } PlexUtils.broadcast(messageComponent("blockingEdits", sender.getName(), player.getName())); bl.blockedPlayers.add(player.getName()); - send(player, messageComponent("editsModified", "blocked")); + send(player, messageComponent("editsModified", messageString("blockeditBlockedState"))); send(sender, messageComponent("editsBlocked", player.getName())); } else { PlexUtils.broadcast(messageComponent("unblockingEdits", sender.getName(), player.getName())); bl.blockedPlayers.remove(player.getName()); - send(player, messageComponent("editsModified", "unblocked")); + send(player, messageComponent("editsModified", messageString("blockeditUnblockedState"))); send(sender, messageComponent("editsUnblocked", player.getName())); } return null; diff --git a/server/src/main/java/dev/plex/command/impl/MobLimitCMD.java b/server/src/main/java/dev/plex/command/impl/MobLimitCMD.java index 5ba149e..75cfd19 100644 --- a/server/src/main/java/dev/plex/command/impl/MobLimitCMD.java +++ b/server/src/main/java/dev/plex/command/impl/MobLimitCMD.java @@ -35,7 +35,7 @@ public class MobLimitCMD extends ServerCommand .filter(entity -> entity instanceof LivingEntity && !(entity instanceof Player)) .count(); - String status = plugin.config.getBoolean("entity_limit.mob_limit_enabled") ? "Enabled" : "Disabled"; + String status = PlexUtils.messageString(plugin.config.getBoolean("entity_limit.mob_limit_enabled") ? "mobLimitEnabled" : "mobLimitDisabled"); return PlexUtils.messageComponent("mobLimitStatus", status, currentMobCount, currentLimit, chunk.getX(), chunk.getZ()); } @@ -44,11 +44,11 @@ public class MobLimitCMD extends ServerCommand case "on": plugin.config.set("entity_limit.mob_limit_enabled", true); plugin.config.save(); - return PlexUtils.messageComponent("mobLimitToggle", "enabled"); + return PlexUtils.messageComponent("mobLimitToggle", PlexUtils.messageString("stateEnabled")); case "off": plugin.config.set("entity_limit.mob_limit_enabled", false); plugin.config.save(); - return PlexUtils.messageComponent("mobLimitToggle", "disabled"); + return PlexUtils.messageComponent("mobLimitToggle", PlexUtils.messageString("stateDisabled")); case "setmax": try { @@ -100,4 +100,4 @@ public class MobLimitCMD extends ServerCommand } return Collections.emptyList(); } -} \ No newline at end of file +} diff --git a/server/src/main/java/dev/plex/command/impl/MobPurgeCMD.java b/server/src/main/java/dev/plex/command/impl/MobPurgeCMD.java index 7fc7c94..cef9b0a 100644 --- a/server/src/main/java/dev/plex/command/impl/MobPurgeCMD.java +++ b/server/src/main/java/dev/plex/command/impl/MobPurgeCMD.java @@ -71,7 +71,7 @@ public class MobPurgeCMD extends ServerCommand PlexUtils.broadcast(messageComponent("removedMobs", sender.getName(), count)); PlexLog.debug("All " + count + " valid mobs were removed"); } - sender.sendMessage(messageComponent("amountOfMobsRemoved", count, (type != null ? mobName : "mob") + multipleS(count))); + sender.sendMessage(messageComponent("amountOfMobsRemoved", count, type != null ? mobName + multipleS(count) : messageString(count == 1 ? "mobSingular" : "mobPlural"))); return null; } @@ -120,4 +120,4 @@ public class MobPurgeCMD extends ServerCommand } return Collections.emptyList(); } -} \ No newline at end of file +} diff --git a/server/src/main/java/dev/plex/command/impl/PlexCMD.java b/server/src/main/java/dev/plex/command/impl/PlexCMD.java index 63cd983..1e19b7f 100644 --- a/server/src/main/java/dev/plex/command/impl/PlexCMD.java +++ b/server/src/main/java/dev/plex/command/impl/PlexCMD.java @@ -97,7 +97,7 @@ public class PlexCMD extends ServerCommand { if (!hasUpdateAccess(playerSender, sender)) { - return messageComponent("noPermissionRank", "a Developer"); + return mmString("You must be a Developer to use this command."); } for (PlexModule module : plugin.getModuleManager().getModules()) { @@ -111,7 +111,7 @@ public class PlexCMD extends ServerCommand { if (!hasUpdateAccess(playerSender, sender)) { - return messageComponent("noPermissionRank", "a Developer"); + return mmString("You must be a Developer to use this command."); } if (!plugin.getUpdateChecker().getUpdateStatusMessage(sender, false, 0)) { diff --git a/server/src/main/java/dev/plex/command/impl/ToggleCMD.java b/server/src/main/java/dev/plex/command/impl/ToggleCMD.java index ba69ab0..bd241b6 100644 --- a/server/src/main/java/dev/plex/command/impl/ToggleCMD.java +++ b/server/src/main/java/dev/plex/command/impl/ToggleCMD.java @@ -11,7 +11,6 @@ import dev.plex.util.PlexUtils; import java.util.List; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -28,13 +27,13 @@ public class ToggleCMD extends ServerCommand { if (args.length == 0) { - sender.sendMessage(PlexUtils.mmDeserialize("Available toggles:")); - sender.sendMessage(PlexUtils.mmDeserialize(" - Explosions" + status("explosions"))); - sender.sendMessage(PlexUtils.mmDeserialize(" - Fluidspread" + status("fluidspread"))); - sender.sendMessage(PlexUtils.mmDeserialize(" - Drops" + status("drops"))); - sender.sendMessage(PlexUtils.mmDeserialize(" - Redstone" + status("redstone"))); - sender.sendMessage(PlexUtils.mmDeserialize(" - PVP" + status("pvp"))); - sender.sendMessage(PlexUtils.mmDeserialize(" - Chat" + status("chat"))); + sender.sendMessage(messageComponent("toggleAvailable")); + sender.sendMessage(toggleListItem("toggleExplosions", "explosions")); + sender.sendMessage(toggleListItem("toggleFluidSpread", "fluidspread")); + sender.sendMessage(toggleListItem("toggleDrops", "drops")); + sender.sendMessage(toggleListItem("toggleRedstone", "redstone")); + sender.sendMessage(toggleListItem("togglePvp", "pvp")); + sender.sendMessage(toggleListItem("toggleChat", "chat")); return null; } switch (args[0].toLowerCase()) @@ -61,7 +60,7 @@ public class ToggleCMD extends ServerCommand } case "chat" -> { - PlexUtils.broadcast(PlexUtils.messageComponent("chatToggled", sender.getName(), plugin.toggles.getBoolean("chat") ? "off" : "on")); + PlexUtils.broadcast(PlexUtils.messageComponent("chatToggled", sender.getName(), messageString(plugin.toggles.getBoolean("chat") ? "stateOff" : "stateOn"))); return toggle("chat"); } default -> @@ -80,14 +79,33 @@ public class ToggleCMD extends ServerCommand return args.length == 1 && silentCheckPermission(sender, this.getPermission()) ? PlexUtils.getPlayerNameList() : ImmutableList.of(); } - private String status(String toggle) + private Component toggleListItem(String nameKey, String toggle) { - return plugin.toggles.getBoolean(toggle) ? " (enabled)" : " (disabled)"; + return messageComponent("toggleListItem", messageString(nameKey), status(toggle)); } private Component toggle(String toggle) { plugin.toggles.set(toggle, !plugin.getToggles().getBoolean(toggle)); - return Component.text("Toggled " + toggle + status(toggle)).color(NamedTextColor.GRAY); + return messageComponent("toggleCommandResult", messageString(toggleNameKey(toggle)), status(toggle)); + } + + private String status(String toggle) + { + return messageString(plugin.toggles.getBoolean(toggle) ? "stateEnabled" : "stateDisabled"); + } + + private String toggleNameKey(String toggle) + { + return switch (toggle) + { + case "explosions" -> "toggleExplosions"; + case "fluidspread" -> "toggleFluidSpread"; + case "drops" -> "toggleDrops"; + case "redstone" -> "toggleRedstone"; + case "pvp" -> "togglePvp"; + case "chat" -> "toggleChat"; + default -> toggle; + }; } } diff --git a/server/src/main/java/dev/plex/command/impl/UnbanCMD.java b/server/src/main/java/dev/plex/command/impl/UnbanCMD.java index 6ba4ca1..9c1bbb6 100644 --- a/server/src/main/java/dev/plex/command/impl/UnbanCMD.java +++ b/server/src/main/java/dev/plex/command/impl/UnbanCMD.java @@ -5,7 +5,6 @@ import com.google.common.collect.ImmutableList; import dev.plex.command.ServerCommand; import dev.plex.command.annotation.CommandParameters; import dev.plex.command.annotation.CommandPermissions; -import dev.plex.command.exception.PlayerNotBannedException; import dev.plex.command.exception.PlayerNotFoundException; import dev.plex.command.source.RequiredCommandSource; import dev.plex.player.PlexPlayer; @@ -45,7 +44,7 @@ public class UnbanCMD extends ServerCommand { if (!aBoolean) { - send(sender, PlexUtils.mmDeserialize(new PlayerNotBannedException().getMessage())); + send(sender, messageComponent("playerNotBanned")); return; } plugin.getPunishmentManager().unban(target.getUuid()); diff --git a/server/src/main/java/dev/plex/listener/impl/CommandListener.java b/server/src/main/java/dev/plex/listener/impl/CommandListener.java index 26d2f8f..0abb9e3 100644 --- a/server/src/main/java/dev/plex/listener/impl/CommandListener.java +++ b/server/src/main/java/dev/plex/listener/impl/CommandListener.java @@ -2,8 +2,7 @@ package dev.plex.listener.impl; import dev.plex.listener.ServerListenerBase; import dev.plex.player.PlexPlayer; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; +import dev.plex.util.PlexUtils; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -25,7 +24,7 @@ public class CommandListener extends ServerListenerBase String command = event.getMessage(); if (!pl.getUniqueId().equals(player.getUniqueId())) { - pl.sendMessage(Component.text(player.getName() + ": " + command).color(NamedTextColor.GRAY)); + pl.sendMessage(PlexUtils.messageComponent("commandSpyFormat", player.getName(), command)); } }); } diff --git a/server/src/main/java/dev/plex/listener/impl/MenuListener.java b/server/src/main/java/dev/plex/listener/impl/MenuListener.java index e0e2084..f6b2ac2 100644 --- a/server/src/main/java/dev/plex/listener/impl/MenuListener.java +++ b/server/src/main/java/dev/plex/listener/impl/MenuListener.java @@ -42,21 +42,21 @@ public class MenuListener extends ServerListenerBase final ItemMeta meta = event.getCurrentItem().getItemMeta(); if (meta != null && meta.displayName() != null) { - if (meta.displayName().equals(PageableMenu.PREVIOUS.getItemMeta().displayName())) + if (meta.displayName().equals(PageableMenu.previousItem().getItemMeta().displayName())) { page.parent().currentPage(page.parent().currentPage() - 1); page.parent().open(player, page.parent().currentPage()); event.setCancelled(true); return; } - else if (meta.displayName().equals(PageableMenu.NEXT.getItemMeta().displayName())) + else if (meta.displayName().equals(PageableMenu.nextItem().getItemMeta().displayName())) { page.parent().currentPage(page.parent().currentPage() + 1); page.parent().open(player, page.parent().currentPage()); event.setCancelled(true); return; } - else if (meta.displayName().equals(PageableMenu.CLOSE.getItemMeta().displayName())) + else if (meta.displayName().equals(PageableMenu.closeItem().getItemMeta().displayName())) { player.closeInventory(); event.setCancelled(true); diff --git a/server/src/main/java/dev/plex/menu/impl/PunishedPlayerMenu.java b/server/src/main/java/dev/plex/menu/impl/PunishedPlayerMenu.java index 0d03548..bf2ceb0 100644 --- a/server/src/main/java/dev/plex/menu/impl/PunishedPlayerMenu.java +++ b/server/src/main/java/dev/plex/menu/impl/PunishedPlayerMenu.java @@ -5,6 +5,7 @@ import dev.plex.menu.pagination.PageableMenu; import dev.plex.player.PlayerService; import dev.plex.player.PlexPlayer; import dev.plex.punishment.Punishment; +import dev.plex.util.PlexUtils; import dev.plex.util.TimeUtils; import dev.plex.util.item.ItemBuilder; @@ -20,7 +21,7 @@ public class PunishedPlayerMenu extends PageableMenu public PunishedPlayerMenu(PlexPlayer player, PlayerService playerService) { - super("Punishments - " + player.getName(), AbstractMenu.Rows.SIX); + super(PlexUtils.messageComponent("punishedPlayerMenuTitle", player.getName()), AbstractMenu.Rows.SIX); this.punishedPlayer = player; this.playerService = playerService; onClick((inventoryView, itemStacks, player1, itemStack) -> true); @@ -30,7 +31,13 @@ public class PunishedPlayerMenu extends PageableMenu @Override protected ItemStack toItem(Punishment object) { - return new ItemBuilder(Material.PAPER).displayName("" + object.getType().name()).lore("By: " + (object.getPunisher() == null ? "CONSOLE" : playerService.getNameByUUID(object.getPunisher())), "Issued: " + TimeUtils.useTimezone(object.getIssueDate()), "Expire(d/s): " + TimeUtils.useTimezone(object.getEndDate()), "Reason: " + object.getReason()).build(); + return new ItemBuilder(Material.PAPER) + .displayName(PlexUtils.messageComponent("punishmentItemTitle", object.getType().name())) + .lore(PlexUtils.messageComponent("punishmentItemPunisher", object.getPunisher() == null ? "CONSOLE" : playerService.getNameByUUID(object.getPunisher())), + PlexUtils.messageComponent("punishmentItemIssued", TimeUtils.useTimezone(object.getIssueDate())), + PlexUtils.messageComponent("punishmentItemExpires", TimeUtils.useTimezone(object.getEndDate())), + PlexUtils.messageComponent("punishmentItemReason", object.getReason())) + .build(); } @Override diff --git a/server/src/main/java/dev/plex/menu/impl/PunishmentMenu.java b/server/src/main/java/dev/plex/menu/impl/PunishmentMenu.java index 3eb0df9..73f34dc 100644 --- a/server/src/main/java/dev/plex/menu/impl/PunishmentMenu.java +++ b/server/src/main/java/dev/plex/menu/impl/PunishmentMenu.java @@ -5,12 +5,11 @@ import dev.plex.menu.pagination.PageableMenu; import dev.plex.player.PlayerService; import dev.plex.player.PlexPlayer; import dev.plex.util.PlexLog; +import dev.plex.util.PlexUtils; import dev.plex.util.item.ItemBuilder; import java.util.List; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.OfflinePlayer; @@ -24,7 +23,7 @@ public class PunishmentMenu extends PageableMenu public PunishmentMenu(PlayerService playerService) { - super("Punishments", AbstractMenu.Rows.SIX); + super(PlexUtils.messageComponent("punishmentMenuTitle"), AbstractMenu.Rows.SIX); this.playerService = playerService; PlexLog.debug("list: {0}", list().size()); onClick((inventoryView, itemStacks, player, itemStack) -> @@ -41,7 +40,7 @@ public class PunishmentMenu extends PageableMenu PlexPlayer punishedPlayer = playerService.getPlayer(meta.getOwningPlayer().getUniqueId()); if (punishedPlayer == null) { - player.sendMessage(Component.text("This player does not exist. Try doing /punishments instead.").color(NamedTextColor.RED)); + player.sendMessage(PlexUtils.messageComponent("punishmentPlayerNotFound")); player.closeInventory(); return true; } @@ -55,7 +54,7 @@ public class PunishmentMenu extends PageableMenu @Override protected ItemStack toItem(Player object) { - return new ItemBuilder(Material.PLAYER_HEAD).owner(object).displayName("" + object.getName()).build(); + return new ItemBuilder(Material.PLAYER_HEAD).owner(object).displayName(PlexUtils.messageComponent("punishmentPlayerItem", object.getName())).build(); } @Override diff --git a/server/src/main/java/dev/plex/menu/impl/ToggleMenu.java b/server/src/main/java/dev/plex/menu/impl/ToggleMenu.java index 4ec0cb3..0685b5b 100644 --- a/server/src/main/java/dev/plex/menu/impl/ToggleMenu.java +++ b/server/src/main/java/dev/plex/menu/impl/ToggleMenu.java @@ -20,7 +20,7 @@ public class ToggleMenu extends AbstractMenu public ToggleMenu(Plex plugin) { - super("Toggles", Rows.ONE); + super(PlexUtils.messageComponent("toggleMenuTitle"), Rows.ONE); this.plugin = plugin; resetExplosionItem(this.inventory()); resetFluidspreadItem(this.inventory()); @@ -34,8 +34,8 @@ public class ToggleMenu extends AbstractMenu { ItemStack explosions = new ItemStack(Material.TNT); ItemMeta explosionsItemMeta = explosions.getItemMeta(); - explosionsItemMeta.displayName(PlexUtils.mmDeserialize("Toggle explosions")); - explosionsItemMeta.lore(List.of(PlexUtils.mmDeserialize("Explosions are " + (plugin.toggles.getBoolean("explosions") ? "enabled" : "disabled")))); + explosionsItemMeta.displayName(PlexUtils.messageComponent("toggleMenuExplosionsName")); + explosionsItemMeta.lore(List.of(PlexUtils.messageComponent("toggleMenuExplosionsLore", status("explosions", true)))); explosions.setItemMeta(explosionsItemMeta); inventory.setItem(0, explosions); } @@ -44,8 +44,8 @@ public class ToggleMenu extends AbstractMenu { ItemStack water = new ItemStack(Material.WATER_BUCKET); ItemMeta waterItemMeta = water.getItemMeta(); - waterItemMeta.displayName(PlexUtils.mmDeserialize("Toggle fluid spread")); - waterItemMeta.lore(List.of(PlexUtils.mmDeserialize("Fluid spread is " + (plugin.toggles.getBoolean("fluidspread") ? "enabled" : "disabled")))); + waterItemMeta.displayName(PlexUtils.messageComponent("toggleMenuFluidSpreadName")); + waterItemMeta.lore(List.of(PlexUtils.messageComponent("toggleMenuFluidSpreadLore", status("fluidspread", false)))); water.setItemMeta(waterItemMeta); inventory.setItem(1, water); } @@ -54,8 +54,8 @@ public class ToggleMenu extends AbstractMenu { ItemStack feather = new ItemStack(Material.FEATHER); ItemMeta featherItemMeta = feather.getItemMeta(); - featherItemMeta.displayName(PlexUtils.mmDeserialize("Toggle drops")); - featherItemMeta.lore(List.of(PlexUtils.mmDeserialize("Drops are " + (plugin.toggles.getBoolean("drops") ? "enabled" : "disabled")))); + featherItemMeta.displayName(PlexUtils.messageComponent("toggleMenuDropsName")); + featherItemMeta.lore(List.of(PlexUtils.messageComponent("toggleMenuDropsLore", status("drops", false)))); feather.setItemMeta(featherItemMeta); inventory.setItem(2, feather); } @@ -64,8 +64,8 @@ public class ToggleMenu extends AbstractMenu { ItemStack redstone = new ItemStack(Material.REDSTONE); ItemMeta redstoneItemMeta = redstone.getItemMeta(); - redstoneItemMeta.displayName(PlexUtils.mmDeserialize("Redstone")); - redstoneItemMeta.lore(List.of(PlexUtils.mmDeserialize("Redstone is " + (plugin.toggles.getBoolean("redstone") ? "enabled" : "disabled")))); + redstoneItemMeta.displayName(PlexUtils.messageComponent("toggleMenuRedstoneName")); + redstoneItemMeta.lore(List.of(PlexUtils.messageComponent("toggleMenuRedstoneLore", status("redstone", false)))); redstone.setItemMeta(redstoneItemMeta); inventory.setItem(3, redstone); } @@ -75,8 +75,8 @@ public class ToggleMenu extends AbstractMenu ItemStack pvp = new ItemStack(Material.IRON_SWORD); ItemMeta pvpItemMeta = pvp.getItemMeta(); pvpItemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES); - pvpItemMeta.displayName(PlexUtils.mmDeserialize("PVP")); - pvpItemMeta.lore(List.of(PlexUtils.mmDeserialize("PVP is " + (plugin.toggles.getBoolean("pvp") ? "enabled" : "disabled")))); + pvpItemMeta.displayName(PlexUtils.messageComponent("toggleMenuPvpName")); + pvpItemMeta.lore(List.of(PlexUtils.messageComponent("toggleMenuPvpLore", status("pvp", false)))); pvp.setItemMeta(pvpItemMeta); inventory.setItem(4, pvp); } @@ -85,8 +85,8 @@ public class ToggleMenu extends AbstractMenu { ItemStack chat = new ItemStack(Material.OAK_SIGN); ItemMeta chatItemMeta = chat.getItemMeta(); - chatItemMeta.displayName(PlexUtils.mmDeserialize("Toggle chat")); - chatItemMeta.lore(List.of(PlexUtils.mmDeserialize("Chat is currently " + (plugin.toggles.getBoolean("chat") ? "on" : "off")))); + chatItemMeta.displayName(PlexUtils.messageComponent("toggleMenuChatName")); + chatItemMeta.lore(List.of(PlexUtils.messageComponent("toggleMenuChatLore", PlexUtils.messageString(plugin.toggles.getBoolean("chat") ? "stateOn" : "stateOff")))); chat.setItemMeta(chatItemMeta); inventory.setItem(5, chat); } @@ -102,39 +102,48 @@ public class ToggleMenu extends AbstractMenu { plugin.toggles.set("explosions", !plugin.toggles.getBoolean("explosions")); resetExplosionItem(inventory); - player.sendMessage(PlexUtils.mmDeserialize("Toggled explosions.")); + player.sendMessage(PlexUtils.messageComponent("toggleToggled", PlexUtils.messageString("toggleExplosionsLower"))); } if (clicked.getType() == Material.WATER_BUCKET) { plugin.toggles.set("fluidspread", !plugin.toggles.getBoolean("fluidspread")); resetFluidspreadItem(inventory); - player.sendMessage(PlexUtils.mmDeserialize("Toggled fluid spread.")); + player.sendMessage(PlexUtils.messageComponent("toggleToggled", PlexUtils.messageString("toggleFluidSpreadLower"))); } if (clicked.getType() == Material.FEATHER) { plugin.toggles.set("drops", !plugin.toggles.getBoolean("drops")); resetDropsItem(inventory); - player.sendMessage(PlexUtils.mmDeserialize("Toggled drops.")); + player.sendMessage(PlexUtils.messageComponent("toggleToggled", PlexUtils.messageString("toggleDropsLower"))); } if (clicked.getType() == Material.REDSTONE) { plugin.toggles.set("redstone", !plugin.toggles.getBoolean("redstone")); resetRedstoneItem(inventory); - player.sendMessage(PlexUtils.mmDeserialize("Toggled redstone.")); + player.sendMessage(PlexUtils.messageComponent("toggleToggled", PlexUtils.messageString("toggleRedstoneLower"))); } if (clicked.getType() == Material.IRON_SWORD) { plugin.toggles.set("pvp", !plugin.toggles.getBoolean("pvp")); resetPVPItem(inventory); - player.sendMessage(PlexUtils.mmDeserialize("Toggled PVP")); + player.sendMessage(PlexUtils.messageComponent("toggleToggled", PlexUtils.messageString("togglePvpLower"))); } if (clicked.getType() == Material.OAK_SIGN) { plugin.toggles.set("chat", !plugin.toggles.getBoolean("chat")); - PlexUtils.broadcast(PlexUtils.messageComponent("chatToggled", player.getName(), plugin.toggles.getBoolean("chat") ? "on" : "off")); + PlexUtils.broadcast(PlexUtils.messageComponent("chatToggled", player.getName(), PlexUtils.messageString(plugin.toggles.getBoolean("chat") ? "stateOn" : "stateOff"))); resetChatItem(inventory); - player.sendMessage(PlexUtils.mmDeserialize("Toggled chat.")); + player.sendMessage(PlexUtils.messageComponent("toggleToggled", PlexUtils.messageString("toggleChatLower"))); } return true; } + + private String status(String toggle, boolean enabledIsUnsafe) + { + if (enabledIsUnsafe) + { + return PlexUtils.messageString(plugin.toggles.getBoolean(toggle) ? "stateEnabledUnsafe" : "stateDisabledSafe"); + } + return PlexUtils.messageString(plugin.toggles.getBoolean(toggle) ? "stateEnabled" : "stateDisabled"); + } } diff --git a/server/src/main/java/dev/plex/menu/pagination/PageableMenu.java b/server/src/main/java/dev/plex/menu/pagination/PageableMenu.java index e2f45a6..46feed8 100644 --- a/server/src/main/java/dev/plex/menu/pagination/PageableMenu.java +++ b/server/src/main/java/dev/plex/menu/pagination/PageableMenu.java @@ -15,7 +15,6 @@ import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; @@ -28,9 +27,6 @@ import org.bukkit.inventory.ItemStack; @Accessors(fluent = true) public abstract class PageableMenu { - public static final ItemStack NEXT = new ItemBuilder(Material.FEATHER).displayName("Next Page").build(); - public static final ItemStack PREVIOUS = new ItemBuilder(Material.FEATHER).displayName("Previous Page").build(); - public static final ItemStack CLOSE = new ItemBuilder(Material.BARRIER).displayName("Close").build(); protected final Map pages = Maps.newHashMap(); private final Component name; private final AbstractMenu.Rows rows; @@ -61,7 +57,7 @@ public abstract class PageableMenu { final Page page = new Page(name.append(Component.space()).append(PlexUtils.mmDeserialize("(1)")), rows); page.parent = this; - page.inventory().setItem(rows.slots() - 5, CLOSE); + page.inventory().setItem(rows.slots() - 5, closeItem()); this.pages.put(0, page); } else @@ -72,12 +68,12 @@ public abstract class PageableMenu page.parent = this; if (i > 0) // If not first page set previous page button { - page.inventory().setItem(rows.slots() - 6, PREVIOUS); + page.inventory().setItem(rows.slots() - 6, previousItem()); } - page.inventory().setItem(rows.slots() - 5, CLOSE); + page.inventory().setItem(rows.slots() - 5, closeItem()); if (i < (list().size() / (rows.slots() - 9)) - 1) // If not last page set next page button { - page.inventory().setItem(rows.slots() - 4, NEXT); + page.inventory().setItem(rows.slots() - 4, nextItem()); } this.pages.put(i, page); } @@ -126,13 +122,13 @@ public abstract class PageableMenu { if (!this.initialized) { - player.sendMessage(Component.text("Looks like this inventory was not initialized! Please contact a developer to report this.").color(NamedTextColor.RED)); + player.sendMessage(PlexUtils.messageComponent("pageableNotInitialized")); return; } final Page page = this.pages.get(pageNum); if (page == null) { - player.sendMessage(Component.text("Could not find a page to open").color(NamedTextColor.RED)); + player.sendMessage(PlexUtils.messageComponent("pageNotFound")); return; } player.openInventory(page.inventory()); @@ -144,6 +140,21 @@ public abstract class PageableMenu this.pages.forEach((integer, page) -> page.onClick(this.onClick)); } + public static ItemStack nextItem() + { + return new ItemBuilder(Material.FEATHER).displayName(PlexUtils.messageComponent("pageNext")).build(); + } + + public static ItemStack previousItem() + { + return new ItemBuilder(Material.FEATHER).displayName(PlexUtils.messageComponent("pagePrevious")).build(); + } + + public static ItemStack closeItem() + { + return new ItemBuilder(Material.BARRIER).displayName(PlexUtils.messageComponent("pageClose")).build(); + } + @Getter @Setter diff --git a/server/src/main/java/dev/plex/services/impl/TimingService.java b/server/src/main/java/dev/plex/services/impl/TimingService.java index 14b547d..c791e56 100644 --- a/server/src/main/java/dev/plex/services/impl/TimingService.java +++ b/server/src/main/java/dev/plex/services/impl/TimingService.java @@ -7,6 +7,7 @@ import dev.plex.punishment.Punishment; import dev.plex.punishment.PunishmentType; import dev.plex.services.AbstractService; import dev.plex.util.PlexLog; +import dev.plex.util.PlexUtils; import dev.plex.util.TimeUtils; import io.papermc.paper.threadedregions.scheduler.ScheduledTask; @@ -51,7 +52,7 @@ public class TimingService extends AbstractService Player player = Bukkit.getPlayer(map.getKey()); PlexPlayer plexPlayer = plugin.getPlayerService().getPlayer(map.getKey()); punishment.setType(PunishmentType.TEMPBAN); - punishment.setReason("You are temporarily banned for five minutes for using a Nuker."); + punishment.setReason(PlexUtils.messageString("nukerTempbanReason")); if (player != null) { punishment.setPunishedUsername(player.getName()); diff --git a/server/src/main/java/dev/plex/util/UpdateChecker.java b/server/src/main/java/dev/plex/util/UpdateChecker.java index 0eb92fb..7322aca 100644 --- a/server/src/main/java/dev/plex/util/UpdateChecker.java +++ b/server/src/main/java/dev/plex/util/UpdateChecker.java @@ -19,7 +19,6 @@ import java.security.NoSuchAlgorithmException; import java.util.HexFormat; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -54,15 +53,15 @@ public class UpdateChecker { if (verbosity == 2) { - sendMessage(sender, Component.text("Plex is up to date on the " + channel.id() + " channel.").color(NamedTextColor.GREEN)); + sendMessage(sender, PlexUtils.messageComponent("updateUpToDate", channel.id())); } return false; } if (verbosity >= 1) { - sendMessage(sender, Component.text("Plex " + metadata.version() + " is available on the " + channel.id() + " channel.", NamedTextColor.RED)); - sendMessage(sender, Component.text("Run: /plex update").color(NamedTextColor.RED)); + sendMessage(sender, PlexUtils.messageComponent("updateAvailable", metadata.version(), channel.id())); + sendMessage(sender, PlexUtils.messageComponent("updateRunCommand")); } return true; } @@ -70,7 +69,7 @@ public class UpdateChecker { if (verbosity == 2 || (verbosity >= 1 && !e.notFound())) { - sendMessage(sender, Component.text(updateMetadataErrorMessage(e)).color(NamedTextColor.RED)); + sendMessage(sender, updateMetadataErrorComponent(e)); } if (!e.notFound()) { @@ -94,7 +93,7 @@ public class UpdateChecker if (!module && metadata.matchesCurrentBuild(plugin.getPluginMeta().getVersion(), BuildInfo.getNumber(), BuildInfo.getCommit())) { - sendMessage(sender, PlexUtils.mmDeserialize("Plex is already up to date on the " + channel.id() + " channel.")); + sendMessage(sender, PlexUtils.messageComponent("updateAlreadyUpToDate", channel.id())); return; } @@ -102,12 +101,12 @@ public class UpdateChecker ? new File(plugin.getModulesFolder(), metadata.fileName()) : new File(Bukkit.getUpdateFolderFile(), metadata.fileName()); - sendMessage(sender, PlexUtils.mmDeserialize("Downloading latest JAR file: " + metadata.fileName())); + sendMessage(sender, PlexUtils.messageComponent("updateDownloading", metadata.fileName())); plugin.getApi().scheduler().runAsync(() -> downloadAndInstall(sender, metadata, copyTo)); } catch (UpdateMetadataClient.MetadataException e) { - sendMessage(sender, PlexUtils.mmDeserialize("" + updateMetadataErrorMessage(e))); + sendMessage(sender, updateMetadataErrorComponent(e)); if (!e.notFound()) { PlexLog.error("Unable to update {0}: {1}", name, e.getMessage()); @@ -161,7 +160,7 @@ public class UpdateChecker File parent = copyTo.getParentFile(); if (parent != null && !parent.exists() && !parent.mkdirs()) { - sendMessage(sender, PlexUtils.mmDeserialize("Unable to create update directory: " + parent.getAbsolutePath())); + sendMessage(sender, PlexUtils.messageComponent("updateDirectoryFailed", parent.getAbsolutePath())); return; } @@ -171,11 +170,11 @@ public class UpdateChecker download(metadata.downloadUrl(), temporaryFile); validateDownloadedFile(metadata, temporaryFile); Files.move(temporaryFile.toPath(), copyTo.toPath(), StandardCopyOption.REPLACE_EXISTING); - sendMessage(sender, PlexUtils.mmDeserialize("New JAR file downloaded and verified successfully.")); + sendMessage(sender, PlexUtils.messageComponent("updateDownloaded")); } catch (IOException e) { - sendMessage(sender, PlexUtils.mmDeserialize("Something went wrong while downloading " + metadata.name() + ". Please check the log for more information.")); + sendMessage(sender, PlexUtils.messageComponent("updateDownloadFailed", metadata.name())); PlexLog.error("Unable to download update {0}: {1}", metadata.name(), e.getMessage()); e.printStackTrace(); } @@ -243,13 +242,13 @@ public class UpdateChecker return HexFormat.of().formatHex(digest.digest()); } - private String updateMetadataErrorMessage(UpdateMetadataClient.MetadataException e) + private Component updateMetadataErrorComponent(UpdateMetadataClient.MetadataException e) { if (e.notFound()) { - return "No compatible update is available on the " + channel.id() + " channel."; + return PlexUtils.messageComponent("updateMetadataNotFound", channel.id()); } - return "There was an error checking update metadata: " + e.getMessage(); + return PlexUtils.messageComponent("updateMetadataError", e.getMessage()); } private void sendMessage(CommandSender sender, Component message) diff --git a/server/src/main/resources/messages.yml b/server/src/main/resources/messages.yml index 4314a41..85fef2a 100644 --- a/server/src/main/resources/messages.yml +++ b/server/src/main/resources/messages.yml @@ -27,6 +27,7 @@ indefBanMessageReason: "Your {0} is indefinitely banned! You may appeal at playerNotFound: "Player not found!" specifyPlayer: "You must specify a player!" worldNotFound: "World not found!" +correctUsagePrefix: "Correct Usage: " # This will always be used for punishments where the sanctioning administrator has not provided a reason. Will ignore MiniMessage tags. noReasonProvided: "No reason provided." # 0 - The world you have been teleported to @@ -60,12 +61,6 @@ unlockedPlayer: "{0} - Unlocking {1}" noPermissionNode: "You must have the permission: {0} to use this command!" noPermissionInGame: "You must be in console to use this command!" noPermissionConsole: "You must be in-game to use this command!" -# 0 - The username of the name history -nameHistoryTitle: "Name History of {0}" -nameHistorySeparator: "-----------------------------" -# 0 - The name -# 1 - The date and time of the name change -nameHistoryBody: "{0} - {1}" # 0 - The gamemode gameModeSetTo: "Your gamemode has been set to {0}." # 0 - The player's name @@ -78,33 +73,10 @@ playerSetOtherGameMode: "{0} set your gamemode to {1}." # 1 - The gamemode setEveryoneGameMode: "{0} - Changing everyone's gamemode to {1}" consoleMustDefinePlayer: "You must define a player since you are running this command from console." -# 0 - The command sender -# 1 - The player -newAdminAdded: "{0} - Adding {1} to the admin list" -# 0 - The command sender -# 1 - The player -# 2 - The rank name -adminReadded: "{0} - Re-adding {1} to the admin list as rank: {2}" -# 0 - The command sender -# 1 - The player -adminRemoved: "{0} - Removing {1} from the admin list" -# 0 - The command sender -# 1 - The player -# 2 - The rank -adminSetRank: "{0} - Setting {1}'s rank to {2}" # 0 - The world name teleportedToWorld: "You have been teleported to the {0}." higherRankThanYou: "This player is an admin or a higher rank than you." -playerNotAdmin: "That player is not an admin." -playerIsAdmin: "That player is already an admin." -rankNotFound: "The rank you entered was not found." -rankMustBeHigherThanAdmin: "The rank you entered must be higher than Admin." consoleOnly: "This command can only be executed by the console." -# 0 - Rank -yourRank: "Your rank is: {0}" -# 0 - Player name -# 1 - Rank -otherRank: "{0}'s rank is: {1}" # 0 - The command sender # 1 - The player banningPlayer: "{0} - Banning {1}" @@ -117,7 +89,6 @@ playerNotMuted: "That player is not muted!" playerBanned: "That player is already banned!" playerFrozen: "That player is already frozen!" playerMuted: "That player is already muted!" -playerLockedUp: "That player is already locked up!" muted: "You are currently muted - STFU!" pvpDisabled: "PVP has been disabled!" chatIsOff: "Chat is currently toggled off!" @@ -131,12 +102,21 @@ teleportedToWorldSpawn: "Teleporting to the local spawn" toggleCommandSpy: "CommandSpy has been" enabled: "enabled." disabled: "disabled." +# 0 - The player +# 1 - The command +commandSpyFormat: "{0}: {1}" # 0 - The admin / staff member # 1 - The player's group's prefix if any # 2 - The message adminChatFormat: '[AdminChat] {0} {1} ยป {2}' # 0 - Whether it was toggled on or off adminChatToggled: 'AdminChat was toggled {0}' +stateEnabled: "enabled" +stateDisabled: "disabled" +stateEnabledUnsafe: "enabled" +stateDisabledSafe: "disabled" +stateOn: "on" +stateOff: "off" # 0 - Maximum length, configured in config.yml maximumPrefixLength: "The maximum length for a tag may only be {0}." prefixCleared: "Your prefix has been cleared." @@ -147,6 +127,14 @@ prefixSetTo: "Your prefix has been set to {0}" # 0 - The action (blocked / unblocked) # 1 - The amount of players blockeditSize: "{0} all block modification abilities for {1} players." +blockeditListEntry: "- {0}" +blockeditListNone: "- none" +blockeditAllPlayers: "all players" +blockeditAllNonAdmins: "all non-admins" +blockeditBlockedAction: "Blocked" +blockeditUnblockedAction: "Unblocked" +blockeditBlockedState: "blocked" +blockeditUnblockedState: "unblocked" # The action (blocked or restored) editsModified: "Your block modification abilities have been {0}." listOfPlayersBlocked: "The following have block modification abilities restricted:" @@ -167,22 +155,19 @@ removedEntities: "{0} - Removed {1} entities" # 1 - Number of entities removed # 2 - Entity type(s) removed removedEntitiesOfTypes: "{0} - Removed {1} entities of type(s) {2}" -# 0 - The command sender -# 1 - Number of entities removed -# 2 - Entity type removed -removedEntitiesOfType: "Removed {1} {2}" # 0 - Entity type that is invalid invalidEntityType: "Notice: Entity type {0} is invalid!" noRemovedEntities: "No entities were removed." # 0 - Number of mobs removed # 1 - Type of mob removed amountOfMobsRemoved: "{0} {1} removed." +mobSingular: "mob" +mobPlural: "mobs" notAValidMob: "That is not a valid mob." notAValidMobButValidEntity: "That is a valid entity, but is not a valid mob." # 0 - The command sender # 1 - Number of mobs removed removedMobs: "{0} - Removed {1} mobs" -autoWipeDisabled: "Item wiping is currently disabled in the config!" # 0 - The boolean for whether the limit is enabled or disabled mobLimitToggle: "The mob limit has been {0}" # 0 - The amount that the mob limit has been set to @@ -195,7 +180,8 @@ mobLimitSet: "The mob limit has been set to: {0}" mobLimitStatus: "({0}) {1} / {2} per chunk (Chunk: {3}, {4})" # 0 - The max set limit in config mobLimitCeiling: "The limit you have entered is too high. Defaulting to the ceiling value from config" -commandBlocked: "That command is blocked." +mobLimitEnabled: "Enabled" +mobLimitDisabled: "Disabled" # 0 - The command sender # 1 - The message being said sayMessage: "[Server: {0}] {1}" @@ -212,6 +198,46 @@ removedNote: "Removed note with ID: {0}" # 0 - The number of notes cleared clearedNotes: "Cleared {0} notes." invalidToggle: "That is not a valid toggle." +toggleAvailable: "Available toggles:" +# 0 - The toggle name +# 1 - The toggle status +toggleListItem: " - {0} ({1})" +# 0 - The toggle name +# 1 - The toggle status +toggleCommandResult: "Toggled {0} ({1})" +# 0 - The toggle name +toggleToggled: "Toggled {0}." +toggleMenuTitle: "Toggles" +toggleExplosions: "Explosions" +toggleExplosionsLower: "explosions" +toggleFluidSpread: "Fluid spread" +toggleFluidSpreadLower: "fluid spread" +toggleDrops: "Drops" +toggleDropsLower: "drops" +toggleRedstone: "Redstone" +toggleRedstoneLower: "redstone" +togglePvp: "PVP" +togglePvpLower: "PVP" +toggleChat: "Chat" +toggleChatLower: "chat" +toggleMenuExplosionsName: "Toggle explosions" +# 0 - The toggle status +toggleMenuExplosionsLore: "Explosions are {0}" +toggleMenuFluidSpreadName: "Toggle fluid spread" +# 0 - The toggle status +toggleMenuFluidSpreadLore: "Fluid spread is {0}" +toggleMenuDropsName: "Toggle drops" +# 0 - The toggle status +toggleMenuDropsLore: "Drops are {0}" +toggleMenuRedstoneName: "Redstone" +# 0 - The toggle status +toggleMenuRedstoneLore: "Redstone is {0}" +toggleMenuPvpName: "PVP" +# 0 - The toggle status +toggleMenuPvpLore: "PVP is {0}" +toggleMenuChatName: "Toggle chat" +# 0 - The toggle status +toggleMenuChatLore: "Chat is currently {0}" specifyLoginMessage: "Please specify a login message." # 0 - The login message setOwnLoginMessage: "Your login message is now:> {0}" @@ -222,7 +248,7 @@ removedOwnLoginMessage: "Your login message has been removed." # 0 - The player removedOtherLoginMessage: "You removed {0}'s login message." nameRequired: "Policy requires that you must state your player name in your login message. You can either do this by inserting your name or %player%." -rankRequired: "Policy requires that you must state your rank in your login message. You can do this by using %rank% in your login message." +playerHasNoLoginMessage: "This player does not have a login message." # 0 - The material name # 1 - The players who have the material in their inventory playersWithMaterial: "Players with {0} in their inventory: {1}" @@ -269,6 +295,7 @@ smittenQuietly: "Smitten {0} quietly." # 0 - The reason for being smitten smitten: "You've been smitten. Reason: {0}" nukerKickMessage: "Please turn off your nuker!" +nukerTempbanReason: "You are temporarily banned for five minutes for using a Nuker." antiSpamMessage: "Please refrain from spamming messages." # 0 - The player banExpiredBroadcast: "Plex - Automatically unbanning {0}" @@ -284,4 +311,48 @@ commandAliases: "Aliases for {0} are: {1}" prismRollbackMessage: "Rolled back {0} activities" # 0 - Error message returned from Prism prismRollbackError: "Rollback failed: {0}" -prismNoResult: "No activities have been rolled back" \ No newline at end of file +prismNoResult: "No activities have been rolled back" +pageNext: "Next Page" +pagePrevious: "Previous Page" +pageClose: "Close" +pageableNotInitialized: "Looks like this inventory was not initialized! Please contact a developer to report this." +pageNotFound: "Could not find a page to open" +punishmentMenuTitle: "Punishments" +# 0 - The player +punishmentPlayerItem: "{0}" +# 0 - The player +punishedPlayerMenuTitle: "Punishments - {0}" +punishmentPlayerNotFound: 'This player does not exist. Try doing /punishments \ instead.' +# 0 - The punishment type +punishmentItemTitle: "{0}" +# 0 - The punisher +punishmentItemPunisher: "By: {0}" +# 0 - The issue date +punishmentItemIssued: "Issued: {0}" +# 0 - The expiration date +punishmentItemExpires: "Expire(d/s): {0}" +# 0 - The reason +punishmentItemReason: "Reason: {0}" +# 0 - The amount of active bans +# 1 - The active ban list +activeBansList: "Active Bans ({0}): {1}" +# 0 - The amount of players unbanned +unbannedPlayers: "Unbanned {0} players." +updateUpToDate: "Plex is up to date on the {0} channel." +# 0 - The version +# 1 - The channel +updateAvailable: "Plex {0} is available on the {1} channel." +updateRunCommand: "Run: /plex update" +# 0 - The channel +updateAlreadyUpToDate: "Plex is already up to date on the {0} channel." +# 0 - The file name +updateDownloading: "Downloading latest JAR file: {0}" +updateDownloaded: "New JAR file downloaded and verified successfully." +# 0 - The directory path +updateDirectoryFailed: "Unable to create update directory: {0}" +# 0 - The artifact name +updateDownloadFailed: "Something went wrong while downloading {0}. Please check the log for more information." +# 0 - The channel +updateMetadataNotFound: "No compatible update is available on the {0} channel." +# 0 - The error message +updateMetadataError: "There was an error checking update metadata: {0}"