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..1c4bc406 100644
--- a/KotlinCore/src/de/steamwar/kotlin/KotlinCore.kt
+++ b/KotlinCore/src/de/steamwar/kotlin/KotlinCore.kt
@@ -32,6 +32,7 @@ class KotlinCore : JavaPlugin() {
}
override fun onEnable() {
+
}
override fun onDisable() {
diff --git a/TNTLeague/src/de/steamwar/tntleague/inventory/SWInventoryHolder.kt b/KotlinCore/src/de/steamwar/kotlin/inventory/SWInventoryHolder.kt
similarity index 59%
rename from TNTLeague/src/de/steamwar/tntleague/inventory/SWInventoryHolder.kt
rename to KotlinCore/src/de/steamwar/kotlin/inventory/SWInventoryHolder.kt
index 5d89e541..3afb3183 100644
--- a/TNTLeague/src/de/steamwar/tntleague/inventory/SWInventoryHolder.kt
+++ b/KotlinCore/src/de/steamwar/kotlin/inventory/SWInventoryHolder.kt
@@ -1,4 +1,23 @@
-package de.steamwar.tntleague.inventory
+/*
+ * 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.inventory
import org.bukkit.event.inventory.InventoryClickEvent
import org.bukkit.event.inventory.InventoryCloseEvent
diff --git a/TNTLeague/src/de/steamwar/tntleague/util/Area.kt b/KotlinCore/src/de/steamwar/kotlin/util/Area.kt
similarity index 62%
rename from TNTLeague/src/de/steamwar/tntleague/util/Area.kt
rename to KotlinCore/src/de/steamwar/kotlin/util/Area.kt
index 0b27d227..5b96519f 100644
--- a/TNTLeague/src/de/steamwar/tntleague/util/Area.kt
+++ b/KotlinCore/src/de/steamwar/kotlin/util/Area.kt
@@ -1,4 +1,23 @@
-package de.steamwar.tntleague.util
+/*
+ * 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.util
import org.bukkit.Location
import org.bukkit.block.Block
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 5479e4d7..a856b917 100644
--- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt
+++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt
@@ -1,19 +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.tntleague
+import de.steamwar.message.Message
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 net.kyori.adventure.key.Key
-import net.kyori.adventure.translation.GlobalTranslator
-import net.kyori.adventure.translation.TranslationRegistry
-import net.kyori.adventure.util.UTF8ResourceBundleControl
+import de.steamwar.tntleague.game.TNTLeagueTeam
import org.bukkit.plugin.java.JavaPlugin
-import java.util.*
lateinit var plugin: TNTLeague
+lateinit var message: Message
class TNTLeague : JavaPlugin() {
init {
@@ -22,18 +39,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.US)
-
- 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)
@@ -46,3 +53,8 @@ class TNTLeague : JavaPlugin() {
LeaveCommand.register()
}
}
+
+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
new file mode 100644
index 00000000..b89ab558
--- /dev/null
+++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.properties
@@ -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 .
+#
+
+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} §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!
+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! *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
new file mode 100644
index 00000000..8d3d3d06
--- /dev/null
+++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de.properties
@@ -0,0 +1,44 @@
+#
+# 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=§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} §7Sekunden 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
+
+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! *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/TNTLeague_de_DE.properties b/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de_DE.properties
deleted file mode 100644
index 7200a9e2..00000000
--- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_de_DE.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-join={0} ist dem Spiel beigetreten!
-joinTeam={0} ist dem {1} team begetreten!
-quit={0} hat das Spiel 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!
-gameEnded=Das Spiel ist aus!
-dealer=Händler
-dealerItem=
-dealerPrice=Kosten: {0} Coins
-scoreboardTarget=Ziel: {0}
-scoreboardTime=Zeit: {0}:{1}
-scoreboardTeam=
\ 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 2f7c11e2..00000000
--- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague_en_US.properties
+++ /dev/null
@@ -1,37 +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!
-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!
-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..87c8b790 100644
--- a/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt
+++ b/TNTLeague/src/de/steamwar/tntleague/command/InviteCommand.kt
@@ -21,10 +21,10 @@ package de.steamwar.tntleague.command
import de.steamwar.command.SWCommand
import de.steamwar.command.TypeValidator
+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 de.steamwar.tntleague.message
+import net.md_5.bungee.api.chat.ClickEvent
import org.bukkit.entity.Player
object InviteCommand: SWCommand("invite") {
@@ -37,20 +37,15 @@ 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("INVITED_HOVER", 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("INVITED_PLAYER", sender, target.name)
}
@Validator("isLeader", local = false)
fun isLeader(): TypeValidator {
return TypeValidator { _, player, _ -> TNTLeagueGame.getTeam(player)?.leader == player}
}
-}
\ No newline at end of file
+}
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..44405103 100644
--- a/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueWorldConfig.kt
+++ b/TNTLeague/src/de/steamwar/tntleague/config/TNTLeagueWorldConfig.kt
@@ -1,13 +1,31 @@
+/*
+ * 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
-import de.steamwar.tntleague.util.Area
-import de.steamwar.tntleague.util.translate
+import de.steamwar.kotlin.util.Area
+import net.kyori.adventure.text.Component
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
@@ -62,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/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 f2930adb..13503a76 100644
--- a/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt
+++ b/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt
@@ -1,12 +1,30 @@
+/*
+ * 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.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.tntleague.plugin
-import de.steamwar.tntleague.util.*
-import io.papermc.paper.event.player.AsyncChatEvent
+import de.steamwar.kotlin.inventory.SWInventoryHolder
+import de.steamwar.tntleague.message
import org.bukkit.GameMode
import org.bukkit.Material
import org.bukkit.event.EventHandler
@@ -27,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
@@ -37,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)
}
@@ -67,6 +85,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 }
}
@@ -78,11 +97,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 e688dcbc..e48ea7e6 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,12 +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.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.PlayerQuitEvent
object IngameListener: Listener {
@@ -26,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())
}
@@ -63,6 +81,17 @@ object IngameListener: Listener {
}
}
+ @EventHandler
+ fun onPickupCoins(e: PlayerAttemptPickupItemEvent) {
+ 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
+ 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/events/LobbyListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt
index e88cfbaa..b4073f1c 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 {
@@ -30,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
@@ -58,4 +68,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 94191c4e..038b4b11 100644
--- a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt
+++ b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueGame.kt
@@ -1,9 +1,30 @@
+/*
+ * 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.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
@@ -11,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
@@ -18,12 +40,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
@@ -62,7 +81,7 @@ object TNTLeagueGame {
blueTeam.start()
redTeam.start()
- plugin.server.broadcast(translate("gameStarted").success())
+ message.broadcast("GAME_STARTED")
val tnt = ItemStack(Material.TNT)
@@ -87,7 +106,7 @@ object TNTLeagueGame {
}
if (gameTimeRemaining % 300 == 0) {
- plugin.server.broadcast(translate("timeRemaining", (gameTimeRemaining / 60).toString().yellow()).basic())
+ 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)
@@ -105,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("GAME_ENDED")
spawnerTask.cancel()
@@ -116,7 +135,7 @@ object TNTLeagueGame {
plugin.server.shutdown()
}
- plugin.server.broadcast(translate("shutdown", shutdown.toString().yellow()).basic())
+ message.broadcast("SHUTDOWN", shutdown)
shutdown--
}, 20, 20)
@@ -135,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("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) {
- 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)
@@ -162,7 +177,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)
}
}
@@ -173,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
}
}
@@ -181,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("TEAM_WIN", it, message.parse(tntLeagueTeam.name, it).colorByTeam(tntLeagueTeam)) }
statistic(tntLeagueTeam, reason)
explode(tntLeagueTeam.opposite)
}
@@ -189,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 cafa70c2..6ddc0abe 100644
--- a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt
+++ b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt
@@ -1,18 +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.tntleague.game
+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 de.steamwar.tntleague.util.*
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
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) {
@@ -33,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
@@ -42,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) "IS_READY" else "IS_NOT_READY", name.colorByTeam(this))
if (value && opposite.isReady) {
TNTLeagueGame.checkStart()
@@ -63,6 +75,8 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va
}
}
+ var coins: Int = 0
+
val opposite: TNTLeagueTeam
get() = when (team) {
Team.BLUE -> TNTLeagueGame.redTeam
@@ -76,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("JOIN_TEAM", name.colorByTeam(this@TNTLeagueTeam), this@TNTLeagueTeam.name.colorByTeam(this@TNTLeagueTeam))
}
if (leader == null) {
@@ -89,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("NOT_READY", leader!!)))
}
}
}
@@ -113,9 +127,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()) {
@@ -125,6 +137,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
+ }
}
}
}
@@ -135,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("QUIT_TEAM", 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 04c1c288..4a1e5a12 100644
--- a/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt
+++ b/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt
@@ -1,11 +1,32 @@
+/*
+ * 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.kotlin.inventory.SWInventoryHolder
import de.steamwar.tntleague.config.TNTLeagueConfig
+import de.steamwar.tntleague.game.TNTLeagueGame
+import de.steamwar.tntleague.message
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.NamedTextColor
import net.kyori.adventure.text.format.TextDecoration
import org.bukkit.Material
import org.bukkit.NamespacedKey
@@ -16,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 ->
@@ -24,19 +45,21 @@ 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)) {
- player.sendMessage(translate("notEnoughCoins").error())
+ val team = TNTLeagueGame.getTeam(player) ?: return@to
+
+ if (team.coins < price) {
+ 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
}
- player.inventory.removeItem(coins.asQuantity(price))
+ team.coins -= price
player.inventory.addItem(ItemStack.of(item.first.type, amount))
}
}
}
- 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")
@@ -45,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)
}
@@ -58,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/Style.kt b/TNTLeague/src/de/steamwar/tntleague/util/Style.kt
deleted file mode 100644
index 3ef28b9a..00000000
--- a/TNTLeague/src/de/steamwar/tntleague/util/Style.kt
+++ /dev/null
@@ -1,73 +0,0 @@
-package de.steamwar.tntleague.util
-
-import de.steamwar.tntleague.game.TNTLeagueTeam
-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
-
-val prefix = Component.text("Steam").yellow()
- .append(Component.text("War").darkGray())
- .appendSpace()
-
-val tntLeaguePrefix = Component.text("TNT").color(NamedTextColor.DARK_RED)
- .append(Component.text("League").color(NamedTextColor.GOLD))
-
-val tntLeagueChatPrefix: Component = tntLeaguePrefix
- .append(Component.text("»").darkGray())
- .appendSpace()
-
-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 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.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)
diff --git a/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt b/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt
index 7b8da592..27c129de 100644
--- a/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt
+++ b/TNTLeague/src/de/steamwar/tntleague/util/TNTLeagueScoreboard.kt
@@ -20,38 +20,46 @@
package de.steamwar.tntleague.util
import de.steamwar.scoreboard.ScoreboardCallback
+import de.steamwar.tntleague.colorByTeam
import de.steamwar.tntleague.config.targetedBlocks
import de.steamwar.tntleague.game.TNTLeagueGame
-import net.kyori.adventure.text.Component
+import de.steamwar.tntleague.game.TNTLeagueTeam
+import de.steamwar.tntleague.message
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("SCOREBOARD_TIME", p, minutes, seconds))
- lines.add(Component.space().yellow())
+ lines.add("§2")
- 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(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(translate("scoreboardTeam", translate(name).colorByTeam(this), (targetedBlocks - damagedBlocks).toString().yellow()).gray())
+ lines.add(message.parse("SCOREBOARD_TEAM", p, message.parse(name, p).colorByTeam(this), targetedBlocks - damagedBlocks))
+ }
+ with(TNTLeagueGame.blueTeam) {
+ lines.add(message.parse("SCOREBOARD_TEAM", 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).dropLast(1)
}
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
diff --git a/steamwarci.yml b/steamwarci.yml
index d676bd83..9e5f7f8e 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"