Start to create Enchantment sub setting gui & enchantment conflict gui

This commit is contained in:
alexcrea 2024-03-22 00:07:56 +01:00
parent dc35d59077
commit 814a8a2c89
13 changed files with 297 additions and 65 deletions

View file

@ -3,12 +3,18 @@ package xyz.alexcrea.cuanvil.group
import org.bukkit.Material
import org.bukkit.enchantments.Enchantment
class EnchantConflictGroup(private val cantConflict: AbstractMaterialGroup, private val minBeforeBlock: Int){
class EnchantConflictGroup(
val name: String,
private val cantConflict: AbstractMaterialGroup,
private val minBeforeBlock: Int){
private val enchantments = HashSet<Enchantment>()
fun addEnchantment(ench: Enchantment){
enchantments.add(ench)
fun addEnchantment(enchant: Enchantment){
enchantments.add(enchant)
}
fun removeEnchantment(enchant: Enchantment){
enchantments.remove(enchant)
}
fun allowed(enchants: Set<Enchantment>, mat: Material) : Boolean{
if(enchantments.size < minBeforeBlock){

View file

@ -10,11 +10,11 @@ class EnchantConflictManager {
companion object {
// Path for the enchantments list
private const val ENCH_LIST_PATH = "enchantments"
const val ENCH_LIST_PATH = "enchantments"
// Path for group list related to the conflict
private const val CONFLICT_GROUP_PATH = "notAffectedGroups"
const val CONFLICT_GROUP_PATH = "notAffectedGroups"
// Path for the maximum number of enchantment before validating the conflict
private const val ENCH_MAX_PATH = "maxEnchantmentBeforeConflict"
const val ENCH_MAX_PATH = "maxEnchantmentBeforeConflict"
// Path for a flag: if the enchantment will be used in the last supported version
// TODO maybe replace this system by a list of "future" enchantment.
private const val FUTURE_USE_PATH = "useInFuture"
@ -25,10 +25,12 @@ class EnchantConflictManager {
}
private lateinit var conflictMap: HashMap<Enchantment, ArrayList<EnchantConflictGroup>>
lateinit var conflictList: ArrayList<EnchantConflictGroup>
// Read and prepare all conflict
fun prepareConflicts(config: ConfigurationSection, itemManager: ItemGroupManager){
conflictMap = HashMap()
conflictList = ArrayList()
val keys = config.getKeys(false)
for (key in keys) {
@ -36,6 +38,7 @@ class EnchantConflictManager {
val conflict = createConflict(section,itemManager,key)
if(conflict != null){
addToMap(conflict)
conflictList.add(conflict)
}
}
@ -45,13 +48,21 @@ class EnchantConflictManager {
// Add the conflict to the map
private fun addToMap(conflict: EnchantConflictGroup){
conflict.getEnchants().forEach{ enchant ->
if(!conflictMap.containsKey(enchant)){
conflictMap[enchant] = ArrayList()
}
conflictMap[enchant]!!.add(conflict)
addConflictToConflictMap(enchant, conflict);
}
}
fun addConflictToConflictMap(enchant: Enchantment, conflict: EnchantConflictGroup){
if(!conflictMap.containsKey(enchant)){
conflictMap[enchant] = ArrayList()
}
conflictMap[enchant]!!.add(conflict)
}
fun removeConflictFromMap(enchant: Enchantment, conflict: EnchantConflictGroup): Boolean{
return conflictMap[enchant]!!.remove(conflict)
}
// create and read a conflict from a yaml section
private fun createConflict(section: ConfigurationSection,
itemManager: ItemGroupManager,
@ -107,7 +118,7 @@ class EnchantConflictManager {
}
}
// Return conflict
return EnchantConflictGroup(finalGroup, minBeforeBlock)
return EnchantConflictGroup(conflictName, finalGroup, minBeforeBlock)
}
private fun findGroup(groupName: String, itemManager: ItemGroupManager, conflictName: String): AbstractMaterialGroup {