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