From 4bb1bc0cbd7e27d4ffa57b34af6329415176ffb5 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Sun, 17 Nov 2024 12:04:07 +0100 Subject: [PATCH] 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))