diff --git a/build.gradle b/build.gradle index c52c0de..b95699b 100644 --- a/build.gradle +++ b/build.gradle @@ -62,7 +62,7 @@ allprojects { } dependencies { - compileOnly 'com.willfp:eco:6.36.3' + compileOnly 'com.willfp:eco:6.37.2' implementation 'com.willfp:libreforge:3.75.0' implementation 'org.joml:joml:1.10.4' diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/talismans/TalismansPlugin.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/talismans/TalismansPlugin.kt index 2aa7114..032c4fb 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/talismans/TalismansPlugin.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/talismans/TalismansPlugin.kt @@ -17,16 +17,14 @@ import org.bukkit.event.Listener class TalismansPlugin : LibReforgePlugin() { val talismansYml = TalismansYml(this) - /** Internal constructor called by bukkit on plugin load. */ init { instance = this - registerHolderProvider { TalismanChecks.getTalismansOnPlayer(it) } - } - override fun handleEnableAdditional() { - TalismanChecks.regsiterItemStackProvider { + TalismanChecks.registerItemStackProvider { TalismanBag.getTalismans(it) } + + registerHolderProvider { TalismanChecks.getTalismansOnPlayer(it) } } override fun handleReloadAdditional() { diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/talismans/bag/TalismanBag.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/talismans/bag/TalismanBag.kt index 77ac3b3..b3e22de 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/talismans/bag/TalismanBag.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/talismans/bag/TalismanBag.kt @@ -19,7 +19,7 @@ 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 +import java.util.* import kotlin.math.ceil import kotlin.math.min @@ -133,6 +133,13 @@ object TalismanBag { } fun getTalismans(player: Player): List { + if (!savedItems.contains(player.uniqueId)) { + savedItems[player.uniqueId] = player.profile.read(key) + .map { Items.lookup(it).item } + .filterNot { EmptyTestableItem().matches(it) } + .filter { TalismanChecks.getTalismanOnItem(it) != null } + } + return savedItems[player.uniqueId] ?: emptyList() } } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/talismans/talismans/util/TalismanChecks.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/talismans/talismans/util/TalismanChecks.kt index f23fea0..23fa8bc 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/talismans/talismans/util/TalismanChecks.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/talismans/talismans/util/TalismanChecks.kt @@ -13,11 +13,9 @@ import com.willfp.talismans.talismans.util.TalismanUtils.getLimit import com.willfp.talismans.talismans.util.TalismanUtils.isTalismanMaterial import org.bukkit.block.ShulkerBox import org.bukkit.entity.Player -import org.bukkit.inventory.Inventory import org.bukkit.inventory.ItemStack import org.bukkit.inventory.meta.BlockStateMeta import org.bukkit.persistence.PersistentDataType -import java.util.* import java.util.concurrent.TimeUnit import java.util.function.Function @@ -32,8 +30,6 @@ object TalismanChecks { private val PROVIDERS: MutableSet>> = HashSet() - private var readInventory = true - private var readEnderChest = true private var readShulkerBoxes = true private var offhandOnly = false @@ -89,7 +85,6 @@ object TalismanChecks { * Get all talismans ItemStacks that a player has active. * * @param player The player to query. - * @param useCache If the cache should be checked. * @param extra Bonus items. * @return A set of all found talismans. */ @@ -102,19 +97,6 @@ object TalismanChecks { val contents = mutableListOf() val rawContents = mutableListOf() - if (readInventory) { - rawContents.addAll(it.inventory.contents) - } - - if (readEnderChest) { - val enderChest = it.enderChest as Inventory? - - // Not always true, bug reported where it was null. - if (enderChest != null) { - rawContents.addAll(enderChest.contents) - } - } - if (offhandOnly) { rawContents.clear() rawContents.add(it.inventory.itemInOffHand) @@ -129,20 +111,21 @@ object TalismanChecks { if (rawContent == null) { continue } + if (readShulkerBoxes) { val meta = rawContent.itemMeta if (meta is BlockStateMeta) { - val shulkerMeta = meta - if (!shulkerMeta.hasBlockState()) { + if (!meta.hasBlockState()) { continue } - val state = shulkerMeta.blockState + val state = meta.blockState if (state is ShulkerBox) { contents.addAll(state.inventory.contents) continue } } } + contents.add(rawContent) } @@ -206,7 +189,7 @@ object TalismanChecks { * @param provider The provider. */ @JvmStatic - fun regsiterItemStackProvider(provider: Function>) { + fun registerItemStackProvider(provider: Function>) { PROVIDERS.add(provider) } @@ -233,8 +216,19 @@ object TalismanChecks { @ConfigUpdater @JvmStatic fun reload(plugin: EcoPlugin) { - readInventory = plugin.configYml.getBool("read-inventory") - readEnderChest = plugin.configYml.getBool("read-enderchest") + if (plugin.configYml.getBool("read-inventory")) { + registerItemStackProvider { + it.inventory.contents.filterNotNull() + } + } + + if (plugin.configYml.getBool("read-enderchest")) { + registerItemStackProvider { + @Suppress("UNNECESSARY_SAFE_CALL", "USELESS_ELVIS") // Was null once + it.enderChest?.contents?.filterNotNull() ?: emptyList() + } + } + readShulkerBoxes = plugin.configYml.getBool("read-shulkerboxes") offhandOnly = plugin.configYml.getBool("offhand-only") }