Progress on config GUI:

- Finished GroupConfigSubSettingGui.
- Progress on MaterialSelectSettingGui
This commit is contained in:
alexcrea 2024-04-23 01:46:33 +02:00
parent 257a3b4696
commit 8523044613
No known key found for this signature in database
GPG key ID: 43FD265DB0DBF91F
15 changed files with 359 additions and 38 deletions

View file

@ -6,7 +6,6 @@ import com.github.stefvanschie.inventoryframework.pane.PatternPane;
import com.github.stefvanschie.inventoryframework.pane.util.Pattern; import com.github.stefvanschie.inventoryframework.pane.util.Pattern;
import io.delilaheve.CustomAnvil; import io.delilaheve.CustomAnvil;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import xyz.alexcrea.cuanvil.gui.config.global.*; import xyz.alexcrea.cuanvil.gui.config.global.*;
@ -87,7 +86,7 @@ public class MainConfigGui extends ChestGui {
ItemStack groupItemstack = new ItemStack(Material.CHEST); ItemStack groupItemstack = new ItemStack(Material.CHEST);
ItemMeta groupMeta = groupItemstack.getItemMeta(); ItemMeta groupMeta = groupItemstack.getItemMeta();
groupMeta.setDisplayName("\u00A7aMaterial Groups"); groupMeta.setDisplayName("\u00A7aGroups");
groupMeta.setLore(Collections.singletonList("\u00A77Click here to open material group menu")); groupMeta.setLore(Collections.singletonList("\u00A77Click here to open material group menu"));
groupItemstack.setItemMeta(groupMeta); groupItemstack.setItemMeta(groupMeta);

View file

@ -22,7 +22,7 @@ public interface SelectGroupContainer {
groupLore.add("\u00A77Allow you to select a list of \u00A73Groups \u00A77that this " + containerType + " should " + groupAction); groupLore.add("\u00A77Allow you to select a list of \u00A73Groups \u00A77that this " + containerType + " should " + groupAction);
Set<AbstractMaterialGroup> grouos = container.getSelectedGroups(); Set<AbstractMaterialGroup> grouos = container.getSelectedGroups();
if (grouos.isEmpty()) { if (grouos.isEmpty()) {
groupLore.add("\u00A77There is no "+groupAction+"d groups for this "+containerType+"."); groupLore.add("\u00A77There is no "+groupAction+"d group for this "+containerType+".");
} else { } else {
groupLore.add("\u00A77List of "+groupAction+"d groups for this "+containerType+":"); groupLore.add("\u00A77List of "+groupAction+"d groups for this "+containerType+":");
Iterator<AbstractMaterialGroup> groupIterator = grouos.iterator(); Iterator<AbstractMaterialGroup> groupIterator = grouos.iterator();

View file

@ -1,8 +1,11 @@
package xyz.alexcrea.cuanvil.gui.config; package xyz.alexcrea.cuanvil.gui.config;
import org.bukkit.Material; import org.bukkit.Material;
import xyz.alexcrea.cuanvil.group.AbstractMaterialGroup;
import xyz.alexcrea.cuanvil.gui.config.list.elements.GroupConfigSubSettingGui;
import xyz.alexcrea.cuanvil.util.CasedStringUtil;
import java.util.EnumSet; import java.util.*;
public interface SelectMaterialContainer { public interface SelectMaterialContainer {
@ -12,4 +15,30 @@ public interface SelectMaterialContainer {
EnumSet<Material> illegalMaterials(); EnumSet<Material> illegalMaterials();
static List<String> getMaterialLore(SelectMaterialContainer container, String containerType, String action){
// Prepare material lore
ArrayList<String> groupLore = new ArrayList<>();
groupLore.add("\u00A77Allow you to select a list of \u00A7ematerials \u00A77that this " + containerType + " should " + action);
Set<Material> materialSet = container.getSelectedMaterials();
if (materialSet.isEmpty()) {
groupLore.add("\u00A77There is no "+action+"d material for this "+containerType+".");
} else {
groupLore.add("\u00A77List of "+action+"d materials for this "+containerType+":");
Iterator<Material> materialIterator = materialSet.iterator();
boolean greaterThanMax = materialSet.size() > 5;
int maxindex = (greaterThanMax ? 4 : materialSet.size());
for (int i = 0; i < maxindex; i++) {
// format string like "- Stone Sword"
String formattedName = CasedStringUtil.snakeToUpperSpacedCase(materialIterator.next().name().toLowerCase());
groupLore.add("\u00A77- \u00A7e" + formattedName);
}
if (greaterThanMax) {
groupLore.add("\u00A77And " + (materialSet.size() - 4) + " more...");
}
}
return groupLore;
}
} }

View file

@ -16,7 +16,6 @@ import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
import java.util.Arrays; import java.util.Arrays;
import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.Consumer;
public class SelectItemTypeGui extends AbstractAskGui { public class SelectItemTypeGui extends AbstractAskGui {

View file

@ -34,7 +34,14 @@ public abstract class ElementListConfigGui< T > extends ValueUpdatableGui {
this.namePrefix = title; this.namePrefix = title;
// Back item panel // Back item panel
Pattern pattern = new Pattern( Pattern pattern = getBackgroundPattern();
this.backgroundPane = new PatternPane(0, 0, 9, 6, Pane.Priority.LOW, pattern);
GuiGlobalItems.addBackItem(this.backgroundPane, MainConfigGui.INSTANCE);
}
protected Pattern getBackgroundPattern(){
return new Pattern(
GuiSharedConstant.EMPTY_GUI_FULL_LINE, GuiSharedConstant.EMPTY_GUI_FULL_LINE,
GuiSharedConstant.EMPTY_GUI_FULL_LINE, GuiSharedConstant.EMPTY_GUI_FULL_LINE,
GuiSharedConstant.EMPTY_GUI_FULL_LINE, GuiSharedConstant.EMPTY_GUI_FULL_LINE,
@ -42,12 +49,8 @@ public abstract class ElementListConfigGui< T > extends ValueUpdatableGui {
GuiSharedConstant.EMPTY_GUI_FULL_LINE, GuiSharedConstant.EMPTY_GUI_FULL_LINE,
"B11L1R11C" "B11L1R11C"
); );
this.backgroundPane = new PatternPane(0, 0, 9, 6, Pane.Priority.LOW, pattern);
GuiGlobalItems.addBackItem(this.backgroundPane, MainConfigGui.INSTANCE);
} }
protected OutlinePane firstPage; protected OutlinePane firstPage;
protected ArrayList<OutlinePane> pages; protected ArrayList<OutlinePane> pages;
protected HashMap<UUID, Integer> pageMap; protected HashMap<UUID, Integer> pageMap;
@ -103,7 +106,10 @@ public abstract class ElementListConfigGui< T > extends ValueUpdatableGui {
viewer.setItemOnCursor(cursor); viewer.setItemOnCursor(cursor);
}, CustomAnvil.instance); }, CustomAnvil.instance);
this.backgroundPane.bindItem('C', prepareCreateNewItem()); GuiItem createNew = prepareCreateNewItem();
if(createNew != null){
this.backgroundPane.bindItem('C', createNew);
}
} }
protected void reloadValues(){ protected void reloadValues(){
this.firstPage.clear(); this.firstPage.clear();

View file

@ -4,6 +4,7 @@ import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import io.delilaheve.CustomAnvil; import io.delilaheve.CustomAnvil;
import org.bukkit.entity.HumanEntity; import org.bukkit.entity.HumanEntity;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.gui.config.list.elements.ElementMappedToListGui;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions;
import java.util.Locale; import java.util.Locale;

View file

@ -0,0 +1,181 @@
package xyz.alexcrea.cuanvil.gui.config.list;
import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
import com.github.stefvanschie.inventoryframework.pane.util.Pattern;
import io.delilaheve.CustomAnvil;
import io.delilaheve.util.ConfigOptions;
import org.bukkit.Material;
import org.bukkit.entity.HumanEntity;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.gui.config.SelectMaterialContainer;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.logging.Level;
public class MaterialSelectSettingGui extends MappedElementListConfigGui<Material, GuiItem> {
private final SelectMaterialContainer selector;
private final List<Material> defaultMaterials;
private final int defaultMaterialHash;
private int nowMaterialHash;
public MaterialSelectSettingGui(
@NotNull SelectMaterialContainer selector,
@NotNull String title,
@NotNull Gui backGui) {
super(title);
this.selector = selector;
this.defaultMaterials = new ArrayList<>(this.selector.getSelectedMaterials());
this.defaultMaterialHash = hashFromMaterialList(this.defaultMaterials);
this.nowMaterialHash = this.defaultMaterialHash;
init();
// Change back item
this.backgroundPane.bindItem('B', GuiGlobalItems.backItem(backGui));
}
@Override
protected Pattern getBackgroundPattern(){
return new Pattern(
GuiSharedConstant.EMPTY_GUI_FULL_LINE,
GuiSharedConstant.EMPTY_GUI_FULL_LINE,
GuiSharedConstant.EMPTY_GUI_FULL_LINE,
GuiSharedConstant.EMPTY_GUI_FULL_LINE,
GuiSharedConstant.EMPTY_GUI_FULL_LINE,
"BT1LAR11S"
);
}
private GuiItem saveItem;
private GuiItem noChangeItem;
@Override
protected void prepareStaticValues() {
super.prepareStaticValues();
// Temporary leave item
GuiItem temporaryLeave = GuiGlobalItems.temporaryCloseGuiToSelectItem(Material.YELLOW_TERRACOTTA, this);
this.backgroundPane.bindItem('T', temporaryLeave);
// Select new mat item
ItemStack selectItem = new ItemStack(Material.LIME_STAINED_GLASS_PANE);
ItemMeta selectMeta = selectItem.getItemMeta();
selectMeta.setDisplayName("aaaaaaa");
selectItem.setItemMeta(selectMeta);
this.backgroundPane.bindItem('A', new GuiItem(selectItem, setItemAsCursor(), CustomAnvil.instance));
// Save item
this.saveItem = GuiGlobalItems.noChangeItem();
this.noChangeItem = GuiGlobalItems.noChangeItem();
this.backgroundPane.bindItem('S', this.noChangeItem);
}
/**
* @return A consumer to update the current setting's value.
*/
protected Consumer<InventoryClickEvent> setItemAsCursor() {
return event -> {
event.setCancelled(true);
HumanEntity player = event.getWhoClicked();
ItemStack cursor = player.getItemOnCursor();
if(cursor.getType().isAir()) return;
Material cursorMat = cursor.getType();
if(!this.elementGuiMap.containsKey(cursorMat)){
updateValueForGeneric(cursorMat, true);
this.nowMaterialHash ^= cursorMat.hashCode();
testCanSave();
}
update();
};
}
@Override
protected ItemStack createItemForGeneric(Material material) {
return new ItemStack(material); //this is temp TODO the function
}
@Override
protected List<Material> getEveryDisplayableInstanceOfGeneric() {
return this.defaultMaterials;
}
@Override
protected void updateElement(Material generic, GuiItem element) {
if(ConfigOptions.INSTANCE.getDebugLog()){
CustomAnvil.instance.getLogger().log(Level.INFO,
"Call that should not happen happened...",
new IllegalStateException());
}
}
@Override
protected GuiItem newElementRequested(Material generic, GuiItem newItem) {
newItem.setAction(GuiGlobalActions.stayInPlace); //TODO ask to remove the item on click (or instant remove)
return newItem;
}
@Override
protected GuiItem findItemFromElement(Material generic, GuiItem element) {
return element;
}
@Override
protected GuiItem findGuiItemForRemoval(Material generic, GuiItem element) {
return element;
}
private static int hashFromMaterialList(List<Material> materialList){
int defaultMaterialHash = 0;
for (Material material : materialList) {
defaultMaterialHash ^= material.hashCode();
}
return defaultMaterialHash;
}
private void testCanSave() {
if(this.defaultMaterialHash == this.nowMaterialHash){
this.backgroundPane.bindItem('S', this.noChangeItem);
}else{
this.backgroundPane.bindItem('S', this.saveItem);
}
}
// Unused functions.
@Override
protected GuiItem prepareCreateNewItem() {// Not used
return null;
}
@Override
protected Consumer<String> prepareCreateItemConsumer(HumanEntity player) {// Not used
return null;
}
@Override
protected String genericDisplayedName() {// Not Used
return null;
}
}

View file

@ -12,6 +12,7 @@ import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.config.ConfigHolder;
import xyz.alexcrea.cuanvil.gui.config.ask.SelectItemTypeGui; import xyz.alexcrea.cuanvil.gui.config.ask.SelectItemTypeGui;
import xyz.alexcrea.cuanvil.gui.config.global.UnitRepairConfigGui; import xyz.alexcrea.cuanvil.gui.config.global.UnitRepairConfigGui;
import xyz.alexcrea.cuanvil.gui.config.list.elements.ElementMappedToListGui;
import xyz.alexcrea.cuanvil.gui.config.settings.DoubleSettingGui; import xyz.alexcrea.cuanvil.gui.config.settings.DoubleSettingGui;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant;

View file

@ -1,4 +1,4 @@
package xyz.alexcrea.cuanvil.gui.config.list; package xyz.alexcrea.cuanvil.gui.config.list.elements;
import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.gui.GuiItem;
import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;

View file

@ -14,8 +14,10 @@ import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.config.ConfigHolder; import xyz.alexcrea.cuanvil.config.ConfigHolder;
import xyz.alexcrea.cuanvil.group.*; import xyz.alexcrea.cuanvil.group.*;
import xyz.alexcrea.cuanvil.gui.config.SelectGroupContainer; import xyz.alexcrea.cuanvil.gui.config.SelectGroupContainer;
import xyz.alexcrea.cuanvil.gui.config.SelectMaterialContainer;
import xyz.alexcrea.cuanvil.gui.config.ask.ConfirmActionGui; import xyz.alexcrea.cuanvil.gui.config.ask.ConfirmActionGui;
import xyz.alexcrea.cuanvil.gui.config.global.GroupConfigGui; import xyz.alexcrea.cuanvil.gui.config.global.GroupConfigGui;
import xyz.alexcrea.cuanvil.gui.config.list.MaterialSelectSettingGui;
import xyz.alexcrea.cuanvil.gui.config.settings.GroupSelectSettingGui; import xyz.alexcrea.cuanvil.gui.config.settings.GroupSelectSettingGui;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions;
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
@ -26,7 +28,7 @@ import java.util.*;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Supplier; import java.util.function.Supplier;
public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implements SelectGroupContainer { public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implements SelectGroupContainer, SelectMaterialContainer {
private final GroupConfigGui parent; private final GroupConfigGui parent;
private final IncludeGroup group; private final IncludeGroup group;
@ -36,7 +38,8 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen
@NotNull GroupConfigGui parent, @NotNull GroupConfigGui parent,
@NotNull IncludeGroup group, @NotNull IncludeGroup group,
@NotNull GuiItem item) { @NotNull GuiItem item) {
super(item, 3, group.getName()); super(item, 3,
CasedStringUtil.snakeToUpperSpacedCase(group.getName()) + " Config");
this.parent = parent; this.parent = parent;
this.group = group; this.group = group;
@ -71,12 +74,17 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen
this.materialSelection = new GuiItem(new ItemStack(Material.DIAMOND_SWORD), (event) -> { this.materialSelection = new GuiItem(new ItemStack(Material.DIAMOND_SWORD), (event) -> {
event.setCancelled(true); event.setCancelled(true);
MaterialSelectSettingGui selectGui = new MaterialSelectSettingGui(this,
CasedStringUtil.snakeToUpperSpacedCase(group.getName()) + " Materials"
, this);
selectGui.show(event.getWhoClicked());
}, CustomAnvil.instance); }, CustomAnvil.instance);
this.groupSelection = new GuiItem(new ItemStack(Material.CHEST), (event) -> { this.groupSelection = new GuiItem(new ItemStack(Material.CHEST), (event) -> {
event.setCancelled(true); event.setCancelled(true);
GroupSelectSettingGui enchantGui = new GroupSelectSettingGui( GroupSelectSettingGui enchantGui = new GroupSelectSettingGui(
"\u00A7e" + CasedStringUtil.snakeToUpperSpacedCase(this.group.toString()) + " \u00A7rGroups", CasedStringUtil.snakeToUpperSpacedCase(this.group.getName()) + " Groups",
this, this, 0); this, this, 0);
enchantGui.show(event.getWhoClicked()); enchantGui.show(event.getWhoClicked());
}, CustomAnvil.instance); }, CustomAnvil.instance);
@ -193,15 +201,18 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen
@Override @Override
public void updateLocal() { public void updateLocal() {
// Prepare material lore
List<String> matLore = SelectMaterialContainer.getMaterialLore(this, "group", "include");
// Prepare group lore // Prepare group lore
List<String> groupLore = SelectGroupContainer.getGroupLore(this, "group", "include"); List<String> groupLore = SelectGroupContainer.getGroupLore(this, "group", "include");
// Configure enchant setting item // Configure included material setting item
ItemStack matSelectItem = this.materialSelection.getItem(); ItemStack matSelectItem = this.materialSelection.getItem();
ItemMeta matSelectMeta = matSelectItem.getItemMeta(); ItemMeta matSelectMeta = matSelectItem.getItemMeta();
matSelectMeta.setDisplayName("\u00A7aSelect included \u00A7eMaterials \u00A7aSettings"); matSelectMeta.setDisplayName("\u00A7aSelect included \u00A7eMaterials \u00A7aSettings");
matSelectMeta.setLore(Collections.emptyList()); // temporary matSelectMeta.setLore(matLore);
matSelectMeta.addItemFlags(ItemFlag.values()); matSelectMeta.addItemFlags(ItemFlag.values());
matSelectItem.setItemMeta(matSelectMeta); matSelectItem.setItemMeta(matSelectMeta);
@ -226,7 +237,7 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen
} }
// ---------------------------- // ----------------------------
// SelectGroupContainer methods // SelectGroupContainer related methods
// ---------------------------- // ----------------------------
@Override @Override
@ -259,22 +270,12 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen
groupNames[index++] = otherGroup.getName(); groupNames[index++] = otherGroup.getName();
} }
ConfigHolder.ITEM_GROUP_HOLDER.getConfig().set(this.group.getName()+"."+ItemGroupManager.GROUP_LIST_PATH, groupNames); ConfigHolder.ITEM_GROUP_HOLDER.getConfig().set(group.getName()+"."+ItemGroupManager.GROUP_LIST_PATH, groupNames);
// Try to update referencing group. kind of expensive operation in some case. // Try to update referencing group. kind of expensive operation in some case.
for (AbstractMaterialGroup otherGroup : ConfigHolder.ITEM_GROUP_HOLDER.getItemGroupsManager().getGroupMap().values()) { updateDirectReferencingGroups(group);
if(otherGroup.getGroups().contains(group)){
Set<AbstractMaterialGroup> groupClone = new HashSet<>(otherGroup.getGroups());
updateGroup(otherGroup, groupClone);
}
}
// Update parent & local by extension // We assume a backup & save call will be done soon after
if(group instanceof IncludeGroup){
this.parent.updateValueForGeneric((IncludeGroup) group, true);
}
// We assume a backup & save call we be done soon after
} }
@Override @Override
@ -290,4 +291,94 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen
return illegal; return illegal;
} }
// ----------------------------
// End of SelectGroupContainer related methods
// SelectGroupContainer related methods
// ----------------------------
@Override
public EnumSet<Material> getSelectedMaterials() {
return this.group.getNonGroupInheritedMaterials();
}
@Override
public boolean setSelectedMaterials(EnumSet<Material> materials) {
this.group.setNonGroupInheritedMaterials(materials);
// Write to file configuration
String[] groupNames = new String[materials.size()];
int index = 0;
for (Material otherGroup : materials) {
groupNames[index++] = otherGroup.name().toLowerCase();
}
ConfigHolder.ITEM_GROUP_HOLDER.getConfig().set(this.group.getName()+"."+ItemGroupManager.MATERIAL_LIST_PATH, groupNames);
// update referencing groups
updateDirectReferencingGroups(this.group);
// Save file configuration to disk
if (GuiSharedConstant.TEMPORARY_DO_SAVE_TO_DISK_EVERY_CHANGE) {
return ConfigHolder.CONFLICT_HOLDER.saveToDisk(GuiSharedConstant.TEMPORARY_DO_BACKUP_EVERY_SAVE);
}
return true;
}
@Override
public EnumSet<Material> illegalMaterials() {
return EnumSet.noneOf(Material.class);
}
// ----------------------------
// End of SelectGroupContainer related methods
// ----------------------------
private void updateDirectReferencingGroups(AbstractMaterialGroup referenceTo){
Collection<AbstractMaterialGroup> everyStoredGroups = ConfigHolder.ITEM_GROUP_HOLDER.getItemGroupsManager().getGroupMap().values();
List<EnchantConflictGroup> everyConflicts = ConfigHolder.CONFLICT_HOLDER.getConflictManager().getConflictList();
HashSet<AbstractMaterialGroup> toUpdate = new HashSet<>();
HashSet<AbstractMaterialGroup> updateFuture = new HashSet<>();
HashSet<AbstractMaterialGroup> conflictGroupPlanned = new HashSet<>();
updateFuture.add(referenceTo);
while (!updateFuture.isEmpty()){
HashSet<AbstractMaterialGroup> temp = updateFuture;
updateFuture = toUpdate;
updateFuture.clear();
toUpdate = temp;
for (AbstractMaterialGroup testGroup : toUpdate) {
// Update other stored group
for (AbstractMaterialGroup otherGroup : everyStoredGroups) {
if(otherGroup.getGroups().contains(testGroup)){
otherGroup.updateMaterials();
toUpdate.add(otherGroup);
}
}
// plan update for conflict groups
for (EnchantConflictGroup everyConflict : everyConflicts) {
AbstractMaterialGroup conflictGroup = everyConflict.getCantConflictGroup();
if(conflictGroup.getGroups().contains(testGroup)){
conflictGroupPlanned.add(conflictGroup);
}
}
// Update parent & local by extension
if(testGroup instanceof IncludeGroup){
this.parent.updateValueForGeneric((IncludeGroup) testGroup, false);
}
}
}
this.parent.update();
// Update conflict group
for (AbstractMaterialGroup conflictGroup : conflictGroupPlanned) {
conflictGroup.updateMaterials();
}
}
} }

View file

@ -5,7 +5,6 @@ import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
import io.delilaheve.CustomAnvil; import io.delilaheve.CustomAnvil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui;
import xyz.alexcrea.cuanvil.gui.config.list.ElementMappedToListGui;
public abstract class MappedToListSubSettingGui extends ValueUpdatableGui implements ElementMappedToListGui { public abstract class MappedToListSubSettingGui extends ValueUpdatableGui implements ElementMappedToListGui {

View file

@ -123,7 +123,7 @@ public class ItemSettingGui extends AbstractSettingGui {
/** /**
* @return A consumer to update the current setting's value. * @return A consumer to update the current setting's value.
*/ */
protected Consumer<InventoryClickEvent> setItemAsCursor() { //TODO redo consumer protected Consumer<InventoryClickEvent> setItemAsCursor() {
return event -> { return event -> {
event.setCancelled(true); event.setCancelled(true);

View file

@ -92,4 +92,6 @@ abstract class AbstractMaterialGroup(private val name: String) {
return Material.PAPER return Material.PAPER
} }
abstract fun updateMaterials()
} }

View file

@ -47,6 +47,15 @@ class ExcludeGroup(name: String) : AbstractMaterialGroup(name) {
return includedGroup return includedGroup
} }
override fun updateMaterials() {
groupItems.clear()
groupItems.addAll(includedMaterial)
includedGroup.forEach { group ->
groupItems.addAll(group.getMaterials())
}
}
override fun getMaterials(): EnumSet<Material> { override fun getMaterials(): EnumSet<Material> {
return groupItems return groupItems
} }

View file

@ -45,7 +45,15 @@ class IncludeGroup(name: String) : AbstractMaterialGroup(name) {
override fun setNonGroupInheritedMaterials(materials: EnumSet<Material>) { override fun setNonGroupInheritedMaterials(materials: EnumSet<Material>) {
super.setNonGroupInheritedMaterials(materials) super.setNonGroupInheritedMaterials(materials)
// Update group items
updateMaterials()
}
override fun getGroups(): MutableSet<AbstractMaterialGroup> {
return includedGroup
}
override fun updateMaterials() {
groupItems.clear() groupItems.clear()
groupItems.addAll(includedMaterial) groupItems.addAll(includedMaterial)
@ -54,10 +62,6 @@ class IncludeGroup(name: String) : AbstractMaterialGroup(name) {
} }
} }
override fun getGroups(): MutableSet<AbstractMaterialGroup> {
return includedGroup
}
override fun getMaterials(): EnumSet<Material> { override fun getMaterials(): EnumSet<Material> {
return groupItems return groupItems
} }