Re-added talisman levels

This commit is contained in:
Auxilor
2022-01-01 13:38:44 +00:00
parent 99d26bc7e1
commit f33efd3317
4 changed files with 34 additions and 26 deletions

View File

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

View File

@@ -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<ItemStack> = HashSet()
val items = mutableMapOf<Talisman, ItemStack>()
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<Talisman> = 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

View File

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

View File

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