Added captivator slots
This commit is contained in:
@@ -1,14 +1,13 @@
|
||||
package com.willfp.eco.internal.gui.menu
|
||||
|
||||
import com.willfp.eco.core.gui.menu.Menu
|
||||
import com.willfp.eco.core.gui.slot.FillerSlot
|
||||
import com.willfp.eco.core.gui.slot.Slot
|
||||
import com.willfp.eco.internal.gui.slot.EcoFillerSlot
|
||||
import com.willfp.eco.util.StringUtils
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.event.inventory.InventoryCloseEvent
|
||||
import org.bukkit.inventory.Inventory
|
||||
import org.bukkit.inventory.ItemStack
|
||||
import java.util.function.Consumer
|
||||
|
||||
class EcoMenu(
|
||||
@@ -17,7 +16,6 @@ class EcoMenu(
|
||||
private val title: String,
|
||||
private val onClose: Consumer<InventoryCloseEvent>
|
||||
): Menu {
|
||||
|
||||
override fun getSlot(row: Int, column: Int): Slot {
|
||||
if (row < 1 || row > this.rows) {
|
||||
throw IllegalArgumentException("Invalid row number!")
|
||||
@@ -27,14 +25,7 @@ class EcoMenu(
|
||||
throw IllegalArgumentException("Invalid column number!")
|
||||
}
|
||||
|
||||
val slot = slots[row - 1][column - 1]
|
||||
if (slot is FillerSlot) {
|
||||
slots[row - 1][column - 1] = EcoFillerSlot(slot.itemStack)
|
||||
|
||||
return getSlot(row, column)
|
||||
}
|
||||
|
||||
return slot
|
||||
return slots[row - 1][column - 1]
|
||||
}
|
||||
|
||||
override fun open(player: Player): Inventory {
|
||||
@@ -77,4 +68,9 @@ class EcoMenu(
|
||||
override fun getTitle(): String {
|
||||
return title
|
||||
}
|
||||
|
||||
override fun getCaptiveItems(player: Player): MutableList<ItemStack> {
|
||||
val inventory = MenuHandler.getExtendedInventory(player.openInventory.topInventory)
|
||||
return inventory.captiveItems
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package com.willfp.eco.internal.gui.menu
|
||||
import com.willfp.eco.core.gui.menu.Menu
|
||||
import com.willfp.eco.core.gui.menu.MenuBuilder
|
||||
import com.willfp.eco.core.gui.slot.FillerMask
|
||||
import com.willfp.eco.core.gui.slot.FillerSlot
|
||||
import com.willfp.eco.core.gui.slot.Slot
|
||||
import com.willfp.eco.internal.gui.slot.EcoFillerSlot
|
||||
import com.willfp.eco.util.ListUtils
|
||||
@@ -58,7 +59,10 @@ class EcoMenuBuilder(private val rows: Int) : MenuBuilder {
|
||||
|
||||
for (i in slots.indices) {
|
||||
for (j in slots[i].indices) {
|
||||
val slot = slots[i][j]
|
||||
var slot = slots[i][j]
|
||||
if (slot is FillerSlot) {
|
||||
slot = EcoFillerSlot(slot.itemStack)
|
||||
}
|
||||
finalSlots[i][j] = slot
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.willfp.eco.internal.gui.menu
|
||||
|
||||
import com.willfp.eco.internal.gui.slot.EcoCaptivatorSlot
|
||||
import com.willfp.eco.util.MenuUtils
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.inventory.Inventory
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
class ExtendedInventory(
|
||||
val inventory: Inventory,
|
||||
private val menu: EcoMenu
|
||||
) {
|
||||
val captiveItems: MutableList<ItemStack> = ArrayList()
|
||||
|
||||
fun refresh(player: Player) {
|
||||
captiveItems.clear()
|
||||
for (i in 0 until inventory.size) {
|
||||
val pair = MenuUtils.convertSlotToRowColumn(i);
|
||||
val row = pair.first!!
|
||||
val column = pair.second!!
|
||||
val slot = menu.getSlot(row, column)
|
||||
if (slot is EcoCaptivatorSlot) {
|
||||
val defaultItem = slot.getItemStack(player)
|
||||
val item = inventory.getItem(i) ?: continue
|
||||
if (item != defaultItem) {
|
||||
captiveItems.add(item)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,20 +4,28 @@ import com.willfp.eco.core.gui.menu.Menu
|
||||
import org.bukkit.inventory.Inventory
|
||||
|
||||
object MenuHandler {
|
||||
private val MENUS: MutableMap<Inventory, Menu> = HashMap()
|
||||
private val MENUS: MutableMap<ExtendedInventory, EcoMenu> = HashMap()
|
||||
private val INVS: MutableMap<Inventory, ExtendedInventory> = HashMap()
|
||||
|
||||
fun registerMenu(
|
||||
inventory: Inventory,
|
||||
menu: Menu
|
||||
menu: EcoMenu
|
||||
) {
|
||||
MENUS[inventory] = menu
|
||||
val extendedInventory = ExtendedInventory(inventory, menu)
|
||||
INVS[inventory] = extendedInventory
|
||||
MENUS[extendedInventory] = menu
|
||||
}
|
||||
|
||||
fun unregisterMenu(inventory: Inventory) {
|
||||
MENUS.remove(inventory)
|
||||
MENUS.remove(INVS[inventory])
|
||||
INVS.remove(inventory)
|
||||
}
|
||||
|
||||
fun getMenu(inventory: Inventory): Menu? {
|
||||
return MENUS[inventory]
|
||||
return MENUS[INVS[inventory]]
|
||||
}
|
||||
|
||||
fun getExtendedInventory(inventory: Inventory): ExtendedInventory {
|
||||
return INVS[inventory]!!
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.willfp.eco.internal.gui.slot
|
||||
|
||||
import com.willfp.eco.core.Eco
|
||||
import com.willfp.eco.core.gui.slot.Slot
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.event.inventory.InventoryClickEvent
|
||||
import org.bukkit.inventory.ItemStack
|
||||
import java.util.function.BiConsumer
|
||||
import java.util.function.Function
|
||||
|
||||
class EcoCaptivatorSlot(
|
||||
provider: Function<Player, ItemStack>
|
||||
) : EcoSlot(
|
||||
provider,
|
||||
allowMovingItem,
|
||||
allowMovingItem,
|
||||
allowMovingItem,
|
||||
allowMovingItem,
|
||||
allowMovingItem
|
||||
) {
|
||||
var captive: ItemStack? = null
|
||||
|
||||
override fun getItemStack(player: Player): ItemStack {
|
||||
return captive ?: provider.apply(player);
|
||||
}
|
||||
|
||||
companion object {
|
||||
val plugin = Eco.getHandler().ecoPlugin!!
|
||||
|
||||
val allowMovingItem: BiConsumer<InventoryClickEvent, Slot> = BiConsumer { event, _ ->
|
||||
event.isCancelled = false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,7 @@ import java.util.function.BiConsumer
|
||||
import java.util.function.Function
|
||||
|
||||
open class EcoSlot(
|
||||
private val provider: Function<Player, ItemStack>,
|
||||
val provider: Function<Player, ItemStack>,
|
||||
private val onLeftClick: BiConsumer<InventoryClickEvent, Slot>,
|
||||
private val onRightClick: BiConsumer<InventoryClickEvent, Slot>,
|
||||
private val onShiftLeftClick: BiConsumer<InventoryClickEvent, Slot>,
|
||||
|
||||
@@ -9,6 +9,8 @@ import java.util.function.BiConsumer
|
||||
import java.util.function.Function
|
||||
|
||||
class EcoSlotBuilder(private val provider: Function<Player, ItemStack>) : SlotBuilder {
|
||||
private var captive = false;
|
||||
|
||||
private var onLeftClick: BiConsumer<InventoryClickEvent, Slot> = BiConsumer { _, _ -> run { } }
|
||||
private var onRightClick: BiConsumer<InventoryClickEvent, Slot> = BiConsumer { _, _ -> run { } }
|
||||
private var onShiftLeftClick: BiConsumer<InventoryClickEvent, Slot> = BiConsumer { _, _ -> run { } }
|
||||
@@ -40,7 +42,16 @@ class EcoSlotBuilder(private val provider: Function<Player, ItemStack>) : SlotBu
|
||||
return this
|
||||
}
|
||||
|
||||
override fun setCaptive(): SlotBuilder {
|
||||
captive = true
|
||||
return this
|
||||
}
|
||||
|
||||
override fun build(): Slot {
|
||||
return EcoSlot(provider, onLeftClick, onRightClick, onShiftLeftClick, onShiftRightClick, onMiddleClick)
|
||||
return if (captive) {
|
||||
EcoCaptivatorSlot(provider)
|
||||
} else {
|
||||
EcoSlot(provider, onLeftClick, onRightClick, onShiftLeftClick, onShiftRightClick, onMiddleClick)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user