Fixed talisman bag breaking on join
This commit is contained in:
@@ -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'
|
||||
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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<ItemStack> {
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Function<Player, List<ItemStack>>> = 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<ItemStack>()
|
||||
val rawContents = mutableListOf<ItemStack?>()
|
||||
|
||||
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<Player, List<ItemStack>>) {
|
||||
fun registerItemStackProvider(provider: Function<Player, List<ItemStack>>) {
|
||||
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")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user