Pass through the messages and clean them up

This commit is contained in:
2026-05-19 17:59:35 -04:00
parent 73c4449cb3
commit 3da6b2972e
20 changed files with 291 additions and 137 deletions
@@ -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)
@@ -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();
}
@@ -27,7 +27,7 @@ public class BanListCommand extends ServerCommand
{
plugin.getPunishmentManager().getActiveBans().whenComplete((punishments, throwable) ->
{
send(sender, mmString("<gold>Active Bans (" + punishments.size() + "): <yellow>" + 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("<gold>Unbanned " + punishments.size() + " players."));
send(sender, messageComponent("unbannedPlayers", punishments.size()));
});
}
return null;
@@ -46,7 +46,7 @@ public class BcastLoginMessageCMD extends ServerCommand
}
else
{
return mmString("<red>This player does not have a login message.");
return messageComponent("playerHasNoLoginMessage");
}
return null;
@@ -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;
@@ -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") ? "<green>Enabled" : "<red>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();
}
}
}
@@ -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();
}
}
}
@@ -97,7 +97,7 @@ public class PlexCMD extends ServerCommand
{
if (!hasUpdateAccess(playerSender, sender))
{
return messageComponent("noPermissionRank", "a Developer");
return mmString("<red>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("<red>You must be a Developer to use this command.");
}
if (!plugin.getUpdateChecker().getUpdateStatusMessage(sender, false, 0))
{
@@ -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("<gray>Available toggles:"));
sender.sendMessage(PlexUtils.mmDeserialize("<gray> - Explosions" + status("explosions")));
sender.sendMessage(PlexUtils.mmDeserialize("<gray> - Fluidspread" + status("fluidspread")));
sender.sendMessage(PlexUtils.mmDeserialize("<gray> - Drops" + status("drops")));
sender.sendMessage(PlexUtils.mmDeserialize("<gray> - Redstone" + status("redstone")));
sender.sendMessage(PlexUtils.mmDeserialize("<gray> - PVP" + status("pvp")));
sender.sendMessage(PlexUtils.mmDeserialize("<gray> - 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;
};
}
}
@@ -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());
@@ -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));
}
});
}
@@ -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);
@@ -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<Punishment>
public PunishedPlayerMenu(PlexPlayer player, PlayerService playerService)
{
super("<red><bold>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<Punishment>
@Override
protected ItemStack toItem(Punishment object)
{
return new ItemBuilder(Material.PAPER).displayName("<!italic><red>" + object.getType().name()).lore("<!italic><red>By: <gold>" + (object.getPunisher() == null ? "CONSOLE" : playerService.getNameByUUID(object.getPunisher())), "<!italic><red>Issued: <gold>" + TimeUtils.useTimezone(object.getIssueDate()), "<!italic><red>Expire(d/s): <gold>" + TimeUtils.useTimezone(object.getEndDate()), "<!italic><red>Reason: <gold>" + 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
@@ -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<Player>
public PunishmentMenu(PlayerService playerService)
{
super("<aqua><bold>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<Player>
PlexPlayer punishedPlayer = playerService.getPlayer(meta.getOwningPlayer().getUniqueId());
if (punishedPlayer == null)
{
player.sendMessage(Component.text("This player does not exist. Try doing /punishments <player> instead.").color(NamedTextColor.RED));
player.sendMessage(PlexUtils.messageComponent("punishmentPlayerNotFound"));
player.closeInventory();
return true;
}
@@ -55,7 +54,7 @@ public class PunishmentMenu extends PageableMenu<Player>
@Override
protected ItemStack toItem(Player object)
{
return new ItemBuilder(Material.PLAYER_HEAD).owner(object).displayName("<!italic><yellow>" + object.getName()).build();
return new ItemBuilder(Material.PLAYER_HEAD).owner(object).displayName(PlexUtils.messageComponent("punishmentPlayerItem", object.getName())).build();
}
@Override
@@ -20,7 +20,7 @@ public class ToggleMenu extends AbstractMenu
public ToggleMenu(Plex plugin)
{
super("<green><bold>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("<!italic><light_purple>Toggle explosions"));
explosionsItemMeta.lore(List.of(PlexUtils.mmDeserialize("<!italic><yellow>Explosions are " + (plugin.toggles.getBoolean("explosions") ? "<red>enabled" : "<green>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("<!italic><light_purple>Toggle fluid spread"));
waterItemMeta.lore(List.of(PlexUtils.mmDeserialize("<!italic><yellow>Fluid spread is " + (plugin.toggles.getBoolean("fluidspread") ? "<green>enabled" : "<red>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("<!italic><light_purple>Toggle drops"));
featherItemMeta.lore(List.of(PlexUtils.mmDeserialize("<!italic><yellow>Drops are " + (plugin.toggles.getBoolean("drops") ? "<green>enabled" : "<red>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("<!italic><light_purple>Redstone"));
redstoneItemMeta.lore(List.of(PlexUtils.mmDeserialize("<!italic><yellow>Redstone is " + (plugin.toggles.getBoolean("redstone") ? "<green>enabled" : "<red>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("<!italic><light_purple>PVP"));
pvpItemMeta.lore(List.of(PlexUtils.mmDeserialize("<!italic><yellow>PVP is " + (plugin.toggles.getBoolean("pvp") ? "<green>enabled" : "<red>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("<!italic><light_purple>Toggle chat"));
chatItemMeta.lore(List.of(PlexUtils.mmDeserialize("<!italic><yellow>Chat is currently " + (plugin.toggles.getBoolean("chat") ? "<green>on" : "<red>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("<gray>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("<gray>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("<gray>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("<gray>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("<gray>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("<gray>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");
}
}
@@ -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<T>
{
public static final ItemStack NEXT = new ItemBuilder(Material.FEATHER).displayName("<light_purple>Next Page").build();
public static final ItemStack PREVIOUS = new ItemBuilder(Material.FEATHER).displayName("<light_purple>Previous Page").build();
public static final ItemStack CLOSE = new ItemBuilder(Material.BARRIER).displayName("<red>Close").build();
protected final Map<Integer, Page> pages = Maps.newHashMap();
private final Component name;
private final AbstractMenu.Rows rows;
@@ -61,7 +57,7 @@ public abstract class PageableMenu<T>
{
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<T>
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<T>
{
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<T>
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
@@ -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());
@@ -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("<red>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("<green>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("<red>" + 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("<red>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("<green>New JAR file downloaded and verified successfully."));
sendMessage(sender, PlexUtils.messageComponent("updateDownloaded"));
}
catch (IOException e)
{
sendMessage(sender, PlexUtils.mmDeserialize("<red>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)