Talisman bag changes
This commit is contained in:
@@ -4,6 +4,7 @@ import com.willfp.eco.core.command.impl.PluginCommand
|
||||
import com.willfp.eco.core.display.DisplayModule
|
||||
import com.willfp.eco.core.items.CustomItem
|
||||
import com.willfp.libreforge.LibReforgePlugin
|
||||
import com.willfp.talismans.bag.TalismanBag
|
||||
import com.willfp.talismans.command.CommandTalismans
|
||||
import com.willfp.talismans.config.TalismansYml
|
||||
import com.willfp.talismans.display.TalismanDisplay
|
||||
@@ -17,14 +18,18 @@ import org.bukkit.event.Listener
|
||||
class TalismansPlugin : LibReforgePlugin() {
|
||||
val talismansYml = TalismansYml(this)
|
||||
|
||||
/**
|
||||
* Internal constructor called by bukkit on plugin load.
|
||||
*/
|
||||
/** Internal constructor called by bukkit on plugin load. */
|
||||
init {
|
||||
instance = this
|
||||
registerHolderProvider { TalismanChecks.getTalismansOnPlayer(it) }
|
||||
}
|
||||
|
||||
override fun handleEnableAdditional() {
|
||||
TalismanChecks.regsiterItemStackProvider {
|
||||
TalismanBag.getTalismans(it)
|
||||
}
|
||||
}
|
||||
|
||||
override fun handleReloadAdditional() {
|
||||
logger.info("${Talismans.values().size} Talismans Loaded")
|
||||
CustomItem(
|
||||
|
||||
@@ -5,18 +5,24 @@ import com.willfp.eco.core.config.updating.ConfigUpdater
|
||||
import com.willfp.eco.core.data.keys.PersistentDataKey
|
||||
import com.willfp.eco.core.data.keys.PersistentDataKeyType
|
||||
import com.willfp.eco.core.data.profile
|
||||
import com.willfp.eco.core.drops.DropQueue
|
||||
import com.willfp.eco.core.gui.menu
|
||||
import com.willfp.eco.core.gui.menu.Menu
|
||||
import com.willfp.eco.core.gui.slot
|
||||
import com.willfp.eco.core.items.Items
|
||||
import com.willfp.eco.core.recipe.parts.EmptyTestableItem
|
||||
import com.willfp.talismans.talismans.util.TalismanChecks
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.inventory.ItemStack
|
||||
import java.util.UUID
|
||||
|
||||
object TalismanBag {
|
||||
private lateinit var menu: Menu
|
||||
private lateinit var key: PersistentDataKey<List<String>>
|
||||
|
||||
private val savedItems = mutableMapOf<UUID, List<ItemStack>>()
|
||||
|
||||
@JvmStatic
|
||||
@ConfigUpdater
|
||||
fun update(plugin: EcoPlugin) {
|
||||
@@ -24,32 +30,56 @@ object TalismanBag {
|
||||
plugin.namespacedKeyFactory.create("talisman_bag"),
|
||||
PersistentDataKeyType.STRING_LIST,
|
||||
emptyList()
|
||||
)
|
||||
).player()
|
||||
|
||||
menu = menu(6) {
|
||||
for (row in 1..6) {
|
||||
val rows = plugin.configYml.getInt("bag.rows")
|
||||
|
||||
menu = menu(rows) {
|
||||
for (row in 1..rows) {
|
||||
for (column in 1..9) {
|
||||
setSlot(row, column,
|
||||
slot { player, _ ->
|
||||
val items = player.profile.read(key).map {
|
||||
Items.lookup(it).item
|
||||
}
|
||||
setSlot(row, column, slot({ player, _ ->
|
||||
val inBag = player.profile.read(key).map { Items.lookup(it).item }
|
||||
val index = (column - 1) + ((row - 1) * 9)
|
||||
|
||||
val index = (row - 1) * 9 + column - 1
|
||||
|
||||
items.toList().getOrNull(index) ?: ItemStack(Material.AIR)
|
||||
}
|
||||
)
|
||||
inBag.toList().getOrNull(index)?.clone() ?: ItemStack(Material.AIR)
|
||||
}) {
|
||||
setCaptive(true)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
setTitle(plugin.configYml.getFormattedString("bag.title"))
|
||||
|
||||
onRender { player, menu ->
|
||||
val items = menu.getCaptiveItems(player)
|
||||
.filterNot { EmptyTestableItem().matches(it) }
|
||||
|
||||
val toWrite = items
|
||||
.filter { TalismanChecks.getTalismanOnItem(it) != null }
|
||||
|
||||
savedItems[player.uniqueId] = toWrite.toList()
|
||||
}
|
||||
|
||||
onClose { event, menu ->
|
||||
val player = event.player as Player
|
||||
val items = menu.getCaptiveItems(player).map {
|
||||
Items.toLookupString(it)
|
||||
}
|
||||
|
||||
player.profile.write(key, items)
|
||||
val items = menu.getCaptiveItems(player)
|
||||
.filterNot { EmptyTestableItem().matches(it) }
|
||||
|
||||
val toWrite = items
|
||||
.filter { TalismanChecks.getTalismanOnItem(it) != null }
|
||||
|
||||
savedItems[player.uniqueId] = toWrite.toList()
|
||||
|
||||
player.profile.write(key, toWrite.map { Items.toLookupString(it) })
|
||||
|
||||
val toDrop = items.filter { TalismanChecks.getTalismanOnItem(it) == null }
|
||||
|
||||
DropQueue(player)
|
||||
.setLocation(player.eyeLocation)
|
||||
.forceTelekinesis()
|
||||
.addItems(toDrop)
|
||||
.push()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -57,4 +87,8 @@ object TalismanBag {
|
||||
fun open(player: Player) {
|
||||
menu.open(player)
|
||||
}
|
||||
|
||||
fun getTalismans(player: Player): List<ItemStack> {
|
||||
return savedItems[player.uniqueId] ?: emptyList()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,10 @@ top-level-only: true # If only the top level of any given talisman should be act
|
||||
|
||||
offhand-only: false # If talismans or shulkers of talismans need to be in the offhand to work
|
||||
|
||||
bag:
|
||||
title: "Talisman Bag"
|
||||
rows: 4
|
||||
|
||||
cannot-afford:
|
||||
in-actionbar: true
|
||||
sound:
|
||||
|
||||
Reference in New Issue
Block a user