diff --git a/src/main/java/de/shiewk/smoderation/paper/SModerationPaper.java b/src/main/java/de/shiewk/smoderation/paper/SModerationPaper.java index 134ba2d..eefb3c4 100644 --- a/src/main/java/de/shiewk/smoderation/paper/SModerationPaper.java +++ b/src/main/java/de/shiewk/smoderation/paper/SModerationPaper.java @@ -55,7 +55,8 @@ public final class SModerationPaper extends JavaPlugin { createMiniMessage(), "smoderation/translations/", new Locale[] { - Locale.forLanguageTag("en-US") + Locale.forLanguageTag("en-US"), + Locale.forLanguageTag("de-DE") } ); diff --git a/src/main/java/de/shiewk/smoderation/paper/inventory/PageableCustomInventory.java b/src/main/java/de/shiewk/smoderation/paper/inventory/PageableCustomInventory.java index f42b8fb..bb99474 100644 --- a/src/main/java/de/shiewk/smoderation/paper/inventory/PageableCustomInventory.java +++ b/src/main/java/de/shiewk/smoderation/paper/inventory/PageableCustomInventory.java @@ -1,12 +1,17 @@ package de.shiewk.smoderation.paper.inventory; -import net.kyori.adventure.text.Component; +import io.papermc.paper.datacomponent.DataComponentTypes; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextColor; import org.bukkit.Material; +import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemStack; +import static net.kyori.adventure.text.Component.text; +import static net.kyori.adventure.text.Component.translatable; + +@SuppressWarnings("UnstableApiUsage") // Paper Data Component API public abstract class PageableCustomInventory implements CustomInventory { protected final int prevSlot, nextSlot; @@ -49,21 +54,21 @@ public abstract class PageableCustomInventory implements CustomInventory { } } - public ItemStack createPreviousPageStack(){ + public ItemStack createPreviousPageStack(Player viewer){ boolean allowed = page > 0; TextColor color = allowed ? NamedTextColor.GREEN : NamedTextColor.RED; int skip = allowed ? page : page+1; ItemStack stack = new ItemStack(allowed ? Material.GREEN_STAINED_GLASS_PANE : Material.RED_STAINED_GLASS_PANE); - stack.editMeta(meta -> meta.displayName(applyFormatting(Component.text("Previous page (%s/%s)".formatted(skip, lastPage()+1)).color(color)))); + stack.setData(DataComponentTypes.ITEM_NAME, CustomInventory.renderComponent(viewer, applyFormatting(translatable("smod.inventory.previous", text(skip), text(lastPage()+1)).color(color)))); return stack; } - public ItemStack createNextPageStack(){ + public ItemStack createNextPageStack(Player viewer){ boolean allowed = page < lastPage(); TextColor color = allowed ? NamedTextColor.GREEN : NamedTextColor.RED; int skip = allowed ? page+2 : page+1; ItemStack stack = new ItemStack(allowed ? Material.GREEN_STAINED_GLASS_PANE : Material.RED_STAINED_GLASS_PANE); - stack.editMeta(meta -> meta.displayName(applyFormatting(Component.text("Next page (%s/%s)".formatted(skip, lastPage()+1)).color(color)))); + stack.setData(DataComponentTypes.ITEM_NAME, CustomInventory.renderComponent(viewer, applyFormatting(translatable("smod.inventory.next", text(skip), text(lastPage()+1)).color(color)))); return stack; } } diff --git a/src/main/java/de/shiewk/smoderation/paper/inventory/SModMenu.java b/src/main/java/de/shiewk/smoderation/paper/inventory/SModMenu.java index d5e3bec..122afe5 100644 --- a/src/main/java/de/shiewk/smoderation/paper/inventory/SModMenu.java +++ b/src/main/java/de/shiewk/smoderation/paper/inventory/SModMenu.java @@ -356,8 +356,8 @@ public class SModMenu extends PageableCustomInventory { for (int i = 45; i < 54; i++) { inventory.setItem(i, createEmptyStack()); } - inventory.setItem(prevSlot, createPreviousPageStack()); - inventory.setItem(nextSlot, createNextPageStack()); + inventory.setItem(prevSlot, createPreviousPageStack(player)); + inventory.setItem(nextSlot, createNextPageStack(player)); inventory.setItem(47, createSearchItem()); inventory.setItem(48, createTypeItem()); inventory.setItem(50, createFilterItem()); diff --git a/src/main/resources/smoderation/translations/de_de.json b/src/main/resources/smoderation/translations/de_de.json new file mode 100644 index 0000000..55eafef --- /dev/null +++ b/src/main/resources/smoderation/translations/de_de.json @@ -0,0 +1,111 @@ +{ + "smod.argument.duration.fail.invalid": "Ungültige Zeit ''", + "smod.argument.duration.fail.pattern": "Bitte gib eine gültige Zeit an, z.B. '1d6h30min'", + "smod.argument.offlinePlayer.fail.notCached": "Dieser Spieler ist nicht gespeichert.", + "smod.argument.uuid.fail.notCached": "Dieser Spieler ist nicht gespeichert. Versuche, stattdessen seine UUID anzugeben.", + "smod.chatInput.remainingTime": " Sekunden", + "smod.command.ban.fail.forceReason": "Bitte gib einen Grund an.", + "smod.command.ban.fail.protect": "Dieser Spieler kann nicht gebannt werden.", + "smod.command.ban.fail.self": "Du kannst dich nicht selbst bannen.", + "smod.command.ban.fail.tooShort": "Du kannst Spieler, die nicht online sind, nicht so kurz bannen.", + "smod.command.ecsee.opening": "Enderkiste von wird geöffnet.", + "smod.command.fail.invalidPlayer": "Bitte gib einen gültigen Spieler an.", + "smod.command.fail.players": "Nur Spieler können diesen Befehl ausführen.", + "smod.command.fail.playersConsole": "Nur Spieler und die Konsole können diesen Befehl ausführen.", + "smod.command.invsee.fail.self": "Du kannst dein eigenes Inventar nicht öffnen.", + "smod.command.invsee.opening": "Inventar von wird geöffnet.", + "smod.command.kick.fail.forceReason": "Bitte gib einen Grund an.", + "smod.command.kick.fail.protect": "Dieser Spieler kann nicht gekickt werden.", + "smod.command.kick.fail.self": "Du kannst dich nicht selbst kicken.", + "smod.command.modlogs.ban": "- ist bis (in ) gebannt. Grund: ", + "smod.command.modlogs.heading": "Spieler ()", + "smod.command.modlogs.mute": "- ist bis (in ) stummgeschaltet. Grund: ", + "smod.command.modlogs.none": "- ist momentan nicht gebannt oder stummgeschaltet.", + "smod.command.mute.fail.forceReason": "Bitte gib einen Grund an.", + "smod.command.mute.fail.protect": "Dieser Spieler kann nicht stummgeschaltet werden.", + "smod.command.mute.fail.self": "Du kannst dich nicht selbst stummschalten.", + "smod.command.mute.fail.tooShort": "Du kannst Spieler nicht so kurz stummschalten.", + "smod.command.offlinetp.fail.unknown": "Die Position des Spielers ist nicht bekannt.", + "smod.command.offlinetp.teleporting": "Du wirst zu teleportiert.", + "smod.command.socialspy.disabled": "SocialSpy deaktiviert.", + "smod.command.socialspy.enabled": "SocialSpy aktiviert.", + "smod.command.unban.fail.notBanned": "Dieser Spieler ist nicht gebannt.", + "smod.command.unmute.fail.notMuted": "Dieser Spieler ist nicht stummgeschaltet.", + "smod.command.vanish.broadcast.off": " ist wieder erschienen.", + "smod.command.vanish.broadcast.on": " ist verschwunden.", + "smod.command.vanish.fail.noPlayersFound": "Kein Spieler wurde gefunden.", + "smod.command.vanish.list": "Diese Spieler sind momentan versteckt: ", + "smod.command.vanish.list.none": "Keine Spieler sind gerade versteckt.", + "smod.command.vanish.stillEnabled": "Du bist noch unsichtbar!", + "smod.command.vanish.toggle.off": "Du bist nicht mehr versteckt.", + "smod.command.vanish.toggle.on": "Du bist jetzt unsichtbar.", + "smod.confirm.no": "Nein", + "smod.confirm.yes": "Ja", + "smod.menu": "SMod Menü", + "smod.menu.filter": "Filter: ", + "smod.menu.filter.active": "Aktive Strafen", + "smod.menu.filter.all": "Alle Strafen", + "smod.menu.filter.expired": "Abgelaufene Strafen", + "smod.menu.filter.switch": "\u00BB Klicke, um den Filter zu ändern", + "smod.menu.info.click": "\u00BB Klicke, um die Strafe aufzuheben", + "smod.menu.info.duration": "Dauer: ", + "smod.menu.info.expiry.future": "Läuft ab: In ", + "smod.menu.info.expiry.past": "Ist abgelaufen: ago", + "smod.menu.info.player": "Spieler: ", + "smod.menu.info.punishedBy": "Bestraft von: ", + "smod.menu.info.reason": "Grund: ", + "smod.menu.info.timestamp": "Zeitpunkt: ", + "smod.menu.info.undone": "Aufgehoben von: ", + "smod.menu.search": "Suchen", + "smod.menu.search.current": "Aktueller Suchbegriff: ", + "smod.menu.search.new": "\u00BB Klicke, um einen neuen Suchbegriff einzugeben", + "smod.menu.search.none": "Keiner", + "smod.menu.search.query": "Gib deinen Suchbegriff in den Chat ein", + "smod.menu.search.remove": "\u00BB Rechtsklick, um die Suche aufzuheben", + "smod.menu.sort": "Sortieren nach: ", + "smod.menu.sort.expiry": "Ablaufzeitpunkt", + "smod.menu.sort.moderatorName": "Moderatorname", + "smod.menu.sort.playerName": "Spielername", + "smod.menu.sort.switch": "\u00BB Klicke, um die Sortierung zu ändern", + "smod.menu.sort.time": "Ausstellungszeitpunkt", + "smod.menu.type": "Typ: ", + "smod.menu.type.all": "Alle", + "smod.menu.type.switch": "\u00BB Klicke, um den Typ zu ändern", + "smod.menu.undoConfirmation": "Bist du sicher, dass du die Strafe aufheben willst?", + "smod.punishment.broadcast.ban": " wurde von für gebannt.Grund: ", + "smod.punishment.broadcast.kick": " wurde von gekickt.Grund: ", + "smod.punishment.broadcast.mute": " wurde von für stummgeschaltet.Grund: ", + "smod.punishment.name.ban": "Bann", + "smod.punishment.name.kick": "Kick", + "smod.punishment.name.mute": "Stummschaltung", + "smod.punishment.playerMessage.ban": "Du wurdest von vom Server gebannt.Grund: Dein Bann läuft in ab.", + "smod.punishment.playerMessage.kick": "Du wurdest von vom Server gekickt.Grund: ", + "smod.punishment.playerMessage.mute": "Du wurdest von stummgeschaltet.Grund: Du kannst in wieder schreiben.", + "smod.punishment.playerMessage.mute.chat": "Du kannst diesen Befehl nicht ausführen, während du stummgeschaltet bist.", + "smod.punishment.undo.ban": " wurde von entbannt.", + "smod.punishment.undo.mute": "s Stummschaltung wurde von aufgehoben.", + "smod.socialspy.command": "[SocialSpy] : ", + "smod.time.days": " Tage", + "smod.time.hours": " Stunden", + "smod.time.milliseconds": " Millisekunden", + "smod.time.minutes": " Minuten", + "smod.time.month.0": "Januar", + "smod.time.month.1": "Februar", + "smod.time.month.10": "November", + "smod.time.month.11": "Dezember", + "smod.time.month.2": "März", + "smod.time.month.3": "April", + "smod.time.month.4": "Mai", + "smod.time.month.5": "Juni", + "smod.time.month.6": "Juli", + "smod.time.month.7": "August", + "smod.time.month.8": "September", + "smod.time.month.9": "Oktober", + "smod.time.months": " Monate", + "smod.time.seconds": " Sekunden", + "smod.time.timestamp": ". :: ", + "smod.time.weeks": " Wochen", + "smod.time.years": " Jahre", + "smod.inventory.next": "Nächste Seite (/)", + "smod.inventory.previous": "Vorherige Seite (/)" +} \ No newline at end of file diff --git a/src/main/resources/smoderation/translations/en_us.json b/src/main/resources/smoderation/translations/en_us.json index a3bd3c4..9b0ceed 100644 --- a/src/main/resources/smoderation/translations/en_us.json +++ b/src/main/resources/smoderation/translations/en_us.json @@ -41,6 +41,8 @@ "smod.command.vanish.toggle.on": "You are now vanished.", "smod.confirm.no": "No", "smod.confirm.yes": "Yes", + "smod.inventory.next": "Next page (/)", + "smod.inventory.previous": "Previous page (/)", "smod.menu": "SMod Menu", "smod.menu.filter": "Filter: ", "smod.menu.filter.active": "Active punishments",