From f33efd3317284b5b597808a2e47cd15e6e6ee6df Mon Sep 17 00:00:00 2001 From: Auxilor Date: Sat, 1 Jan 2022 13:38:44 +0000 Subject: [PATCH] Re-added talisman levels --- .../willfp/talismans/talismans/Talisman.kt | 3 ++ .../talismans/util/TalismanChecks.kt | 38 +++++++++---------- .../core-plugin/src/main/resources/config.yml | 1 + .../src/main/resources/talismans.yml | 18 ++++++--- 4 files changed, 34 insertions(+), 26 deletions(-) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/talismans/talismans/Talisman.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/talismans/talismans/Talisman.kt index 41a4979..8a5a1ce 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/talismans/talismans/Talisman.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/talismans/talismans/Talisman.kt @@ -67,6 +67,9 @@ class Talisman( itemStack ).apply { register() } + val lowerLevel: Talisman? + get() = Talismans.getByID(config.getString("higherLevelOf")) + override val effects = config.getSubsections("effects").mapNotNull { Effects.compile(it, "Talisman ID $id") }.toSet() 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 15f8aff..17a94d2 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 @@ -14,10 +14,7 @@ import org.bukkit.inventory.Inventory import org.bukkit.inventory.ItemStack import org.bukkit.inventory.meta.BlockStateMeta import org.bukkit.persistence.PersistentDataType -import java.util.Arrays -import java.util.Collections -import java.util.UUID -import java.util.WeakHashMap +import java.util.* import java.util.function.Function object TalismanChecks { @@ -146,7 +143,7 @@ object TalismanChecks { } val state = shulkerMeta.blockState if (state is ShulkerBox) { - contents.addAll(Arrays.asList(*state.inventory.contents)) + contents.addAll(state.inventory.contents) continue } } @@ -154,23 +151,33 @@ object TalismanChecks { contents.add(rawContent) } - val items: MutableSet = HashSet() + val items = mutableMapOf() for (itemStack in contents) { convert(itemStack) - getTalismanOnItem(itemStack) ?: continue + val talis = getTalismanOnItem(itemStack) ?: continue if (items.size >= getLimit(player)) { break } - items.add(itemStack) + items[talis] = itemStack + } + + if (PLUGIN.configYml.getBool("top-level-only")) { + for ((talisman, _) in items.toMap()) { + var lowerLevel = talisman.lowerLevel + while (lowerLevel != null) { + items.remove(lowerLevel) + lowerLevel = lowerLevel.lowerLevel + } + } } if (useCache) { - CACHED_TALISMAN_ITEMS[player.uniqueId] = items + CACHED_TALISMAN_ITEMS[player.uniqueId] = items.values.toSet() PLUGIN.scheduler.runLater({ CACHED_TALISMAN_ITEMS.remove(player.uniqueId) }, 40) } - return items + return items.values.toSet() } /** @@ -194,16 +201,7 @@ object TalismanChecks { } } - val contents = getTalismanItemsOnPlayer(player, useCache, *extra) - val found: MutableSet = HashSet() - - for (itemStack in contents) { - val talisman = getTalismanOnItem(itemStack) ?: continue - if (found.size >= getLimit(player)) { - break - } - found.add(talisman) - } + val found = getTalismanItemsOnPlayer(player, useCache, *extra).mapNotNull { getTalismanOnItem(it) }.toSet() if (useCache) { CACHED_TALISMANS[player.uniqueId] = found diff --git a/eco-core/core-plugin/src/main/resources/config.yml b/eco-core/core-plugin/src/main/resources/config.yml index 39f2320..8e31134 100644 --- a/eco-core/core-plugin/src/main/resources/config.yml +++ b/eco-core/core-plugin/src/main/resources/config.yml @@ -8,5 +8,6 @@ crafting: read-enderchest: true # If a player's ender chest should be checked for talismans read-shulkerboxes: true # If a player's shulker boxes should be checked for talismans +top-level-only: true # If only the top level of any given talisman should be activated offhand-only: false # If talismans or shulkers of talismans need to be in the offhand to work diff --git a/eco-core/core-plugin/src/main/resources/talismans.yml b/eco-core/core-plugin/src/main/resources/talismans.yml index 9205bcc..1d07d4c 100644 --- a/eco-core/core-plugin/src/main/resources/talismans.yml +++ b/eco-core/core-plugin/src/main/resources/talismans.yml @@ -1,8 +1,9 @@ talismans: - - id: "archery_1" + - id: archery_1 name: "&aArchery Talisman I" description: - "&8Deal 10% more damage with bows" + higherLevelOf: "" item: "player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDBmOGRmYTVlZmM3NTYzMGNlMGRmNDBhNDliOGY1OWJjMjIyMTRkZTk3ZTNmYjQ0YjNjNTZlOGE5YzhhNTZiNiJ9fX0=" craftable: true recipe: @@ -24,10 +25,11 @@ talismans: triggers: - bow_attack conditions: [] - - id: "archery_2" + - id: archery_2 name: "&eArchery Talisman II" description: - "&8Deal 20% more damage with bows" + higherLevelOf: archery_1 item: "player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzgzODVhNWE0Njk4MjFiOGIzM2U0N2E1YjVjNDJhZWE1OTY2MzQ2NTQ2OTM4OGExYTRkNGU1MjNlNWE4ZGRkMiJ9fX0=" craftable: true recipe: @@ -49,10 +51,11 @@ talismans: triggers: - bow_attack conditions: [] - - id: "archery_3" + - id: archery_3 name: "&cArchery Talisman III" description: - "&8Deal 40% more damage with bows" + higherLevelOf: archery_2 item: "player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmQ3NDk5NWQ2Y2RhMmI4YTI0NzcyYWY5NjllZjA3N2FlM2E4NWUyMzU3YzZmNjExOWI4YTI1MDYwNDFhNDQ4YiJ9fX0=" craftable: true recipe: @@ -75,10 +78,11 @@ talismans: - bow_attack conditions: [] - - id: "attack_speed_1" + - id: attack_speed_1 name: "&aAttack Speed Talisman I" description: - "&8Attack 5% faster." + higherLevelOf: "" item: "player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTVmZGRlYzM2NjU1ZDNiMzcxYzc5ZDYxMTMzNTQ4Nzc1NzcwODljMWZjYjFiM2Q4ZTAwYWYzMjYxMmYyNmYyOCJ9fX0=" craftable: true recipe: @@ -98,10 +102,11 @@ talismans: args: multiplier: 1.05 conditions: [] - - id: "attack_speed_2" + - id: attack_speed_2 name: "&eAttack Speed Talisman II" description: - "&8Attack 10% faster." + higherLevelOf: attack_speed_1 item: "player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMzE1ZjAyZWFjNjAyNmI4ZTg3MTJjYTRkNzgxYjc5MWJiYmI3YjQ3NTVhYmRhMjdmNDYyMTg5YjkwZmVkNjZhMSJ9fX0=" craftable: true recipe: @@ -121,10 +126,11 @@ talismans: args: multiplier: 1.1 conditions: [] - - id: "attack_speed_3" + - id: attack_speed_3 name: "&cAttack Speed Talisman III" description: - "&8Attack 25% faster." + higherLevelOf: attack_speed_2 item: "player_head texture:eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMjI2NjQ5MmZmMDk2MjRmZTdkYzA4MGI0YWE1ZjRiNjA4N2E3NTYzZmEwMjA3ZGY4NzdjZTUwZDI1OWE3NzM3NCJ9fX0=" craftable: true recipe: