mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 08:14:00 +02:00
add conflict before level
This commit is contained in:
parent
2cff7bd83c
commit
a66206a52c
2 changed files with 62 additions and 4 deletions
|
|
@ -12,6 +12,7 @@ class EnchantConflictGroup(
|
||||||
|
|
||||||
private val enchantments = HashSet<CAEnchantment>()
|
private val enchantments = HashSet<CAEnchantment>()
|
||||||
private val conflictAfterLevel = HashMap<CAEnchantment, Int>()
|
private val conflictAfterLevel = HashMap<CAEnchantment, Int>()
|
||||||
|
private val conflictBeforeLevel = HashMap<CAEnchantment, Int>()
|
||||||
|
|
||||||
fun addEnchantment(enchant: CAEnchantment) {
|
fun addEnchantment(enchant: CAEnchantment) {
|
||||||
enchantments.add(enchant)
|
enchantments.add(enchant)
|
||||||
|
|
@ -20,7 +21,7 @@ class EnchantConflictGroup(
|
||||||
enchantments.addAll(enchants)
|
enchantments.addAll(enchants)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun canBypassConflictByLevel(enchants: Map<CAEnchantment, Int>): Boolean {
|
private fun canBypassByBeforeLevel(enchants: Map<CAEnchantment, Int>): Boolean {
|
||||||
// Either there no "conflict after"
|
// Either there no "conflict after"
|
||||||
if(conflictAfterLevel.isEmpty()) return false
|
if(conflictAfterLevel.isEmpty()) return false
|
||||||
|
|
||||||
|
|
@ -34,6 +35,24 @@ class EnchantConflictGroup(
|
||||||
return true
|
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 {
|
fun allowed(enchants: Map<CAEnchantment, Int>, mat: Material): Boolean {
|
||||||
if (enchantments.size < minBeforeBlock) {
|
if (enchantments.size < minBeforeBlock) {
|
||||||
CustomAnvil.verboseLog("Conflicting bc of to many enchantments")
|
CustomAnvil.verboseLog("Conflicting bc of to many enchantments")
|
||||||
|
|
@ -91,6 +110,21 @@ class EnchantConflictGroup(
|
||||||
this.conflictAfterLevel.putAll(conflictAfterLevel)
|
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 {
|
fun getRepresentativeMaterial(): Material {
|
||||||
val groups = getCantConflictGroup().getGroups()
|
val groups = getCantConflictGroup().getGroups()
|
||||||
val groupIterator = groups.iterator()
|
val groupIterator = groups.iterator()
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,13 @@ class EnchantConflictManager {
|
||||||
// Path for the enchantments list
|
// Path for the enchantments list
|
||||||
const val ENCH_LIST_PATH = "enchantments"
|
const val ENCH_LIST_PATH = "enchantments"
|
||||||
|
|
||||||
// Path for the enchantments list
|
// Path for list of enchantments conflicting before level
|
||||||
//TODO add test and gui
|
//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
|
// Path for group list related to the conflict
|
||||||
const val CONFLICT_GROUP_PATH = "notAffectedGroups"
|
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) {
|
if(conflictAfterLevels != null) {
|
||||||
for (enchantName in conflictAfterLevels.getKeys(false)) {
|
for (enchantName in conflictAfterLevels.getKeys(false)) {
|
||||||
val enchants = getEnchantByIdentifier(enchantName)
|
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
|
return conflict
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue