From a9660bd3251bbbed445f825997ef356211c8b712 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Mon, 20 Jan 2025 16:40:45 +0100 Subject: [PATCH] Fix TNTLeague --- .../kotlin/inventory/SWInventoryHolder.kt | 60 ------------------- .../src/de/steamwar/tntleague/TNTLeague.kt | 2 + .../tntleague/events/GlobalListener.kt | 9 --- .../tntleague/events/IngameListener.kt | 2 +- .../tntleague/events/LobbyListener.kt | 5 -- .../steamwar/tntleague/game/TNTLeagueTeam.kt | 2 +- .../tntleague/inventory/CategoryInventory.kt | 6 +- .../tntleague/inventory/DealerInventory.kt | 11 ++-- 8 files changed, 14 insertions(+), 83 deletions(-) delete mode 100644 KotlinCore/src/de/steamwar/kotlin/inventory/SWInventoryHolder.kt diff --git a/KotlinCore/src/de/steamwar/kotlin/inventory/SWInventoryHolder.kt b/KotlinCore/src/de/steamwar/kotlin/inventory/SWInventoryHolder.kt deleted file mode 100644 index 3afb3183..00000000 --- a/KotlinCore/src/de/steamwar/kotlin/inventory/SWInventoryHolder.kt +++ /dev/null @@ -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 . - */ - -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 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 Unit>) { - addItem(item.first, slot, item.second) - } - - operator fun set(slot: Int, item: ItemStack) { - addItem(item, slot) { } - } -} \ No newline at end of file diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt index 378dbfc7..fb98840a 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt @@ -19,6 +19,7 @@ package de.steamwar.tntleague +import de.steamwar.kotlin.inventory.SWInventoryHolder import de.steamwar.message.Message import de.steamwar.tntleague.command.AcceptCommand import de.steamwar.tntleague.command.InviteCommand @@ -42,6 +43,7 @@ class TNTLeague : JavaPlugin() { server.pluginManager.registerEvents(LobbyListener, this) server.pluginManager.registerEvents(GlobalListener, this) + server.pluginManager.registerEvents(SWInventoryHolder.InventoryListener, this) logger.info("TNTLeague enabled") diff --git a/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt index b01dffd9..1fbadd5a 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt @@ -66,15 +66,6 @@ object GlobalListener: Listener { 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) fun onPlayerMove(e: PlayerMoveEvent) { if (e.to.blockY < TNTLeagueWorldConfig.minHeight) { diff --git a/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt index ca379821..95b700ef 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/IngameListener.kt @@ -44,7 +44,7 @@ object IngameListener: Listener { if(e.rightClicked.type == EntityType.WANDERING_TRADER) { e.isCancelled = true - e.player.openInventory(DealerInventory(e.player).getInventory()) + DealerInventory(e.player).open() } } diff --git a/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt b/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt index 586b0e79..bb570498 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/LobbyListener.kt @@ -39,11 +39,6 @@ object LobbyListener: Listener { } } - @EventHandler(priority = EventPriority.LOWEST) - fun onPlayerQuit(e: PlayerQuitEvent) { - TNTLeagueGame.playerLeave(e.player) - } - @EventHandler fun onPlayerDamage(e: EntityDamageEvent) { e.isCancelled = true diff --git a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt index 3828d9e8..200f457e 100644 --- a/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt +++ b/TNTLeague/src/de/steamwar/tntleague/game/TNTLeagueTeam.kt @@ -128,7 +128,7 @@ data class TNTLeagueTeam(val config: TNTLeagueWorldConfig.TeamConfig, private va fun leave(player: Player) { members.remove(player) - if (TNTLeagueGame.state != TNTLeagueGame.GameState.RUNNING) { + if (TNTLeagueGame.state == TNTLeagueGame.GameState.LOBBY) { if (members.isEmpty()) { plugin.server.onlinePlayers.firstOrNull { it != player && TNTLeagueGame.getTeam(it) == null }?.run { members.add(this) diff --git a/TNTLeague/src/de/steamwar/tntleague/inventory/CategoryInventory.kt b/TNTLeague/src/de/steamwar/tntleague/inventory/CategoryInventory.kt index 3a23812f..dcf1d690 100644 --- a/TNTLeague/src/de/steamwar/tntleague/inventory/CategoryInventory.kt +++ b/TNTLeague/src/de/steamwar/tntleague/inventory/CategoryInventory.kt @@ -19,7 +19,7 @@ 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.inventory.DealerInventory.Companion.buyItem import de.steamwar.tntleague.inventory.DealerInventory.Companion.itemsByCategory @@ -29,8 +29,8 @@ import org.bukkit.Bukkit import org.bukkit.entity.Player import org.bukkit.inventory.Inventory -class CategoryInventory(val player: Player, category: TNTLeagueConfig.ItemCategory): SWInventoryHolder() { - override fun createInventory(): Inventory = Bukkit.createInventory(this, 9 * 6, Component.text(message.parse("DEALER", player))) +class CategoryInventory(player: Player, category: TNTLeagueConfig.ItemCategory): KotlinInventory(player) { + override fun createInventory(): Inventory = Bukkit.createInventory(null, 9 * 6, Component.text(message.parse("DEALER", player))) init { itemsByCategory[category]!!.forEachIndexed { index, item -> diff --git a/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt b/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt index d0af0ca4..384699d1 100644 --- a/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt +++ b/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt @@ -19,8 +19,9 @@ package de.steamwar.tntleague.inventory +import de.steamwar.inventory.SWInventory 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.game.TNTLeagueGame import de.steamwar.tntleague.message @@ -38,7 +39,9 @@ import org.bukkit.inventory.ItemStack import org.bukkit.persistence.PersistentDataType import java.util.* -class DealerInventory(val player: Player): SWInventoryHolder() { +class DealerInventory(player: Player): KotlinInventory(player) { + + private val inv: SWInventory = SWInventory(player) { createInventory() } init { 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 { private val priceKey = NamespacedKey(plugin, "price")