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/>.
*/
package de.steamwar.tntleague.inventory
package de.steamwar.kotlin.inventory
import org.bukkit.event.inventory.InventoryClickEvent
import org.bukkit.event.inventory.InventoryCloseEvent
@@ -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
})
}
}
@@ -17,9 +17,8 @@
* 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.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())
@@ -17,7 +17,7 @@
* 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.block.Block
@@ -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)
}
@@ -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
@@ -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
@@ -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 }
}
@@ -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
@@ -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)
}
}
@@ -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
}
}
}
}
@@ -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
@@ -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))