mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 16:16:17 +02:00
Add javadoc for settings gui & minor change
This commit is contained in:
parent
180459a7b9
commit
2a3c085aaa
5 changed files with 257 additions and 23 deletions
|
|
@ -41,7 +41,7 @@ public class EnchantCostConfigGui extends AbstractEnchantConfigGui<EnchantCostSe
|
||||||
rarity = EnchantmentProperties.valueOf(key.toUpperCase(Locale.ENGLISH)).getRarity();
|
rarity = EnchantmentProperties.valueOf(key.toUpperCase(Locale.ENGLISH)).getRarity();
|
||||||
}catch (IllegalArgumentException ignored){}
|
}catch (IllegalArgumentException ignored){}
|
||||||
|
|
||||||
return EnchantCostSettingsGui.enchFactory(prettyKey+" Level Cost", this,
|
return EnchantCostSettingsGui.enchentCostFactory(prettyKey+" Level Cost", this,
|
||||||
SECTION_NAME+'.'+key, ConfigHolder.DEFAULT_CONFIG, 0, 255,
|
SECTION_NAME+'.'+key, ConfigHolder.DEFAULT_CONFIG, 0, 255,
|
||||||
rarity.getItemValue(), rarity.getBookValue(),
|
rarity.getItemValue(), rarity.getBookValue(),
|
||||||
1, 10, 50);
|
1, 10, 50);
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,9 @@ import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An instance gui used to edit a setting.
|
||||||
|
*/
|
||||||
public abstract class AbstractSettingGui extends ChestGui {
|
public abstract class AbstractSettingGui extends ChestGui {
|
||||||
|
|
||||||
// Temporary values, until I get something better.
|
// Temporary values, until I get something better.
|
||||||
|
|
@ -25,17 +28,34 @@ public abstract class AbstractSettingGui extends ChestGui {
|
||||||
|
|
||||||
private PatternPane pane;
|
private PatternPane pane;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepare necessary object for a setting gui.
|
||||||
|
* @param rows Number of row for this gui.
|
||||||
|
* @param title Title of this gui.
|
||||||
|
* @param parent Parent gui to go back when completed.
|
||||||
|
*/
|
||||||
public AbstractSettingGui(int rows, @NotNull TextHolder title, ValueUpdatableGui parent) {
|
public AbstractSettingGui(int rows, @NotNull TextHolder title, ValueUpdatableGui parent) {
|
||||||
super(rows, title, CustomAnvil.instance);
|
super(rows, title, CustomAnvil.instance);
|
||||||
initBase(parent);
|
initBase(parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepare necessary object for a setting gui.
|
||||||
|
* @param rows Number of row for this gui.
|
||||||
|
* @param title Title of this gui.
|
||||||
|
* @param parent Parent gui to go back when completed.
|
||||||
|
*/
|
||||||
public AbstractSettingGui(int rows, @NotNull String title, ValueUpdatableGui parent) {
|
public AbstractSettingGui(int rows, @NotNull String title, ValueUpdatableGui parent) {
|
||||||
this(rows, StringHolder.of(title), parent);
|
this(rows, StringHolder.of(title), parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected GuiItem saveItem;
|
protected GuiItem saveItem;
|
||||||
protected GuiItem noChangeItem;
|
protected GuiItem noChangeItem;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialise and prepare value for this gui.
|
||||||
|
* @param parent Parent gui to go back when completed.
|
||||||
|
*/
|
||||||
private void initBase(ValueUpdatableGui parent){
|
private void initBase(ValueUpdatableGui parent){
|
||||||
Pattern pattern = getGuiPattern();
|
Pattern pattern = getGuiPattern();
|
||||||
pane = new PatternPane(0, 0, pattern.getLength(), pattern.getHeight(), pattern);
|
pane = new PatternPane(0, 0, pattern.getLength(), pattern.getHeight(), pattern);
|
||||||
|
|
@ -57,35 +77,76 @@ public abstract class AbstractSettingGui extends ChestGui {
|
||||||
super.update();
|
super.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get main pane for this setting gui.
|
||||||
|
* @return Main pattern pain of this gui.
|
||||||
|
*/
|
||||||
protected PatternPane getPane() {
|
protected PatternPane getPane() {
|
||||||
return pane;
|
return pane;
|
||||||
}
|
}
|
||||||
|
|
||||||
// S, b, 0 is used by: save, back, background
|
/**
|
||||||
|
* Used to get the gui pattern.
|
||||||
|
* Reserved character are:
|
||||||
|
* <ul>
|
||||||
|
* <li><b>S</b>: save setting button.</li>
|
||||||
|
* <li><b>B</b>: "back to previous gui" button.</li>
|
||||||
|
* <li><b>0</b>: default background item.</li>
|
||||||
|
* </ul>
|
||||||
|
* @return The gui's pattern.
|
||||||
|
*/
|
||||||
protected abstract Pattern getGuiPattern();
|
protected abstract Pattern getGuiPattern();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the associated setting need to be saved.
|
||||||
|
* @return true if the save was successful. false otherwise
|
||||||
|
*/
|
||||||
public abstract boolean onSave();
|
public abstract boolean onSave();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If this function return true
|
||||||
|
* the gui assume the associated setting can be saved.
|
||||||
|
* @return true if there is a change to the setting. false otherwise
|
||||||
|
*/
|
||||||
public abstract boolean hadChange();
|
public abstract boolean hadChange();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Most of the time a setting gui will be called from a global gui.
|
||||||
|
* <p>
|
||||||
|
* It is better to keep a factory that hold setting data than find what parameters to use every time.
|
||||||
|
*/
|
||||||
public abstract static class SettingGuiFactory{
|
public abstract static class SettingGuiFactory{
|
||||||
protected String configPath;
|
protected String configPath;
|
||||||
protected ConfigHolder config;
|
protected ConfigHolder config;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for settings gui factory
|
||||||
|
* @param configPath Configuration path of this setting.
|
||||||
|
* @param config Configuration holder of this setting.
|
||||||
|
*/
|
||||||
protected SettingGuiFactory(String configPath, ConfigHolder config){
|
protected SettingGuiFactory(String configPath, ConfigHolder config){
|
||||||
this.configPath = configPath;
|
this.configPath = configPath;
|
||||||
this.config = config;
|
this.config = config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Configuration path of this setting.
|
||||||
|
*/
|
||||||
public String getConfigPath() {
|
public String getConfigPath() {
|
||||||
return configPath;
|
return configPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Configuration holder of this setting.
|
||||||
|
*/
|
||||||
public ConfigHolder getConfigHolder() {
|
public ConfigHolder getConfigHolder() {
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a gui using setting parameters and current setting value.
|
||||||
|
* @return A new instance of the implemented setting gui.
|
||||||
|
*/
|
||||||
public abstract AbstractSettingGui create();
|
public abstract AbstractSettingGui create();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,14 +17,22 @@ import xyz.alexcrea.cuanvil.util.MetricsUtil;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An instance of a gui used to edit a boolean setting.
|
||||||
|
*/
|
||||||
public class BoolSettingsGui extends AbstractSettingGui{
|
public class BoolSettingsGui extends AbstractSettingGui{
|
||||||
|
|
||||||
private final BoolSettingFactory holder;
|
private final BoolSettingFactory holder;
|
||||||
private final boolean before;
|
private final boolean before;
|
||||||
private boolean now;
|
private boolean now;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a boolean setting config gui.
|
||||||
|
* @param holder Configuration factory of this setting.
|
||||||
|
* @param now The defined value of this setting.
|
||||||
|
*/
|
||||||
protected BoolSettingsGui(BoolSettingFactory holder, boolean now) {
|
protected BoolSettingsGui(BoolSettingFactory holder, boolean now) {
|
||||||
super(3, holder.title, holder.parent);
|
super(3, holder.getTitle(), holder.parent);
|
||||||
this.holder = holder;
|
this.holder = holder;
|
||||||
this.before = now;
|
this.before = now;
|
||||||
this.now = now;
|
this.now = now;
|
||||||
|
|
@ -42,7 +50,12 @@ public class BoolSettingsGui extends AbstractSettingGui{
|
||||||
"B0000000S"
|
"B0000000S"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
GuiItem returnToDefault;
|
|
||||||
|
protected GuiItem returnToDefault;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepare "return to default value" gui item.
|
||||||
|
*/
|
||||||
protected void prepareReturnToDefault(){
|
protected void prepareReturnToDefault(){
|
||||||
ItemStack item = new ItemStack(Material.COMMAND_BLOCK);
|
ItemStack item = new ItemStack(Material.COMMAND_BLOCK);
|
||||||
ItemMeta meta = item.getItemMeta();
|
ItemMeta meta = item.getItemMeta();
|
||||||
|
|
@ -58,8 +71,10 @@ public class BoolSettingsGui extends AbstractSettingGui{
|
||||||
}, CustomAnvil.instance);
|
}, CustomAnvil.instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update item using the setting value to match the new value
|
||||||
|
*/
|
||||||
protected void updateValueDisplay(){
|
protected void updateValueDisplay(){
|
||||||
|
|
||||||
PatternPane pane = getPane();
|
PatternPane pane = getPane();
|
||||||
|
|
||||||
// Get displayed value for this config.
|
// Get displayed value for this config.
|
||||||
|
|
@ -93,6 +108,9 @@ public class BoolSettingsGui extends AbstractSettingGui{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return A consumer to update the current setting's value.
|
||||||
|
*/
|
||||||
protected Consumer<InventoryClickEvent> inverseNowConsumer(){
|
protected Consumer<InventoryClickEvent> inverseNowConsumer(){
|
||||||
return event->{
|
return event->{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
|
@ -118,6 +136,15 @@ public class BoolSettingsGui extends AbstractSettingGui{
|
||||||
return now != before;
|
return now != before;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a bool setting factory from setting's parameters.
|
||||||
|
* @param title The title of the gui.
|
||||||
|
* @param parent Parent gui to go back when completed.
|
||||||
|
* @param configPath Configuration path of this setting.
|
||||||
|
* @param config Configuration holder of this setting.
|
||||||
|
* @param defaultVal Default value if not found on the config.
|
||||||
|
* @return A factory for a boolean setting gui.
|
||||||
|
*/
|
||||||
public static BoolSettingFactory boolFactory(@NotNull String title, ValueUpdatableGui parent,
|
public static BoolSettingFactory boolFactory(@NotNull String title, ValueUpdatableGui parent,
|
||||||
String configPath, ConfigHolder config,
|
String configPath, ConfigHolder config,
|
||||||
boolean defaultVal){
|
boolean defaultVal){
|
||||||
|
|
@ -127,11 +154,21 @@ public class BoolSettingsGui extends AbstractSettingGui{
|
||||||
defaultVal);
|
defaultVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A factory for a boolean setting gui that hold setting's information.
|
||||||
|
*/
|
||||||
public static class BoolSettingFactory extends SettingGuiFactory{
|
public static class BoolSettingFactory extends SettingGuiFactory{
|
||||||
@NotNull String title; ValueUpdatableGui parent;
|
@NotNull String title; ValueUpdatableGui parent;
|
||||||
boolean defaultVal;
|
boolean defaultVal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for a boolean setting gui factory.
|
||||||
|
* @param title The title of the gui.
|
||||||
|
* @param parent Parent gui to go back when completed.
|
||||||
|
* @param configPath Configuration path of this setting.
|
||||||
|
* @param config Configuration holder of this setting.
|
||||||
|
* @param defaultVal Default value if not found on the config.
|
||||||
|
*/
|
||||||
protected BoolSettingFactory(
|
protected BoolSettingFactory(
|
||||||
@NotNull String title, ValueUpdatableGui parent,
|
@NotNull String title, ValueUpdatableGui parent,
|
||||||
String configPath, ConfigHolder config,
|
String configPath, ConfigHolder config,
|
||||||
|
|
@ -143,18 +180,24 @@ public class BoolSettingsGui extends AbstractSettingGui{
|
||||||
this.defaultVal = defaultVal;
|
this.defaultVal = defaultVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Get setting's gui title.
|
||||||
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public String getTitle() {
|
public String getTitle() {
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The configured value for the associated setting.
|
||||||
|
*/
|
||||||
public boolean getConfiguredValue(){
|
public boolean getConfiguredValue(){
|
||||||
return this.config.getConfig().getBoolean(this.configPath, this.defaultVal);
|
return this.config.getConfig().getBoolean(this.configPath, this.defaultVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AbstractSettingGui create() {
|
public AbstractSettingGui create() {
|
||||||
// Get value or default
|
// Get current value or default
|
||||||
boolean now = getConfiguredValue();
|
boolean now = getConfiguredValue();
|
||||||
// create new gui
|
// create new gui
|
||||||
return new BoolSettingsGui(this, now);
|
return new BoolSettingsGui(this, now);
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,10 @@ import xyz.alexcrea.cuanvil.util.MetricsUtil;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An instance of a gui used to edit an enchantment cost setting.
|
||||||
|
* May be considered as a 2 int setting.
|
||||||
|
*/
|
||||||
public class EnchantCostSettingsGui extends IntSettingsGui {
|
public class EnchantCostSettingsGui extends IntSettingsGui {
|
||||||
|
|
||||||
protected final static String ITEM_PATH = ".item";
|
protected final static String ITEM_PATH = ".item";
|
||||||
|
|
@ -27,6 +31,11 @@ public class EnchantCostSettingsGui extends IntSettingsGui {
|
||||||
private int beforeBook;
|
private int beforeBook;
|
||||||
private int nowBook;
|
private int nowBook;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an enchantment cost setting config gui.
|
||||||
|
* @param holder Configuration factory of this setting.
|
||||||
|
* @param nowItem The defined value of this setting item's value.
|
||||||
|
*/
|
||||||
protected EnchantCostSettingsGui(EnchantCostSettingFactory holder, int nowItem) {
|
protected EnchantCostSettingsGui(EnchantCostSettingFactory holder, int nowItem) {
|
||||||
super(holder, nowItem);
|
super(holder, nowItem);
|
||||||
|
|
||||||
|
|
@ -35,6 +44,11 @@ public class EnchantCostSettingsGui extends IntSettingsGui {
|
||||||
initStaticItem();
|
initStaticItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialise step items.
|
||||||
|
* Also bypassed init sequence to initialise books value
|
||||||
|
* as it used as one of the first call from the init sequence of the gui
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected void initStepsValue() {
|
protected void initStepsValue() {
|
||||||
super.initStepsValue();
|
super.initStepsValue();
|
||||||
|
|
@ -53,6 +67,9 @@ public class EnchantCostSettingsGui extends IntSettingsGui {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialise item that should not be updated late.
|
||||||
|
*/
|
||||||
private void initStaticItem() {
|
private void initStaticItem() {
|
||||||
PatternPane pane = getPane();
|
PatternPane pane = getPane();
|
||||||
|
|
||||||
|
|
@ -166,6 +183,10 @@ public class EnchantCostSettingsGui extends IntSettingsGui {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param planned Value to change current book cost setting to.
|
||||||
|
* @return A consumer to update the current book cost setting's value.
|
||||||
|
*/
|
||||||
protected Consumer<InventoryClickEvent> updateNowBookConsumer(int planned){
|
protected Consumer<InventoryClickEvent> updateNowBookConsumer(int planned){
|
||||||
return event->{
|
return event->{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
|
@ -197,21 +218,55 @@ public class EnchantCostSettingsGui extends IntSettingsGui {
|
||||||
return super.hadChange() || nowBook != beforeBook;
|
return super.hadChange() || nowBook != beforeBook;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static EnchantCostSettingFactory enchFactory(@NotNull String title, ValueUpdatableGui parent,
|
/**
|
||||||
String configPath, ConfigHolder config,
|
* Create an int setting factory from setting's parameters.
|
||||||
int min, int max, int defaultItemVal, int defaultBookVal,
|
* @param title The title of the gui.
|
||||||
int... steps){
|
* @param parent Parent gui to go back when completed.
|
||||||
|
* @param configPath Configuration path of this setting.
|
||||||
|
* @param config Configuration holder of this setting.
|
||||||
|
* @param min Minimum value of this setting.
|
||||||
|
* @param max Maximum value of this setting.
|
||||||
|
* @param defaultItemVal Default item value if not found on the config.
|
||||||
|
* @param defaultBookVal Default book value if not found on the config.
|
||||||
|
* @param steps List of step the value can increment/decrement.
|
||||||
|
* List's size should be between 1 (included) and 3 (included).
|
||||||
|
* it is visually preferable to have an odd number of step.
|
||||||
|
* If step only contain 1 value, no step item should be displayed.
|
||||||
|
* @return A factory for an enchant cost setting gui.
|
||||||
|
*/
|
||||||
|
public static EnchantCostSettingFactory enchentCostFactory(
|
||||||
|
@NotNull String title, ValueUpdatableGui parent,
|
||||||
|
String configPath, ConfigHolder config,
|
||||||
|
int min, int max, int defaultItemVal, int defaultBookVal,
|
||||||
|
int... steps){
|
||||||
return new EnchantCostSettingFactory(
|
return new EnchantCostSettingFactory(
|
||||||
title,parent,
|
title,parent,
|
||||||
configPath, config,
|
configPath, config,
|
||||||
min, max, defaultItemVal, defaultBookVal, steps);
|
min, max, defaultItemVal, defaultBookVal, steps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A factory for an enchantment cost setting gui that hold setting's information.
|
||||||
|
*/
|
||||||
public static class EnchantCostSettingFactory extends IntSettingsGui.IntSettingFactory {
|
public static class EnchantCostSettingFactory extends IntSettingsGui.IntSettingFactory {
|
||||||
|
|
||||||
int defaultBookVal;
|
int defaultBookVal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for an enchantment cost setting gui factory.
|
||||||
|
* @param title The title of the gui.
|
||||||
|
* @param parent Parent gui to go back when completed.
|
||||||
|
* @param configPath Configuration path of this setting.
|
||||||
|
* @param config Configuration holder of this setting.
|
||||||
|
* @param min Minimum value of this setting.
|
||||||
|
* @param max Maximum value of this setting.
|
||||||
|
* @param defaultItemVal Default item value if not found on the config.
|
||||||
|
* @param defaultBookVal Default book value if not found on the config.
|
||||||
|
* @param steps List of step the value can increment/decrement.
|
||||||
|
* List's size should be between 1 (included) and 3 (included).
|
||||||
|
* it is visually preferable to have an odd number of step.
|
||||||
|
* If step only contain 1 value, no step item should be displayed.
|
||||||
|
*/
|
||||||
protected EnchantCostSettingFactory(
|
protected EnchantCostSettingFactory(
|
||||||
@NotNull String title, ValueUpdatableGui parent,
|
@NotNull String title, ValueUpdatableGui parent,
|
||||||
String configPath, ConfigHolder config,
|
String configPath, ConfigHolder config,
|
||||||
|
|
@ -224,16 +279,17 @@ public class EnchantCostSettingsGui extends IntSettingsGui {
|
||||||
this.defaultBookVal = defaultBookVal;
|
this.defaultBookVal = defaultBookVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
/**
|
||||||
public String getTitle() {
|
* @return The configured value for the enchant setting item value.
|
||||||
return title;
|
*/
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getConfiguredValue() {
|
public int getConfiguredValue() {
|
||||||
return this.config.getConfig().getInt(this.configPath+ITEM_PATH, this.defaultVal);
|
return this.config.getConfig().getInt(this.configPath+ITEM_PATH, this.defaultVal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The configured value for the enchant setting book value.
|
||||||
|
*/
|
||||||
public int getConfiguredBookValue(){
|
public int getConfiguredBookValue(){
|
||||||
return this.config.getConfig().getInt(this.configPath+BOOK_PATH, this.defaultBookVal);
|
return this.config.getConfig().getInt(this.configPath+BOOK_PATH, this.defaultBookVal);
|
||||||
}
|
}
|
||||||
|
|
@ -248,5 +304,4 @@ public class EnchantCostSettingsGui extends IntSettingsGui {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -19,6 +19,9 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An instance of a gui used to edit an int setting.
|
||||||
|
*/
|
||||||
public class IntSettingsGui extends AbstractSettingGui{
|
public class IntSettingsGui extends AbstractSettingGui{
|
||||||
|
|
||||||
protected final IntSettingFactory holder;
|
protected final IntSettingFactory holder;
|
||||||
|
|
@ -26,8 +29,13 @@ public class IntSettingsGui extends AbstractSettingGui{
|
||||||
protected int now;
|
protected int now;
|
||||||
protected int step;
|
protected int step;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an int setting config gui.
|
||||||
|
* @param holder Configuration factory of this setting.
|
||||||
|
* @param now The defined value of this setting.
|
||||||
|
*/
|
||||||
protected IntSettingsGui(IntSettingFactory holder, int now) {
|
protected IntSettingsGui(IntSettingFactory holder, int now) {
|
||||||
super(3, holder.title, holder.parent);
|
super(3, holder.getTitle(), holder.parent);
|
||||||
assert holder.steps.length > 0 && holder.steps.length <= 9;
|
assert holder.steps.length > 0 && holder.steps.length <= 9;
|
||||||
this.holder = holder;
|
this.holder = holder;
|
||||||
this.before = now;
|
this.before = now;
|
||||||
|
|
@ -50,6 +58,9 @@ public class IntSettingsGui extends AbstractSettingGui{
|
||||||
}
|
}
|
||||||
|
|
||||||
protected GuiItem returnToDefault;
|
protected GuiItem returnToDefault;
|
||||||
|
/**
|
||||||
|
* Prepare "return to default value" gui item.
|
||||||
|
*/
|
||||||
protected void prepareReturnToDefault(){
|
protected void prepareReturnToDefault(){
|
||||||
ItemStack item = new ItemStack(Material.COMMAND_BLOCK);
|
ItemStack item = new ItemStack(Material.COMMAND_BLOCK);
|
||||||
ItemMeta meta = item.getItemMeta();
|
ItemMeta meta = item.getItemMeta();
|
||||||
|
|
@ -65,6 +76,9 @@ public class IntSettingsGui extends AbstractSettingGui{
|
||||||
}, CustomAnvil.instance);
|
}, CustomAnvil.instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update item using the setting value to match the new value.
|
||||||
|
*/
|
||||||
protected void updateValueDisplay(){
|
protected void updateValueDisplay(){
|
||||||
|
|
||||||
PatternPane pane = getPane();
|
PatternPane pane = getPane();
|
||||||
|
|
@ -123,6 +137,10 @@ public class IntSettingsGui extends AbstractSettingGui{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param planned Value to change current setting to.
|
||||||
|
* @return A consumer to update the current setting's value.
|
||||||
|
*/
|
||||||
protected Consumer<InventoryClickEvent> updateNowConsumer(int planned){
|
protected Consumer<InventoryClickEvent> updateNowConsumer(int planned){
|
||||||
return event->{
|
return event->{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
|
@ -132,6 +150,9 @@ public class IntSettingsGui extends AbstractSettingGui{
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialise step items.
|
||||||
|
*/
|
||||||
protected void initStepsValue(){
|
protected void initStepsValue(){
|
||||||
// Put background glass on the background of 'a' to 'b'
|
// Put background glass on the background of 'a' to 'b'
|
||||||
GuiItem background = GuiGlobalItems.backgroundItem();
|
GuiItem background = GuiGlobalItems.backgroundItem();
|
||||||
|
|
@ -143,11 +164,15 @@ public class IntSettingsGui extends AbstractSettingGui{
|
||||||
// Then update legit step values
|
// Then update legit step values
|
||||||
updateStepValue();
|
updateStepValue();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update steps items value.
|
||||||
|
*/
|
||||||
protected void updateStepValue(){
|
protected void updateStepValue(){
|
||||||
if(holder.steps.length <= 1) return;
|
if(holder.steps.length <= 1) return;
|
||||||
// We assume steps have a length of 2k+1 cause its more pretty
|
// We assume steps have a length of 2k+1 cause its more pretty
|
||||||
char val = getMidStepChar();
|
char val = getMidStepChar();
|
||||||
// Offset
|
// Offset to start (not the best way to do it)
|
||||||
val -= (char) ((holder.steps.length-1)/2);
|
val -= (char) ((holder.steps.length-1)/2);
|
||||||
|
|
||||||
// Then place items
|
// Then place items
|
||||||
|
|
@ -158,10 +183,19 @@ public class IntSettingsGui extends AbstractSettingGui{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Step use lower case character from 'a' to a certain char.
|
||||||
|
* @return The middle value of the character set for steps.
|
||||||
|
*/
|
||||||
protected char getMidStepChar(){
|
protected char getMidStepChar(){
|
||||||
return 'e';
|
return 'e';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a step item from a step value.
|
||||||
|
* @param stepIndex the index of the step item.
|
||||||
|
* @return A step item corresponding to its index value.
|
||||||
|
*/
|
||||||
protected GuiItem stepGuiItem(int stepIndex){
|
protected GuiItem stepGuiItem(int stepIndex){
|
||||||
int stepValue = holder.steps[stepIndex];
|
int stepValue = holder.steps[stepIndex];
|
||||||
|
|
||||||
|
|
@ -194,6 +228,10 @@ public class IntSettingsGui extends AbstractSettingGui{
|
||||||
return new GuiItem(item, clickEvent, CustomAnvil.instance);
|
return new GuiItem(item, clickEvent, CustomAnvil.instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param stepValue Value to change current step to.
|
||||||
|
* @return A consumer to update the current step of this setting.
|
||||||
|
*/
|
||||||
protected Consumer<InventoryClickEvent> updateStepValue(int stepValue){
|
protected Consumer<InventoryClickEvent> updateStepValue(int stepValue){
|
||||||
return event -> {
|
return event -> {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
|
@ -220,6 +258,21 @@ public class IntSettingsGui extends AbstractSettingGui{
|
||||||
return now != before;
|
return now != before;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an int setting factory from setting's parameters.
|
||||||
|
* @param title The title of the gui.
|
||||||
|
* @param parent Parent gui to go back when completed.
|
||||||
|
* @param configPath Configuration path of this setting.
|
||||||
|
* @param config Configuration holder of this setting.
|
||||||
|
* @param min Minimum value of this setting.
|
||||||
|
* @param max Maximum value of this setting.
|
||||||
|
* @param defaultVal Default value if not found on the config.
|
||||||
|
* @param steps List of step the value can increment/decrement.
|
||||||
|
* List's size should be between 1 (included) and 5 (included).
|
||||||
|
* it is visually preferable to have an odd number of step.
|
||||||
|
* If step only contain 1 value, no step item should be displayed.
|
||||||
|
* @return A factory for an int setting gui.
|
||||||
|
*/
|
||||||
public static IntSettingFactory intFactory(@NotNull String title, ValueUpdatableGui parent,
|
public static IntSettingFactory intFactory(@NotNull String title, ValueUpdatableGui parent,
|
||||||
String configPath, ConfigHolder config,
|
String configPath, ConfigHolder config,
|
||||||
int min, int max, int defaultVal, int... steps){
|
int min, int max, int defaultVal, int... steps){
|
||||||
|
|
@ -229,11 +282,27 @@ public class IntSettingsGui extends AbstractSettingGui{
|
||||||
min, max, defaultVal, steps);
|
min, max, defaultVal, steps);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A factory for an int setting gui that hold setting's information.
|
||||||
|
*/
|
||||||
public static class IntSettingFactory extends SettingGuiFactory{
|
public static class IntSettingFactory extends SettingGuiFactory{
|
||||||
@NotNull String title; ValueUpdatableGui parent;
|
@NotNull String title; ValueUpdatableGui parent;
|
||||||
int min; int max; int defaultVal; int[] steps;
|
int min; int max; int defaultVal; int[] steps;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for an int setting gui factory.
|
||||||
|
* @param title The title of the gui.
|
||||||
|
* @param parent Parent gui to go back when completed.
|
||||||
|
* @param configPath Configuration path of this setting.
|
||||||
|
* @param config Configuration holder of this setting.
|
||||||
|
* @param min Minimum value of this setting.
|
||||||
|
* @param max Maximum value of this setting.
|
||||||
|
* @param defaultVal Default value if not found on the config.
|
||||||
|
* @param steps List of step the value can increment/decrement.
|
||||||
|
* List's size should be between 1 (included) and 5 (included).
|
||||||
|
* it is visually preferable to have an odd number of step.
|
||||||
|
* If step only contain 1 value, no step item should be displayed.
|
||||||
|
*/
|
||||||
protected IntSettingFactory(
|
protected IntSettingFactory(
|
||||||
@NotNull String title, ValueUpdatableGui parent,
|
@NotNull String title, ValueUpdatableGui parent,
|
||||||
String configPath, ConfigHolder config,
|
String configPath, ConfigHolder config,
|
||||||
|
|
@ -247,11 +316,17 @@ public class IntSettingsGui extends AbstractSettingGui{
|
||||||
this.steps = steps;
|
this.steps = steps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Get setting's gui title
|
||||||
|
*/
|
||||||
@NotNull
|
@NotNull
|
||||||
public String getTitle() {
|
public String getTitle() {
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The configured value for the associated setting.
|
||||||
|
*/
|
||||||
public int getConfiguredValue(){
|
public int getConfiguredValue(){
|
||||||
return this.config.getConfig().getInt(this.configPath, this.defaultVal);
|
return this.config.getConfig().getInt(this.configPath, this.defaultVal);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue