Fixes, changes and Refactors

This commit is contained in:
2024-11-17 12:04:07 +01:00
parent 78853c70f8
commit 4bb1bc0cbd
13 changed files with 85 additions and 51 deletions
@@ -17,7 +17,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package de.steamwar.tntleague.inventory package de.steamwar.kotlin.inventory
import org.bukkit.event.inventory.InventoryClickEvent import org.bukkit.event.inventory.InventoryClickEvent
import org.bukkit.event.inventory.InventoryCloseEvent import org.bukkit.event.inventory.InventoryCloseEvent
@@ -19,31 +19,41 @@
package de.steamwar.kotlin.message package de.steamwar.kotlin.message
import com.comphenix.tinyprotocol.Reflection
import de.steamwar.kotlin.KotlinCore import de.steamwar.kotlin.KotlinCore
import de.steamwar.sql.SteamwarUser import de.steamwar.sql.SteamwarUser
import org.bukkit.Bukkit 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.EventHandler
import org.bukkit.event.EventPriority import org.bukkit.event.EventPriority
import org.bukkit.event.Listener import org.bukkit.event.Listener
import org.bukkit.event.player.PlayerJoinEvent import org.bukkit.event.player.PlayerJoinEvent
import org.bukkit.event.player.PlayerLocaleChangeEvent import org.bukkit.event.player.PlayerLocaleChangeEvent
import java.util.Locale
object LanguageListener: Listener { 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) @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
fun onPlayerJoin(event: PlayerJoinEvent) { fun onPlayerJoin(event: PlayerJoinEvent) {
val user = SteamwarUser.get(event.player.uniqueId) event.player.adventureLocale = SteamwarUser.get(event.player.uniqueId).locale
val player = event.player as CraftPlayer
player.handle.`adventure$locale` = user.locale
} }
@EventHandler @EventHandler
fun onPlayerConfig(event: PlayerLocaleChangeEvent) { fun onPlayerConfig(event: PlayerLocaleChangeEvent) {
Bukkit.getScheduler().runTask(KotlinCore.plugin, Runnable { Bukkit.getScheduler().runTask(KotlinCore.plugin, Runnable {
val user = SteamwarUser.get(event.player.uniqueId) event.player.adventureLocale = SteamwarUser.get(event.player.uniqueId).locale
val player = event.player as CraftPlayer
player.handle.`adventure$locale` = user.locale
}) })
} }
} }
@@ -17,9 +17,8 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
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.Component
import net.kyori.adventure.text.ComponentLike import net.kyori.adventure.text.ComponentLike
import net.kyori.adventure.text.TranslatableComponent import net.kyori.adventure.text.TranslatableComponent
@@ -31,22 +30,26 @@ import net.kyori.adventure.translation.GlobalTranslator
import org.bukkit.entity.Player import org.bukkit.entity.Player
import java.util.Locale import java.util.Locale
val prefix = Component.text("Steam").yellow() object StyleConfig {
.append(Component.text("War").darkGray()) var prefix = Component.text("Steam").yellow()
.appendSpace() .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) fun TranslatableComponent.basic(): Component = StyleConfig.chatPrefix.append(this.gray())
.append(Component.text("League").color(NamedTextColor.GOLD))
val tntLeagueChatPrefix: Component = tntLeaguePrefix fun TranslatableComponent.error(): Component = StyleConfig.chatPrefix.append(this.red())
.append(Component.text("»").darkGray())
.appendSpace()
fun TranslatableComponent.basic(): Component = tntLeagueChatPrefix.append(this.gray()) fun TranslatableComponent.success(): Component = StyleConfig.chatPrefix.append(this.green())
fun TranslatableComponent.error(): Component = tntLeagueChatPrefix.append(this.red())
fun TranslatableComponent.success(): Component = tntLeagueChatPrefix.append(this.green())
fun String.component(): Component = Component.text(this) 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.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(locale: Locale): Component = GlobalTranslator.render(this, locale)
fun Component.translate(p: Player): Component = this.translate(p.locale()) fun Component.translate(p: Player): Component = this.translate(p.locale())
fun Component.toLegacy(): String = LegacyComponentSerializer.legacySection().serialize(this) fun Component.toLegacy(): String = LegacyComponentSerializer.legacySection().serialize(this)
fun Component.space(): Component = append(Component.space())
@@ -17,7 +17,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package de.steamwar.tntleague.util package de.steamwar.kotlin.util
import org.bukkit.Location import org.bukkit.Location
import org.bukkit.block.Block import org.bukkit.block.Block
@@ -20,13 +20,19 @@
package de.steamwar.tntleague package de.steamwar.tntleague
import de.steamwar.kotlin.message.ComponentMessage 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.AcceptCommand
import de.steamwar.tntleague.command.InviteCommand import de.steamwar.tntleague.command.InviteCommand
import de.steamwar.tntleague.command.LeaveCommand import de.steamwar.tntleague.command.LeaveCommand
import de.steamwar.tntleague.command.RemoveCommand import de.steamwar.tntleague.command.RemoveCommand
import de.steamwar.tntleague.events.GlobalListener import de.steamwar.tntleague.events.GlobalListener
import de.steamwar.tntleague.events.LobbyListener import de.steamwar.tntleague.events.LobbyListener
import de.steamwar.tntleague.game.TNTLeagueTeam
import net.kyori.adventure.key.Key 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.GlobalTranslator
import net.kyori.adventure.translation.TranslationRegistry import net.kyori.adventure.translation.TranslationRegistry
import net.kyori.adventure.util.UTF8ResourceBundleControl import net.kyori.adventure.util.UTF8ResourceBundleControl
@@ -36,9 +42,14 @@ import java.util.*
lateinit var plugin: TNTLeague lateinit var plugin: TNTLeague
lateinit var message: ComponentMessage lateinit var message: ComponentMessage
val tntLeaguePrefix = Component.text("TNT").color(NamedTextColor.DARK_RED)
.append(Component.text("League").color(NamedTextColor.GOLD))
class TNTLeague : JavaPlugin() { class TNTLeague : JavaPlugin() {
init { init {
plugin = this plugin = this
StyleConfig.prefix = tntLeaguePrefix
} }
override fun onEnable() { override fun onEnable() {
@@ -58,3 +69,8 @@ class TNTLeague : JavaPlugin() {
LeaveCommand.register() LeaveCommand.register()
} }
} }
fun Component.colorByTeam(team: TNTLeagueTeam?) = when (team) {
null -> this.gray()
else -> this.color(team.color)
}
@@ -21,8 +21,9 @@ package de.steamwar.tntleague.command
import de.steamwar.command.SWCommand import de.steamwar.command.SWCommand
import de.steamwar.command.TypeValidator 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.game.TNTLeagueGame
import de.steamwar.tntleague.util.*
import net.kyori.adventure.text.event.ClickEvent import net.kyori.adventure.text.event.ClickEvent
import net.kyori.adventure.text.event.HoverEvent import net.kyori.adventure.text.event.HoverEvent
import org.bukkit.entity.Player import org.bukkit.entity.Player
@@ -37,7 +38,8 @@ object InviteCommand: SWCommand("invite") {
val team = TNTLeagueGame.getTeam(sender)!! val team = TNTLeagueGame.getTeam(sender)!!
team.invites.add(target) 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 { ClickEvent.callback {
if (target !in team.invites) return@callback if (target !in team.invites) return@callback
@@ -20,13 +20,12 @@
package de.steamwar.tntleague.config package de.steamwar.tntleague.config
import de.steamwar.tntleague.plugin import de.steamwar.tntleague.plugin
import de.steamwar.tntleague.util.Area import de.steamwar.kotlin.util.Area
import de.steamwar.tntleague.util.translate import de.steamwar.kotlin.message.translate
import org.bukkit.Location import org.bukkit.Location
import org.bukkit.Material import org.bukkit.Material
import org.bukkit.configuration.ConfigurationSection import org.bukkit.configuration.ConfigurationSection
import org.bukkit.configuration.file.YamlConfiguration import org.bukkit.configuration.file.YamlConfiguration
import org.bukkit.entity.Villager
import org.bukkit.entity.WanderingTrader import org.bukkit.entity.WanderingTrader
import java.io.File import java.io.File
@@ -19,12 +19,15 @@
package de.steamwar.tntleague.events 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.config.TNTLeagueWorldConfig
import de.steamwar.tntleague.game.TNTLeagueGame import de.steamwar.tntleague.game.TNTLeagueGame
import de.steamwar.tntleague.game.TNTLeagueTeam 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.plugin
import de.steamwar.tntleague.util.*
import org.bukkit.GameMode import org.bukkit.GameMode
import org.bukkit.Material import org.bukkit.Material
import org.bukkit.event.EventHandler import org.bukkit.event.EventHandler
@@ -85,6 +88,7 @@ object GlobalListener: Listener {
fun onPlayerDeath(e: PlayerDeathEvent) { fun onPlayerDeath(e: PlayerDeathEvent) {
e.deathMessage(null) e.deathMessage(null)
e.drops.clear() e.drops.clear()
e.keepInventory = true
e.itemsToKeep.removeIf { it.type != Material.DIAMOND_PICKAXE } e.itemsToKeep.removeIf { it.type != Material.DIAMOND_PICKAXE }
} }
@@ -41,8 +41,7 @@ object LobbyListener: Listener {
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
fun onPlayerQuit(e: PlayerQuitEvent) { fun onPlayerQuit(e: PlayerQuitEvent) {
val team = TNTLeagueGame.getTeam(e.player) ?: return TNTLeagueGame.getTeam(e.player)?.leave(e.player)
team.leave(e.player)
} }
@EventHandler @EventHandler
@@ -19,6 +19,8 @@
package de.steamwar.tntleague.game package de.steamwar.tntleague.game
import de.steamwar.kotlin.message.*
import de.steamwar.kotlin.util.Area
import de.steamwar.scoreboard.SWScoreboard import de.steamwar.scoreboard.SWScoreboard
import de.steamwar.sql.Fight import de.steamwar.sql.Fight
import de.steamwar.sql.FightPlayer import de.steamwar.sql.FightPlayer
@@ -37,12 +39,9 @@ import net.kyori.adventure.sound.Sound
import org.bukkit.GameMode import org.bukkit.GameMode
import org.bukkit.Location import org.bukkit.Location
import org.bukkit.Material 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.Item
import org.bukkit.entity.Player import org.bukkit.entity.Player
import org.bukkit.entity.TNTPrimed import org.bukkit.entity.TNTPrimed
import org.bukkit.entity.Villager
import org.bukkit.event.HandlerList import org.bukkit.event.HandlerList
import org.bukkit.event.Listener import org.bukkit.event.Listener
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
@@ -181,7 +180,7 @@ object TNTLeagueGame {
redTeam.invites.remove(player) redTeam.invites.remove(player)
getTeam(player)?.apply { getTeam(player)?.apply {
members.remove(player) members.remove(player)
if (leader == player) { if (leader == player && members.isNotEmpty() && state == GameState.RUNNING) {
win(this.opposite, WinReason.LEAVE) win(this.opposite, WinReason.LEAVE)
} }
} }
@@ -19,10 +19,11 @@
package de.steamwar.tntleague.game 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.TNTLeagueWorldConfig
import de.steamwar.tntleague.config.targetedBlocks import de.steamwar.tntleague.config.targetedBlocks
import de.steamwar.tntleague.plugin import de.steamwar.tntleague.plugin
import de.steamwar.tntleague.util.*
import net.kyori.adventure.sound.Sound import net.kyori.adventure.sound.Sound
import net.kyori.adventure.text.format.NamedTextColor import net.kyori.adventure.text.format.NamedTextColor
import net.kyori.adventure.text.format.TextColor import net.kyori.adventure.text.format.TextColor
@@ -31,7 +32,6 @@ import org.bukkit.Material
import org.bukkit.enchantments.Enchantment import org.bukkit.enchantments.Enchantment
import org.bukkit.entity.Player import org.bukkit.entity.Player
import org.bukkit.inventory.ItemStack import org.bukkit.inventory.ItemStack
import java.awt.Color.green
data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private val team: Team) { 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) { fun leave(player: Player) {
if (TNTLeagueGame.state == TNTLeagueGame.GameState.RUNNING) { if (TNTLeagueGame.state != TNTLeagueGame.GameState.RUNNING) {
TNTLeagueGame.playerLeave(player)
} else {
members.remove(player) members.remove(player)
if (members.isEmpty()) { if (members.isEmpty()) {
@@ -146,6 +144,10 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va
} }
if (leader == player) { if (leader == player) {
leader = members.firstOrNull() leader = members.firstOrNull()
if (leader == null && TNTLeagueGame.state == TNTLeagueGame.GameState.LOBBY) {
isReady = false
}
} }
} }
} }
@@ -19,14 +19,13 @@
package de.steamwar.tntleague.inventory 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.config.TNTLeagueConfig
import de.steamwar.tntleague.game.TNTLeagueGame import de.steamwar.tntleague.game.TNTLeagueGame
import de.steamwar.tntleague.plugin import de.steamwar.tntleague.plugin
import de.steamwar.tntleague.util.*
import net.kyori.adventure.sound.Sound import net.kyori.adventure.sound.Sound
import net.kyori.adventure.text.Component 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.Material
import org.bukkit.NamespacedKey import org.bukkit.NamespacedKey
import org.bukkit.entity.Player import org.bukkit.entity.Player
@@ -19,10 +19,13 @@
package de.steamwar.tntleague.util package de.steamwar.tntleague.util
import de.steamwar.kotlin.message.*
import de.steamwar.scoreboard.ScoreboardCallback import de.steamwar.scoreboard.ScoreboardCallback
import de.steamwar.tntleague.colorByTeam
import de.steamwar.tntleague.config.targetedBlocks import de.steamwar.tntleague.config.targetedBlocks
import de.steamwar.tntleague.game.TNTLeagueGame import de.steamwar.tntleague.game.TNTLeagueGame
import de.steamwar.tntleague.game.TNTLeagueTeam import de.steamwar.tntleague.game.TNTLeagueTeam
import de.steamwar.tntleague.tntLeaguePrefix
import net.kyori.adventure.text.Component import net.kyori.adventure.text.Component
import org.bukkit.entity.Player import org.bukkit.entity.Player
import kotlin.collections.HashMap import kotlin.collections.HashMap
@@ -43,7 +46,8 @@ data class TNTLeagueScoreboard(val p: Player): ScoreboardCallback {
when (val team = TNTLeagueGame.getTeam(p)) { when (val team = TNTLeagueGame.getTeam(p)) {
is TNTLeagueTeam -> lines.add(translate("scoreboardCoins", team.coins.toString().yellow()).gray()) 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) Component.text(TNTLeagueGame.blueTeam.coins.toString()).colorByTeam(TNTLeagueGame.blueTeam)
.append(Component.text("/").darkGray()) .append(Component.text("/").darkGray())
.append(Component.text(TNTLeagueGame.redTeam.coins.toString()).colorByTeam(TNTLeagueGame.redTeam)) .append(Component.text(TNTLeagueGame.redTeam.coins.toString()).colorByTeam(TNTLeagueGame.redTeam))