Fix TNTLeague

This commit is contained in:
2025-01-20 16:40:45 +01:00
parent 569d5b033e
commit a9660bd325
8 changed files with 14 additions and 83 deletions

View File

@ -1,60 +0,0 @@
/*
* 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 <https://www.gnu.org/licenses/>.
*/
package de.steamwar.kotlin.inventory
import org.bukkit.event.inventory.InventoryClickEvent
import org.bukkit.event.inventory.InventoryCloseEvent
import org.bukkit.inventory.Inventory
import org.bukkit.inventory.InventoryHolder
import org.bukkit.inventory.ItemStack
abstract class SWInventoryHolder: InventoryHolder {
val _inventory: Inventory by lazy { createInventory() }
private val callbacks = mutableMapOf<Int, (event: InventoryClickEvent) -> Unit>()
override fun getInventory(): Inventory = _inventory
abstract fun createInventory(): Inventory
open fun handleInventoryClick(event: InventoryClickEvent) {
callbacks[event.slot]?.invoke(event)
}
fun addItem(item: ItemStack, slot: Int, callback: (event: InventoryClickEvent) -> Unit) {
_inventory.setItem(slot, item)
addCallback(slot, callback)
}
fun addCallback(slot: Int, callback: (event: InventoryClickEvent) -> Unit) {
callbacks[slot] = callback
}
open fun handleClose(event: InventoryCloseEvent) { }
operator fun set(slot: Int, item: Pair<ItemStack, (event: InventoryClickEvent) -> Unit>) {
addItem(item.first, slot, item.second)
}
operator fun set(slot: Int, item: ItemStack) {
addItem(item, slot) { }
}
}

View File

@ -19,6 +19,7 @@
package de.steamwar.tntleague package de.steamwar.tntleague
import de.steamwar.kotlin.inventory.SWInventoryHolder
import de.steamwar.message.Message import de.steamwar.message.Message
import de.steamwar.tntleague.command.AcceptCommand import de.steamwar.tntleague.command.AcceptCommand
import de.steamwar.tntleague.command.InviteCommand import de.steamwar.tntleague.command.InviteCommand
@ -42,6 +43,7 @@ class TNTLeague : JavaPlugin() {
server.pluginManager.registerEvents(LobbyListener, this) server.pluginManager.registerEvents(LobbyListener, this)
server.pluginManager.registerEvents(GlobalListener, this) server.pluginManager.registerEvents(GlobalListener, this)
server.pluginManager.registerEvents(SWInventoryHolder.InventoryListener, this)
logger.info("TNTLeague enabled") logger.info("TNTLeague enabled")

View File

@ -66,15 +66,6 @@ object GlobalListener: Listener {
e.isCancelled = true e.isCancelled = true
} }
@EventHandler(priority = EventPriority.LOWEST)
fun onPlayerClick(e: InventoryClickEvent) {
val holder = e.inventory.getHolder(false)
if (holder is SWInventoryHolder && e.clickedInventory == holder._inventory) {
e.isCancelled = true
holder.handleInventoryClick(e)
}
}
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
fun onPlayerMove(e: PlayerMoveEvent) { fun onPlayerMove(e: PlayerMoveEvent) {
if (e.to.blockY < TNTLeagueWorldConfig.minHeight) { if (e.to.blockY < TNTLeagueWorldConfig.minHeight) {

View File

@ -44,7 +44,7 @@ object IngameListener: Listener {
if(e.rightClicked.type == EntityType.WANDERING_TRADER) { if(e.rightClicked.type == EntityType.WANDERING_TRADER) {
e.isCancelled = true e.isCancelled = true
e.player.openInventory(DealerInventory(e.player).getInventory()) DealerInventory(e.player).open()
} }
} }

View File

@ -39,11 +39,6 @@ object LobbyListener: Listener {
} }
} }
@EventHandler(priority = EventPriority.LOWEST)
fun onPlayerQuit(e: PlayerQuitEvent) {
TNTLeagueGame.playerLeave(e.player)
}
@EventHandler @EventHandler
fun onPlayerDamage(e: EntityDamageEvent) { fun onPlayerDamage(e: EntityDamageEvent) {
e.isCancelled = true e.isCancelled = true

View File

@ -128,7 +128,7 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va
fun leave(player: Player) { fun leave(player: Player) {
members.remove(player) members.remove(player)
if (TNTLeagueGame.state != TNTLeagueGame.GameState.RUNNING) { if (TNTLeagueGame.state == TNTLeagueGame.GameState.LOBBY) {
if (members.isEmpty()) { if (members.isEmpty()) {
plugin.server.onlinePlayers.firstOrNull { it != player && TNTLeagueGame.getTeam(it) == null }?.run { plugin.server.onlinePlayers.firstOrNull { it != player && TNTLeagueGame.getTeam(it) == null }?.run {
members.add(this) members.add(this)

View File

@ -19,7 +19,7 @@
package de.steamwar.tntleague.inventory package de.steamwar.tntleague.inventory
import de.steamwar.kotlin.inventory.SWInventoryHolder import de.steamwar.kotlin.KotlinInventory
import de.steamwar.tntleague.config.TNTLeagueConfig import de.steamwar.tntleague.config.TNTLeagueConfig
import de.steamwar.tntleague.inventory.DealerInventory.Companion.buyItem import de.steamwar.tntleague.inventory.DealerInventory.Companion.buyItem
import de.steamwar.tntleague.inventory.DealerInventory.Companion.itemsByCategory import de.steamwar.tntleague.inventory.DealerInventory.Companion.itemsByCategory
@ -29,8 +29,8 @@ import org.bukkit.Bukkit
import org.bukkit.entity.Player import org.bukkit.entity.Player
import org.bukkit.inventory.Inventory import org.bukkit.inventory.Inventory
class CategoryInventory(val player: Player, category: TNTLeagueConfig.ItemCategory): SWInventoryHolder() { class CategoryInventory(player: Player, category: TNTLeagueConfig.ItemCategory): KotlinInventory(player) {
override fun createInventory(): Inventory = Bukkit.createInventory(this, 9 * 6, Component.text(message.parse("DEALER", player))) override fun createInventory(): Inventory = Bukkit.createInventory(null, 9 * 6, Component.text(message.parse("DEALER", player)))
init { init {
itemsByCategory[category]!!.forEachIndexed { index, item -> itemsByCategory[category]!!.forEachIndexed { index, item ->

View File

@ -19,8 +19,9 @@
package de.steamwar.tntleague.inventory package de.steamwar.tntleague.inventory
import de.steamwar.inventory.SWInventory
import de.steamwar.inventory.SWItem import de.steamwar.inventory.SWItem
import de.steamwar.kotlin.inventory.SWInventoryHolder import de.steamwar.kotlin.KotlinInventory
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.message import de.steamwar.tntleague.message
@ -38,7 +39,9 @@ import org.bukkit.inventory.ItemStack
import org.bukkit.persistence.PersistentDataType import org.bukkit.persistence.PersistentDataType
import java.util.* import java.util.*
class DealerInventory(val player: Player): SWInventoryHolder() { class DealerInventory(player: Player): KotlinInventory(player) {
private val inv: SWInventory = SWInventory(player) { createInventory() }
init { init {
this[10] = SWItem(Material.REDSTONE_BLOCK, message.parse("DEALER_REDSTONE", player)).itemStack to openCategory(TNTLeagueConfig.ItemCategory.REDSTONE) this[10] = SWItem(Material.REDSTONE_BLOCK, message.parse("DEALER_REDSTONE", player)).itemStack to openCategory(TNTLeagueConfig.ItemCategory.REDSTONE)
@ -51,9 +54,9 @@ class DealerInventory(val player: Player): SWInventoryHolder() {
} }
} }
private fun openCategory(cat: TNTLeagueConfig.ItemCategory): (e: InventoryClickEvent) -> Unit = { player.openInventory(CategoryInventory(player, cat).inventory) } private fun openCategory(cat: TNTLeagueConfig.ItemCategory): (e: InventoryClickEvent) -> Unit = { CategoryInventory(player, cat).open() }
override fun createInventory(): Inventory = plugin.server.createInventory(this, 6 * 9, Component.text(message.parse("DEALER", player))) override fun createInventory(): Inventory = plugin.server.createInventory(null, 6 * 9, Component.text(message.parse("DEALER", player)))
companion object { companion object {
private val priceKey = NamespacedKey(plugin, "price") private val priceKey = NamespacedKey(plugin, "price")