Add group select gui and edit group logic to be able to handle group set.

This commit is contained in:
alexcrea 2024-03-20 22:32:44 +01:00
parent b4cb6c2848
commit 41235d3024
8 changed files with 216 additions and 19 deletions

View file

@ -5,6 +5,7 @@ import java.util.*
abstract class AbstractMaterialGroup(private val name: String) {
protected val includedMaterial by lazy {createDefaultSet()}
protected var groupChangeNotified = false
/**
* Get the group default set
@ -33,6 +34,11 @@ abstract class AbstractMaterialGroup(private val name: String) {
*/
abstract fun addToPolicy(other : AbstractMaterialGroup)
/**
* Get the group as a set
*/
abstract fun getMaterials(): MutableSet<Material>
/**
* Get the group name in case something is wrong
*/
@ -41,10 +47,13 @@ abstract class AbstractMaterialGroup(private val name: String) {
}
/**
* Get the group as a set
* Update the contained groups of this group
*/
fun getSet(): Set<Material> {
return includedMaterial
}
abstract fun setGroups(groups: MutableSet<AbstractMaterialGroup>)
/**
* Get the contained group of this material group
*/
abstract fun getGroups(): MutableSet<AbstractMaterialGroup>
}

View file

@ -8,7 +8,8 @@ class ExcludeGroup(name: String): AbstractMaterialGroup(name) {
return EnumSet.allOf(Material::class.java)
}
private val includedGroup = HashSet<AbstractMaterialGroup>()
private var includedGroup: MutableSet<AbstractMaterialGroup> = HashSet()
private val groupItems: MutableSet<Material> by lazy {createDefaultSet()}
override fun isReferencing(other: AbstractMaterialGroup): Boolean {
for (materialGroup in includedGroup.iterator()) {
@ -21,11 +22,33 @@ class ExcludeGroup(name: String): AbstractMaterialGroup(name) {
override fun addToPolicy(mat: Material) {
includedMaterial.remove(mat)
groupItems.remove(mat)
}
override fun addToPolicy(other: AbstractMaterialGroup) {
includedGroup.add(other)
includedMaterial.removeAll(other.getSet())
groupItems.removeAll(other.getMaterials());
}
override fun setGroups(groups: MutableSet<AbstractMaterialGroup>) {
groupItems.clear()
groupItems.addAll(includedMaterial)
includedGroup.clear();
groups.forEach { group ->
if(!group.isReferencing(this)) {
includedGroup.add(group);
groupItems.removeAll(group.getMaterials())
}
}
}
override fun getGroups(): MutableSet<AbstractMaterialGroup> {
return includedGroup;
}
override fun getMaterials(): MutableSet<Material> {
return groupItems;
}

View file

@ -8,7 +8,8 @@ class IncludeGroup(name: String): AbstractMaterialGroup(name) {
return EnumSet.noneOf(Material::class.java)
}
private val includedGroup = HashSet<AbstractMaterialGroup>()
private var includedGroup: MutableSet<AbstractMaterialGroup> = HashSet()
private val groupItems: MutableSet<Material> by lazy {createDefaultSet()}
override fun isReferencing(other: AbstractMaterialGroup): Boolean {
for (materialGroup in includedGroup.iterator()) {
@ -21,11 +22,34 @@ class IncludeGroup(name: String): AbstractMaterialGroup(name) {
override fun addToPolicy(mat: Material) {
includedMaterial.add(mat)
groupItems.add(mat)
}
override fun addToPolicy(other: AbstractMaterialGroup) {
includedGroup.add(other)
includedMaterial.addAll(other.getSet())
groupItems.addAll(other.getMaterials());
}
override fun setGroups(groups: MutableSet<AbstractMaterialGroup>) {
groupItems.clear();
groupItems.addAll(includedMaterial)
includedGroup.clear();
groups.forEach { group ->
if(!group.isReferencing(this)){
includedGroup.add(group);
groupItems.addAll(group.getMaterials())
}
}
}
override fun getGroups(): MutableSet<AbstractMaterialGroup> {
return includedGroup
}
override fun getMaterials(): MutableSet<Material> {
return groupItems
}
}

View file

@ -18,7 +18,7 @@ class ItemGroupManager {
private val FUTURE_MATERIAL = setOf("PIGLIN_HEAD","BRUSH")
}
private lateinit var groupMap : HashMap<String, AbstractMaterialGroup>
lateinit var groupMap : HashMap<String, AbstractMaterialGroup>
// Read and create material groups
fun prepareGroups(config: ConfigurationSection){