add custom item to boolean setting button

This commit is contained in:
alexcrea 2024-02-29 00:45:19 +01:00 committed by alexcrea
parent 48f60bc38e
commit 0b11f5b66f
6 changed files with 80 additions and 13 deletions

View file

@ -9,6 +9,9 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.gui.config.settings.AbstractSettingGui;
import xyz.alexcrea.cuanvil.gui.config.settings.BoolSettingsGui;
import java.util.Collections;
// maybe use builder patern ?
public class GuiGlobalItems {
@ -75,4 +78,39 @@ public class GuiGlobalItems {
return new GuiItem(item, GuiGlobalActions.openSettingGuiAction(factory), CustomAnvil.instance);
}
private static final String SETTING_ITEM_LORE_PREFIX = "\u00A77value: ";
public static GuiItem boolSettingGuiItem(
@NotNull BoolSettingsGui.BoolSettingFactory factory
){
// Get item properties
boolean value = factory.getConfiguredValue();
Material itemMat;
StringBuilder itemName = new StringBuilder("\u00A7");
if(value){
itemMat = Material.GREEN_TERRACOTTA;
itemName.append("a");
}else{
itemMat = Material.RED_TERRACOTTA;
itemName.append("c");
}
itemName.append(getConfigNameFromPath(factory.getConfigPath()));
// Create item
ItemStack item = new ItemStack(itemMat);
ItemMeta itemMeta = item.getItemMeta();
itemMeta.setDisplayName(itemName.toString());
itemMeta.setLore(Collections.singletonList(SETTING_ITEM_LORE_PREFIX+value));
item.setItemMeta(itemMeta);
return openSettingGuiItem(item, factory);
}
public static String getConfigNameFromPath(String path){
int indexOfDot = path.indexOf(".");
//if(indexOfDot == -1) return path;
// indexOfDot == -1 (not fond) imply indexOfDot+1 = 0. substring will keep the full path as expected
return path.substring(indexOfDot+1);
}
}

View file

@ -0,0 +1,7 @@
package xyz.alexcrea.cuanvil.gui;
public interface UpdatableGlobalGui {
void updateGuiForAll();
}

View file

@ -43,9 +43,8 @@ public class BasicConfigGui extends ChestGui {
GuiItem setting1 = GuiGlobalItems.openSettingGuiItem(setting1Item, factory1);
pane.bindItem('1', setting1);
ItemStack setting2Item = new ItemStack(Material.STONE);
AbstractSettingGui.SettingGuiFactory factory2 = BoolSettingsGui.factory("Test Gui bool",this, "test2", CustomAnvil.instance.getConfig(), false);
GuiItem setting2 = GuiGlobalItems.openSettingGuiItem(setting2Item, factory2);
BoolSettingsGui.BoolSettingFactory factory2 = BoolSettingsGui.factory("Test Gui bool",this, "test2", CustomAnvil.instance.getConfig(), false);
GuiItem setting2 = GuiGlobalItems.boolSettingGuiItem(factory2);
pane.bindItem('2', setting2);
}

View file

@ -7,6 +7,7 @@ import com.github.stefvanschie.inventoryframework.gui.type.util.Gui;
import com.github.stefvanschie.inventoryframework.pane.PatternPane;
import com.github.stefvanschie.inventoryframework.pane.util.Pattern;
import io.delilaheve.CustomAnvil;
import org.bukkit.configuration.ConfigurationSection;
import org.jetbrains.annotations.NotNull;
import xyz.alexcrea.cuanvil.gui.GuiGlobalItems;
@ -50,6 +51,23 @@ public abstract class AbstractSettingGui extends ChestGui {
public abstract static class SettingGuiFactory{
protected String configPath;
protected ConfigurationSection section;
protected SettingGuiFactory(String configPath, ConfigurationSection section){
this.configPath = configPath;
this.section = section;
}
public String getConfigPath() {
return configPath;
}
public ConfigurationSection getSection() {
return section;
}
public abstract AbstractSettingGui create();
};
}
}

View file

@ -79,7 +79,7 @@ public class BoolSettingsGui extends AbstractSettingGui{
}
public static SettingGuiFactory factory(@NotNull String title, Gui parent,
public static BoolSettingFactory factory(@NotNull String title, Gui parent,
String configPath, ConfigurationSection section,
boolean defaultVal){
return new BoolSettingFactory(
@ -91,24 +91,27 @@ public class BoolSettingsGui extends AbstractSettingGui{
public static class BoolSettingFactory extends SettingGuiFactory{
@NotNull String title; Gui parent;
String configPath; ConfigurationSection section;
boolean defaultVal;
private BoolSettingFactory(@NotNull String title, Gui parent,
String configPath, ConfigurationSection section,
boolean defaultVal){
super(configPath, section);
this.title = title;
this.parent = parent;
this.configPath = configPath;
this.section = section;
this.defaultVal = defaultVal;
}
public boolean getConfiguredValue(){
return this.section.getBoolean(this.configPath, this.defaultVal);
}
@Override
public AbstractSettingGui create() {
// Get value or default
//TODO maybe get section dynamically (and maybe same for save ?)
boolean now = section.getBoolean(this.configPath, this.defaultVal);
boolean now = getConfiguredValue();
// create new gui
return new BoolSettingsGui(this, now);
}

View file

@ -118,27 +118,29 @@ public class IntSettingsGui extends AbstractSettingGui{
public static class IntSettingFactory extends SettingGuiFactory{
@NotNull String title; Gui parent;
String configPath; ConfigurationSection section;
int min; int max; int defaultVal; int[] steps;
private IntSettingFactory(@NotNull String title, Gui parent,
String configPath, ConfigurationSection section,
int min, int max, int defaultVal, int... steps){
super(configPath, section);
this.title = title;
this.parent = parent;
this.configPath = configPath;
this.section = section;
this.min = min;
this.max = max;
this.defaultVal = defaultVal;
this.steps = steps;
}
public int getConfiguredValue(){
return this.section.getInt(this.configPath, this.defaultVal);
}
@Override
public AbstractSettingGui create() {
// Get value or default
//TODO maybe get section dynamically (and maybe same for save ?)
int now = section.getInt(this.configPath, this.defaultVal);
int now = getConfiguredValue();
// create new gui
return new IntSettingsGui(this, now);
}