Your brain gets smart but your head gets dumb
This commit is contained in:
@@ -2,7 +2,7 @@ package com.willfp.eco.core.gui;
|
||||
|
||||
import com.willfp.eco.core.gui.menu.MenuBuilder;
|
||||
import com.willfp.eco.core.gui.slot.SlotBuilder;
|
||||
import com.willfp.eco.core.gui.slot.SlotProvider;
|
||||
import com.willfp.eco.core.gui.slot.functional.SlotProvider;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.willfp.eco.core.gui.slot;
|
||||
|
||||
import com.willfp.eco.core.Eco;
|
||||
import com.willfp.eco.core.gui.slot.functional.SlotProvider;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.willfp.eco.core.gui.slot;
|
||||
|
||||
import com.willfp.eco.core.gui.slot.functional.SlotHandler;
|
||||
import com.willfp.eco.core.gui.slot.functional.SlotModifier;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -99,6 +101,14 @@ public interface SlotBuilder {
|
||||
*/
|
||||
SlotBuilder onMiddleClick(@NotNull SlotHandler handler);
|
||||
|
||||
/**
|
||||
* Modify the ItemStack.
|
||||
*
|
||||
* @param modifier The modifier.
|
||||
* @return The builder.
|
||||
*/
|
||||
SlotBuilder setModifier(@NotNull SlotModifier modifier);
|
||||
|
||||
/**
|
||||
* Set slot to be a captive slot.
|
||||
*
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.willfp.eco.core.gui.slot;
|
||||
package com.willfp.eco.core.gui.slot.functional;
|
||||
|
||||
import com.willfp.eco.core.gui.menu.Menu;
|
||||
import com.willfp.eco.core.gui.slot.Slot;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.willfp.eco.core.gui.slot.functional;
|
||||
|
||||
import com.willfp.eco.core.gui.menu.Menu;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* Interface to run on slot modify.
|
||||
*/
|
||||
@FunctionalInterface
|
||||
public interface SlotModifier {
|
||||
/**
|
||||
* Performs this operation on the given arguments.
|
||||
*
|
||||
* @param player The player.
|
||||
* @param menu The menu.
|
||||
* @param previous The previous ItemStack.
|
||||
*/
|
||||
void provide(@NotNull Player player,
|
||||
@NotNull Menu menu,
|
||||
@NotNull ItemStack previous);
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.willfp.eco.core.gui.slot;
|
||||
package com.willfp.eco.core.gui.slot.functional;
|
||||
|
||||
import com.willfp.eco.core.gui.menu.Menu;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -3,7 +3,7 @@ package com.willfp.eco.internal.gui
|
||||
import com.willfp.eco.core.gui.GUIFactory
|
||||
import com.willfp.eco.core.gui.menu.MenuBuilder
|
||||
import com.willfp.eco.core.gui.slot.SlotBuilder
|
||||
import com.willfp.eco.core.gui.slot.SlotProvider
|
||||
import com.willfp.eco.core.gui.slot.functional.SlotProvider
|
||||
import com.willfp.eco.internal.gui.menu.EcoMenuBuilder
|
||||
import com.willfp.eco.internal.gui.slot.EcoSlotBuilder
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ import org.bukkit.inventory.ItemStack
|
||||
|
||||
class EcoMenu(
|
||||
private val rows: Int,
|
||||
private val slots: List<MutableList<EcoSlot>>,
|
||||
val slots: List<MutableList<EcoSlot>>,
|
||||
private val title: String,
|
||||
private val onClose: CloseHandler
|
||||
): Menu {
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.willfp.eco.internal.gui.menu
|
||||
|
||||
import com.willfp.eco.internal.gui.slot.EcoCaptivatorSlot
|
||||
import com.willfp.eco.util.MenuUtils
|
||||
import com.willfp.eco.util.StringUtils
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.inventory.Inventory
|
||||
import org.bukkit.inventory.ItemStack
|
||||
@@ -15,7 +16,7 @@ class ExtendedInventory(
|
||||
fun refresh(player: Player) {
|
||||
captiveItems.clear()
|
||||
for (i in 0 until inventory.size) {
|
||||
val pair = MenuUtils.convertSlotToRowColumn(i);
|
||||
val pair = MenuUtils.convertSlotToRowColumn(i)
|
||||
val row = pair.first!!
|
||||
val column = pair.second!!
|
||||
val slot = menu.getSlot(row, column)
|
||||
@@ -27,5 +28,28 @@ class ExtendedInventory(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var i = 0
|
||||
for (row in menu.slots) {
|
||||
for (slot in row) {
|
||||
if (i == menu.rows * 9) {
|
||||
break
|
||||
}
|
||||
val slotItem = slot.getItemStack(player, menu)
|
||||
val meta = slotItem.itemMeta
|
||||
if (meta != null) {
|
||||
val lore = meta.lore
|
||||
if (lore != null) {
|
||||
lore.replaceAll{ s -> StringUtils.format(s, player) }
|
||||
meta.lore = lore
|
||||
}
|
||||
slotItem.itemMeta = meta
|
||||
}
|
||||
if (!slot.isCaptive) {
|
||||
inventory.setItem(i, slotItem)
|
||||
}
|
||||
i++
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.willfp.eco.internal.gui.slot
|
||||
|
||||
import com.willfp.eco.core.Eco
|
||||
import com.willfp.eco.core.gui.slot.SlotHandler
|
||||
import com.willfp.eco.core.gui.slot.functional.SlotHandler
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.inventory.ItemStack
|
||||
|
||||
@@ -11,7 +11,8 @@ class EcoCaptivatorSlot : EcoSlot(
|
||||
allowMovingItem,
|
||||
allowMovingItem,
|
||||
allowMovingItem,
|
||||
allowMovingItem
|
||||
allowMovingItem,
|
||||
{ _, _, _ -> }
|
||||
) {
|
||||
companion object {
|
||||
val plugin = Eco.getHandler().ecoPlugin!!
|
||||
|
||||
@@ -2,8 +2,9 @@ package com.willfp.eco.internal.gui.slot
|
||||
|
||||
import com.willfp.eco.core.gui.menu.Menu
|
||||
import com.willfp.eco.core.gui.slot.Slot
|
||||
import com.willfp.eco.core.gui.slot.SlotHandler
|
||||
import com.willfp.eco.core.gui.slot.SlotProvider
|
||||
import com.willfp.eco.core.gui.slot.functional.SlotHandler
|
||||
import com.willfp.eco.core.gui.slot.functional.SlotModifier
|
||||
import com.willfp.eco.core.gui.slot.functional.SlotProvider
|
||||
import com.willfp.eco.internal.gui.menu.MenuHandler
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.event.inventory.ClickType
|
||||
@@ -16,7 +17,8 @@ open class EcoSlot(
|
||||
private val onRightClick: SlotHandler,
|
||||
private val onShiftLeftClick: SlotHandler,
|
||||
private val onShiftRightClick: SlotHandler,
|
||||
private val onMiddleClick: SlotHandler
|
||||
private val onMiddleClick: SlotHandler,
|
||||
private val modifier: SlotModifier
|
||||
) : Slot {
|
||||
|
||||
fun handleInventoryClick(
|
||||
@@ -35,7 +37,10 @@ open class EcoSlot(
|
||||
}
|
||||
|
||||
override fun getItemStack(player: Player): ItemStack {
|
||||
return provider.provide(player, MenuHandler.getMenu(player.openInventory.topInventory)!!)
|
||||
val menu = MenuHandler.getMenu(player.openInventory.topInventory)!!
|
||||
val prev = provider.provide(player, menu)
|
||||
modifier.provide(player, menu, prev)
|
||||
return prev
|
||||
}
|
||||
|
||||
fun getItemStack(
|
||||
|
||||
@@ -2,17 +2,24 @@ package com.willfp.eco.internal.gui.slot
|
||||
|
||||
import com.willfp.eco.core.gui.slot.Slot
|
||||
import com.willfp.eco.core.gui.slot.SlotBuilder
|
||||
import com.willfp.eco.core.gui.slot.SlotHandler
|
||||
import com.willfp.eco.core.gui.slot.SlotProvider
|
||||
import com.willfp.eco.core.gui.slot.functional.SlotHandler
|
||||
import com.willfp.eco.core.gui.slot.functional.SlotModifier
|
||||
import com.willfp.eco.core.gui.slot.functional.SlotProvider
|
||||
|
||||
class EcoSlotBuilder(private val provider: SlotProvider) : SlotBuilder {
|
||||
private var captive = false;
|
||||
private var captive = false
|
||||
var modifier: SlotModifier = SlotModifier{ player, menu, _ -> provider.provide(player, menu)}
|
||||
|
||||
private var onLeftClick = SlotHandler { _, _, _ -> run { } }
|
||||
private var onRightClick = SlotHandler { _, _, _ -> run { } }
|
||||
private var onShiftLeftClick = SlotHandler { _, _, _ -> run { } }
|
||||
private var onShiftRightClick = SlotHandler { _, _, _ -> run { } }
|
||||
private var onMiddleClick = SlotHandler { _, _, _ -> run { } }
|
||||
private var onLeftClick =
|
||||
SlotHandler { _, _, _ -> run { } }
|
||||
private var onRightClick =
|
||||
SlotHandler { _, _, _ -> run { } }
|
||||
private var onShiftLeftClick =
|
||||
SlotHandler { _, _, _ -> run { } }
|
||||
private var onShiftRightClick =
|
||||
SlotHandler { _, _, _ -> run { } }
|
||||
private var onMiddleClick =
|
||||
SlotHandler { _, _, _ -> run { } }
|
||||
|
||||
override fun onLeftClick(action: SlotHandler): SlotBuilder {
|
||||
onLeftClick = action
|
||||
@@ -44,11 +51,16 @@ class EcoSlotBuilder(private val provider: SlotProvider) : SlotBuilder {
|
||||
return this
|
||||
}
|
||||
|
||||
override fun setModifier(modifier: SlotModifier): SlotBuilder {
|
||||
this.modifier = modifier
|
||||
return this
|
||||
}
|
||||
|
||||
override fun build(): Slot {
|
||||
return if (captive) {
|
||||
EcoCaptivatorSlot()
|
||||
} else {
|
||||
EcoSlot(provider, onLeftClick, onRightClick, onShiftLeftClick, onShiftRightClick, onMiddleClick)
|
||||
EcoSlot(provider, onLeftClick, onRightClick, onShiftLeftClick, onShiftRightClick, onMiddleClick, modifier)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,6 @@ import com.willfp.eco.core.EcoPlugin
|
||||
import com.willfp.eco.core.PluginDependent
|
||||
import com.willfp.eco.core.gui.menu.Menu
|
||||
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 org.bukkit.Material
|
||||
import org.bukkit.event.EventHandler
|
||||
@@ -28,7 +27,13 @@ class GUITester(plugin: EcoPlugin) : PluginDependent<EcoPlugin>(plugin), Listene
|
||||
.build()
|
||||
).modfiy { builder ->
|
||||
run {
|
||||
val slot = FillerSlot(ItemStack(Material.RED_STAINED_GLASS_PANE))
|
||||
val slot = Slot.builder(ItemStack(Material.RED_STAINED_GLASS_PANE))
|
||||
.setModifier{ player, menu, prev -> run {
|
||||
if (menu.getCaptiveItems(player).isNotEmpty()) {
|
||||
prev.type = Material.GREEN_STAINED_GLASS_PANE
|
||||
}
|
||||
}}
|
||||
.build()
|
||||
for (i in 3..8) {
|
||||
builder.setSlot(2, i, slot)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user