Your brain gets smart but your head gets dumb

This commit is contained in:
Auxilor
2021-08-12 13:17:52 +01:00
parent 7f8fb3d87b
commit 606a54bcf8
13 changed files with 105 additions and 23 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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.
*

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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

View File

@@ -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 {

View File

@@ -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++
}
}
}
}

View File

@@ -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!!

View File

@@ -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(

View File

@@ -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)
}
}
}

View File

@@ -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)
}