9
0
mirror of https://github.com/Auxilor/EcoArmor.git synced 2025-12-26 18:39:24 +00:00

Added slot-specific effects/conditions

This commit is contained in:
Auxilor
2022-05-21 12:49:19 +01:00
parent 10566a9b6a
commit 7aed8a72ae
4 changed files with 129 additions and 3 deletions

View File

@@ -28,6 +28,7 @@ class EcoArmorPlugin : LibReforgePlugin() {
ecoArmorYml = EcoArmorYml(this)
Items.registerArgParser(TierArgParser())
registerHolderProvider { ListUtils.toSingletonList(ArmorUtils.getActiveSet(it)) }
registerHolderProvider { ArmorUtils.getSlotHolders(it) }
}
override fun handleReloadAdditional() {

View File

@@ -54,11 +54,21 @@ class ArmorSet(
*/
private val items = notNullMapOf<ArmorSlot, ItemStack>()
/**
* Holders in set.
*/
private val slotHolders = notNullMapOf<ArmorSlot, Holder>()
/**
* Items in advanced set.
*/
private val advancedItems = notNullMapOf<ArmorSlot, ItemStack>()
/**
* Holders in advanced set.
*/
private val advancedSlotHolders = notNullMapOf<ArmorSlot, Holder>()
/**
* Advancement shard item.
*/
@@ -126,11 +136,32 @@ class ArmorSet(
advancedHolder = SimpleHolder(conditions, advancedEffects, "${id}_advanced")
ArmorSets.addNewSet(this)
for (slot in ArmorSlot.values()) {
val item = construct(slot, config.getSubsection(slot.name.lowercase(Locale.getDefault())), false)
val slotConfig = config.getSubsection(slot.name.lowercase(Locale.getDefault()))
val item = construct(slot, slotConfig, false)
items[slot] = item
constructRecipe(slot, config.getSubsection(slot.name.lowercase(Locale.getDefault())), item)
val advancedItem = construct(slot, config.getSubsection(slot.name.lowercase(Locale.getDefault())), true)
constructRecipe(slot, slotConfig, item)
val advancedItem = construct(slot, slotConfig, true)
advancedItems[slot] = advancedItem
slotHolders[slot] = SimpleHolder(
slotConfig.getSubsections("conditions").mapNotNull {
Conditions.compile(it, "Armor Set $id - $slot")
}.toSet(),
slotConfig.getSubsections("effects").mapNotNull {
Effects.compile(it, "Armor Set $id - $slot")
}.toSet(),
"${id}_${slot.name.lowercase()}"
)
advancedSlotHolders[slot] = SimpleHolder(
slotConfig.getSubsections("conditions").mapNotNull {
Conditions.compile(it, "Armor Set $id - $slot")
}.toSet(),
slotConfig.getSubsections("advancedEffects").mapNotNull {
Effects.compile(it, "Armor Set $id - $slot (Advanced)")
}.toSet(),
"${id}_${slot.name.lowercase()}_advanced"
)
}
advancementShardItem = constructShard()
}
@@ -310,6 +341,17 @@ class ArmorSet(
return tier ?: Tiers.defaultTier
}
fun getSpecificHolder(itemStack: ItemStack): Holder? {
val slot = getSlot(itemStack) ?: return null
val advanced = isAdvanced(itemStack)
return if (advanced) {
advancedSlotHolders[slot]
} else {
slotHolders[slot]
}
}
override fun equals(other: Any?): Boolean {
if (other !is ArmorSet) {
return false

View File

@@ -65,6 +65,30 @@ object ArmorUtils {
}
}
/**
* Get active holder for a player.
*
* @param player The player to check.
* @return The holder, or null if not found.
*/
@JvmStatic
fun getSlotHolders(player: Player): Iterable<Holder> {
val holders = mutableListOf<Holder>()
for (itemStack in player.inventory.armorContents) {
if (itemStack == null) {
continue
}
val set = getSetOnItem(itemStack) ?: continue
val holder = set.getSpecificHolder(itemStack) ?: continue
holders.add(holder)
}
return holders
}
/**
* Get armor set that player is wearing.
*

View File

@@ -85,6 +85,9 @@ sets:
name: "&cReaper Helmet"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&c Reaper Helmet"
effectiveDurability: 2048
effects: []
advancedEffects: []
conditions: []
lore:
- "&c&lREAPER SET BONUS"
- "&8» &cDeal 25% more damage"
@@ -109,6 +112,9 @@ sets:
name: "&cReaper Chestplate"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&c Reaper Chestplate"
effectiveDurability: 2048
effects: []
advancedEffects: []
conditions: []
lore:
- "&c&lREAPER SET BONUS"
- "&8» &cDeal 25% more damage"
@@ -133,6 +139,9 @@ sets:
name: "&cReaper Elytra"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&c Reaper Elytra"
effectiveDurability: 2048
effects: []
advancedEffects: []
conditions: []
lore:
- "&c&lREAPER SET BONUS"
- "&8» &cDeal 25% more damage"
@@ -157,6 +166,9 @@ sets:
name: "&cReaper Leggings"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&c Reaper Leggings"
effectiveDurability: 2048
effects: []
advancedEffects: []
conditions: []
lore:
- "&c&lREAPER SET BONUS"
- "&8» &cDeal 25% more damage"
@@ -181,6 +193,9 @@ sets:
name: "&cReaper Boots"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&c Reaper Boots"
effectiveDurability: 2048
effects: []
advancedEffects: []
conditions: []
lore:
- "&c&lREAPER SET BONUS"
- "&8» &cDeal 25% more damage"
@@ -276,6 +291,9 @@ sets:
name: "&4Slayer Helmet"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&4 Slayer Helmet"
effectiveDurability: 768
effects: []
advancedEffects: []
conditions: []
lore:
- "&4&lSLAYER SET BONUS"
- "&8» &4Deal 50% more damage to bosses"
@@ -302,6 +320,9 @@ sets:
name: "&4Slayer Chestplate"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&4 Slayer Chestplate"
effectiveDurability: 1024
effects: []
advancedEffects: []
conditions: []
lore:
- "&4&lSLAYER SET BONUS"
- "&8» &4Deal 50% more damage to bosses"
@@ -327,6 +348,9 @@ sets:
name: "&4Slayer Elytra"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19> &4Slayer Elytra"
effectiveDurability: 1024
effects: []
advancedEffects: []
conditions: []
lore:
- "&4&lSLAYER SET BONUS"
- "&8» &4Deal 50% more damage to bosses"
@@ -352,6 +376,9 @@ sets:
name: "&4Slayer Leggings"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&4 Slayer Leggings"
effectiveDurability: 1024
effects: []
advancedEffects: []
conditions: []
lore:
- "&4&lSLAYER SET BONUS"
- "&8» &4Deal 50% more damage to bosses"
@@ -377,6 +404,9 @@ sets:
name: "&4Slayer Boots"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&4 Slayer Boots"
effectiveDurability: 1024
effects: []
advancedEffects: []
conditions: []
lore:
- "&4&lSLAYER SET BONUS"
- "&8» &4Deal 50% more damage to bosses"
@@ -467,6 +497,9 @@ sets:
name: "&5Angelic Helmet"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&5 Angelic Helmet"
effectiveDurability: 768
effects: []
advancedEffects: []
conditions: []
lore:
- "&5&lANGELIC SET BONUS"
- "&8» &dGain 10 more hearts"
@@ -493,6 +526,9 @@ sets:
name: "&5Angelic Chestplate"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&5 Angelic Chestplate"
effectiveDurability: 1024
effects: []
advancedEffects: []
conditions: []
lore:
- "&5&lANGELIC SET BONUS"
- "&8» &dGain 10 more hearts"
@@ -519,6 +555,9 @@ sets:
name: "&5Angelic Elytra"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&5 Angelic Elytra"
effectiveDurability: 1024
effects: []
advancedEffects: []
conditions: []
lore:
- "&5&lANGELIC SET BONUS"
- "&8» &dGain 10 more hearts"
@@ -545,6 +584,9 @@ sets:
name: "&5Angelic Leggings"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&5 Angelic Leggings"
effectiveDurability: 1024
effects: []
advancedEffects: []
conditions: []
lore:
- "&5&lANGELIC SET BONUS"
- "&8» &dGain 10 more hearts"
@@ -571,6 +613,9 @@ sets:
name: "&5Angelic Boots"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&5 Angelic Boots"
effectiveDurability: 1024
effects: []
advancedEffects: []
conditions: []
lore:
- "&5&lANGELIC SET BONUS"
- "&8» &dGain 10 more hearts"
@@ -666,6 +711,9 @@ sets:
name: "&bHuntress Helmet"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&b Huntress Helmet"
effectiveDurability: 1024
effects: []
advancedEffects: []
conditions: []
lore:
- "&b&lHUNTRESS SET BONUS"
- "&8» &bDeal 2.5x trident damage"
@@ -692,6 +740,8 @@ sets:
name: "&bHuntress Chestplate"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&b Huntress Chestplate"
effectiveDurability: 2048
effects: []
conditions: []
lore:
- "&b&lHUNTRESS SET BONUS"
- "&8» &bDeal 2.5x trident damage"
@@ -718,6 +768,9 @@ sets:
name: "&bHuntress Elytra"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&b Huntress Elytra"
effectiveDurability: 2048
effects: []
advancedEffects: []
conditions: []
lore:
- "&b&lHUNTRESS SET BONUS"
- "&8» &bDeal 2.5x trident damage"
@@ -744,6 +797,9 @@ sets:
name: "&bHuntress Leggings"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&b Huntress Leggings"
effectiveDurability: 2048
effects: []
advancedEffects: []
conditions: []
lore:
- "&b&lHUNTRESS SET BONUS"
- "&8» &bDeal 2.5x trident damage"
@@ -770,6 +826,9 @@ sets:
name: "&bHuntress Boots"
advancedName: "<GRADIENT:f12711>Advanced</GRADIENT:f5af19>&b Huntress Boots"
effectiveDurability: 2048
effects: []
advancedEffects: []
conditions: []
lore:
- "&b&lHUNTRESS SET BONUS"
- "&8» &bDeal 2.5x trident damage"