mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
add conflict before level
This commit is contained in:
parent
f39459c459
commit
cbe535f8c5
2 changed files with 62 additions and 4 deletions
|
|
@ -12,6 +12,7 @@ class EnchantConflictGroup(
|
|||
|
||||
private val enchantments = HashSet<CAEnchantment>()
|
||||
private val conflictAfterLevel = HashMap<CAEnchantment, Int>()
|
||||
private val conflictBeforeLevel = HashMap<CAEnchantment, Int>()
|
||||
|
||||
fun addEnchantment(enchant: CAEnchantment) {
|
||||
enchantments.add(enchant)
|
||||
|
|
@ -20,7 +21,7 @@ class EnchantConflictGroup(
|
|||
enchantments.addAll(enchants)
|
||||
}
|
||||
|
||||
private fun canBypassConflictByLevel(enchants: Map<CAEnchantment, Int>): Boolean {
|
||||
private fun canBypassByBeforeLevel(enchants: Map<CAEnchantment, Int>): Boolean {
|
||||
// Either there no "conflict after"
|
||||
if(conflictAfterLevel.isEmpty()) return false
|
||||
|
||||
|
|
@ -34,6 +35,24 @@ class EnchantConflictGroup(
|
|||
return true
|
||||
}
|
||||
|
||||
private fun canBypassByAfterLevel(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 conflictBeforeLevel) {
|
||||
val current = enchants.getOrDefault(entry.key, 0)
|
||||
if(current < entry.value)
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
private fun canBypassConflictByLevel(enchants: Map<CAEnchantment, Int>): Boolean {
|
||||
return canBypassByBeforeLevel(enchants) || canBypassByAfterLevel(enchants)
|
||||
}
|
||||
|
||||
fun allowed(enchants: Map<CAEnchantment, Int>, mat: Material): Boolean {
|
||||
if (enchantments.size < minBeforeBlock) {
|
||||
CustomAnvil.verboseLog("Conflicting bc of to many enchantments")
|
||||
|
|
@ -91,6 +110,21 @@ class EnchantConflictGroup(
|
|||
this.conflictAfterLevel.putAll(conflictAfterLevel)
|
||||
}
|
||||
|
||||
fun getConflictBefores(): HashMap<CAEnchantment, Int> {
|
||||
return conflictBeforeLevel
|
||||
}
|
||||
|
||||
fun putConflictBeforeLevel(enchantment: CAEnchantment, level: Int): Boolean {
|
||||
return null != (
|
||||
if(level < 0) conflictBeforeLevel.remove(enchantment)
|
||||
else conflictBeforeLevel.put(enchantment, level))
|
||||
}
|
||||
|
||||
fun setConflictBeforeLevel(conflictBeforeLevel: HashMap<CAEnchantment, Int>) {
|
||||
this.conflictBeforeLevel.clear()
|
||||
this.conflictBeforeLevel.putAll(conflictBeforeLevel)
|
||||
}
|
||||
|
||||
fun getRepresentativeMaterial(): Material {
|
||||
val groups = getCantConflictGroup().getGroups()
|
||||
val groupIterator = groups.iterator()
|
||||
|
|
|
|||
|
|
@ -16,9 +16,13 @@ class EnchantConflictManager {
|
|||
// Path for the enchantments list
|
||||
const val ENCH_LIST_PATH = "enchantments"
|
||||
|
||||
// Path for the enchantments list
|
||||
// Path for list of enchantments conflicting before level
|
||||
//TODO add test and gui
|
||||
const val AFTER_LEVEL_LIST_PATH = "conflict_after_level"
|
||||
const val CONFLICT_AFTER_LEVEL_LIST_PATH = "conflict_after_level"
|
||||
|
||||
// Path for list of enchantments conflicting before level
|
||||
//TODO add test and gui
|
||||
const val CONFLICT_BEFORE_LEVEL_LIST_PATH = "conflict_before_level"
|
||||
|
||||
// Path for group list related to the conflict
|
||||
const val CONFLICT_GROUP_PATH = "notAffectedGroups"
|
||||
|
|
@ -114,7 +118,8 @@ class EnchantConflictManager {
|
|||
}
|
||||
}
|
||||
|
||||
val conflictAfterLevels = section.getConfigurationSection(AFTER_LEVEL_LIST_PATH)
|
||||
//TODO find a way to dry this two ?
|
||||
val conflictAfterLevels = section.getConfigurationSection(CONFLICT_AFTER_LEVEL_LIST_PATH)
|
||||
if(conflictAfterLevels != null) {
|
||||
for (enchantName in conflictAfterLevels.getKeys(false)) {
|
||||
val enchants = getEnchantByIdentifier(enchantName)
|
||||
|
|
@ -133,6 +138,25 @@ class EnchantConflictManager {
|
|||
}
|
||||
}
|
||||
|
||||
val conflictBeforeLevels = section.getConfigurationSection(CONFLICT_BEFORE_LEVEL_LIST_PATH)
|
||||
if(conflictBeforeLevels != null) {
|
||||
for (enchantName in conflictBeforeLevels.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 = conflictBeforeLevels.getInt(enchantName, -1)
|
||||
if(value < 0) continue
|
||||
|
||||
for (enchant in enchants) {
|
||||
val previous = conflict.getConflictBefores().getOrDefault(enchant, value)
|
||||
conflict.putConflictBeforeLevel(enchant, value.coerceAtMost(previous))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return conflict
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue