From 76337a87bff705415459068f009825dcfcd69f21 Mon Sep 17 00:00:00 2001 From: Moritz Ruth Date: Sat, 20 Jun 2020 22:02:46 +0200 Subject: [PATCH] Allow moving the items in the hotbar --- .../spigot_ttt/game/items/ItemManager.kt | 33 +++++++++++++++++++ .../game/items/shop/ShopListener.kt | 7 +++- .../spigot_ttt/game/players/PlayerManager.kt | 2 +- .../spigot_ttt/game/worlds/TTTWorld.kt | 4 ++- 4 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/de/moritzruth/spigot_ttt/game/items/ItemManager.kt b/src/main/kotlin/de/moritzruth/spigot_ttt/game/items/ItemManager.kt index 30ab506..d744acc 100644 --- a/src/main/kotlin/de/moritzruth/spigot_ttt/game/items/ItemManager.kt +++ b/src/main/kotlin/de/moritzruth/spigot_ttt/game/items/ItemManager.kt @@ -12,15 +12,20 @@ import de.moritzruth.spigot_ttt.game.players.TTTPlayerDeathInPreparingEvent import de.moritzruth.spigot_ttt.game.players.TTTPlayerTrueDeathEvent import de.moritzruth.spigot_ttt.utils.isLeftClick import de.moritzruth.spigot_ttt.utils.isRightClick +import de.moritzruth.spigot_ttt.utils.nextTick import de.moritzruth.spigot_ttt.utils.sendActionBarMessage import org.bukkit.Location import org.bukkit.Material import org.bukkit.entity.Item import org.bukkit.entity.Player import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority import org.bukkit.event.entity.EntityDamageByEntityEvent import org.bukkit.event.entity.EntityPickupItemEvent import org.bukkit.event.entity.ItemDespawnEvent +import org.bukkit.event.inventory.ClickType +import org.bukkit.event.inventory.InventoryAction +import org.bukkit.event.inventory.InventoryClickEvent import org.bukkit.event.player.PlayerDropItemEvent import org.bukkit.event.player.PlayerInteractEvent import org.bukkit.event.player.PlayerItemHeldEvent @@ -52,6 +57,34 @@ object ItemManager { } val listener = object : GameListener() { + @EventHandler(priority = EventPriority.LOW) + fun onInventoryClick(event: InventoryClickEvent) = handle(event) { tttPlayer -> + if (event.click === ClickType.CREATIVE || event.clickedInventory?.holder != event.whoClicked) return@handle + + if (event.slot in 0..8) { + // is in hotbar + when(event.action) { + InventoryAction.PICKUP_ALL, + InventoryAction.PICKUP_HALF, + InventoryAction.PICKUP_ONE -> { + event.currentItem?.also { itemStack -> getInstanceByItemStack(itemStack)?.isSelected = false } + } + InventoryAction.PLACE_ALL, + InventoryAction.PLACE_SOME, + InventoryAction.PLACE_ONE -> { + nextTick { + if (event.slot == tttPlayer.player.inventory.heldItemSlot) { + tttPlayer.player.inventory.getItem(event.slot)?.also { itemStack -> + getInstanceByItemStack(itemStack)?.isSelected = true + } + } + } + } + else -> event.isCancelled = true + } + } + } + @EventHandler(ignoreCancelled = true) fun onPlayerInteract(event: PlayerInteractEvent) = handle(event) { tttPlayer -> if (tttPlayer.ignoreNextInteract) { diff --git a/src/main/kotlin/de/moritzruth/spigot_ttt/game/items/shop/ShopListener.kt b/src/main/kotlin/de/moritzruth/spigot_ttt/game/items/shop/ShopListener.kt index 87fdb2d..9806606 100644 --- a/src/main/kotlin/de/moritzruth/spigot_ttt/game/items/shop/ShopListener.kt +++ b/src/main/kotlin/de/moritzruth/spigot_ttt/game/items/shop/ShopListener.kt @@ -15,7 +15,12 @@ import org.bukkit.event.inventory.InventoryClickEvent object ShopListener: GameListener() { @EventHandler(ignoreCancelled = true) fun onInventoryClick(event: InventoryClickEvent) = handle(event) { tttPlayer -> - if (event.click === ClickType.CREATIVE || event.clickedInventory?.holder != event.whoClicked) return@handle + if ( + event.click === ClickType.CREATIVE || + event.clickedInventory?.holder != event.whoClicked || + event.slot in 0..8 + ) return@handle + event.isCancelled = true val itemStack = event.currentItem diff --git a/src/main/kotlin/de/moritzruth/spigot_ttt/game/players/PlayerManager.kt b/src/main/kotlin/de/moritzruth/spigot_ttt/game/players/PlayerManager.kt index f8357b9..dbdf708 100644 --- a/src/main/kotlin/de/moritzruth/spigot_ttt/game/players/PlayerManager.kt +++ b/src/main/kotlin/de/moritzruth/spigot_ttt/game/players/PlayerManager.kt @@ -71,7 +71,7 @@ object PlayerManager { } else { tttPlayer.player = player - player.sendMessage("${TTTPlugin.prefix}${ChatColor.RED}Du bist gestorben, da du das Spiel verlassen hast.") + player.sendMessage("${TTTPlugin.prefix}${ChatColor.RED}Du bist tot.") when(GameManager.phase) { GamePhase.PREPARING -> noop() // Never happens GamePhase.COMBAT -> { diff --git a/src/main/kotlin/de/moritzruth/spigot_ttt/game/worlds/TTTWorld.kt b/src/main/kotlin/de/moritzruth/spigot_ttt/game/worlds/TTTWorld.kt index cebbc24..f08d3fd 100644 --- a/src/main/kotlin/de/moritzruth/spigot_ttt/game/worlds/TTTWorld.kt +++ b/src/main/kotlin/de/moritzruth/spigot_ttt/game/worlds/TTTWorld.kt @@ -22,7 +22,9 @@ class TTTWorld(private val sourceWorldDir: File) { val spawnLocations = SpawnLocationsManager(this) init { - if (world != null) GameManager.tttWorld = this + if (world == null) { + if (worldDir.exists()) worldDir.deleteRecursively() + } else GameManager.tttWorld = this } fun load() {