From 4edc59ba66a93891a0d0411baa482e9df756e6f6 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Thu, 29 Aug 2024 22:33:54 +0200 Subject: [PATCH 01/14] Add translations --- .../src/de/steamwar/tntleague/TNTLeague.kt | 2 +- .../tntleague/TNTLeague_de_DE.properties | 18 +++++++++++++++--- .../tntleague/TNTLeague_en_US.properties | 5 ----- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt index 5479e4d7..9e6e8a34 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt @@ -28,7 +28,7 @@ class TNTLeague : JavaPlugin() { val bundleDe = ResourceBundle.getBundle("de.steamwar.tntleague.TNTLeague", Locale.GERMAN, UTF8ResourceBundleControl()) val bundleEn = ResourceBundle.getBundle("de.steamwar.tntleague.TNTLeague", Locale.US, UTF8ResourceBundleControl()) - registry.defaultLocale(Locale.US) + registry.defaultLocale(Locale.GERMAN) registry.registerAll(Locale.GERMAN, bundleDe, true) registry.registerAll(Locale.US, bundleEn, true) diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de_DE.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de_DE.properties index 7200a9e2..3da91f61 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de_DE.properties +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de_DE.properties @@ -1,6 +1,7 @@ join={0} ist dem Spiel beigetreten! joinTeam={0} ist dem {1} team begetreten! quit={0} hat das Spiel verlassen! +quitTeam={0} hat das {1} team verlassen! blue=Blau red=Rot shutdown=Der Server fährt in {0} sekunden herunter! @@ -9,10 +10,21 @@ notEnoughCoins=Du hast nicht genug Coins um dir das zu kaufen! gameStarting=Das Spiel beginnt in {0} Sekunden! gameStart=Start in {0} gameStarted=Das Spiel beginnt! -gameEnded=Das Spiel ist aus! +timeRemaining=noch {0} Minuten! +gameEnded=Das Spiel ist vorbei! +draw=Keiner hat gewonnen! +chat={0}» {1} dealer=Händler -dealerItem= +dealerItem={0} {1} dealerPrice=Kosten: {0} Coins + scoreboardTarget=Ziel: {0} scoreboardTime=Zeit: {0}:{1} -scoreboardTeam= \ No newline at end of file +scoreboardTeam=Team {0}: {1} +ready=Bereit +notReady=Nicht bereit +isReady=Team {0} ist bereit! +isNotReady=Team {0} ist nicht bereit! +invited={0} hat dich in team {1} eingeladen! *Klick* +invitedHover=Team {0} beitreten! +invitedPlayer={0} wurde eingeladen! \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_en_US.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_en_US.properties index 2f7c11e2..af68acab 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_en_US.properties +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_en_US.properties @@ -17,16 +17,11 @@ timeRemaining={0} minutes remaining! gameEnded=The game has ended! draw=The game ended in a draw! -chat={0}» {1} - dealer=Shopkeeper -dealerItem={0} {1} dealerPrice=Price: {0} Coins scoreboardTarget=Target: {0} scoreboardTime=Time: {0}:{1} -scoreboardTeam=Team {0}: {1} - ready=Ready notReady=Not ready isReady=Team {0} is ready! From ac9197c554e0a2705fda13a0d4db321d3425450e Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Thu, 14 Nov 2024 19:31:17 +0100 Subject: [PATCH 02/14] Update Message --- .../src/de/steamwar/message/Message.java | 9 +++-- .../src/de/steamwar/tntleague/TNTLeague.kt | 16 +++------ .../steamwar/tntleague/TNTLeague.properties | 33 +++++++++++++++++++ .../tntleague/TNTLeague_de.properties | 28 ++++++++++++++++ .../tntleague/TNTLeague_de_DE.properties | 30 ----------------- .../tntleague/TNTLeague_en_US.properties | 32 ------------------ .../tntleague/command/InviteCommand.kt | 6 ++-- .../tntleague/events/GlobalListener.kt | 12 ++----- .../tntleague/events/IngameListener.kt | 2 +- .../tntleague/events/LobbyListener.kt | 2 +- .../steamwar/tntleague/game/TNTLeagueGame.kt | 17 +++++----- .../src/de/steamwar/tntleague/util/Style.kt | 14 +++++--- TNTLeague/src/paper-plugin.yml | 11 ++++--- 13 files changed, 105 insertions(+), 107 deletions(-) create mode 100644 TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties create mode 100644 TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties delete mode 100644 TNTLeague/src/de/steamwar/tntleague/TNTLeague_de_DE.properties delete mode 100644 TNTLeague/src/de/steamwar/tntleague/TNTLeague_en_US.properties diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/message/Message.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/message/Message.java index eca895f4..94d5a68c 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/message/Message.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/message/Message.java @@ -58,7 +58,7 @@ public class Message { return parse(message, false, sender, params); } - private String parse(String message, boolean prefixed, CommandSender sender, Object... params){ + public MessageFormat parseRaw(String message, boolean prefixed, CommandSender sender) { Locale locale; if(sender instanceof Player) locale = getLocale((Player) sender); @@ -71,7 +71,12 @@ public class Message { pattern = fromRB(resourceBundle, "PREFIX") + " "; pattern += fromRB(resourceBundle, message); - return new MessageFormat(pattern, locale).format(params); + return new MessageFormat(pattern, locale); + } + + private String parse(String message, boolean prefixed, CommandSender sender, Object... params){ + + return parseRaw(message, prefixed, sender).format(params); } private String fromRB(ResourceBundle bundle, String key) { diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt index 9e6e8a34..35fa849a 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt @@ -1,5 +1,6 @@ package de.steamwar.tntleague +import de.steamwar.message.Message import de.steamwar.tntleague.command.AcceptCommand import de.steamwar.tntleague.command.InviteCommand import de.steamwar.tntleague.command.LeaveCommand @@ -9,11 +10,14 @@ import de.steamwar.tntleague.events.LobbyListener import net.kyori.adventure.key.Key import net.kyori.adventure.translation.GlobalTranslator import net.kyori.adventure.translation.TranslationRegistry +import net.kyori.adventure.translation.Translator import net.kyori.adventure.util.UTF8ResourceBundleControl import org.bukkit.plugin.java.JavaPlugin +import java.text.MessageFormat import java.util.* lateinit var plugin: TNTLeague +lateinit var message: Message class TNTLeague : JavaPlugin() { init { @@ -22,18 +26,8 @@ class TNTLeague : JavaPlugin() { override fun onEnable() { saveResource("config.yml", false) - saveDefaultConfig() - val registry = TranslationRegistry.create(Key.key("steamwar:tntleague")) - - val bundleDe = ResourceBundle.getBundle("de.steamwar.tntleague.TNTLeague", Locale.GERMAN, UTF8ResourceBundleControl()) - val bundleEn = ResourceBundle.getBundle("de.steamwar.tntleague.TNTLeague", Locale.US, UTF8ResourceBundleControl()) - registry.defaultLocale(Locale.GERMAN) - - registry.registerAll(Locale.GERMAN, bundleDe, true) - registry.registerAll(Locale.US, bundleEn, true) - - GlobalTranslator.translator().addSource(registry) + message = Message("de.steamwar.tntleague.TNTLeague", classLoader) server.pluginManager.registerEvents(LobbyListener, this) server.pluginManager.registerEvents(GlobalListener, this) diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties new file mode 100644 index 00000000..b29ee2c5 --- /dev/null +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties @@ -0,0 +1,33 @@ +PREFIX=§4TNT§6League §8» +join=§e{0} §7joined the game! +joinTeam=§e{0} §7joined the {1} §7team! +quit=§e{0} §7left the game! +quitTeam=§e{0} §7left the {1} §7team! +blue=§9Blue +red=§cRed +shutdown=§7The server stops in §e{0} §7seconds! +teamWin=§aTeam {0} §awins! + +notEnoughCoins=§cYou don't have enough coins to buy this item! + +gameStarting=§7The game starts in §e{0} §7seconds! +gameStart=§7Starting in §e{0} +gameStarted=§aThe game has started! + +timeRemaining=§e{0} §7minutes remaining! + +gameEnded=§eThe game has ended! +draw=§7The game ended in a draw! +dealer=Shopkeeper +dealerPrice=§7Price: §e{0} §7Coins + +scoreboardTime=§7Time: §e{0}§8:§e{1} +scoreboardTeam=§7Team {0}§8: §e{1} +ready=§aReady +notReady=§cNot ready +isReady=§7Team {0} §7is ready! +isNotReady=§7Team {0} §7is not ready! + +invited=§e{0} §7invited you to join the {1} §7team! §e*Click* +invitedHover=§7Click to join the {0} §7team! +invitedPlayer=§7Invited §e{0} §7to join your team! \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties new file mode 100644 index 00000000..97eeb01a --- /dev/null +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties @@ -0,0 +1,28 @@ +join=§e{0} §7ist dem Spiel beigetreten! +joinTeam=§e{0} §7ist dem {1} §7team begetreten! +quit=§e{0} §7hat das Spiel verlassen! +quitTeam=§e{0} §7hat das {1} §7team verlassen! +blue=§9Blau +red=§cRot +shutdown=§7Der Server fährt in §e{0} §7sekunden herunter! +teamWin=§aTeam {0} §agewinnt! +notEnoughCoins=§cDu hast nicht genug Coins um dir das zu kaufen! +gameStarting=§7Das Spiel beginnt in §e{0} §7Sekunden! +gameStart=§7Start in §e{0} +gameStarted=§aDas Spiel beginnt! +timeRemaining=§7noch §e{0} §7Minuten! +gameEnded=§eDas Spiel ist vorbei! +draw=§7Keiner hat gewonnen! +dealer=Händler +dealerItem={0} {1} +dealerPrice=§7Kosten: §e{0} §7Coins + +scoreboardTarget=Ziel: {0} +scoreboardTime=§7Zeit: §e{0}§8:§e{1} +ready=§aBereit +notReady=§cNicht bereit +isReady=§aTeam {0} §aist bereit! +isNotReady=§7Team {0} §7ist nicht bereit! +invited=§e{0} §7hat dich in team {1} §7eingeladen! §e*Klick* +invitedHover=§7Team {0} §7beitreten! +invitedPlayer=§e{0} §7wurde eingeladen! \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de_DE.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de_DE.properties deleted file mode 100644 index 3da91f61..00000000 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de_DE.properties +++ /dev/null @@ -1,30 +0,0 @@ -join={0} ist dem Spiel beigetreten! -joinTeam={0} ist dem {1} team begetreten! -quit={0} hat das Spiel verlassen! -quitTeam={0} hat das {1} team verlassen! -blue=Blau -red=Rot -shutdown=Der Server fährt in {0} sekunden herunter! -teamWin=Team {0} gewinnt! -notEnoughCoins=Du hast nicht genug Coins um dir das zu kaufen! -gameStarting=Das Spiel beginnt in {0} Sekunden! -gameStart=Start in {0} -gameStarted=Das Spiel beginnt! -timeRemaining=noch {0} Minuten! -gameEnded=Das Spiel ist vorbei! -draw=Keiner hat gewonnen! -chat={0}» {1} -dealer=Händler -dealerItem={0} {1} -dealerPrice=Kosten: {0} Coins - -scoreboardTarget=Ziel: {0} -scoreboardTime=Zeit: {0}:{1} -scoreboardTeam=Team {0}: {1} -ready=Bereit -notReady=Nicht bereit -isReady=Team {0} ist bereit! -isNotReady=Team {0} ist nicht bereit! -invited={0} hat dich in team {1} eingeladen! *Klick* -invitedHover=Team {0} beitreten! -invitedPlayer={0} wurde eingeladen! \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_en_US.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_en_US.properties deleted file mode 100644 index af68acab..00000000 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_en_US.properties +++ /dev/null @@ -1,32 +0,0 @@ -join={0} joined the game! -joinTeam={0} joined the {1} team! -quit={0} left the game! -quitTeam={0} left the {1} team! -blue=Blue -red=Red -shutdown=The server stops in {0} seconds! -teamWin=Team {0} wins! - -notEnoughCoins=You don't have enough coins to buy this item! - -gameStarting=The game starts in {0} seconds! -gameStart=Starting in {0} -gameStarted=The game has started! - -timeRemaining={0} minutes remaining! - -gameEnded=The game has ended! -draw=The game ended in a draw! -dealer=Shopkeeper -dealerPrice=Price: {0} Coins - -scoreboardTarget=Target: {0} -scoreboardTime=Time: {0}:{1} -ready=Ready -notReady=Not ready -isReady=Team {0} is ready! -isNotReady=Team {0} is not ready! - -invited={0} invited you to join the {1} team! *Click* -invitedHover=Click to join the {0} team! -invitedPlayer=Invited {0} to join your team! \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt b/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt index fdfaf359..906a229d 100644 --- a/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt +++ b/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt @@ -37,7 +37,7 @@ object InviteCommand: SWCommand("invite") { val team = TNTLeagueGame.getTeam(sender)!! team.invites.add(target) - target.sendMessage(translate("invited", sender.name.yellow(), translate(team.name).colorByTeam(team)).basic().clickEvent( + target.sendMessage(translate("invited", sender, sender.name.yellow(), translate(team.name, sender).colorByTeam(team)).basic().clickEvent( ClickEvent.callback { if (target !in team.invites) return@callback @@ -45,8 +45,8 @@ object InviteCommand: SWCommand("invite") { team.opposite.invites.remove(target) team.join(target) }) - .hoverEvent(HoverEvent.showText(translate("invitedHover", translate(team.name).colorByTeam(team)).green()))) - sender.sendMessage(translate("invitedPlayer", target.name.yellow()).basic()) + .hoverEvent(HoverEvent.showText(translate("invitedHover", sender, translate(team.name, sender).colorByTeam(team)).green()))) + sender.sendMessage(translate("invitedPlayer", sender, target.name.yellow()).basic()) } @Validator("isLeader", local = false) diff --git a/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt index f2930adb..6784e7ec 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt @@ -21,16 +21,17 @@ import org.bukkit.event.player.PlayerRespawnEvent object GlobalListener: Listener { - @EventHandler(priority = EventPriority.LOW) + @EventHandler(priority = EventPriority.HIGH) fun onPlayerJoin(e: PlayerJoinEvent) { e.joinMessage(null) with(e.player) { teleport(TNTLeagueWorldConfig.lobby) inventory.clear() - plugin.server.broadcast(translate("join", name.bold()).basic()) + plugin.server.broadcast(translate("join", this, name.bold()).basic()) isOp = false gameMode = GameMode.SPECTATOR respawnLocation = TNTLeagueWorldConfig.lobby + println(locale()) } } @@ -78,11 +79,4 @@ object GlobalListener: Listener { null -> e.respawnLocation = TNTLeagueWorldConfig.lobby } } - - @EventHandler - fun onChat(e: AsyncChatEvent) { - e.renderer { source, sourceDisplayName, message, _ -> - translate("chat", sourceDisplayName.colorByTeam(TNTLeagueGame.getTeam(source)), message).basic() - } - } } \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt index bb9b0415..fbea4be8 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt @@ -26,7 +26,7 @@ object IngameListener: Listener { fun onEntityInteract(e: PlayerInteractEntityEvent) { if (e.player.gameMode == GameMode.SPECTATOR) return - if(e.rightClicked.type == EntityType.VILLAGER) { + if(e.rightClicked.type == EntityType.WANDERING_TRADER) { e.isCancelled = true e.player.openInventory(DealerInventory(e.player).getInventory()) } diff --git a/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt index e88cfbaa..4ed1541e 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt @@ -20,7 +20,7 @@ import org.bukkit.event.player.PlayerQuitEvent object LobbyListener: Listener { - @EventHandler + @EventHandler(priority = EventPriority.HIGHEST) fun onPlayerJoin(e: PlayerJoinEvent) { TNTLeagueGame.getFreeTeam()?.run { join(e.player) diff --git a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt index 59d4e65c..42fd0f39 100644 --- a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt +++ b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt @@ -11,19 +11,18 @@ import de.steamwar.tntleague.events.DummyListener import de.steamwar.tntleague.events.IngameListener import de.steamwar.tntleague.events.LobbyListener import de.steamwar.tntleague.inventory.DealerInventory +import de.steamwar.tntleague.message import de.steamwar.tntleague.plugin import de.steamwar.tntleague.util.* import net.kyori.adventure.bossbar.BossBar import net.kyori.adventure.sound.Sound +import net.kyori.adventure.text.Component import org.bukkit.GameMode import org.bukkit.Location import org.bukkit.Material -import org.bukkit.block.data.type.TNT -import org.bukkit.entity.Entity import org.bukkit.entity.Item import org.bukkit.entity.Player import org.bukkit.entity.TNTPrimed -import org.bukkit.entity.Villager import org.bukkit.event.HandlerList import org.bukkit.event.Listener import org.bukkit.inventory.ItemStack @@ -62,7 +61,7 @@ object TNTLeagueGame { blueTeam.start() redTeam.start() - plugin.server.broadcast(translate("gameStarted").success()) + message.broadcast("gameStarted") val tnt = ItemStack(Material.TNT) @@ -87,7 +86,7 @@ object TNTLeagueGame { } if (gameTimeRemaining % 300 == 0) { - plugin.server.broadcast(translate("timeRemaining", (gameTimeRemaining / 60).toString().yellow()).basic()) + message.broadcast("timeRemaining", gameTimeRemaining / 60) plugin.server.onlinePlayers.forEach { it.playSound(Sound.sound(org.bukkit.Sound.BLOCK_NOTE_BLOCK_PLING.key, Sound.Source.MASTER, 1f, 1f)) } } }, 20, 20) @@ -105,7 +104,7 @@ object TNTLeagueGame { it.playSound(Sound.sound(org.bukkit.Sound.ENTITY_ENDER_DRAGON_DEATH.key, Sound.Source.MASTER, 1f, 1f)) } - plugin.server.broadcast(translate("gameEnded").success()) + message.broadcast("gameEnded") spawnerTask.cancel() @@ -116,7 +115,7 @@ object TNTLeagueGame { plugin.server.shutdown() } - plugin.server.broadcast(translate("shutdown", shutdown.toString().yellow()).basic()) + message.broadcast("shutdown", shutdown) shutdown-- }, 20, 20) @@ -135,8 +134,8 @@ object TNTLeagueGame { state = GameState.STARTING var countdown = TNTLeagueConfig.config.startDelay - plugin.server.broadcast(translate("gameStarting", countdown.toString().yellow()).basic()) - val bar = BossBar.bossBar(translate("gameStart", countdown.toString().yellow()).gray(), (TNTLeagueConfig.config.startDelay - countdown) / TNTLeagueConfig.config.startDelay.toFloat(), BossBar.Color.GREEN, BossBar.Overlay.NOTCHED_10) + message.broadcast("gameStarting", countdown) + val bar = BossBar.bossBar(Component.text(message.parse("gameStart", countdown)), (TNTLeagueConfig.config.startDelay - countdown) / TNTLeagueConfig.config.startDelay.toFloat(), BossBar.Color.GREEN, BossBar.Overlay.NOTCHED_10) plugin.server.onlinePlayers.forEach { bar.addViewer(it) } task = plugin.server.scheduler.scheduleSyncRepeatingTask(plugin, { plugin.server.onlinePlayers.forEach { it.playSound(Sound.sound(org.bukkit.Sound.ENTITY_EXPERIENCE_ORB_PICKUP.key, Sound.Source.MASTER, 1f, 1f)) } diff --git a/TNTLeague/src/de/steamwar/tntleague/util/Style.kt b/TNTLeague/src/de/steamwar/tntleague/util/Style.kt index 3ef28b9a..1b84aac2 100644 --- a/TNTLeague/src/de/steamwar/tntleague/util/Style.kt +++ b/TNTLeague/src/de/steamwar/tntleague/util/Style.kt @@ -1,15 +1,21 @@ package de.steamwar.tntleague.util import de.steamwar.tntleague.game.TNTLeagueTeam +import de.steamwar.tntleague.message +import net.kyori.adventure.key.Key import net.kyori.adventure.text.Component import net.kyori.adventure.text.ComponentLike +import net.kyori.adventure.text.TextComponent import net.kyori.adventure.text.TranslatableComponent import net.kyori.adventure.text.format.NamedTextColor import net.kyori.adventure.text.format.Style import net.kyori.adventure.text.format.TextDecoration +import net.kyori.adventure.text.renderer.TranslatableComponentRenderer import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer import net.kyori.adventure.translation.GlobalTranslator +import net.kyori.adventure.translation.Translator import org.bukkit.entity.Player +import java.text.MessageFormat import java.util.Locale val prefix = Component.text("Steam").yellow() @@ -23,11 +29,11 @@ val tntLeagueChatPrefix: Component = tntLeaguePrefix .append(Component.text("»").darkGray()) .appendSpace() -fun TranslatableComponent.basic(): Component = tntLeagueChatPrefix.append(this.gray()) +fun Component.basic(): Component = tntLeagueChatPrefix.append(this.gray()) -fun TranslatableComponent.error(): Component = tntLeagueChatPrefix.append(this.red()) +fun Component.error(): Component = tntLeagueChatPrefix.append(this.red()) -fun TranslatableComponent.success(): Component = tntLeagueChatPrefix.append(this.green()) +fun Component.success(): Component = tntLeagueChatPrefix.append(this.green()) fun String.component(): Component = Component.text(this) @@ -57,8 +63,6 @@ fun String.darkGray(): Component = this.component().darkGray() fun Component.gold(): Component = this.color(NamedTextColor.GOLD) -fun translate(key: String, vararg args: ComponentLike): TranslatableComponent = Component.translatable(key, *args).decoration(TextDecoration.ITALIC, false) - fun Component.reset(): Component = this.style(Style.empty()) fun Component.colorByTeam(team: TNTLeagueTeam?) = when (team) { diff --git a/TNTLeague/src/paper-plugin.yml b/TNTLeague/src/paper-plugin.yml index 8687424a..4e740ea9 100644 --- a/TNTLeague/src/paper-plugin.yml +++ b/TNTLeague/src/paper-plugin.yml @@ -4,7 +4,10 @@ main: de.steamwar.tntleague.TNTLeague load: POSTWORLD api-version: '1.21' dependencies: - - name: SpigotCore - required: true - - name: KotlinCore - required: true \ No newline at end of file + server: + SpigotCore: + required: true + load: BEFORE + KotlinCore: + required: true + load: BEFORE \ No newline at end of file From d11597540313c28d4bca14b6df6efa34a28b5b11 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Thu, 14 Nov 2024 22:08:06 +0100 Subject: [PATCH 03/14] Add ComponentMessage, for TranslatableComponents in Paper >1.20 --- KotlinCore/build.gradle.kts | 2 + .../src/de/steamwar/kotlin/KotlinCore.kt | 2 + .../kotlin/message/ComponentMessage.kt | 36 ++++++++++++++ .../kotlin/message/LanguageListener.kt | 49 +++++++++++++++++++ settings.gradle.kts | 1 + 5 files changed, 90 insertions(+) create mode 100644 KotlinCore/src/de/steamwar/kotlin/message/ComponentMessage.kt create mode 100644 KotlinCore/src/de/steamwar/kotlin/message/LanguageListener.kt diff --git a/KotlinCore/build.gradle.kts b/KotlinCore/build.gradle.kts index 5d00f0f6..0c610074 100644 --- a/KotlinCore/build.gradle.kts +++ b/KotlinCore/build.gradle.kts @@ -32,4 +32,6 @@ tasks.shadowJar { dependencies { compileOnly(libs.paperapi21) + compileOnly(libs.nms21) + compileOnly(project(":SpigotCore")) } diff --git a/KotlinCore/src/de/steamwar/kotlin/KotlinCore.kt b/KotlinCore/src/de/steamwar/kotlin/KotlinCore.kt index e821ade4..89aa1b34 100644 --- a/KotlinCore/src/de/steamwar/kotlin/KotlinCore.kt +++ b/KotlinCore/src/de/steamwar/kotlin/KotlinCore.kt @@ -19,6 +19,7 @@ package de.steamwar.kotlin +import de.steamwar.kotlin.message.LanguageListener import org.bukkit.plugin.java.JavaPlugin class KotlinCore : JavaPlugin() { @@ -32,6 +33,7 @@ class KotlinCore : JavaPlugin() { } override fun onEnable() { + server.pluginManager.registerEvents(LanguageListener, this) } override fun onDisable() { diff --git a/KotlinCore/src/de/steamwar/kotlin/message/ComponentMessage.kt b/KotlinCore/src/de/steamwar/kotlin/message/ComponentMessage.kt new file mode 100644 index 00000000..85d41b3b --- /dev/null +++ b/KotlinCore/src/de/steamwar/kotlin/message/ComponentMessage.kt @@ -0,0 +1,36 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2024 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package de.steamwar.kotlin.message + +import net.kyori.adventure.key.Key +import net.kyori.adventure.translation.GlobalTranslator +import net.kyori.adventure.translation.Translator +import java.text.MessageFormat +import java.util.* + +class ComponentMessage(private val resourceBundleName: String, private val classLoader: ClassLoader) : Translator { + init { + GlobalTranslator.translator().addSource(this) + } + + override fun name(): Key = Key.key("steamwar", resourceBundleName) + + override fun translate(key: String, locale: Locale): MessageFormat = MessageFormat(ResourceBundle.getBundle(resourceBundleName, locale, classLoader).getString(key), locale) +} diff --git a/KotlinCore/src/de/steamwar/kotlin/message/LanguageListener.kt b/KotlinCore/src/de/steamwar/kotlin/message/LanguageListener.kt new file mode 100644 index 00000000..0824b416 --- /dev/null +++ b/KotlinCore/src/de/steamwar/kotlin/message/LanguageListener.kt @@ -0,0 +1,49 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2024 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package de.steamwar.kotlin.message + +import de.steamwar.kotlin.KotlinCore +import de.steamwar.sql.SteamwarUser +import org.bukkit.Bukkit +import org.bukkit.craftbukkit.v1_21_R1.entity.CraftPlayer +import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority +import org.bukkit.event.Listener +import org.bukkit.event.player.PlayerJoinEvent +import org.bukkit.event.player.PlayerLocaleChangeEvent + +object LanguageListener: Listener { + + @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) + fun onPlayerJoin(event: PlayerJoinEvent) { + val user = SteamwarUser.get(event.player.uniqueId) + val player = event.player as CraftPlayer + player.handle.`adventure$locale` = user.locale + } + + @EventHandler + fun onPlayerConfig(event: PlayerLocaleChangeEvent) { + Bukkit.getScheduler().runTask(KotlinCore.plugin, Runnable { + val user = SteamwarUser.get(event.player.uniqueId) + val player = event.player as CraftPlayer + player.handle.`adventure$locale` = user.locale + }) + } +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 2379d8bd..a13a1974 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -130,6 +130,7 @@ dependencyResolutionManagement { library("nms18", "de.steamwar:spigot:1.18") library("nms19", "de.steamwar:spigot:1.19") library("nms20", "de.steamwar:spigot:1.20") + library("nms21", "de.steamwar:spigot:1.21") library("axiom", "de.steamwar:axiompaper:RELEASE") library("worldedit12", "de.steamwar:worldedit:1.12") From 9dff1f588458265495203e2864fb9de6d366409c Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Thu, 14 Nov 2024 22:18:34 +0100 Subject: [PATCH 04/14] Revert "Update Message" This reverts commit ac9197c554e0a2705fda13a0d4db321d3425450e. --- .../src/de/steamwar/message/Message.java | 9 ++--- .../src/de/steamwar/tntleague/TNTLeague.kt | 16 ++++++--- .../steamwar/tntleague/TNTLeague.properties | 33 ------------------- .../tntleague/TNTLeague_de.properties | 28 ---------------- .../tntleague/TNTLeague_de_DE.properties | 30 +++++++++++++++++ .../tntleague/TNTLeague_en_US.properties | 32 ++++++++++++++++++ .../tntleague/command/InviteCommand.kt | 6 ++-- .../tntleague/events/GlobalListener.kt | 12 +++++-- .../tntleague/events/IngameListener.kt | 2 +- .../tntleague/events/LobbyListener.kt | 2 +- .../steamwar/tntleague/game/TNTLeagueGame.kt | 17 +++++----- .../src/de/steamwar/tntleague/util/Style.kt | 14 +++----- TNTLeague/src/paper-plugin.yml | 11 +++---- 13 files changed, 107 insertions(+), 105 deletions(-) delete mode 100644 TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties delete mode 100644 TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties create mode 100644 TNTLeague/src/de/steamwar/tntleague/TNTLeague_de_DE.properties create mode 100644 TNTLeague/src/de/steamwar/tntleague/TNTLeague_en_US.properties diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/message/Message.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/message/Message.java index 94d5a68c..eca895f4 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/message/Message.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/message/Message.java @@ -58,7 +58,7 @@ public class Message { return parse(message, false, sender, params); } - public MessageFormat parseRaw(String message, boolean prefixed, CommandSender sender) { + private String parse(String message, boolean prefixed, CommandSender sender, Object... params){ Locale locale; if(sender instanceof Player) locale = getLocale((Player) sender); @@ -71,12 +71,7 @@ public class Message { pattern = fromRB(resourceBundle, "PREFIX") + " "; pattern += fromRB(resourceBundle, message); - return new MessageFormat(pattern, locale); - } - - private String parse(String message, boolean prefixed, CommandSender sender, Object... params){ - - return parseRaw(message, prefixed, sender).format(params); + return new MessageFormat(pattern, locale).format(params); } private String fromRB(ResourceBundle bundle, String key) { diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt index 35fa849a..9e6e8a34 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt @@ -1,6 +1,5 @@ package de.steamwar.tntleague -import de.steamwar.message.Message import de.steamwar.tntleague.command.AcceptCommand import de.steamwar.tntleague.command.InviteCommand import de.steamwar.tntleague.command.LeaveCommand @@ -10,14 +9,11 @@ import de.steamwar.tntleague.events.LobbyListener import net.kyori.adventure.key.Key import net.kyori.adventure.translation.GlobalTranslator import net.kyori.adventure.translation.TranslationRegistry -import net.kyori.adventure.translation.Translator import net.kyori.adventure.util.UTF8ResourceBundleControl import org.bukkit.plugin.java.JavaPlugin -import java.text.MessageFormat import java.util.* lateinit var plugin: TNTLeague -lateinit var message: Message class TNTLeague : JavaPlugin() { init { @@ -26,8 +22,18 @@ class TNTLeague : JavaPlugin() { override fun onEnable() { saveResource("config.yml", false) + saveDefaultConfig() - message = Message("de.steamwar.tntleague.TNTLeague", classLoader) + val registry = TranslationRegistry.create(Key.key("steamwar:tntleague")) + + val bundleDe = ResourceBundle.getBundle("de.steamwar.tntleague.TNTLeague", Locale.GERMAN, UTF8ResourceBundleControl()) + val bundleEn = ResourceBundle.getBundle("de.steamwar.tntleague.TNTLeague", Locale.US, UTF8ResourceBundleControl()) + registry.defaultLocale(Locale.GERMAN) + + registry.registerAll(Locale.GERMAN, bundleDe, true) + registry.registerAll(Locale.US, bundleEn, true) + + GlobalTranslator.translator().addSource(registry) server.pluginManager.registerEvents(LobbyListener, this) server.pluginManager.registerEvents(GlobalListener, this) diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties deleted file mode 100644 index b29ee2c5..00000000 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties +++ /dev/null @@ -1,33 +0,0 @@ -PREFIX=§4TNT§6League §8» -join=§e{0} §7joined the game! -joinTeam=§e{0} §7joined the {1} §7team! -quit=§e{0} §7left the game! -quitTeam=§e{0} §7left the {1} §7team! -blue=§9Blue -red=§cRed -shutdown=§7The server stops in §e{0} §7seconds! -teamWin=§aTeam {0} §awins! - -notEnoughCoins=§cYou don't have enough coins to buy this item! - -gameStarting=§7The game starts in §e{0} §7seconds! -gameStart=§7Starting in §e{0} -gameStarted=§aThe game has started! - -timeRemaining=§e{0} §7minutes remaining! - -gameEnded=§eThe game has ended! -draw=§7The game ended in a draw! -dealer=Shopkeeper -dealerPrice=§7Price: §e{0} §7Coins - -scoreboardTime=§7Time: §e{0}§8:§e{1} -scoreboardTeam=§7Team {0}§8: §e{1} -ready=§aReady -notReady=§cNot ready -isReady=§7Team {0} §7is ready! -isNotReady=§7Team {0} §7is not ready! - -invited=§e{0} §7invited you to join the {1} §7team! §e*Click* -invitedHover=§7Click to join the {0} §7team! -invitedPlayer=§7Invited §e{0} §7to join your team! \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties deleted file mode 100644 index 97eeb01a..00000000 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties +++ /dev/null @@ -1,28 +0,0 @@ -join=§e{0} §7ist dem Spiel beigetreten! -joinTeam=§e{0} §7ist dem {1} §7team begetreten! -quit=§e{0} §7hat das Spiel verlassen! -quitTeam=§e{0} §7hat das {1} §7team verlassen! -blue=§9Blau -red=§cRot -shutdown=§7Der Server fährt in §e{0} §7sekunden herunter! -teamWin=§aTeam {0} §agewinnt! -notEnoughCoins=§cDu hast nicht genug Coins um dir das zu kaufen! -gameStarting=§7Das Spiel beginnt in §e{0} §7Sekunden! -gameStart=§7Start in §e{0} -gameStarted=§aDas Spiel beginnt! -timeRemaining=§7noch §e{0} §7Minuten! -gameEnded=§eDas Spiel ist vorbei! -draw=§7Keiner hat gewonnen! -dealer=Händler -dealerItem={0} {1} -dealerPrice=§7Kosten: §e{0} §7Coins - -scoreboardTarget=Ziel: {0} -scoreboardTime=§7Zeit: §e{0}§8:§e{1} -ready=§aBereit -notReady=§cNicht bereit -isReady=§aTeam {0} §aist bereit! -isNotReady=§7Team {0} §7ist nicht bereit! -invited=§e{0} §7hat dich in team {1} §7eingeladen! §e*Klick* -invitedHover=§7Team {0} §7beitreten! -invitedPlayer=§e{0} §7wurde eingeladen! \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de_DE.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de_DE.properties new file mode 100644 index 00000000..3da91f61 --- /dev/null +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de_DE.properties @@ -0,0 +1,30 @@ +join={0} ist dem Spiel beigetreten! +joinTeam={0} ist dem {1} team begetreten! +quit={0} hat das Spiel verlassen! +quitTeam={0} hat das {1} team verlassen! +blue=Blau +red=Rot +shutdown=Der Server fährt in {0} sekunden herunter! +teamWin=Team {0} gewinnt! +notEnoughCoins=Du hast nicht genug Coins um dir das zu kaufen! +gameStarting=Das Spiel beginnt in {0} Sekunden! +gameStart=Start in {0} +gameStarted=Das Spiel beginnt! +timeRemaining=noch {0} Minuten! +gameEnded=Das Spiel ist vorbei! +draw=Keiner hat gewonnen! +chat={0}» {1} +dealer=Händler +dealerItem={0} {1} +dealerPrice=Kosten: {0} Coins + +scoreboardTarget=Ziel: {0} +scoreboardTime=Zeit: {0}:{1} +scoreboardTeam=Team {0}: {1} +ready=Bereit +notReady=Nicht bereit +isReady=Team {0} ist bereit! +isNotReady=Team {0} ist nicht bereit! +invited={0} hat dich in team {1} eingeladen! *Klick* +invitedHover=Team {0} beitreten! +invitedPlayer={0} wurde eingeladen! \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_en_US.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_en_US.properties new file mode 100644 index 00000000..af68acab --- /dev/null +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_en_US.properties @@ -0,0 +1,32 @@ +join={0} joined the game! +joinTeam={0} joined the {1} team! +quit={0} left the game! +quitTeam={0} left the {1} team! +blue=Blue +red=Red +shutdown=The server stops in {0} seconds! +teamWin=Team {0} wins! + +notEnoughCoins=You don't have enough coins to buy this item! + +gameStarting=The game starts in {0} seconds! +gameStart=Starting in {0} +gameStarted=The game has started! + +timeRemaining={0} minutes remaining! + +gameEnded=The game has ended! +draw=The game ended in a draw! +dealer=Shopkeeper +dealerPrice=Price: {0} Coins + +scoreboardTarget=Target: {0} +scoreboardTime=Time: {0}:{1} +ready=Ready +notReady=Not ready +isReady=Team {0} is ready! +isNotReady=Team {0} is not ready! + +invited={0} invited you to join the {1} team! *Click* +invitedHover=Click to join the {0} team! +invitedPlayer=Invited {0} to join your team! \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt b/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt index 906a229d..fdfaf359 100644 --- a/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt +++ b/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt @@ -37,7 +37,7 @@ object InviteCommand: SWCommand("invite") { val team = TNTLeagueGame.getTeam(sender)!! team.invites.add(target) - target.sendMessage(translate("invited", sender, sender.name.yellow(), translate(team.name, sender).colorByTeam(team)).basic().clickEvent( + target.sendMessage(translate("invited", sender.name.yellow(), translate(team.name).colorByTeam(team)).basic().clickEvent( ClickEvent.callback { if (target !in team.invites) return@callback @@ -45,8 +45,8 @@ object InviteCommand: SWCommand("invite") { team.opposite.invites.remove(target) team.join(target) }) - .hoverEvent(HoverEvent.showText(translate("invitedHover", sender, translate(team.name, sender).colorByTeam(team)).green()))) - sender.sendMessage(translate("invitedPlayer", sender, target.name.yellow()).basic()) + .hoverEvent(HoverEvent.showText(translate("invitedHover", translate(team.name).colorByTeam(team)).green()))) + sender.sendMessage(translate("invitedPlayer", target.name.yellow()).basic()) } @Validator("isLeader", local = false) diff --git a/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt index 6784e7ec..f2930adb 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt @@ -21,17 +21,16 @@ import org.bukkit.event.player.PlayerRespawnEvent object GlobalListener: Listener { - @EventHandler(priority = EventPriority.HIGH) + @EventHandler(priority = EventPriority.LOW) fun onPlayerJoin(e: PlayerJoinEvent) { e.joinMessage(null) with(e.player) { teleport(TNTLeagueWorldConfig.lobby) inventory.clear() - plugin.server.broadcast(translate("join", this, name.bold()).basic()) + plugin.server.broadcast(translate("join", name.bold()).basic()) isOp = false gameMode = GameMode.SPECTATOR respawnLocation = TNTLeagueWorldConfig.lobby - println(locale()) } } @@ -79,4 +78,11 @@ object GlobalListener: Listener { null -> e.respawnLocation = TNTLeagueWorldConfig.lobby } } + + @EventHandler + fun onChat(e: AsyncChatEvent) { + e.renderer { source, sourceDisplayName, message, _ -> + translate("chat", sourceDisplayName.colorByTeam(TNTLeagueGame.getTeam(source)), message).basic() + } + } } \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt index fbea4be8..bb9b0415 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt @@ -26,7 +26,7 @@ object IngameListener: Listener { fun onEntityInteract(e: PlayerInteractEntityEvent) { if (e.player.gameMode == GameMode.SPECTATOR) return - if(e.rightClicked.type == EntityType.WANDERING_TRADER) { + if(e.rightClicked.type == EntityType.VILLAGER) { e.isCancelled = true e.player.openInventory(DealerInventory(e.player).getInventory()) } diff --git a/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt index 4ed1541e..e88cfbaa 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt @@ -20,7 +20,7 @@ import org.bukkit.event.player.PlayerQuitEvent object LobbyListener: Listener { - @EventHandler(priority = EventPriority.HIGHEST) + @EventHandler fun onPlayerJoin(e: PlayerJoinEvent) { TNTLeagueGame.getFreeTeam()?.run { join(e.player) diff --git a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt index 42fd0f39..59d4e65c 100644 --- a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt +++ b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt @@ -11,18 +11,19 @@ import de.steamwar.tntleague.events.DummyListener import de.steamwar.tntleague.events.IngameListener import de.steamwar.tntleague.events.LobbyListener import de.steamwar.tntleague.inventory.DealerInventory -import de.steamwar.tntleague.message import de.steamwar.tntleague.plugin import de.steamwar.tntleague.util.* import net.kyori.adventure.bossbar.BossBar import net.kyori.adventure.sound.Sound -import net.kyori.adventure.text.Component import org.bukkit.GameMode import org.bukkit.Location import org.bukkit.Material +import org.bukkit.block.data.type.TNT +import org.bukkit.entity.Entity import org.bukkit.entity.Item import org.bukkit.entity.Player import org.bukkit.entity.TNTPrimed +import org.bukkit.entity.Villager import org.bukkit.event.HandlerList import org.bukkit.event.Listener import org.bukkit.inventory.ItemStack @@ -61,7 +62,7 @@ object TNTLeagueGame { blueTeam.start() redTeam.start() - message.broadcast("gameStarted") + plugin.server.broadcast(translate("gameStarted").success()) val tnt = ItemStack(Material.TNT) @@ -86,7 +87,7 @@ object TNTLeagueGame { } if (gameTimeRemaining % 300 == 0) { - message.broadcast("timeRemaining", gameTimeRemaining / 60) + plugin.server.broadcast(translate("timeRemaining", (gameTimeRemaining / 60).toString().yellow()).basic()) plugin.server.onlinePlayers.forEach { it.playSound(Sound.sound(org.bukkit.Sound.BLOCK_NOTE_BLOCK_PLING.key, Sound.Source.MASTER, 1f, 1f)) } } }, 20, 20) @@ -104,7 +105,7 @@ object TNTLeagueGame { it.playSound(Sound.sound(org.bukkit.Sound.ENTITY_ENDER_DRAGON_DEATH.key, Sound.Source.MASTER, 1f, 1f)) } - message.broadcast("gameEnded") + plugin.server.broadcast(translate("gameEnded").success()) spawnerTask.cancel() @@ -115,7 +116,7 @@ object TNTLeagueGame { plugin.server.shutdown() } - message.broadcast("shutdown", shutdown) + plugin.server.broadcast(translate("shutdown", shutdown.toString().yellow()).basic()) shutdown-- }, 20, 20) @@ -134,8 +135,8 @@ object TNTLeagueGame { state = GameState.STARTING var countdown = TNTLeagueConfig.config.startDelay - message.broadcast("gameStarting", countdown) - val bar = BossBar.bossBar(Component.text(message.parse("gameStart", countdown)), (TNTLeagueConfig.config.startDelay - countdown) / TNTLeagueConfig.config.startDelay.toFloat(), BossBar.Color.GREEN, BossBar.Overlay.NOTCHED_10) + plugin.server.broadcast(translate("gameStarting", countdown.toString().yellow()).basic()) + val bar = BossBar.bossBar(translate("gameStart", countdown.toString().yellow()).gray(), (TNTLeagueConfig.config.startDelay - countdown) / TNTLeagueConfig.config.startDelay.toFloat(), BossBar.Color.GREEN, BossBar.Overlay.NOTCHED_10) plugin.server.onlinePlayers.forEach { bar.addViewer(it) } task = plugin.server.scheduler.scheduleSyncRepeatingTask(plugin, { plugin.server.onlinePlayers.forEach { it.playSound(Sound.sound(org.bukkit.Sound.ENTITY_EXPERIENCE_ORB_PICKUP.key, Sound.Source.MASTER, 1f, 1f)) } diff --git a/TNTLeague/src/de/steamwar/tntleague/util/Style.kt b/TNTLeague/src/de/steamwar/tntleague/util/Style.kt index 1b84aac2..3ef28b9a 100644 --- a/TNTLeague/src/de/steamwar/tntleague/util/Style.kt +++ b/TNTLeague/src/de/steamwar/tntleague/util/Style.kt @@ -1,21 +1,15 @@ package de.steamwar.tntleague.util import de.steamwar.tntleague.game.TNTLeagueTeam -import de.steamwar.tntleague.message -import net.kyori.adventure.key.Key import net.kyori.adventure.text.Component import net.kyori.adventure.text.ComponentLike -import net.kyori.adventure.text.TextComponent import net.kyori.adventure.text.TranslatableComponent import net.kyori.adventure.text.format.NamedTextColor import net.kyori.adventure.text.format.Style import net.kyori.adventure.text.format.TextDecoration -import net.kyori.adventure.text.renderer.TranslatableComponentRenderer import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer import net.kyori.adventure.translation.GlobalTranslator -import net.kyori.adventure.translation.Translator import org.bukkit.entity.Player -import java.text.MessageFormat import java.util.Locale val prefix = Component.text("Steam").yellow() @@ -29,11 +23,11 @@ val tntLeagueChatPrefix: Component = tntLeaguePrefix .append(Component.text("»").darkGray()) .appendSpace() -fun Component.basic(): Component = tntLeagueChatPrefix.append(this.gray()) +fun TranslatableComponent.basic(): Component = tntLeagueChatPrefix.append(this.gray()) -fun Component.error(): Component = tntLeagueChatPrefix.append(this.red()) +fun TranslatableComponent.error(): Component = tntLeagueChatPrefix.append(this.red()) -fun Component.success(): Component = tntLeagueChatPrefix.append(this.green()) +fun TranslatableComponent.success(): Component = tntLeagueChatPrefix.append(this.green()) fun String.component(): Component = Component.text(this) @@ -63,6 +57,8 @@ fun String.darkGray(): Component = this.component().darkGray() fun Component.gold(): Component = this.color(NamedTextColor.GOLD) +fun translate(key: String, vararg args: ComponentLike): TranslatableComponent = Component.translatable(key, *args).decoration(TextDecoration.ITALIC, false) + fun Component.reset(): Component = this.style(Style.empty()) fun Component.colorByTeam(team: TNTLeagueTeam?) = when (team) { diff --git a/TNTLeague/src/paper-plugin.yml b/TNTLeague/src/paper-plugin.yml index 4e740ea9..8687424a 100644 --- a/TNTLeague/src/paper-plugin.yml +++ b/TNTLeague/src/paper-plugin.yml @@ -4,10 +4,7 @@ main: de.steamwar.tntleague.TNTLeague load: POSTWORLD api-version: '1.21' dependencies: - server: - SpigotCore: - required: true - load: BEFORE - KotlinCore: - required: true - load: BEFORE \ No newline at end of file + - name: SpigotCore + required: true + - name: KotlinCore + required: true \ No newline at end of file From 27bd7be776605d4e88e52e724bab481cfb957f9c Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Thu, 14 Nov 2024 22:55:03 +0100 Subject: [PATCH 05/14] Fix Translations --- TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt | 13 +++---------- .../de/steamwar/tntleague/events/GlobalListener.kt | 8 -------- TNTLeague/src/paper-plugin.yml | 11 +++++++---- 3 files changed, 10 insertions(+), 22 deletions(-) diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt index 9e6e8a34..cf4de2e3 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt @@ -1,5 +1,6 @@ package de.steamwar.tntleague +import de.steamwar.kotlin.message.ComponentMessage import de.steamwar.tntleague.command.AcceptCommand import de.steamwar.tntleague.command.InviteCommand import de.steamwar.tntleague.command.LeaveCommand @@ -14,6 +15,7 @@ import org.bukkit.plugin.java.JavaPlugin import java.util.* lateinit var plugin: TNTLeague +lateinit var message: ComponentMessage class TNTLeague : JavaPlugin() { init { @@ -24,16 +26,7 @@ class TNTLeague : JavaPlugin() { saveResource("config.yml", false) saveDefaultConfig() - val registry = TranslationRegistry.create(Key.key("steamwar:tntleague")) - - val bundleDe = ResourceBundle.getBundle("de.steamwar.tntleague.TNTLeague", Locale.GERMAN, UTF8ResourceBundleControl()) - val bundleEn = ResourceBundle.getBundle("de.steamwar.tntleague.TNTLeague", Locale.US, UTF8ResourceBundleControl()) - registry.defaultLocale(Locale.GERMAN) - - registry.registerAll(Locale.GERMAN, bundleDe, true) - registry.registerAll(Locale.US, bundleEn, true) - - GlobalTranslator.translator().addSource(registry) + message = ComponentMessage("de.steamwar.tntleague.TNTLeague", classLoader) server.pluginManager.registerEvents(LobbyListener, this) server.pluginManager.registerEvents(GlobalListener, this) diff --git a/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt index f2930adb..a2a8fc9f 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt @@ -6,7 +6,6 @@ import de.steamwar.tntleague.game.TNTLeagueTeam import de.steamwar.tntleague.inventory.SWInventoryHolder import de.steamwar.tntleague.plugin import de.steamwar.tntleague.util.* -import io.papermc.paper.event.player.AsyncChatEvent import org.bukkit.GameMode import org.bukkit.Material import org.bukkit.event.EventHandler @@ -78,11 +77,4 @@ object GlobalListener: Listener { null -> e.respawnLocation = TNTLeagueWorldConfig.lobby } } - - @EventHandler - fun onChat(e: AsyncChatEvent) { - e.renderer { source, sourceDisplayName, message, _ -> - translate("chat", sourceDisplayName.colorByTeam(TNTLeagueGame.getTeam(source)), message).basic() - } - } } \ No newline at end of file diff --git a/TNTLeague/src/paper-plugin.yml b/TNTLeague/src/paper-plugin.yml index 8687424a..4e740ea9 100644 --- a/TNTLeague/src/paper-plugin.yml +++ b/TNTLeague/src/paper-plugin.yml @@ -4,7 +4,10 @@ main: de.steamwar.tntleague.TNTLeague load: POSTWORLD api-version: '1.21' dependencies: - - name: SpigotCore - required: true - - name: KotlinCore - required: true \ No newline at end of file + server: + SpigotCore: + required: true + load: BEFORE + KotlinCore: + required: true + load: BEFORE \ No newline at end of file From 2e9dbfe8b8edae671c22bb0eabc7f50729950790 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Fri, 15 Nov 2024 21:35:10 +0100 Subject: [PATCH 06/14] Fixes... --- ...eague_en_US.properties => TNTLeague.properties} | 2 ++ ...ue_de_DE.properties => TNTLeague_de.properties} | 2 +- .../de/steamwar/tntleague/events/IngameListener.kt | 14 ++++++++++++++ .../de/steamwar/tntleague/game/TNTLeagueTeam.kt | 2 ++ .../steamwar/tntleague/util/TNTLeagueScoreboard.kt | 2 ++ 5 files changed, 21 insertions(+), 1 deletion(-) rename TNTLeague/src/de/steamwar/tntleague/{TNTLeague_en_US.properties => TNTLeague.properties} (91%) rename TNTLeague/src/de/steamwar/tntleague/{TNTLeague_de_DE.properties => TNTLeague_de.properties} (92%) diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_en_US.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties similarity index 91% rename from TNTLeague/src/de/steamwar/tntleague/TNTLeague_en_US.properties rename to TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties index af68acab..9ab3eb16 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_en_US.properties +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties @@ -22,6 +22,8 @@ dealerPrice=Price: {0} Coins scoreboardTarget=Target: {0} scoreboardTime=Time: {0}:{1} +scoreboardCoins=Coins: {0} + ready=Ready notReady=Not ready isReady=Team {0} is ready! diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de_DE.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties similarity index 92% rename from TNTLeague/src/de/steamwar/tntleague/TNTLeague_de_DE.properties rename to TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties index 3da91f61..4765cba2 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de_DE.properties +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties @@ -10,7 +10,7 @@ notEnoughCoins=Du hast nicht genug Coins um dir das zu kaufen! gameStarting=Das Spiel beginnt in {0} Sekunden! gameStart=Start in {0} gameStarted=Das Spiel beginnt! -timeRemaining=noch {0} Minuten! +timeRemaining=noch {0} Minuten! gameEnded=Das Spiel ist vorbei! draw=Keiner hat gewonnen! chat={0}» {1} diff --git a/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt index bb9b0415..13e8e1b0 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt @@ -13,11 +13,14 @@ import org.bukkit.entity.EntityType import org.bukkit.event.EventHandler import org.bukkit.event.Listener import org.bukkit.event.entity.EntityExplodeEvent +import org.bukkit.event.entity.EntityPickupItemEvent import org.bukkit.event.entity.PlayerDeathEvent +import org.bukkit.event.player.PlayerAttemptPickupItemEvent import org.bukkit.event.player.PlayerDropItemEvent import org.bukkit.event.player.PlayerInteractEntityEvent import org.bukkit.event.player.PlayerJoinEvent import org.bukkit.event.player.PlayerMoveEvent +import org.bukkit.event.player.PlayerPickupItemEvent import org.bukkit.event.player.PlayerQuitEvent object IngameListener: Listener { @@ -63,6 +66,17 @@ object IngameListener: Listener { } } + @EventHandler + fun onPickupCoins(e: PlayerAttemptPickupItemEvent) { + if (e.item.itemStack == DealerInventory.coins) { + TNTLeagueGame.getTeam(e.player)?.coins?.plus(e.item.itemStack.amount) + + e.item.itemStack.amount = 0 + e.isCancelled = true + e.flyAtPlayer = true + } + } + private fun getTeamByTargetLocation(location: Location): TNTLeagueTeam? = when (location) { in TNTLeagueWorldConfig.redTeam.target -> TNTLeagueGame.redTeam diff --git a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt index cafa70c2..2de35e2e 100644 --- a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt +++ b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt @@ -63,6 +63,8 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va } } + var coins: Int = 0 + val opposite: TNTLeagueTeam get() = when (team) { Team.BLUE -> TNTLeagueGame.redTeam diff --git a/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt b/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt index 7b8da592..20151e84 100644 --- a/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt +++ b/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt @@ -47,6 +47,8 @@ data class TNTLeagueScoreboard(val p: Player): ScoreboardCallback { lines.add(translate("scoreboardTeam", translate(name).colorByTeam(this), (targetedBlocks - damagedBlocks).toString().yellow()).gray()) } + TNTLeagueGame.getTeam(p)?.coins?.let { lines.add(translate("scoreboardCoins", it.toString().yellow()).gray()) } + lines.add(Component.space().gray()) return lines From 78853c70f82bc272428a9bedce62819c779d83ad Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Fri, 15 Nov 2024 23:42:08 +0100 Subject: [PATCH 07/14] Fixes and Update Copyright --- .../kotlin/message/ComponentMessage.kt | 10 ++++- TNTLeague/build.gradle.kts | 19 +++++++++ .../src/de/steamwar/tntleague/TNTLeague.kt | 19 +++++++++ .../steamwar/tntleague/TNTLeague.properties | 23 +++++++++- .../tntleague/TNTLeague_de.properties | 22 ++++++++-- .../tntleague/command/LeaveCommand.kt | 2 +- .../tntleague/config/TNTLeagueConfig.kt | 19 +++++++++ .../tntleague/config/TNTLeagueWorldConfig.kt | 19 +++++++++ .../tntleague/events/DummyListener.kt | 3 +- .../tntleague/events/GlobalListener.kt | 19 +++++++++ .../tntleague/events/IngameListener.kt | 29 +++++++++---- .../tntleague/events/LobbyListener.kt | 42 ++++++++++++++----- .../steamwar/tntleague/game/TNTLeagueGame.kt | 19 +++++++++ .../steamwar/tntleague/game/TNTLeagueTeam.kt | 19 +++++++++ .../tntleague/inventory/DealerInventory.kt | 26 +++++++++++- .../tntleague/inventory/SWInventoryHolder.kt | 19 +++++++++ .../src/de/steamwar/tntleague/util/Area.kt | 19 +++++++++ .../src/de/steamwar/tntleague/util/Style.kt | 19 +++++++++ .../tntleague/util/TNTLeagueScoreboard.kt | 18 ++++++-- 19 files changed, 332 insertions(+), 33 deletions(-) diff --git a/KotlinCore/src/de/steamwar/kotlin/message/ComponentMessage.kt b/KotlinCore/src/de/steamwar/kotlin/message/ComponentMessage.kt index 85d41b3b..e1e1023b 100644 --- a/KotlinCore/src/de/steamwar/kotlin/message/ComponentMessage.kt +++ b/KotlinCore/src/de/steamwar/kotlin/message/ComponentMessage.kt @@ -32,5 +32,13 @@ class ComponentMessage(private val resourceBundleName: String, private val class override fun name(): Key = Key.key("steamwar", resourceBundleName) - override fun translate(key: String, locale: Locale): MessageFormat = MessageFormat(ResourceBundle.getBundle(resourceBundleName, locale, classLoader).getString(key), locale) + override fun translate(key: String, locale: Locale): MessageFormat? { + val rb = ResourceBundle.getBundle(resourceBundleName, locale, classLoader) + + return if (rb.containsKey(key)) { + MessageFormat(rb.getString(key), locale) + } else { + null + } + } } diff --git a/TNTLeague/build.gradle.kts b/TNTLeague/build.gradle.kts index 0d7fc472..e8b8253a 100644 --- a/TNTLeague/build.gradle.kts +++ b/TNTLeague/build.gradle.kts @@ -1,3 +1,22 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2024 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + plugins { steamwar.kotlin } diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt index cf4de2e3..9532fb7e 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt @@ -1,3 +1,22 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2024 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + package de.steamwar.tntleague import de.steamwar.kotlin.message.ComponentMessage diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties index 9ab3eb16..46d8dd35 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties @@ -1,3 +1,22 @@ +# +# This file is a part of the SteamWar software. +# +# Copyright (C) 2024 SteamWar.de-Serverteam +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + join={0} joined the game! joinTeam={0} joined the {1} team! quit={0} left the game! @@ -18,11 +37,11 @@ timeRemaining={0} minutes remaining! gameEnded=The game has ended! draw=The game ended in a draw! dealer=Shopkeeper -dealerPrice=Price: {0} Coins +dealerItem={0} {1} -scoreboardTarget=Target: {0} scoreboardTime=Time: {0}:{1} scoreboardCoins=Coins: {0} +scoreboardTeam=Team {0}: {1} ready=Ready notReady=Not ready diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties index 4765cba2..21e48240 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties @@ -1,3 +1,22 @@ +# +# This file is a part of the SteamWar software. +# +# Copyright (C) 2024 SteamWar.de-Serverteam +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + join={0} ist dem Spiel beigetreten! joinTeam={0} ist dem {1} team begetreten! quit={0} hat das Spiel verlassen! @@ -13,14 +32,11 @@ gameStarted=Das Spiel beginnt! timeRemaining=noch {0} Minuten! gameEnded=Das Spiel ist vorbei! draw=Keiner hat gewonnen! -chat={0}» {1} dealer=Händler -dealerItem={0} {1} dealerPrice=Kosten: {0} Coins scoreboardTarget=Ziel: {0} scoreboardTime=Zeit: {0}:{1} -scoreboardTeam=Team {0}: {1} ready=Bereit notReady=Nicht bereit isReady=Team {0} ist bereit! diff --git a/TNTLeague/src/de/steamwar/tntleague/command/LeaveCommand.kt b/TNTLeague/src/de/steamwar/tntleague/command/LeaveCommand.kt index aeb96492..196f4312 100644 --- a/TNTLeague/src/de/steamwar/tntleague/command/LeaveCommand.kt +++ b/TNTLeague/src/de/steamwar/tntleague/command/LeaveCommand.kt @@ -26,5 +26,5 @@ import org.bukkit.entity.Player object LeaveCommand: SWCommand("leave", "l") { @Register - fun leave(player: Player) = TNTLeagueGame.getTeam(player)?.remove(player) + fun leave(player: Player) = TNTLeagueGame.getTeam(player)?.remove(player) ?: Unit } \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueConfig.kt b/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueConfig.kt index 30fb8353..cf48afe7 100644 --- a/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueConfig.kt +++ b/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueConfig.kt @@ -1,3 +1,22 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2024 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + package de.steamwar.tntleague.config import de.steamwar.tntleague.plugin diff --git a/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueWorldConfig.kt b/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueWorldConfig.kt index faaf73aa..acfb3ac4 100644 --- a/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueWorldConfig.kt +++ b/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueWorldConfig.kt @@ -1,3 +1,22 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2024 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + package de.steamwar.tntleague.config import de.steamwar.tntleague.plugin diff --git a/TNTLeague/src/de/steamwar/tntleague/events/DummyListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/DummyListener.kt index f9f616de..917ba5be 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/DummyListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/DummyListener.kt @@ -21,5 +21,4 @@ package de.steamwar.tntleague.events import org.bukkit.event.Listener -object DummyListener: Listener { -} \ No newline at end of file +object DummyListener: Listener \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt index a2a8fc9f..31f2e7e2 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt @@ -1,3 +1,22 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2024 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + package de.steamwar.tntleague.events import de.steamwar.tntleague.config.TNTLeagueWorldConfig diff --git a/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt index 13e8e1b0..4d6f6704 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt @@ -1,3 +1,22 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2024 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + package de.steamwar.tntleague.events import de.steamwar.scoreboard.SWScoreboard @@ -13,15 +32,11 @@ import org.bukkit.entity.EntityType import org.bukkit.event.EventHandler import org.bukkit.event.Listener import org.bukkit.event.entity.EntityExplodeEvent -import org.bukkit.event.entity.EntityPickupItemEvent -import org.bukkit.event.entity.PlayerDeathEvent import org.bukkit.event.player.PlayerAttemptPickupItemEvent import org.bukkit.event.player.PlayerDropItemEvent import org.bukkit.event.player.PlayerInteractEntityEvent import org.bukkit.event.player.PlayerJoinEvent import org.bukkit.event.player.PlayerMoveEvent -import org.bukkit.event.player.PlayerPickupItemEvent -import org.bukkit.event.player.PlayerQuitEvent object IngameListener: Listener { @@ -29,7 +44,7 @@ object IngameListener: Listener { fun onEntityInteract(e: PlayerInteractEntityEvent) { if (e.player.gameMode == GameMode.SPECTATOR) return - if(e.rightClicked.type == EntityType.VILLAGER) { + if(e.rightClicked.type == EntityType.WANDERING_TRADER) { e.isCancelled = true e.player.openInventory(DealerInventory(e.player).getInventory()) } @@ -68,8 +83,8 @@ object IngameListener: Listener { @EventHandler fun onPickupCoins(e: PlayerAttemptPickupItemEvent) { - if (e.item.itemStack == DealerInventory.coins) { - TNTLeagueGame.getTeam(e.player)?.coins?.plus(e.item.itemStack.amount) + if (e.item.itemStack.isSimilar(DealerInventory.coins)) { + TNTLeagueGame.getTeam(e.player)?.coins = e.item.itemStack.amount + (TNTLeagueGame.getTeam(e.player)?.coins ?: 0) e.item.itemStack.amount = 0 e.isCancelled = true diff --git a/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt index e88cfbaa..7074e73c 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt @@ -1,22 +1,33 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2024 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + package de.steamwar.tntleague.events import de.steamwar.tntleague.game.TNTLeagueGame -import de.steamwar.tntleague.plugin -import de.steamwar.tntleague.util.basic -import de.steamwar.tntleague.util.colorByTeam -import de.steamwar.tntleague.util.translate -import de.steamwar.tntleague.util.yellow -import io.papermc.paper.util.Tick +import org.bukkit.GameMode +import org.bukkit.entity.EntityType import org.bukkit.event.EventHandler import org.bukkit.event.EventPriority import org.bukkit.event.Listener -import org.bukkit.event.block.Action import org.bukkit.event.entity.EntityDamageEvent import org.bukkit.event.inventory.InventoryClickEvent -import org.bukkit.event.player.PlayerDropItemEvent -import org.bukkit.event.player.PlayerInteractEvent -import org.bukkit.event.player.PlayerJoinEvent -import org.bukkit.event.player.PlayerQuitEvent +import org.bukkit.event.player.* object LobbyListener: Listener { @@ -58,4 +69,13 @@ object LobbyListener: Listener { e.isCancelled = true } } + + @EventHandler + fun onEntityInteract(e: PlayerInteractEntityEvent) { + if (e.player.gameMode == GameMode.SPECTATOR) return + + if(e.rightClicked.type == EntityType.WANDERING_TRADER) { + e.isCancelled = true + } + } } \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt index 59d4e65c..28d6e26a 100644 --- a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt +++ b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt @@ -1,3 +1,22 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2024 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + package de.steamwar.tntleague.game import de.steamwar.scoreboard.SWScoreboard diff --git a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt index 2de35e2e..93e1f208 100644 --- a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt +++ b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt @@ -1,3 +1,22 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2024 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + package de.steamwar.tntleague.game import de.steamwar.tntleague.config.TNTLeagueWorldConfig diff --git a/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt b/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt index 04c1c288..cdffa7a8 100644 --- a/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt +++ b/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt @@ -1,6 +1,26 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2024 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + package de.steamwar.tntleague.inventory import de.steamwar.tntleague.config.TNTLeagueConfig +import de.steamwar.tntleague.game.TNTLeagueGame import de.steamwar.tntleague.plugin import de.steamwar.tntleague.util.* import net.kyori.adventure.sound.Sound @@ -24,13 +44,15 @@ class DealerInventory(player: Player): SWInventoryHolder() { val price = item.second.price * if (it.isShiftClick) 5 else 1 val amount = item.second.amount * if (it.isShiftClick) 5 else 1 - if (!player.inventory.containsAtLeast(coins, price)) { + val team = TNTLeagueGame.getTeam(player) ?: return@to + + if (team.coins < price) { player.sendMessage(translate("notEnoughCoins").error()) player.playSound(Sound.sound(org.bukkit.Sound.ENTITY_VILLAGER_HURT.key, net.kyori.adventure.sound.Sound.Source.MASTER, 1f, 1f)) return@to } - player.inventory.removeItem(coins.asQuantity(price)) + team.coins -= price player.inventory.addItem(ItemStack.of(item.first.type, amount)) } } diff --git a/TNTLeague/src/de/steamwar/tntleague/inventory/SWInventoryHolder.kt b/TNTLeague/src/de/steamwar/tntleague/inventory/SWInventoryHolder.kt index 5d89e541..4a0619d2 100644 --- a/TNTLeague/src/de/steamwar/tntleague/inventory/SWInventoryHolder.kt +++ b/TNTLeague/src/de/steamwar/tntleague/inventory/SWInventoryHolder.kt @@ -1,3 +1,22 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2024 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + package de.steamwar.tntleague.inventory import org.bukkit.event.inventory.InventoryClickEvent diff --git a/TNTLeague/src/de/steamwar/tntleague/util/Area.kt b/TNTLeague/src/de/steamwar/tntleague/util/Area.kt index 0b27d227..8808b628 100644 --- a/TNTLeague/src/de/steamwar/tntleague/util/Area.kt +++ b/TNTLeague/src/de/steamwar/tntleague/util/Area.kt @@ -1,3 +1,22 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2024 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + package de.steamwar.tntleague.util import org.bukkit.Location diff --git a/TNTLeague/src/de/steamwar/tntleague/util/Style.kt b/TNTLeague/src/de/steamwar/tntleague/util/Style.kt index 3ef28b9a..fab87935 100644 --- a/TNTLeague/src/de/steamwar/tntleague/util/Style.kt +++ b/TNTLeague/src/de/steamwar/tntleague/util/Style.kt @@ -1,3 +1,22 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2024 SteamWar.de-Serverteam + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + package de.steamwar.tntleague.util import de.steamwar.tntleague.game.TNTLeagueTeam diff --git a/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt b/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt index 20151e84..c7a68885 100644 --- a/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt +++ b/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt @@ -22,6 +22,7 @@ package de.steamwar.tntleague.util import de.steamwar.scoreboard.ScoreboardCallback import de.steamwar.tntleague.config.targetedBlocks import de.steamwar.tntleague.game.TNTLeagueGame +import de.steamwar.tntleague.game.TNTLeagueTeam import net.kyori.adventure.text.Component import org.bukkit.entity.Player import kotlin.collections.HashMap @@ -40,14 +41,23 @@ data class TNTLeagueScoreboard(val p: Player): ScoreboardCallback { lines.add(Component.space().yellow()) - with(TNTLeagueGame.blueTeam) { - lines.add(translate("scoreboardTeam", translate(name).colorByTeam(this), (targetedBlocks - damagedBlocks).toString().yellow()).gray()) + when (val team = TNTLeagueGame.getTeam(p)) { + is TNTLeagueTeam -> lines.add(translate("scoreboardCoins", team.coins.toString().yellow()).gray()) + else -> lines.add(translate("scoreboardCoins", + Component.text(TNTLeagueGame.blueTeam.coins.toString()).colorByTeam(TNTLeagueGame.blueTeam) + .append(Component.text("/").darkGray()) + .append(Component.text(TNTLeagueGame.redTeam.coins.toString()).colorByTeam(TNTLeagueGame.redTeam)) + ).gray()) } + + lines.add(Component.space().red()) + with(TNTLeagueGame.redTeam) { lines.add(translate("scoreboardTeam", translate(name).colorByTeam(this), (targetedBlocks - damagedBlocks).toString().yellow()).gray()) } - - TNTLeagueGame.getTeam(p)?.coins?.let { lines.add(translate("scoreboardCoins", it.toString().yellow()).gray()) } + with(TNTLeagueGame.blueTeam) { + lines.add(translate("scoreboardTeam", translate(name).colorByTeam(this), (targetedBlocks - damagedBlocks).toString().yellow()).gray()) + } lines.add(Component.space().gray()) From 4bb1bc0cbd7e27d4ffa57b34af6329415176ffb5 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Sun, 17 Nov 2024 12:04:07 +0100 Subject: [PATCH 08/14] Fixes, changes and Refactors --- .../kotlin}/inventory/SWInventoryHolder.kt | 2 +- .../kotlin/message/LanguageListener.kt | 24 +++++++---- .../src/de/steamwar/kotlin/message}/Style.kt | 40 +++++++++---------- .../src/de/steamwar/kotlin}/util/Area.kt | 2 +- .../src/de/steamwar/tntleague/TNTLeague.kt | 16 ++++++++ .../tntleague/command/InviteCommand.kt | 6 ++- .../tntleague/config/TNTLeagueWorldConfig.kt | 5 +-- .../tntleague/events/GlobalListener.kt | 8 +++- .../tntleague/events/LobbyListener.kt | 3 +- .../steamwar/tntleague/game/TNTLeagueGame.kt | 7 ++-- .../steamwar/tntleague/game/TNTLeagueTeam.kt | 12 +++--- .../tntleague/inventory/DealerInventory.kt | 5 +-- .../tntleague/util/TNTLeagueScoreboard.kt | 6 ++- 13 files changed, 85 insertions(+), 51 deletions(-) rename {TNTLeague/src/de/steamwar/tntleague => KotlinCore/src/de/steamwar/kotlin}/inventory/SWInventoryHolder.kt (98%) rename {TNTLeague/src/de/steamwar/tntleague/util => KotlinCore/src/de/steamwar/kotlin/message}/Style.kt (76%) rename {TNTLeague/src/de/steamwar/tntleague => KotlinCore/src/de/steamwar/kotlin}/util/Area.kt (98%) diff --git a/TNTLeague/src/de/steamwar/tntleague/inventory/SWInventoryHolder.kt b/KotlinCore/src/de/steamwar/kotlin/inventory/SWInventoryHolder.kt similarity index 98% rename from TNTLeague/src/de/steamwar/tntleague/inventory/SWInventoryHolder.kt rename to KotlinCore/src/de/steamwar/kotlin/inventory/SWInventoryHolder.kt index 4a0619d2..3afb3183 100644 --- a/TNTLeague/src/de/steamwar/tntleague/inventory/SWInventoryHolder.kt +++ b/KotlinCore/src/de/steamwar/kotlin/inventory/SWInventoryHolder.kt @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package de.steamwar.tntleague.inventory +package de.steamwar.kotlin.inventory import org.bukkit.event.inventory.InventoryClickEvent import org.bukkit.event.inventory.InventoryCloseEvent diff --git a/KotlinCore/src/de/steamwar/kotlin/message/LanguageListener.kt b/KotlinCore/src/de/steamwar/kotlin/message/LanguageListener.kt index 0824b416..918248f0 100644 --- a/KotlinCore/src/de/steamwar/kotlin/message/LanguageListener.kt +++ b/KotlinCore/src/de/steamwar/kotlin/message/LanguageListener.kt @@ -19,31 +19,41 @@ package de.steamwar.kotlin.message +import com.comphenix.tinyprotocol.Reflection import de.steamwar.kotlin.KotlinCore import de.steamwar.sql.SteamwarUser import org.bukkit.Bukkit -import org.bukkit.craftbukkit.v1_21_R1.entity.CraftPlayer +import org.bukkit.entity.Player import org.bukkit.event.EventHandler import org.bukkit.event.EventPriority import org.bukkit.event.Listener import org.bukkit.event.player.PlayerJoinEvent import org.bukkit.event.player.PlayerLocaleChangeEvent +import java.util.Locale object LanguageListener: Listener { + private val getHandleMethod = Reflection.getMethod("{obc}.entity.CraftPlayer", "getHandle") + private val localeField = Reflection.getField("{nms.server.level}.EntityPlayer", "adventure\$locale", Locale::class.java) + + private val Player.handle + get() = getHandleMethod.invoke(this) + + private var Player.adventureLocale + get() = localeField.get(handle) as Locale + set(value) { + localeField.set(handle, value) + } + @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) fun onPlayerJoin(event: PlayerJoinEvent) { - val user = SteamwarUser.get(event.player.uniqueId) - val player = event.player as CraftPlayer - player.handle.`adventure$locale` = user.locale + event.player.adventureLocale = SteamwarUser.get(event.player.uniqueId).locale } @EventHandler fun onPlayerConfig(event: PlayerLocaleChangeEvent) { Bukkit.getScheduler().runTask(KotlinCore.plugin, Runnable { - val user = SteamwarUser.get(event.player.uniqueId) - val player = event.player as CraftPlayer - player.handle.`adventure$locale` = user.locale + event.player.adventureLocale = SteamwarUser.get(event.player.uniqueId).locale }) } } \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/util/Style.kt b/KotlinCore/src/de/steamwar/kotlin/message/Style.kt similarity index 76% rename from TNTLeague/src/de/steamwar/tntleague/util/Style.kt rename to KotlinCore/src/de/steamwar/kotlin/message/Style.kt index fab87935..79603241 100644 --- a/TNTLeague/src/de/steamwar/tntleague/util/Style.kt +++ b/KotlinCore/src/de/steamwar/kotlin/message/Style.kt @@ -17,9 +17,8 @@ * along with this program. If not, see . */ -package de.steamwar.tntleague.util +package de.steamwar.kotlin.message -import de.steamwar.tntleague.game.TNTLeagueTeam import net.kyori.adventure.text.Component import net.kyori.adventure.text.ComponentLike import net.kyori.adventure.text.TranslatableComponent @@ -31,22 +30,26 @@ import net.kyori.adventure.translation.GlobalTranslator import org.bukkit.entity.Player import java.util.Locale -val prefix = Component.text("Steam").yellow() - .append(Component.text("War").darkGray()) - .appendSpace() +object StyleConfig { + var prefix = Component.text("Steam").yellow() + .append(Component.text("War").darkGray()) + .appendSpace() + set(value) { + field = value + chatPrefix = value + .append(Component.text("»").darkGray()) + .appendSpace() + } + var chatPrefix = prefix + .append(Component.text("»").darkGray()) + .appendSpace() +} -val tntLeaguePrefix = Component.text("TNT").color(NamedTextColor.DARK_RED) - .append(Component.text("League").color(NamedTextColor.GOLD)) +fun TranslatableComponent.basic(): Component = StyleConfig.chatPrefix.append(this.gray()) -val tntLeagueChatPrefix: Component = tntLeaguePrefix - .append(Component.text("»").darkGray()) - .appendSpace() +fun TranslatableComponent.error(): Component = StyleConfig.chatPrefix.append(this.red()) -fun TranslatableComponent.basic(): Component = tntLeagueChatPrefix.append(this.gray()) - -fun TranslatableComponent.error(): Component = tntLeagueChatPrefix.append(this.red()) - -fun TranslatableComponent.success(): Component = tntLeagueChatPrefix.append(this.green()) +fun TranslatableComponent.success(): Component = StyleConfig.chatPrefix.append(this.green()) fun String.component(): Component = Component.text(this) @@ -80,13 +83,10 @@ fun translate(key: String, vararg args: ComponentLike): TranslatableComponent = fun Component.reset(): Component = this.style(Style.empty()) -fun Component.colorByTeam(team: TNTLeagueTeam?) = when (team) { - null -> this.gray() - else -> this.color(team.color) -} - fun Component.translate(locale: Locale): Component = GlobalTranslator.render(this, locale) fun Component.translate(p: Player): Component = this.translate(p.locale()) fun Component.toLegacy(): String = LegacyComponentSerializer.legacySection().serialize(this) + +fun Component.space(): Component = append(Component.space()) diff --git a/TNTLeague/src/de/steamwar/tntleague/util/Area.kt b/KotlinCore/src/de/steamwar/kotlin/util/Area.kt similarity index 98% rename from TNTLeague/src/de/steamwar/tntleague/util/Area.kt rename to KotlinCore/src/de/steamwar/kotlin/util/Area.kt index 8808b628..5b96519f 100644 --- a/TNTLeague/src/de/steamwar/tntleague/util/Area.kt +++ b/KotlinCore/src/de/steamwar/kotlin/util/Area.kt @@ -17,7 +17,7 @@ * along with this program. If not, see . */ -package de.steamwar.tntleague.util +package de.steamwar.kotlin.util import org.bukkit.Location import org.bukkit.block.Block diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt index 9532fb7e..50572805 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt @@ -20,13 +20,19 @@ package de.steamwar.tntleague import de.steamwar.kotlin.message.ComponentMessage +import de.steamwar.kotlin.message.StyleConfig +import de.steamwar.kotlin.message.darkGray +import de.steamwar.kotlin.message.gray import de.steamwar.tntleague.command.AcceptCommand import de.steamwar.tntleague.command.InviteCommand import de.steamwar.tntleague.command.LeaveCommand import de.steamwar.tntleague.command.RemoveCommand import de.steamwar.tntleague.events.GlobalListener import de.steamwar.tntleague.events.LobbyListener +import de.steamwar.tntleague.game.TNTLeagueTeam import net.kyori.adventure.key.Key +import net.kyori.adventure.text.Component +import net.kyori.adventure.text.format.NamedTextColor import net.kyori.adventure.translation.GlobalTranslator import net.kyori.adventure.translation.TranslationRegistry import net.kyori.adventure.util.UTF8ResourceBundleControl @@ -36,9 +42,14 @@ import java.util.* lateinit var plugin: TNTLeague lateinit var message: ComponentMessage +val tntLeaguePrefix = Component.text("TNT").color(NamedTextColor.DARK_RED) + .append(Component.text("League").color(NamedTextColor.GOLD)) + class TNTLeague : JavaPlugin() { init { plugin = this + + StyleConfig.prefix = tntLeaguePrefix } override fun onEnable() { @@ -58,3 +69,8 @@ class TNTLeague : JavaPlugin() { LeaveCommand.register() } } + +fun Component.colorByTeam(team: TNTLeagueTeam?) = when (team) { + null -> this.gray() + else -> this.color(team.color) +} diff --git a/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt b/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt index fdfaf359..eea883c6 100644 --- a/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt +++ b/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt @@ -21,8 +21,9 @@ package de.steamwar.tntleague.command import de.steamwar.command.SWCommand import de.steamwar.command.TypeValidator +import de.steamwar.kotlin.message.* +import de.steamwar.tntleague.colorByTeam import de.steamwar.tntleague.game.TNTLeagueGame -import de.steamwar.tntleague.util.* import net.kyori.adventure.text.event.ClickEvent import net.kyori.adventure.text.event.HoverEvent import org.bukkit.entity.Player @@ -37,7 +38,8 @@ object InviteCommand: SWCommand("invite") { val team = TNTLeagueGame.getTeam(sender)!! team.invites.add(target) - target.sendMessage(translate("invited", sender.name.yellow(), translate(team.name).colorByTeam(team)).basic().clickEvent( + target.sendMessage( + translate("invited", sender.name.yellow(), translate(team.name).colorByTeam(team)).basic().clickEvent( ClickEvent.callback { if (target !in team.invites) return@callback diff --git a/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueWorldConfig.kt b/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueWorldConfig.kt index acfb3ac4..ae863071 100644 --- a/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueWorldConfig.kt +++ b/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueWorldConfig.kt @@ -20,13 +20,12 @@ package de.steamwar.tntleague.config import de.steamwar.tntleague.plugin -import de.steamwar.tntleague.util.Area -import de.steamwar.tntleague.util.translate +import de.steamwar.kotlin.util.Area +import de.steamwar.kotlin.message.translate import org.bukkit.Location import org.bukkit.Material import org.bukkit.configuration.ConfigurationSection import org.bukkit.configuration.file.YamlConfiguration -import org.bukkit.entity.Villager import org.bukkit.entity.WanderingTrader import java.io.File diff --git a/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt index 31f2e7e2..23cf69f4 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt @@ -19,12 +19,15 @@ package de.steamwar.tntleague.events +import de.steamwar.kotlin.message.basic +import de.steamwar.kotlin.message.bold +import de.steamwar.kotlin.message.translate +import de.steamwar.tntleague.colorByTeam import de.steamwar.tntleague.config.TNTLeagueWorldConfig import de.steamwar.tntleague.game.TNTLeagueGame import de.steamwar.tntleague.game.TNTLeagueTeam -import de.steamwar.tntleague.inventory.SWInventoryHolder +import de.steamwar.kotlin.inventory.SWInventoryHolder import de.steamwar.tntleague.plugin -import de.steamwar.tntleague.util.* import org.bukkit.GameMode import org.bukkit.Material import org.bukkit.event.EventHandler @@ -85,6 +88,7 @@ object GlobalListener: Listener { fun onPlayerDeath(e: PlayerDeathEvent) { e.deathMessage(null) e.drops.clear() + e.keepInventory = true e.itemsToKeep.removeIf { it.type != Material.DIAMOND_PICKAXE } } diff --git a/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt index 7074e73c..b4073f1c 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt @@ -41,8 +41,7 @@ object LobbyListener: Listener { @EventHandler(priority = EventPriority.LOWEST) fun onPlayerQuit(e: PlayerQuitEvent) { - val team = TNTLeagueGame.getTeam(e.player) ?: return - team.leave(e.player) + TNTLeagueGame.getTeam(e.player)?.leave(e.player) } @EventHandler diff --git a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt index 28d6e26a..2a83b9ec 100644 --- a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt +++ b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt @@ -19,6 +19,8 @@ package de.steamwar.tntleague.game +import de.steamwar.kotlin.message.* +import de.steamwar.kotlin.util.Area import de.steamwar.scoreboard.SWScoreboard import de.steamwar.sql.Fight import de.steamwar.sql.FightPlayer @@ -37,12 +39,9 @@ import net.kyori.adventure.sound.Sound import org.bukkit.GameMode import org.bukkit.Location import org.bukkit.Material -import org.bukkit.block.data.type.TNT -import org.bukkit.entity.Entity import org.bukkit.entity.Item import org.bukkit.entity.Player import org.bukkit.entity.TNTPrimed -import org.bukkit.entity.Villager import org.bukkit.event.HandlerList import org.bukkit.event.Listener import org.bukkit.inventory.ItemStack @@ -181,7 +180,7 @@ object TNTLeagueGame { redTeam.invites.remove(player) getTeam(player)?.apply { members.remove(player) - if (leader == player) { + if (leader == player && members.isNotEmpty() && state == GameState.RUNNING) { win(this.opposite, WinReason.LEAVE) } } diff --git a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt index 93e1f208..f13ec602 100644 --- a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt +++ b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt @@ -19,10 +19,11 @@ package de.steamwar.tntleague.game +import de.steamwar.kotlin.message.* +import de.steamwar.tntleague.colorByTeam import de.steamwar.tntleague.config.TNTLeagueWorldConfig import de.steamwar.tntleague.config.targetedBlocks import de.steamwar.tntleague.plugin -import de.steamwar.tntleague.util.* import net.kyori.adventure.sound.Sound import net.kyori.adventure.text.format.NamedTextColor import net.kyori.adventure.text.format.TextColor @@ -31,7 +32,6 @@ import org.bukkit.Material import org.bukkit.enchantments.Enchantment import org.bukkit.entity.Player import org.bukkit.inventory.ItemStack -import java.awt.Color.green data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private val team: Team) { @@ -134,9 +134,7 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va } fun leave(player: Player) { - if (TNTLeagueGame.state == TNTLeagueGame.GameState.RUNNING) { - TNTLeagueGame.playerLeave(player) - } else { + if (TNTLeagueGame.state != TNTLeagueGame.GameState.RUNNING) { members.remove(player) if (members.isEmpty()) { @@ -146,6 +144,10 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va } if (leader == player) { leader = members.firstOrNull() + + if (leader == null && TNTLeagueGame.state == TNTLeagueGame.GameState.LOBBY) { + isReady = false + } } } } diff --git a/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt b/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt index cdffa7a8..4d098510 100644 --- a/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt +++ b/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt @@ -19,14 +19,13 @@ package de.steamwar.tntleague.inventory +import de.steamwar.kotlin.inventory.SWInventoryHolder +import de.steamwar.kotlin.message.* import de.steamwar.tntleague.config.TNTLeagueConfig import de.steamwar.tntleague.game.TNTLeagueGame import de.steamwar.tntleague.plugin -import de.steamwar.tntleague.util.* import net.kyori.adventure.sound.Sound import net.kyori.adventure.text.Component -import net.kyori.adventure.text.format.Style -import net.kyori.adventure.text.format.TextDecoration import org.bukkit.Material import org.bukkit.NamespacedKey import org.bukkit.entity.Player diff --git a/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt b/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt index c7a68885..31245584 100644 --- a/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt +++ b/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt @@ -19,10 +19,13 @@ package de.steamwar.tntleague.util +import de.steamwar.kotlin.message.* import de.steamwar.scoreboard.ScoreboardCallback +import de.steamwar.tntleague.colorByTeam import de.steamwar.tntleague.config.targetedBlocks import de.steamwar.tntleague.game.TNTLeagueGame import de.steamwar.tntleague.game.TNTLeagueTeam +import de.steamwar.tntleague.tntLeaguePrefix import net.kyori.adventure.text.Component import org.bukkit.entity.Player import kotlin.collections.HashMap @@ -43,7 +46,8 @@ data class TNTLeagueScoreboard(val p: Player): ScoreboardCallback { when (val team = TNTLeagueGame.getTeam(p)) { is TNTLeagueTeam -> lines.add(translate("scoreboardCoins", team.coins.toString().yellow()).gray()) - else -> lines.add(translate("scoreboardCoins", + else -> lines.add( + translate("scoreboardCoins", Component.text(TNTLeagueGame.blueTeam.coins.toString()).colorByTeam(TNTLeagueGame.blueTeam) .append(Component.text("/").darkGray()) .append(Component.text(TNTLeagueGame.redTeam.coins.toString()).colorByTeam(TNTLeagueGame.redTeam)) From 9415a3f21760304a42705a939e18ae3155077b1a Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Mon, 18 Nov 2024 18:02:15 +0100 Subject: [PATCH 09/14] Nits --- .../steamwar/kotlin/message/ComponentMessage.kt | 15 +++++++-------- .../steamwar/tntleague/command/InviteCommand.kt | 2 +- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/KotlinCore/src/de/steamwar/kotlin/message/ComponentMessage.kt b/KotlinCore/src/de/steamwar/kotlin/message/ComponentMessage.kt index e1e1023b..12ba5f0a 100644 --- a/KotlinCore/src/de/steamwar/kotlin/message/ComponentMessage.kt +++ b/KotlinCore/src/de/steamwar/kotlin/message/ComponentMessage.kt @@ -32,13 +32,12 @@ class ComponentMessage(private val resourceBundleName: String, private val class override fun name(): Key = Key.key("steamwar", resourceBundleName) - override fun translate(key: String, locale: Locale): MessageFormat? { - val rb = ResourceBundle.getBundle(resourceBundleName, locale, classLoader) - - return if (rb.containsKey(key)) { - MessageFormat(rb.getString(key), locale) - } else { - null + override fun translate(key: String, locale: Locale) = + ResourceBundle.getBundle(resourceBundleName, locale, classLoader).let { + if (it.containsKey(key)) { + MessageFormat(it.getString(key), locale) + } else { + null + } } - } } diff --git a/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt b/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt index eea883c6..b33806c7 100644 --- a/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt +++ b/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt @@ -55,4 +55,4 @@ object InviteCommand: SWCommand("invite") { fun isLeader(): TypeValidator { return TypeValidator { _, player, _ -> TNTLeagueGame.getTeam(player)?.leader == player} } -} \ No newline at end of file +} From ec990cb52abc8798c89d283fa10f6c4539fe769d Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Sun, 24 Nov 2024 21:35:13 +0100 Subject: [PATCH 10/14] Remove Component Messages --- .../src/de/steamwar/kotlin/KotlinCore.kt | 3 +- .../kotlin/message/ComponentMessage.kt | 43 --------- .../kotlin/message/LanguageListener.kt | 59 ------------ .../src/de/steamwar/kotlin/message/Style.kt | 92 ------------------- .../src/de/steamwar/tntleague/TNTLeague.kt | 22 ++--- .../steamwar/tntleague/TNTLeague.properties | 55 +++++------ .../tntleague/TNTLeague_de.properties | 45 +++++---- .../tntleague/command/InviteCommand.kt | 19 ++-- .../tntleague/config/TNTLeagueWorldConfig.kt | 4 +- .../tntleague/events/GlobalListener.kt | 9 +- .../steamwar/tntleague/game/TNTLeagueGame.kt | 28 +++--- .../steamwar/tntleague/game/TNTLeagueTeam.kt | 29 +++--- .../tntleague/inventory/DealerInventory.kt | 22 +++-- .../tntleague/util/TNTLeagueScoreboard.kt | 34 +++---- 14 files changed, 115 insertions(+), 349 deletions(-) delete mode 100644 KotlinCore/src/de/steamwar/kotlin/message/ComponentMessage.kt delete mode 100644 KotlinCore/src/de/steamwar/kotlin/message/LanguageListener.kt delete mode 100644 KotlinCore/src/de/steamwar/kotlin/message/Style.kt diff --git a/KotlinCore/src/de/steamwar/kotlin/KotlinCore.kt b/KotlinCore/src/de/steamwar/kotlin/KotlinCore.kt index 89aa1b34..1c4bc406 100644 --- a/KotlinCore/src/de/steamwar/kotlin/KotlinCore.kt +++ b/KotlinCore/src/de/steamwar/kotlin/KotlinCore.kt @@ -19,7 +19,6 @@ package de.steamwar.kotlin -import de.steamwar.kotlin.message.LanguageListener import org.bukkit.plugin.java.JavaPlugin class KotlinCore : JavaPlugin() { @@ -33,7 +32,7 @@ class KotlinCore : JavaPlugin() { } override fun onEnable() { - server.pluginManager.registerEvents(LanguageListener, this) + } override fun onDisable() { diff --git a/KotlinCore/src/de/steamwar/kotlin/message/ComponentMessage.kt b/KotlinCore/src/de/steamwar/kotlin/message/ComponentMessage.kt deleted file mode 100644 index 12ba5f0a..00000000 --- a/KotlinCore/src/de/steamwar/kotlin/message/ComponentMessage.kt +++ /dev/null @@ -1,43 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2024 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.kotlin.message - -import net.kyori.adventure.key.Key -import net.kyori.adventure.translation.GlobalTranslator -import net.kyori.adventure.translation.Translator -import java.text.MessageFormat -import java.util.* - -class ComponentMessage(private val resourceBundleName: String, private val classLoader: ClassLoader) : Translator { - init { - GlobalTranslator.translator().addSource(this) - } - - override fun name(): Key = Key.key("steamwar", resourceBundleName) - - override fun translate(key: String, locale: Locale) = - ResourceBundle.getBundle(resourceBundleName, locale, classLoader).let { - if (it.containsKey(key)) { - MessageFormat(it.getString(key), locale) - } else { - null - } - } -} diff --git a/KotlinCore/src/de/steamwar/kotlin/message/LanguageListener.kt b/KotlinCore/src/de/steamwar/kotlin/message/LanguageListener.kt deleted file mode 100644 index 918248f0..00000000 --- a/KotlinCore/src/de/steamwar/kotlin/message/LanguageListener.kt +++ /dev/null @@ -1,59 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2024 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.kotlin.message - -import com.comphenix.tinyprotocol.Reflection -import de.steamwar.kotlin.KotlinCore -import de.steamwar.sql.SteamwarUser -import org.bukkit.Bukkit -import org.bukkit.entity.Player -import org.bukkit.event.EventHandler -import org.bukkit.event.EventPriority -import org.bukkit.event.Listener -import org.bukkit.event.player.PlayerJoinEvent -import org.bukkit.event.player.PlayerLocaleChangeEvent -import java.util.Locale - -object LanguageListener: Listener { - - private val getHandleMethod = Reflection.getMethod("{obc}.entity.CraftPlayer", "getHandle") - private val localeField = Reflection.getField("{nms.server.level}.EntityPlayer", "adventure\$locale", Locale::class.java) - - private val Player.handle - get() = getHandleMethod.invoke(this) - - private var Player.adventureLocale - get() = localeField.get(handle) as Locale - set(value) { - localeField.set(handle, value) - } - - @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) - fun onPlayerJoin(event: PlayerJoinEvent) { - event.player.adventureLocale = SteamwarUser.get(event.player.uniqueId).locale - } - - @EventHandler - fun onPlayerConfig(event: PlayerLocaleChangeEvent) { - Bukkit.getScheduler().runTask(KotlinCore.plugin, Runnable { - event.player.adventureLocale = SteamwarUser.get(event.player.uniqueId).locale - }) - } -} \ No newline at end of file diff --git a/KotlinCore/src/de/steamwar/kotlin/message/Style.kt b/KotlinCore/src/de/steamwar/kotlin/message/Style.kt deleted file mode 100644 index 79603241..00000000 --- a/KotlinCore/src/de/steamwar/kotlin/message/Style.kt +++ /dev/null @@ -1,92 +0,0 @@ -/* - * This file is a part of the SteamWar software. - * - * Copyright (C) 2024 SteamWar.de-Serverteam - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package de.steamwar.kotlin.message - -import net.kyori.adventure.text.Component -import net.kyori.adventure.text.ComponentLike -import net.kyori.adventure.text.TranslatableComponent -import net.kyori.adventure.text.format.NamedTextColor -import net.kyori.adventure.text.format.Style -import net.kyori.adventure.text.format.TextDecoration -import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer -import net.kyori.adventure.translation.GlobalTranslator -import org.bukkit.entity.Player -import java.util.Locale - -object StyleConfig { - var prefix = Component.text("Steam").yellow() - .append(Component.text("War").darkGray()) - .appendSpace() - set(value) { - field = value - chatPrefix = value - .append(Component.text("»").darkGray()) - .appendSpace() - } - var chatPrefix = prefix - .append(Component.text("»").darkGray()) - .appendSpace() -} - -fun TranslatableComponent.basic(): Component = StyleConfig.chatPrefix.append(this.gray()) - -fun TranslatableComponent.error(): Component = StyleConfig.chatPrefix.append(this.red()) - -fun TranslatableComponent.success(): Component = StyleConfig.chatPrefix.append(this.green()) - -fun String.component(): Component = Component.text(this) - -fun Component.bold(): Component = this.decorate(TextDecoration.BOLD) - -fun String.bold(): Component = this.component().bold() - -fun Component.yellow(): Component = this.color(NamedTextColor.YELLOW) - -fun String.yellow(): Component = this.component().yellow() - -fun Component.red(): Component = this.color(NamedTextColor.RED) - -fun String.red(): Component = this.component().red() - -fun Component.green(): Component = this.color(NamedTextColor.GREEN) - -fun String.green(): Component = this.component().green() - -fun Component.gray(): Component = this.color(NamedTextColor.GRAY) - -fun String.gray(): Component = this.component().gray() - -fun Component.darkGray(): Component = this.color(NamedTextColor.DARK_GRAY) - -fun String.darkGray(): Component = this.component().darkGray() - -fun Component.gold(): Component = this.color(NamedTextColor.GOLD) - -fun translate(key: String, vararg args: ComponentLike): TranslatableComponent = Component.translatable(key, *args).decoration(TextDecoration.ITALIC, false) - -fun Component.reset(): Component = this.style(Style.empty()) - -fun Component.translate(locale: Locale): Component = GlobalTranslator.render(this, locale) - -fun Component.translate(p: Player): Component = this.translate(p.locale()) - -fun Component.toLegacy(): String = LegacyComponentSerializer.legacySection().serialize(this) - -fun Component.space(): Component = append(Component.space()) diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt index 50572805..dd1c0327 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt @@ -19,10 +19,7 @@ package de.steamwar.tntleague -import de.steamwar.kotlin.message.ComponentMessage -import de.steamwar.kotlin.message.StyleConfig -import de.steamwar.kotlin.message.darkGray -import de.steamwar.kotlin.message.gray +import de.steamwar.message.Message import de.steamwar.tntleague.command.AcceptCommand import de.steamwar.tntleague.command.InviteCommand import de.steamwar.tntleague.command.LeaveCommand @@ -30,17 +27,12 @@ import de.steamwar.tntleague.command.RemoveCommand import de.steamwar.tntleague.events.GlobalListener import de.steamwar.tntleague.events.LobbyListener import de.steamwar.tntleague.game.TNTLeagueTeam -import net.kyori.adventure.key.Key import net.kyori.adventure.text.Component import net.kyori.adventure.text.format.NamedTextColor -import net.kyori.adventure.translation.GlobalTranslator -import net.kyori.adventure.translation.TranslationRegistry -import net.kyori.adventure.util.UTF8ResourceBundleControl import org.bukkit.plugin.java.JavaPlugin -import java.util.* lateinit var plugin: TNTLeague -lateinit var message: ComponentMessage +lateinit var message: Message val tntLeaguePrefix = Component.text("TNT").color(NamedTextColor.DARK_RED) .append(Component.text("League").color(NamedTextColor.GOLD)) @@ -48,15 +40,13 @@ val tntLeaguePrefix = Component.text("TNT").color(NamedTextColor.DARK_RED) class TNTLeague : JavaPlugin() { init { plugin = this - - StyleConfig.prefix = tntLeaguePrefix } override fun onEnable() { saveResource("config.yml", false) saveDefaultConfig() - message = ComponentMessage("de.steamwar.tntleague.TNTLeague", classLoader) + message = Message("de.steamwar.tntleague.TNTLeague", classLoader) server.pluginManager.registerEvents(LobbyListener, this) server.pluginManager.registerEvents(GlobalListener, this) @@ -70,7 +60,7 @@ class TNTLeague : JavaPlugin() { } } -fun Component.colorByTeam(team: TNTLeagueTeam?) = when (team) { - null -> this.gray() - else -> this.color(team.color) +fun String.colorByTeam(team: TNTLeagueTeam?) = when (team) { + null -> "§7${this}" + else -> "§${team.color}${this}" } diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties index 46d8dd35..3e44dcba 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties @@ -17,37 +17,32 @@ # along with this program. If not, see . # -join={0} joined the game! -joinTeam={0} joined the {1} team! -quit={0} left the game! -quitTeam={0} left the {1} team! +PREFIX=§4TNT§6League§8» +join=§e{0} §ajoined the game! +joinTeam={0} §7joined the {1} §7team! +quit={0} §cleft the game! +quitTeam={0} §7left the {1} §7team! blue=Blue red=Red -shutdown=The server stops in {0} seconds! -teamWin=Team {0} wins! - -notEnoughCoins=You don't have enough coins to buy this item! - -gameStarting=The game starts in {0} seconds! -gameStart=Starting in {0} -gameStarted=The game has started! - -timeRemaining={0} minutes remaining! - -gameEnded=The game has ended! -draw=The game ended in a draw! +shutdown=§cThe server stops in §e{0} §cseconds! +teamWin=§aTeam {0} §awins! +notEnoughCoins=§cYou don't have enough coins to buy this item! +gameStarting=§aThe game starts in §e{0} §aseconds! +gameStart= +gameStarted=§aThe game has started! +timeRemaining=§e{0} §7minutes remaining! +gameEnded=§cThe game has ended! +draw=§cThe game ended in a draw! dealer=Shopkeeper dealerItem={0} {1} - -scoreboardTime=Time: {0}:{1} -scoreboardCoins=Coins: {0} -scoreboardTeam=Team {0}: {1} - -ready=Ready -notReady=Not ready -isReady=Team {0} is ready! -isNotReady=Team {0} is not ready! - -invited={0} invited you to join the {1} team! *Click* -invitedHover=Click to join the {0} team! -invitedPlayer=Invited {0} to join your team! \ No newline at end of file +dealerPrice= +scoreboardTime=§7Time: §e{0}§8:§e{1} +scoreboardCoins=§7Coins: §e{0} +scoreboardTeam=§7Team {0}§8: §e{1} +ready=§aReady +notReady=§cNot ready +isReady=§aTeam {0} §ais ready! +isNotReady=§cTeam {0} §cis not ready! +invited={0} §ainvited you to join the {1} §ateam! §e*Click* +invitedHover=§7Click to join the {0} §7team! +invitedPlayer=§aInvited §e{0} §ato join your team! \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties index 21e48240..17577e40 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties @@ -17,30 +17,29 @@ # along with this program. If not, see . # -join={0} ist dem Spiel beigetreten! -joinTeam={0} ist dem {1} team begetreten! -quit={0} hat das Spiel verlassen! -quitTeam={0} hat das {1} team verlassen! +join=§e{0} §aist dem Spiel beigetreten! +joinTeam={0} §7ist dem {1} §7team begetreten! +quit={0} §chat das Spiel verlassen! +quitTeam={0} §7hat Team {1} §7verlassen! blue=Blau red=Rot -shutdown=Der Server fährt in {0} sekunden herunter! -teamWin=Team {0} gewinnt! -notEnoughCoins=Du hast nicht genug Coins um dir das zu kaufen! -gameStarting=Das Spiel beginnt in {0} Sekunden! -gameStart=Start in {0} -gameStarted=Das Spiel beginnt! -timeRemaining=noch {0} Minuten! -gameEnded=Das Spiel ist vorbei! -draw=Keiner hat gewonnen! +shutdown=§cDer Server fährt in §e{0} §csekunden herunter! +teamWin=§aTeam {0} §agewinnt! +notEnoughCoins=§cDu hast nicht genug Coins um dir das zu kaufen! +gameStarting=§aDas Spiel beginnt in §e{0} §aSekunden! +gameStarted=§aDas Spiel beginnt! +timeRemaining=§7noch §e{0} §7Minuten! +gameEnded=§cDas Spiel ist vorbei! +draw=§cKeiner hat gewonnen! dealer=Händler -dealerPrice=Kosten: {0} Coins +dealerPrice=§7Kosten: §e{0} Coins -scoreboardTarget=Ziel: {0} -scoreboardTime=Zeit: {0}:{1} -ready=Bereit -notReady=Nicht bereit -isReady=Team {0} ist bereit! -isNotReady=Team {0} ist nicht bereit! -invited={0} hat dich in team {1} eingeladen! *Klick* -invitedHover=Team {0} beitreten! -invitedPlayer={0} wurde eingeladen! \ No newline at end of file +scoreboardTarget=§7Ziel: {0} +scoreboardTime=§7Zeit: §e{0}§8:§e{1} +ready=§aBereit +notReady=§cNicht bereit +isReady=§aTeam {0} §aist bereit! +isNotReady=§cTeam {0} §cist nicht bereit! +invited={0} §ahat dich in team {1} §aeingeladen! §e*Klick* +invitedHover=§7Team {0} §7beitreten! +invitedPlayer={0} §awurde eingeladen! \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt b/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt index b33806c7..0a8d628c 100644 --- a/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt +++ b/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt @@ -21,11 +21,10 @@ package de.steamwar.tntleague.command import de.steamwar.command.SWCommand import de.steamwar.command.TypeValidator -import de.steamwar.kotlin.message.* import de.steamwar.tntleague.colorByTeam import de.steamwar.tntleague.game.TNTLeagueGame -import net.kyori.adventure.text.event.ClickEvent -import net.kyori.adventure.text.event.HoverEvent +import de.steamwar.tntleague.message +import net.md_5.bungee.api.chat.ClickEvent import org.bukkit.entity.Player object InviteCommand: SWCommand("invite") { @@ -38,17 +37,11 @@ object InviteCommand: SWCommand("invite") { val team = TNTLeagueGame.getTeam(sender)!! team.invites.add(target) - target.sendMessage( - translate("invited", sender.name.yellow(), translate(team.name).colorByTeam(team)).basic().clickEvent( - ClickEvent.callback { - if (target !in team.invites) return@callback + message + .send("invited", target, message.parse("invitedHover", target, team.name.colorByTeam(team)), + ClickEvent(ClickEvent.Action.RUN_COMMAND, "/accept "), sender.name, team.name.colorByTeam(team), ) - team.invites.remove(target) - team.opposite.invites.remove(target) - team.join(target) - }) - .hoverEvent(HoverEvent.showText(translate("invitedHover", translate(team.name).colorByTeam(team)).green()))) - sender.sendMessage(translate("invitedPlayer", target.name.yellow()).basic()) + message.send("invitedPlayer", sender, target.name) } @Validator("isLeader", local = false) diff --git a/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueWorldConfig.kt b/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueWorldConfig.kt index ae863071..44405103 100644 --- a/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueWorldConfig.kt +++ b/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueWorldConfig.kt @@ -21,7 +21,7 @@ package de.steamwar.tntleague.config import de.steamwar.tntleague.plugin import de.steamwar.kotlin.util.Area -import de.steamwar.kotlin.message.translate +import net.kyori.adventure.text.Component import org.bukkit.Location import org.bukkit.Material import org.bukkit.configuration.ConfigurationSection @@ -80,7 +80,7 @@ object TNTLeagueWorldConfig { private fun spawnDealer(loc: Location) = world.spawn(loc, WanderingTrader::class.java) .apply { - customName(translate("dealer")) + customName(Component.text("Shop")) isCustomNameVisible = false isInvulnerable = true isSilent = true diff --git a/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt index 23cf69f4..00af6e79 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt @@ -19,15 +19,12 @@ package de.steamwar.tntleague.events -import de.steamwar.kotlin.message.basic -import de.steamwar.kotlin.message.bold -import de.steamwar.kotlin.message.translate import de.steamwar.tntleague.colorByTeam import de.steamwar.tntleague.config.TNTLeagueWorldConfig import de.steamwar.tntleague.game.TNTLeagueGame import de.steamwar.tntleague.game.TNTLeagueTeam import de.steamwar.kotlin.inventory.SWInventoryHolder -import de.steamwar.tntleague.plugin +import de.steamwar.tntleague.message import org.bukkit.GameMode import org.bukkit.Material import org.bukkit.event.EventHandler @@ -48,7 +45,7 @@ object GlobalListener: Listener { with(e.player) { teleport(TNTLeagueWorldConfig.lobby) inventory.clear() - plugin.server.broadcast(translate("join", name.bold()).basic()) + message.broadcast("join", name) isOp = false gameMode = GameMode.SPECTATOR respawnLocation = TNTLeagueWorldConfig.lobby @@ -58,7 +55,7 @@ object GlobalListener: Listener { @EventHandler(priority = EventPriority.HIGHEST) fun onPlayerQuit(e: PlayerQuitEvent) { e.quitMessage(null) - plugin.server.broadcast(translate("quit", e.player.name.bold().colorByTeam(TNTLeagueGame.getTeam(e.player))).basic()) + message.broadcast("quit", e.player.name.colorByTeam(TNTLeagueGame.getTeam(e.player))) TNTLeagueGame.playerLeave(e.player) } diff --git a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt index 2a83b9ec..3a6ac9c5 100644 --- a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt +++ b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt @@ -19,12 +19,12 @@ package de.steamwar.tntleague.game -import de.steamwar.kotlin.message.* import de.steamwar.kotlin.util.Area import de.steamwar.scoreboard.SWScoreboard import de.steamwar.sql.Fight import de.steamwar.sql.FightPlayer import de.steamwar.sql.SteamwarUser +import de.steamwar.tntleague.colorByTeam import de.steamwar.tntleague.config.TNTLeagueConfig import de.steamwar.tntleague.config.TNTLeagueWorldConfig import de.steamwar.tntleague.config.world @@ -32,6 +32,7 @@ import de.steamwar.tntleague.events.DummyListener import de.steamwar.tntleague.events.IngameListener import de.steamwar.tntleague.events.LobbyListener import de.steamwar.tntleague.inventory.DealerInventory +import de.steamwar.tntleague.message import de.steamwar.tntleague.plugin import de.steamwar.tntleague.util.* import net.kyori.adventure.bossbar.BossBar @@ -80,7 +81,7 @@ object TNTLeagueGame { blueTeam.start() redTeam.start() - plugin.server.broadcast(translate("gameStarted").success()) + message.broadcast("gameStarted") val tnt = ItemStack(Material.TNT) @@ -105,7 +106,7 @@ object TNTLeagueGame { } if (gameTimeRemaining % 300 == 0) { - plugin.server.broadcast(translate("timeRemaining", (gameTimeRemaining / 60).toString().yellow()).basic()) + message.broadcast("timeRemaining", (gameTimeRemaining / 60)) plugin.server.onlinePlayers.forEach { it.playSound(Sound.sound(org.bukkit.Sound.BLOCK_NOTE_BLOCK_PLING.key, Sound.Source.MASTER, 1f, 1f)) } } }, 20, 20) @@ -123,7 +124,7 @@ object TNTLeagueGame { it.playSound(Sound.sound(org.bukkit.Sound.ENTITY_ENDER_DRAGON_DEATH.key, Sound.Source.MASTER, 1f, 1f)) } - plugin.server.broadcast(translate("gameEnded").success()) + message.broadcast("gameEnded") spawnerTask.cancel() @@ -134,7 +135,7 @@ object TNTLeagueGame { plugin.server.shutdown() } - plugin.server.broadcast(translate("shutdown", shutdown.toString().yellow()).basic()) + message.broadcast("shutdown", shutdown) shutdown-- }, 20, 20) @@ -153,19 +154,15 @@ object TNTLeagueGame { state = GameState.STARTING var countdown = TNTLeagueConfig.config.startDelay - plugin.server.broadcast(translate("gameStarting", countdown.toString().yellow()).basic()) - val bar = BossBar.bossBar(translate("gameStart", countdown.toString().yellow()).gray(), (TNTLeagueConfig.config.startDelay - countdown) / TNTLeagueConfig.config.startDelay.toFloat(), BossBar.Color.GREEN, BossBar.Overlay.NOTCHED_10) - plugin.server.onlinePlayers.forEach { bar.addViewer(it) } + message.broadcast("gameStarting", countdown.toString()) task = plugin.server.scheduler.scheduleSyncRepeatingTask(plugin, { plugin.server.onlinePlayers.forEach { it.playSound(Sound.sound(org.bukkit.Sound.ENTITY_EXPERIENCE_ORB_PICKUP.key, Sound.Source.MASTER, 1f, 1f)) } - if (countdown-- == 0) { - plugin.server.onlinePlayers.forEach { it.hideBossBar(bar) } + if (--countdown == 0) { + plugin.server.onlinePlayers.forEach { it.level = 0 } task = task?.also { plugin.server.scheduler.cancelTask(it) }.let { null } setup() } else { - bar.name(translate("gameStart", countdown.toString().yellow()).gray()) - bar.progress((TNTLeagueConfig.config.startDelay - countdown) / TNTLeagueConfig.config.startDelay.toFloat()) - plugin.server.onlinePlayers.filter { !it.activeBossBars().contains(bar) }.forEach { bar.addViewer(it) } + plugin.server.onlinePlayers.forEach { it.level = countdown } } }, 20, 20) @@ -191,7 +188,6 @@ object TNTLeagueGame { if (state == GameState.STARTING) { task = task?.also { plugin.server.scheduler.cancelTask(it) }.let { null } - plugin.server.onlinePlayers.forEach { p -> p.activeBossBars().forEach { it.removeViewer(p) } } state = GameState.LOBBY } } @@ -199,7 +195,7 @@ object TNTLeagueGame { fun win(tntLeagueTeam: TNTLeagueTeam, reason: WinReason) { if (state != GameState.RUNNING) return end() - plugin.server.broadcast(translate("teamWin", translate(tntLeagueTeam.name).color(tntLeagueTeam.color)).success()) + plugin.server.onlinePlayers.forEach { message.send("teamWin", it, message.parse(tntLeagueTeam.name, it).colorByTeam(tntLeagueTeam)) } statistic(tntLeagueTeam, reason) explode(tntLeagueTeam.opposite) } @@ -207,7 +203,7 @@ object TNTLeagueGame { fun draw(reason: WinReason) { if (state != GameState.RUNNING) return end() - plugin.server.broadcast(translate("draw").success()) + message.broadcast("draw") statistic(null, reason) } diff --git a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt index f13ec602..4bd5e98f 100644 --- a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt +++ b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt @@ -19,14 +19,13 @@ package de.steamwar.tntleague.game -import de.steamwar.kotlin.message.* import de.steamwar.tntleague.colorByTeam import de.steamwar.tntleague.config.TNTLeagueWorldConfig import de.steamwar.tntleague.config.targetedBlocks +import de.steamwar.tntleague.message import de.steamwar.tntleague.plugin import net.kyori.adventure.sound.Sound -import net.kyori.adventure.text.format.NamedTextColor -import net.kyori.adventure.text.format.TextColor +import net.kyori.adventure.text.Component import org.bukkit.GameMode import org.bukkit.Material import org.bukkit.enchantments.Enchantment @@ -52,7 +51,7 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va val name: String get() = team.name.lowercase() - val color: TextColor + val color: Char get() = team.color var isReady: Boolean = false @@ -61,13 +60,7 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va leader?.inventory?.setItem(4, readyItem()) leader?.playSound(Sound.sound(org.bukkit.Sound.BLOCK_NOTE_BLOCK_PLING.key, Sound.Source.MASTER, 1f, 1f)) - plugin.server.onlinePlayers.forEach { it.sendActionBar(translate(if (value) "isReady" else "isNotReady", translate(this.name).colorByTeam(this)).let { cmp -> - if (value) { - cmp.green() - } else { - cmp.red() - } - }) } + message.broadcastActionbar(if (value) "isReady" else "isNotReady", name.colorByTeam(this)) if (value && opposite.isReady) { TNTLeagueGame.checkStart() @@ -97,7 +90,7 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va teleport(config.spawnLocation) gameMode = GameMode.ADVENTURE inventory.clear() - plugin.server.broadcast(translate("joinTeam", name().colorByTeam(this@TNTLeagueTeam), translate(this@TNTLeagueTeam.name).colorByTeam(this@TNTLeagueTeam)).basic()) + message.broadcast("joinTeam", name.colorByTeam(this@TNTLeagueTeam), this@TNTLeagueTeam.name.colorByTeam(this@TNTLeagueTeam)) } if (leader == null) { @@ -110,13 +103,13 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va fun readyItem() = if (isReady) { ItemStack.of(Material.LIME_DYE).apply { itemMeta = itemMeta.apply { - displayName(translate("ready").green().translate(leader!!)) + displayName(Component.text(message.parse("ready", leader!!))) } } } else { ItemStack.of(Material.RED_DYE).apply { itemMeta = itemMeta.apply { - displayName(translate("notReady").red().translate(leader!!)) + displayName(Component.text(message.parse("notReady", leader!!))) } } } @@ -158,12 +151,12 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va teleport(TNTLeagueWorldConfig.lobby) gameMode = GameMode.SPECTATOR inventory.clear() - plugin.server.broadcast(translate("quitTeam", name().colorByTeam(this@TNTLeagueTeam), translate(this@TNTLeagueTeam.name).colorByTeam(this@TNTLeagueTeam)).basic()) + message.broadcast("quitTeam", name.colorByTeam(this@TNTLeagueTeam), this@TNTLeagueTeam.name.colorByTeam(this@TNTLeagueTeam)) } } - enum class Team(val color: TextColor) { - BLUE(NamedTextColor.BLUE), - RED(NamedTextColor.RED); + enum class Team(val color: Char) { + BLUE('9'), + RED('c'); } } \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt b/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt index 4d098510..2aec75e4 100644 --- a/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt +++ b/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt @@ -20,12 +20,14 @@ package de.steamwar.tntleague.inventory import de.steamwar.kotlin.inventory.SWInventoryHolder -import de.steamwar.kotlin.message.* import de.steamwar.tntleague.config.TNTLeagueConfig import de.steamwar.tntleague.game.TNTLeagueGame +import de.steamwar.tntleague.message import de.steamwar.tntleague.plugin import net.kyori.adventure.sound.Sound import net.kyori.adventure.text.Component +import net.kyori.adventure.text.format.NamedTextColor +import net.kyori.adventure.text.format.TextDecoration import org.bukkit.Material import org.bukkit.NamespacedKey import org.bukkit.entity.Player @@ -35,7 +37,7 @@ import org.bukkit.persistence.PersistentDataType import java.util.* import kotlin.math.ceil -class DealerInventory(player: Player): SWInventoryHolder() { +class DealerInventory(val player: Player): SWInventoryHolder() { init { items.forEachIndexed { index, item -> @@ -46,7 +48,7 @@ class DealerInventory(player: Player): SWInventoryHolder() { val team = TNTLeagueGame.getTeam(player) ?: return@to if (team.coins < price) { - player.sendMessage(translate("notEnoughCoins").error()) + message.send("notEnoughCoins", player) player.playSound(Sound.sound(org.bukkit.Sound.ENTITY_VILLAGER_HURT.key, net.kyori.adventure.sound.Sound.Source.MASTER, 1f, 1f)) return@to } @@ -57,7 +59,7 @@ class DealerInventory(player: Player): SWInventoryHolder() { } } - override fun createInventory(): Inventory = plugin.server.createInventory(this, ceil(TNTLeagueConfig.config.prices.size / 9f).toInt() * 9, translate("dealer").reset()) + override fun createInventory(): Inventory = plugin.server.createInventory(this, ceil(TNTLeagueConfig.config.prices.size / 9f).toInt() * 9, Component.text(message.parse("dealer", player))) companion object { private val priceKey = NamespacedKey(plugin, "price") @@ -66,7 +68,7 @@ class DealerInventory(player: Player): SWInventoryHolder() { val coins = ItemStack(Material.RAW_GOLD).apply { itemMeta = itemMeta.apply { - displayName(Component.text("Coins").bold().gold()) + displayName(Component.text("Coins").color(NamedTextColor.GOLD)) persistentDataContainer.apply { set(coinKey, PersistentDataType.BOOLEAN, true) } @@ -79,11 +81,13 @@ class DealerInventory(player: Player): SWInventoryHolder() { prices.map { (material, price) -> ItemStack(material).apply { itemMeta = itemMeta.apply { - displayName(material.name.lowercase().replace("_", " ") - .replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() } - .component().gray().appendSpace().append(price.amount.toString().component().yellow())) + displayName(Component.text(material.name.lowercase().replace("_", " ") + .replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() }) + .color(NamedTextColor.GRAY).appendSpace().append(Component.text(price.amount).color(NamedTextColor.YELLOW))) + + amount = price.amount - lore(listOf(price.price.toString().component().yellow().bold().appendSpace().append(Component.text("Coins").yellow()))) + lore(listOf(Component.text(price.price).color(NamedTextColor.YELLOW).decorate(TextDecoration.BOLD).appendSpace().append(Component.text("Coins").color(NamedTextColor.YELLOW)))) persistentDataContainer.apply { set(priceKey, PersistentDataType.INTEGER, price.price) set(amountKey, PersistentDataType.INTEGER, price.amount) diff --git a/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt b/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt index 31245584..61a6bd9b 100644 --- a/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt +++ b/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt @@ -19,55 +19,49 @@ package de.steamwar.tntleague.util -import de.steamwar.kotlin.message.* import de.steamwar.scoreboard.ScoreboardCallback import de.steamwar.tntleague.colorByTeam import de.steamwar.tntleague.config.targetedBlocks import de.steamwar.tntleague.game.TNTLeagueGame import de.steamwar.tntleague.game.TNTLeagueTeam +import de.steamwar.tntleague.message import de.steamwar.tntleague.tntLeaguePrefix import net.kyori.adventure.text.Component import org.bukkit.entity.Player import kotlin.collections.HashMap -private val scoreboardTitle by lazy { tntLeaguePrefix.toLegacy() } - data class TNTLeagueScoreboard(val p: Player): ScoreboardCallback { override fun getData(): HashMap { - val lines = mutableListOf() + val lines = mutableListOf() - lines.add(Component.space().green()) + lines.add("§1") val minutes = TNTLeagueGame.gameTimeRemaining.floorDiv(60) val seconds = TNTLeagueGame.gameTimeRemaining.rem(60).toString().padStart(2, '0') - lines.add(translate("scoreboardTime", minutes.toString().yellow(), seconds.yellow()).gray()) + lines.add(message.parse("scoreboardTime", p, minutes, seconds)) - lines.add(Component.space().yellow()) + lines.add("§2") when (val team = TNTLeagueGame.getTeam(p)) { - is TNTLeagueTeam -> lines.add(translate("scoreboardCoins", team.coins.toString().yellow()).gray()) - else -> lines.add( - translate("scoreboardCoins", - Component.text(TNTLeagueGame.blueTeam.coins.toString()).colorByTeam(TNTLeagueGame.blueTeam) - .append(Component.text("/").darkGray()) - .append(Component.text(TNTLeagueGame.redTeam.coins.toString()).colorByTeam(TNTLeagueGame.redTeam)) - ).gray()) + is TNTLeagueTeam -> lines.add(message.parse("scoreboardCoins", p, team.coins)) + else -> lines.add(message.parse("scoreboardCoins", p, + "§${TNTLeagueGame.blueTeam.color}${TNTLeagueGame.blueTeam.coins}§8:§${TNTLeagueGame.redTeam.color}${TNTLeagueGame.redTeam.coins}")) } - lines.add(Component.space().red()) + lines.add("§3") with(TNTLeagueGame.redTeam) { - lines.add(translate("scoreboardTeam", translate(name).colorByTeam(this), (targetedBlocks - damagedBlocks).toString().yellow()).gray()) + lines.add(message.parse("scoreboardTeam", p, message.parse(name, p).colorByTeam(this), targetedBlocks - damagedBlocks)) } with(TNTLeagueGame.blueTeam) { - lines.add(translate("scoreboardTeam", translate(name).colorByTeam(this), (targetedBlocks - damagedBlocks).toString().yellow()).gray()) + lines.add(message.parse("scoreboardTeam", p, message.parse(name, p).colorByTeam(this), targetedBlocks - damagedBlocks)) } - lines.add(Component.space().gray()) + lines.add("§4") return lines - .foldIndexed(HashMap()) { index, acc, component -> acc.also { it[component.translate(p).toLegacy()] = index } } + .foldIndexed(HashMap()) { index, acc, component -> acc.also { it[component] = index } } } - override fun getTitle(): String = scoreboardTitle + override fun getTitle(): String = message.parse("PREFIX", p) } From 8bb2be52f2d0aac1057f15141740992b046d1139 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Sun, 24 Nov 2024 22:38:01 +0100 Subject: [PATCH 11/14] Language Fixes --- TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt | 6 ------ TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties | 3 ++- TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties | 3 +-- .../src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt | 2 -- 4 files changed, 3 insertions(+), 11 deletions(-) diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt index dd1c0327..a856b917 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt @@ -27,16 +27,11 @@ import de.steamwar.tntleague.command.RemoveCommand import de.steamwar.tntleague.events.GlobalListener import de.steamwar.tntleague.events.LobbyListener import de.steamwar.tntleague.game.TNTLeagueTeam -import net.kyori.adventure.text.Component -import net.kyori.adventure.text.format.NamedTextColor import org.bukkit.plugin.java.JavaPlugin lateinit var plugin: TNTLeague lateinit var message: Message -val tntLeaguePrefix = Component.text("TNT").color(NamedTextColor.DARK_RED) - .append(Component.text("League").color(NamedTextColor.GOLD)) - class TNTLeague : JavaPlugin() { init { plugin = this @@ -44,7 +39,6 @@ class TNTLeague : JavaPlugin() { override fun onEnable() { saveResource("config.yml", false) - saveDefaultConfig() message = Message("de.steamwar.tntleague.TNTLeague", classLoader) diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties index 3e44dcba..0d378194 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties @@ -18,7 +18,7 @@ # PREFIX=§4TNT§6League§8» -join=§e{0} §ajoined the game! +join=§e{0} §7joined the game! joinTeam={0} §7joined the {1} §7team! quit={0} §cleft the game! quitTeam={0} §7left the {1} §7team! @@ -36,6 +36,7 @@ draw=§cThe game ended in a draw! dealer=Shopkeeper dealerItem={0} {1} dealerPrice= +scoreboardTarget= scoreboardTime=§7Time: §e{0}§8:§e{1} scoreboardCoins=§7Coins: §e{0} scoreboardTeam=§7Team {0}§8: §e{1} diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties index 17577e40..14660144 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties @@ -16,8 +16,7 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # - -join=§e{0} §aist dem Spiel beigetreten! +join=§e{0} §7ist dem Spiel beigetreten! joinTeam={0} §7ist dem {1} §7team begetreten! quit={0} §chat das Spiel verlassen! quitTeam={0} §7hat Team {1} §7verlassen! diff --git a/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt b/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt index 61a6bd9b..e1f61f99 100644 --- a/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt +++ b/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt @@ -25,8 +25,6 @@ import de.steamwar.tntleague.config.targetedBlocks import de.steamwar.tntleague.game.TNTLeagueGame import de.steamwar.tntleague.game.TNTLeagueTeam import de.steamwar.tntleague.message -import de.steamwar.tntleague.tntLeaguePrefix -import net.kyori.adventure.text.Component import org.bukkit.entity.Player import kotlin.collections.HashMap From 19a4d0e93ab95aac0dc49ddbe5ff3ae5e37e379a Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Tue, 3 Dec 2024 17:17:29 +0100 Subject: [PATCH 12/14] Fixes --- .../steamwar/tntleague/TNTLeague.properties | 60 +++++++++---------- .../tntleague/TNTLeague_de.properties | 50 ++++++++-------- .../tntleague/command/InviteCommand.kt | 4 +- .../tntleague/events/GlobalListener.kt | 4 +- .../steamwar/tntleague/game/TNTLeagueGame.kt | 14 ++--- .../steamwar/tntleague/game/TNTLeagueTeam.kt | 10 ++-- .../tntleague/inventory/DealerInventory.kt | 4 +- .../tntleague/util/TNTLeagueScoreboard.kt | 12 ++-- 8 files changed, 79 insertions(+), 79 deletions(-) diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties index 0d378194..34f17a6f 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties @@ -17,33 +17,33 @@ # along with this program. If not, see . # -PREFIX=§4TNT§6League§8» -join=§e{0} §7joined the game! -joinTeam={0} §7joined the {1} §7team! -quit={0} §cleft the game! -quitTeam={0} §7left the {1} §7team! -blue=Blue -red=Red -shutdown=§cThe server stops in §e{0} §cseconds! -teamWin=§aTeam {0} §awins! -notEnoughCoins=§cYou don't have enough coins to buy this item! -gameStarting=§aThe game starts in §e{0} §aseconds! -gameStart= -gameStarted=§aThe game has started! -timeRemaining=§e{0} §7minutes remaining! -gameEnded=§cThe game has ended! -draw=§cThe game ended in a draw! -dealer=Shopkeeper -dealerItem={0} {1} -dealerPrice= -scoreboardTarget= -scoreboardTime=§7Time: §e{0}§8:§e{1} -scoreboardCoins=§7Coins: §e{0} -scoreboardTeam=§7Team {0}§8: §e{1} -ready=§aReady -notReady=§cNot ready -isReady=§aTeam {0} §ais ready! -isNotReady=§cTeam {0} §cis not ready! -invited={0} §ainvited you to join the {1} §ateam! §e*Click* -invitedHover=§7Click to join the {0} §7team! -invitedPlayer=§aInvited §e{0} §ato join your team! \ No newline at end of file +PREFIX=§eTNT§7League§8» +JOIN=§e{0} §7joined the game! +JOIN_TEAM={0} §7joined the {1} §7team! +QUIT={0} §7left the game! +QUIT_TEAM={0} §7left the {1} §7team! +BLUE=blue +RED=red +SHUTDOWN=§7The server stops in §e{0} §cseconds! +TEAM_WIN=§aTeam {0} §awins! +NOT_ENOUGH_COINS=§cYou don't have enough coins to buy this item! +GAME_STARTING=§aThe game starts in §e{0} §aseconds! +GAME_START= +GAME_STARTED=§aThe game has started! +TIME_REMAINING=§e{0} §7minutes remaining! +GAME_ENDED=§cThe game has ended! +DRAW=§cThe game ended in a draw! +DEALER=Shopkeeper +DEALER_ITEM={0} {1} +DEALER_PRICE= +SCOREBOARD_TARGET= +SCOREBOARD_TIME=§7Time§8: §e{0}§8:§e{1} +SCOREBOARD_COINS=§7Coins§8: §e{0} +SCOREBOARD_TEAM=§7Team {0}§8: §e{1} +READY=§aReady +NOT_READY=§cNot ready +IS_READY=§aTeam {0} §ais ready! +IS_NOT_READY=§cTeam {0} §cis not ready! +INVITED={0} §ainvited you to join team {1}§7! §e*Click* +INVITED_HOVER=§7Click to join team {0}§7! +INVITED_PLAYER=§aInvited §e{0} §ato join your team! \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties index 14660144..3552bc86 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties @@ -16,29 +16,29 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # -join=§e{0} §7ist dem Spiel beigetreten! -joinTeam={0} §7ist dem {1} §7team begetreten! -quit={0} §chat das Spiel verlassen! -quitTeam={0} §7hat Team {1} §7verlassen! -blue=Blau -red=Rot -shutdown=§cDer Server fährt in §e{0} §csekunden herunter! -teamWin=§aTeam {0} §agewinnt! -notEnoughCoins=§cDu hast nicht genug Coins um dir das zu kaufen! -gameStarting=§aDas Spiel beginnt in §e{0} §aSekunden! -gameStarted=§aDas Spiel beginnt! -timeRemaining=§7noch §e{0} §7Minuten! -gameEnded=§cDas Spiel ist vorbei! -draw=§cKeiner hat gewonnen! -dealer=Händler -dealerPrice=§7Kosten: §e{0} Coins +JOIN=§e{0} §7ist dem Spiel beigetreten! +JOIN_TEAM={0} §7ist Team {1} §7begetreten! +QUIT={0} §7hat das Spiel verlassen! +QUIT_TEAM={0} §7hat Team {1} §7verlassen! +BLUE=Blau +RED=Rot +SHUTDOWN=§7Der Server fährt in §e{0} §cSekunden herunter! +TEAM_WIN=§aTeam {0} §agewinnt! +NOT_ENOUGH_COINS=§cDu hast nicht genug Coins um dir das zu kaufen! +GAME_STARTING=§aDas Spiel beginnt in §e{0} §aSekunden! +GAME_STARTED=§aDas Spiel beginnt! +TIME_REMAINING=§7noch §e{0} §7Minuten! +GAME_ENDED=§cDas Spiel ist vorbei! +DRAW=§cKeiner hat gewonnen! +DEALER=Händler +DEALER_PRICE=§7Kosten: §e{0} Coins -scoreboardTarget=§7Ziel: {0} -scoreboardTime=§7Zeit: §e{0}§8:§e{1} -ready=§aBereit -notReady=§cNicht bereit -isReady=§aTeam {0} §aist bereit! -isNotReady=§cTeam {0} §cist nicht bereit! -invited={0} §ahat dich in team {1} §aeingeladen! §e*Klick* -invitedHover=§7Team {0} §7beitreten! -invitedPlayer={0} §awurde eingeladen! \ No newline at end of file +SCOREBOARD_TARGET=§7Ziel§8: {0} +SCOREBOARD_TIME=§7Zeit§8: §e{0}§8:§e{1} +READY=§aBereit +NOT_READY=§cNicht bereit +IS_READY=§aTeam {0} §aist bereit! +IS_NOT_READY=§cTeam {0} §cist nicht bereit! +INVITED={0} §ahat dich in Team {1} §aeingeladen! §e*Klick* +INVITED_HOVER=§7Team {0} §7beitreten! +INVITED_PLAYER={0} §awurde eingeladen! \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt b/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt index 0a8d628c..87c8b790 100644 --- a/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt +++ b/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt @@ -38,10 +38,10 @@ object InviteCommand: SWCommand("invite") { team.invites.add(target) message - .send("invited", target, message.parse("invitedHover", target, team.name.colorByTeam(team)), + .send("INVITED", target, message.parse("INVITED_HOVER", target, team.name.colorByTeam(team)), ClickEvent(ClickEvent.Action.RUN_COMMAND, "/accept "), sender.name, team.name.colorByTeam(team), ) - message.send("invitedPlayer", sender, target.name) + message.send("INVITED_PLAYER", sender, target.name) } @Validator("isLeader", local = false) diff --git a/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt index 00af6e79..13503a76 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt @@ -45,7 +45,7 @@ object GlobalListener: Listener { with(e.player) { teleport(TNTLeagueWorldConfig.lobby) inventory.clear() - message.broadcast("join", name) + message.broadcast("JOIN", name) isOp = false gameMode = GameMode.SPECTATOR respawnLocation = TNTLeagueWorldConfig.lobby @@ -55,7 +55,7 @@ object GlobalListener: Listener { @EventHandler(priority = EventPriority.HIGHEST) fun onPlayerQuit(e: PlayerQuitEvent) { e.quitMessage(null) - message.broadcast("quit", e.player.name.colorByTeam(TNTLeagueGame.getTeam(e.player))) + message.broadcast("QUIT", e.player.name.colorByTeam(TNTLeagueGame.getTeam(e.player))) TNTLeagueGame.playerLeave(e.player) } diff --git a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt index 27d9b123..038b4b11 100644 --- a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt +++ b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt @@ -81,7 +81,7 @@ object TNTLeagueGame { blueTeam.start() redTeam.start() - message.broadcast("gameStarted") + message.broadcast("GAME_STARTED") val tnt = ItemStack(Material.TNT) @@ -106,7 +106,7 @@ object TNTLeagueGame { } if (gameTimeRemaining % 300 == 0) { - message.broadcast("timeRemaining", (gameTimeRemaining / 60)) + message.broadcast("TIME_REMAINING", (gameTimeRemaining / 60)) plugin.server.onlinePlayers.forEach { it.playSound(Sound.sound(org.bukkit.Sound.BLOCK_NOTE_BLOCK_PLING.key, Sound.Source.MASTER, 1f, 1f)) } } }, 20, 20) @@ -124,7 +124,7 @@ object TNTLeagueGame { it.playSound(Sound.sound(org.bukkit.Sound.ENTITY_ENDER_DRAGON_DEATH.key, Sound.Source.MASTER, 1f, 1f)) } - message.broadcast("gameEnded") + message.broadcast("GAME_ENDED") spawnerTask.cancel() @@ -135,7 +135,7 @@ object TNTLeagueGame { plugin.server.shutdown() } - message.broadcast("shutdown", shutdown) + message.broadcast("SHUTDOWN", shutdown) shutdown-- }, 20, 20) @@ -154,7 +154,7 @@ object TNTLeagueGame { state = GameState.STARTING var countdown = TNTLeagueConfig.config.startDelay - message.broadcast("gameStarting", countdown.toString()) + message.broadcast("GAME_STARTING", countdown.toString()) task = plugin.server.scheduler.scheduleSyncRepeatingTask(plugin, { plugin.server.onlinePlayers.forEach { it.playSound(Sound.sound(org.bukkit.Sound.ENTITY_EXPERIENCE_ORB_PICKUP.key, Sound.Source.MASTER, 1f, 1f)) } if (--countdown == 0) { @@ -195,7 +195,7 @@ object TNTLeagueGame { fun win(tntLeagueTeam: TNTLeagueTeam, reason: WinReason) { if (state != GameState.RUNNING) return end() - plugin.server.onlinePlayers.forEach { message.send("teamWin", it, message.parse(tntLeagueTeam.name, it).colorByTeam(tntLeagueTeam)) } + plugin.server.onlinePlayers.forEach { message.send("TEAM_WIN", it, message.parse(tntLeagueTeam.name, it).colorByTeam(tntLeagueTeam)) } statistic(tntLeagueTeam, reason) explode(tntLeagueTeam.opposite) } @@ -203,7 +203,7 @@ object TNTLeagueGame { fun draw(reason: WinReason) { if (state != GameState.RUNNING) return end() - message.broadcast("draw") + message.broadcast("DRAW") statistic(null, reason) } diff --git a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt index 4bd5e98f..6ddc0abe 100644 --- a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt +++ b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt @@ -60,7 +60,7 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va leader?.inventory?.setItem(4, readyItem()) leader?.playSound(Sound.sound(org.bukkit.Sound.BLOCK_NOTE_BLOCK_PLING.key, Sound.Source.MASTER, 1f, 1f)) - message.broadcastActionbar(if (value) "isReady" else "isNotReady", name.colorByTeam(this)) + message.broadcastActionbar(if (value) "IS_READY" else "IS_NOT_READY", name.colorByTeam(this)) if (value && opposite.isReady) { TNTLeagueGame.checkStart() @@ -90,7 +90,7 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va teleport(config.spawnLocation) gameMode = GameMode.ADVENTURE inventory.clear() - message.broadcast("joinTeam", name.colorByTeam(this@TNTLeagueTeam), this@TNTLeagueTeam.name.colorByTeam(this@TNTLeagueTeam)) + message.broadcast("JOIN_TEAM", name.colorByTeam(this@TNTLeagueTeam), this@TNTLeagueTeam.name.colorByTeam(this@TNTLeagueTeam)) } if (leader == null) { @@ -103,13 +103,13 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va fun readyItem() = if (isReady) { ItemStack.of(Material.LIME_DYE).apply { itemMeta = itemMeta.apply { - displayName(Component.text(message.parse("ready", leader!!))) + displayName(Component.text(message.parse("READY", leader!!))) } } } else { ItemStack.of(Material.RED_DYE).apply { itemMeta = itemMeta.apply { - displayName(Component.text(message.parse("notReady", leader!!))) + displayName(Component.text(message.parse("NOT_READY", leader!!))) } } } @@ -151,7 +151,7 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va teleport(TNTLeagueWorldConfig.lobby) gameMode = GameMode.SPECTATOR inventory.clear() - message.broadcast("quitTeam", name.colorByTeam(this@TNTLeagueTeam), this@TNTLeagueTeam.name.colorByTeam(this@TNTLeagueTeam)) + message.broadcast("QUIT_TEAM", name.colorByTeam(this@TNTLeagueTeam), this@TNTLeagueTeam.name.colorByTeam(this@TNTLeagueTeam)) } } diff --git a/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt b/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt index 2aec75e4..4a1e5a12 100644 --- a/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt +++ b/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt @@ -48,7 +48,7 @@ class DealerInventory(val player: Player): SWInventoryHolder() { val team = TNTLeagueGame.getTeam(player) ?: return@to if (team.coins < price) { - message.send("notEnoughCoins", player) + message.send("NOT_ENOUGH_COINS", player) player.playSound(Sound.sound(org.bukkit.Sound.ENTITY_VILLAGER_HURT.key, net.kyori.adventure.sound.Sound.Source.MASTER, 1f, 1f)) return@to } @@ -59,7 +59,7 @@ class DealerInventory(val player: Player): SWInventoryHolder() { } } - override fun createInventory(): Inventory = plugin.server.createInventory(this, ceil(TNTLeagueConfig.config.prices.size / 9f).toInt() * 9, Component.text(message.parse("dealer", player))) + override fun createInventory(): Inventory = plugin.server.createInventory(this, ceil(TNTLeagueConfig.config.prices.size / 9f).toInt() * 9, Component.text(message.parse("DEALER", player))) companion object { private val priceKey = NamespacedKey(plugin, "price") diff --git a/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt b/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt index e1f61f99..27c129de 100644 --- a/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt +++ b/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt @@ -36,23 +36,23 @@ data class TNTLeagueScoreboard(val p: Player): ScoreboardCallback { val minutes = TNTLeagueGame.gameTimeRemaining.floorDiv(60) val seconds = TNTLeagueGame.gameTimeRemaining.rem(60).toString().padStart(2, '0') - lines.add(message.parse("scoreboardTime", p, minutes, seconds)) + lines.add(message.parse("SCOREBOARD_TIME", p, minutes, seconds)) lines.add("§2") when (val team = TNTLeagueGame.getTeam(p)) { - is TNTLeagueTeam -> lines.add(message.parse("scoreboardCoins", p, team.coins)) - else -> lines.add(message.parse("scoreboardCoins", p, + is TNTLeagueTeam -> lines.add(message.parse("SCOREBOARD_COINS", p, team.coins)) + else -> lines.add(message.parse("SCOREBOARD_COINS", p, "§${TNTLeagueGame.blueTeam.color}${TNTLeagueGame.blueTeam.coins}§8:§${TNTLeagueGame.redTeam.color}${TNTLeagueGame.redTeam.coins}")) } lines.add("§3") with(TNTLeagueGame.redTeam) { - lines.add(message.parse("scoreboardTeam", p, message.parse(name, p).colorByTeam(this), targetedBlocks - damagedBlocks)) + lines.add(message.parse("SCOREBOARD_TEAM", p, message.parse(name, p).colorByTeam(this), targetedBlocks - damagedBlocks)) } with(TNTLeagueGame.blueTeam) { - lines.add(message.parse("scoreboardTeam", p, message.parse(name, p).colorByTeam(this), targetedBlocks - damagedBlocks)) + lines.add(message.parse("SCOREBOARD_TEAM", p, message.parse(name, p).colorByTeam(this), targetedBlocks - damagedBlocks)) } lines.add("§4") @@ -61,5 +61,5 @@ data class TNTLeagueScoreboard(val p: Player): ScoreboardCallback { .foldIndexed(HashMap()) { index, acc, component -> acc.also { it[component] = index } } } - override fun getTitle(): String = message.parse("PREFIX", p) + override fun getTitle(): String = message.parse("PREFIX", p).dropLast(1) } From e93683842b848f76047d95ffa39c4003a8d8fc47 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Fri, 6 Dec 2024 18:36:59 +0100 Subject: [PATCH 13/14] Language --- TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties | 4 ++-- TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties index 34f17a6f..b89ab558 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties @@ -24,7 +24,7 @@ QUIT={0} §7left the game! QUIT_TEAM={0} §7left the {1} §7team! BLUE=blue RED=red -SHUTDOWN=§7The server stops in §e{0} §cseconds! +SHUTDOWN=§7The server stops in §e{0} §7seconds! TEAM_WIN=§aTeam {0} §awins! NOT_ENOUGH_COINS=§cYou don't have enough coins to buy this item! GAME_STARTING=§aThe game starts in §e{0} §aseconds! @@ -44,6 +44,6 @@ READY=§aReady NOT_READY=§cNot ready IS_READY=§aTeam {0} §ais ready! IS_NOT_READY=§cTeam {0} §cis not ready! -INVITED={0} §ainvited you to join team {1}§7! §e*Click* +INVITED={0} §ainvited you to join team {1}§7! *Click* INVITED_HOVER=§7Click to join team {0}§7! INVITED_PLAYER=§aInvited §e{0} §ato join your team! \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties index 3552bc86..8d3d3d06 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties @@ -22,9 +22,9 @@ QUIT={0} §7hat das Spiel verlassen! QUIT_TEAM={0} §7hat Team {1} §7verlassen! BLUE=Blau RED=Rot -SHUTDOWN=§7Der Server fährt in §e{0} §cSekunden herunter! +SHUTDOWN=§7Der Server fährt in §e{0} §7Sekunden herunter! TEAM_WIN=§aTeam {0} §agewinnt! -NOT_ENOUGH_COINS=§cDu hast nicht genug Coins um dir das zu kaufen! +NOT_ENOUGH_COINS=§cDu hast nicht genug Coins, um dir das zu kaufen! GAME_STARTING=§aDas Spiel beginnt in §e{0} §aSekunden! GAME_STARTED=§aDas Spiel beginnt! TIME_REMAINING=§7noch §e{0} §7Minuten! @@ -39,6 +39,6 @@ READY=§aBereit NOT_READY=§cNicht bereit IS_READY=§aTeam {0} §aist bereit! IS_NOT_READY=§cTeam {0} §cist nicht bereit! -INVITED={0} §ahat dich in Team {1} §aeingeladen! §e*Klick* +INVITED={0} §ahat dich in Team {1} §aeingeladen! *Klick* INVITED_HOVER=§7Team {0} §7beitreten! INVITED_PLAYER={0} §awurde eingeladen! \ No newline at end of file From d3f6075686550068b49f600893c7a476bd34a977 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Wed, 11 Dec 2024 10:53:17 +0100 Subject: [PATCH 14/14] Add to CI --- steamwarci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/steamwarci.yml b/steamwarci.yml index 19b1643c..ae7d21dc 100644 --- a/steamwarci.yml +++ b/steamwarci.yml @@ -7,7 +7,8 @@ artifacts: "/binarys/fightsystem.jar": "FightSystem/build/libs/FightSystem-all.jar" "/binarys/FightSystem_Standalone.jar": "FightSystem/FightSystem_Standalone/build/libs/FightSystem_Standalone-all.jar" - # KotlinCore !! + "/binarys/kotlincore.jar": "KotlinCore/build/libs/KotlinCore-all.jar" + "/binarys/tntleague.jar": "TNTLeague/build/libs/TNTLeague.jar" "/binarys/lobbysystem2.0.jar": "LobbySystem/build/libs/LobbySystem.jar"