From a9660bd3251bbbed445f825997ef356211c8b712 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Mon, 20 Jan 2025 16:40:45 +0100 Subject: [PATCH 1/4] 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") From 18418cca2a54d862ba4e1f00f44f754420d01f7c Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Mon, 20 Jan 2025 16:41:30 +0100 Subject: [PATCH 2/4] fixup! Fix TNTLeague --- TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt | 2 -- TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt | 4 ---- 2 files changed, 6 deletions(-) diff --git a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt index fb98840a..378dbfc7 100644 --- a/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt +++ b/TNTLeague/src/de/steamwar/tntleague/TNTLeague.kt @@ -19,7 +19,6 @@ 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 @@ -43,7 +42,6 @@ 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 1fbadd5a..77aa9dfb 100644 --- a/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt +++ b/TNTLeague/src/de/steamwar/tntleague/events/GlobalListener.kt @@ -19,9 +19,7 @@ package de.steamwar.tntleague.events -import de.steamwar.kotlin.inventory.SWInventoryHolder import de.steamwar.message.SubMessage -import de.steamwar.tntleague.colorByTeam import de.steamwar.tntleague.config.TNTLeagueWorldConfig import de.steamwar.tntleague.game.TNTLeagueGame import de.steamwar.tntleague.game.TNTLeagueTeam @@ -34,9 +32,7 @@ import org.bukkit.event.EventPriority import org.bukkit.event.Listener import org.bukkit.event.entity.PlayerDeathEvent import org.bukkit.event.inventory.CraftItemEvent -import org.bukkit.event.inventory.InventoryClickEvent import org.bukkit.event.player.* -import java.util.logging.Level object GlobalListener: Listener { From 747bb1055deddfb9647abdad2c7fcb60d08a3270 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Mon, 20 Jan 2025 16:43:56 +0100 Subject: [PATCH 3/4] Fix TNTLeague --- .../src/de/steamwar/kotlin/KotlinInventory.kt | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 KotlinCore/src/de/steamwar/kotlin/KotlinInventory.kt diff --git a/KotlinCore/src/de/steamwar/kotlin/KotlinInventory.kt b/KotlinCore/src/de/steamwar/kotlin/KotlinInventory.kt new file mode 100644 index 00000000..3c5f0ae2 --- /dev/null +++ b/KotlinCore/src/de/steamwar/kotlin/KotlinInventory.kt @@ -0,0 +1,43 @@ +/* + * This file is a part of the SteamWar software. + * + * Copyright (C) 2025 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 + +import de.steamwar.inventory.SWInventory +import org.bukkit.entity.Player +import org.bukkit.event.inventory.InventoryClickEvent +import org.bukkit.inventory.Inventory +import org.bukkit.inventory.ItemStack + +abstract class KotlinInventory(val player: Player) { + + private val inv: SWInventory by lazy { SWInventory(player) { createInventory() } } + + abstract fun createInventory(): Inventory + + fun open() = inv.open() + + operator fun set(slot: Int, item: Pair Unit>) { + inv.setItemEvent(slot, item.first, item.second) + } + + operator fun set(slot: Int, item: ItemStack) { + inv.setItemEvent(slot, item) { } + } +} \ No newline at end of file From eacae09e4f94d69601ea345ae643440117a27452 Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Mon, 20 Jan 2025 16:46:53 +0100 Subject: [PATCH 4/4] Fix TNTLeague --- KotlinCore/src/de/steamwar/kotlin/KotlinInventory.kt | 5 ++--- .../src/de/steamwar/tntleague/inventory/CategoryInventory.kt | 3 ++- .../src/de/steamwar/tntleague/inventory/DealerInventory.kt | 4 +--- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/KotlinCore/src/de/steamwar/kotlin/KotlinInventory.kt b/KotlinCore/src/de/steamwar/kotlin/KotlinInventory.kt index 3c5f0ae2..54798c49 100644 --- a/KotlinCore/src/de/steamwar/kotlin/KotlinInventory.kt +++ b/KotlinCore/src/de/steamwar/kotlin/KotlinInventory.kt @@ -22,14 +22,13 @@ package de.steamwar.kotlin import de.steamwar.inventory.SWInventory import org.bukkit.entity.Player import org.bukkit.event.inventory.InventoryClickEvent -import org.bukkit.inventory.Inventory import org.bukkit.inventory.ItemStack abstract class KotlinInventory(val player: Player) { - private val inv: SWInventory by lazy { SWInventory(player) { createInventory() } } + private val inv: SWInventory by lazy { createInventory() } - abstract fun createInventory(): Inventory + abstract fun createInventory(): SWInventory fun open() = inv.open() diff --git a/TNTLeague/src/de/steamwar/tntleague/inventory/CategoryInventory.kt b/TNTLeague/src/de/steamwar/tntleague/inventory/CategoryInventory.kt index dcf1d690..76200073 100644 --- a/TNTLeague/src/de/steamwar/tntleague/inventory/CategoryInventory.kt +++ b/TNTLeague/src/de/steamwar/tntleague/inventory/CategoryInventory.kt @@ -19,6 +19,7 @@ package de.steamwar.tntleague.inventory +import de.steamwar.inventory.SWInventory import de.steamwar.kotlin.KotlinInventory import de.steamwar.tntleague.config.TNTLeagueConfig import de.steamwar.tntleague.inventory.DealerInventory.Companion.buyItem @@ -30,7 +31,7 @@ import org.bukkit.entity.Player import org.bukkit.inventory.Inventory class CategoryInventory(player: Player, category: TNTLeagueConfig.ItemCategory): KotlinInventory(player) { - override fun createInventory(): Inventory = Bukkit.createInventory(null, 9 * 6, Component.text(message.parse("DEALER", player))) + override fun createInventory() = SWInventory(player, 9 * 6, 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 384699d1..418c15fb 100644 --- a/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt +++ b/TNTLeague/src/de/steamwar/tntleague/inventory/DealerInventory.kt @@ -41,8 +41,6 @@ import java.util.* 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) this[12] = SWItem(Material.END_STONE, message.parse("DEALER_BLOCKS", player)).itemStack to openCategory(TNTLeagueConfig.ItemCategory.BLOCKS) @@ -56,7 +54,7 @@ class DealerInventory(player: Player): KotlinInventory(player) { private fun openCategory(cat: TNTLeagueConfig.ItemCategory): (e: InventoryClickEvent) -> Unit = { CategoryInventory(player, cat).open() } - override fun createInventory(): Inventory = plugin.server.createInventory(null, 6 * 9, Component.text(message.parse("DEALER", player))) + override fun createInventory() = SWInventory(player, 9 * 6, message.parse("DEALER", player)) companion object { private val priceKey = NamespacedKey(plugin, "price")