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
0ee9a7c0d3
3 changed files with 64 additions and 6 deletions
|
|
@ -13,6 +13,7 @@ import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
//TODO add conflict after level
|
||||||
/**
|
/**
|
||||||
* A Builder for material conflict.
|
* A Builder for material conflict.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -7,10 +7,11 @@ import xyz.alexcrea.cuanvil.enchant.CAEnchantment
|
||||||
class EnchantConflictGroup(
|
class EnchantConflictGroup(
|
||||||
val name: String,
|
val name: String,
|
||||||
private val cantConflict: AbstractMaterialGroup,
|
private val cantConflict: AbstractMaterialGroup,
|
||||||
var minBeforeBlock: Int
|
var minBeforeBlock: Int,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private val enchantments = HashSet<CAEnchantment>()
|
private val enchantments = HashSet<CAEnchantment>()
|
||||||
|
private val conflictAfterLevel = HashMap<CAEnchantment, Int>()
|
||||||
|
|
||||||
fun addEnchantment(enchant: CAEnchantment) {
|
fun addEnchantment(enchant: CAEnchantment) {
|
||||||
enchantments.add(enchant)
|
enchantments.add(enchant)
|
||||||
|
|
@ -19,19 +20,37 @@ class EnchantConflictGroup(
|
||||||
enchantments.addAll(enchants)
|
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) {
|
if (enchantments.size < minBeforeBlock) {
|
||||||
CustomAnvil.verboseLog("Conflicting bc of to many enchantments")
|
CustomAnvil.verboseLog("Conflicting bc of to many enchantments")
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cantConflict.contain(mat)) {
|
if (cantConflict.contain(mat))
|
||||||
|
return true
|
||||||
|
|
||||||
|
// If empty we skip. else we
|
||||||
|
if(canBypassConflictByLevel(enchants))
|
||||||
return true
|
return true
|
||||||
}
|
|
||||||
|
|
||||||
// Count the amount of enchantment that are in the list
|
// Count the amount of enchantment that are in the list
|
||||||
var enchantAmount = 0
|
var enchantAmount = 0
|
||||||
for (enchantment in enchants) {
|
for (entry in enchants) {
|
||||||
|
val enchantment = entry.key
|
||||||
|
|
||||||
if (enchantment !in enchantments) continue
|
if (enchantment !in enchantments) continue
|
||||||
CustomAnvil.verboseLog("Enchant ${enchantment.key} is in: ${enchantAmount + 1}/$minBeforeBlock ")
|
CustomAnvil.verboseLog("Enchant ${enchantment.key} is in: ${enchantAmount + 1}/$minBeforeBlock ")
|
||||||
if (++enchantAmount > minBeforeBlock) {
|
if (++enchantAmount > minBeforeBlock) {
|
||||||
|
|
@ -56,6 +75,21 @@ class EnchantConflictGroup(
|
||||||
enchantments.addAll(enchants)
|
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 {
|
fun getRepresentativeMaterial(): Material {
|
||||||
val groups = getCantConflictGroup().getGroups()
|
val groups = getCantConflictGroup().getGroups()
|
||||||
val groupIterator = groups.iterator()
|
val groupIterator = groups.iterator()
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,10 @@ 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
|
||||||
|
//TODO add test and gui
|
||||||
|
const val AFTER_LEVEL_LIST_PATH = "conflict_after_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"
|
||||||
|
|
||||||
|
|
@ -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
|
return conflict
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -187,7 +210,7 @@ class EnchantConflictManager {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
val allowed = conflict.allowed(appliedEnchants.keys, mat)
|
val allowed = conflict.allowed(appliedEnchants, mat)
|
||||||
CustomAnvil.verboseLog("Was against $conflict and conflicting: ${!allowed} ")
|
CustomAnvil.verboseLog("Was against $conflict and conflicting: ${!allowed} ")
|
||||||
if (!allowed) {
|
if (!allowed) {
|
||||||
if (conflict.getEnchants().size <= 1) {
|
if (conflict.getEnchants().size <= 1) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue