mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
try add conflict after level
This commit is contained in:
parent
20509faed4
commit
fbc862a5a3
3 changed files with 64 additions and 6 deletions
|
|
@ -7,10 +7,11 @@ import xyz.alexcrea.cuanvil.enchant.CAEnchantment
|
|||
class EnchantConflictGroup(
|
||||
val name: String,
|
||||
private val cantConflict: AbstractMaterialGroup,
|
||||
var minBeforeBlock: Int
|
||||
var minBeforeBlock: Int,
|
||||
) {
|
||||
|
||||
private val enchantments = HashSet<CAEnchantment>()
|
||||
private val conflictAfterLevel = HashMap<CAEnchantment, Int>()
|
||||
|
||||
fun addEnchantment(enchant: CAEnchantment) {
|
||||
enchantments.add(enchant)
|
||||
|
|
@ -19,19 +20,37 @@ class EnchantConflictGroup(
|
|||
enchantments.addAll(enchants)
|
||||
}
|
||||
|
||||
fun allowed(enchants: Set<CAEnchantment>, mat: Material): Boolean {
|
||||
private fun canBypassConflictByLevel(enchants: Map<CAEnchantment, Int>): Boolean {
|
||||
// Either there no "conflict after"
|
||||
if(conflictAfterLevel.isEmpty()) return false
|
||||
|
||||
// Or we check if any conflict after enchantment is true
|
||||
for (entry in conflictAfterLevel) {
|
||||
if(enchants.getOrDefault(entry.key, 0) >= entry.value)
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
fun allowed(enchants: Map<CAEnchantment, Int>, mat: Material): Boolean {
|
||||
if (enchantments.size < minBeforeBlock) {
|
||||
CustomAnvil.verboseLog("Conflicting bc of to many enchantments")
|
||||
return true
|
||||
}
|
||||
|
||||
if (cantConflict.contain(mat)) {
|
||||
if (cantConflict.contain(mat))
|
||||
return true
|
||||
|
||||
// If empty we skip. else we
|
||||
if(canBypassConflictByLevel(enchants))
|
||||
return true
|
||||
}
|
||||
|
||||
// Count the amount of enchantment that are in the list
|
||||
var enchantAmount = 0
|
||||
for (enchantment in enchants) {
|
||||
for (entry in enchants) {
|
||||
val enchantment = entry.key
|
||||
|
||||
if (enchantment !in enchantments) continue
|
||||
CustomAnvil.verboseLog("Enchant ${enchantment.key} is in: ${enchantAmount + 1}/$minBeforeBlock ")
|
||||
if (++enchantAmount > minBeforeBlock) {
|
||||
|
|
@ -56,6 +75,21 @@ class EnchantConflictGroup(
|
|||
enchantments.addAll(enchants)
|
||||
}
|
||||
|
||||
fun getConflictAfters(): HashMap<CAEnchantment, Int> {
|
||||
return conflictAfterLevel
|
||||
}
|
||||
|
||||
fun putConflictAfterLevel(enchantment: CAEnchantment, level: Int): Boolean {
|
||||
return null != (
|
||||
if(level < 0) conflictAfterLevel.remove(enchantment)
|
||||
else conflictAfterLevel.put(enchantment, level))
|
||||
}
|
||||
|
||||
fun setConflictAfterLevel(conflictAfterLevel: HashMap<CAEnchantment, Int>) {
|
||||
this.conflictAfterLevel.clear()
|
||||
this.conflictAfterLevel.putAll(conflictAfterLevel)
|
||||
}
|
||||
|
||||
fun getRepresentativeMaterial(): Material {
|
||||
val groups = getCantConflictGroup().getGroups()
|
||||
val groupIterator = groups.iterator()
|
||||
|
|
|
|||
|
|
@ -16,6 +16,10 @@ class EnchantConflictManager {
|
|||
// Path for the enchantments list
|
||||
const val ENCH_LIST_PATH = "enchantments"
|
||||
|
||||
// Path for the enchantments list
|
||||
//TODO add test and gui
|
||||
const val AFTER_LEVEL_LIST_PATH = "conflict_after_level"
|
||||
|
||||
// Path for group list related to the conflict
|
||||
const val CONFLICT_GROUP_PATH = "notAffectedGroups"
|
||||
|
||||
|
|
@ -110,6 +114,25 @@ class EnchantConflictManager {
|
|||
}
|
||||
}
|
||||
|
||||
val conflictAfterLevels = section.getConfigurationSection(AFTER_LEVEL_LIST_PATH)
|
||||
if(conflictAfterLevels != null) {
|
||||
for (enchantName in conflictAfterLevels.getKeys(false)) {
|
||||
val enchants = getEnchantByIdentifier(enchantName)
|
||||
if (enchants.isEmpty()) {
|
||||
CustomAnvil.instance.logger.warning("Enchantment $enchantName do not exist but was asked for conflict after level for conflict $conflictName")
|
||||
continue
|
||||
}
|
||||
|
||||
val value = conflictAfterLevels.getInt(enchantName, -1)
|
||||
if(value < 0) continue
|
||||
|
||||
for (enchant in enchants) {
|
||||
val previous = conflict.getConflictAfters().getOrDefault(enchant, value)
|
||||
conflict.putConflictAfterLevel(enchant, value.coerceAtMost(previous))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return conflict
|
||||
}
|
||||
|
||||
|
|
@ -187,7 +210,7 @@ class EnchantConflictManager {
|
|||
continue
|
||||
}
|
||||
|
||||
val allowed = conflict.allowed(appliedEnchants.keys, mat)
|
||||
val allowed = conflict.allowed(appliedEnchants, mat)
|
||||
CustomAnvil.verboseLog("Was against $conflict and conflicting: ${!allowed} ")
|
||||
if (!allowed) {
|
||||
if (conflict.getEnchants().size <= 1) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue