Talisman bag changes

This commit is contained in:
Auxilor
2022-05-28 17:50:41 +01:00
parent 5780c45f82
commit f4d7215652
5 changed files with 65 additions and 22 deletions

View File

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

View File

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

View File

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