Updated config button

This commit is contained in:
coolGi2007
2021-12-03 06:17:06 +00:00
parent 82dfecf04c
commit 2dd2623257
8 changed files with 43 additions and 31 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 374 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

@@ -35,7 +35,7 @@ public class MixinOptionsScreen extends Screen {
private void lodconfig$init(CallbackInfo ci) { private void lodconfig$init(CallbackInfo ci) {
this.addRenderableWidget(new TexturedButtonWidget( this.addRenderableWidget(new TexturedButtonWidget(
// Where the button is on the screen // Where the button is on the screen
this.width / 2 + 159, this.height / 6 - 12, this.width / 2 - 180, this.height / 6 - 12,
// Width and height of the button // Width and height of the button
20, 20, 20, 20,
// Offset // Offset
@@ -52,31 +52,45 @@ import java.util.regex.Pattern;
* Credits to Minenash, TeamMidnightDust & Motschen * Credits to Minenash, TeamMidnightDust & Motschen
* *
* @author coolGi2007 * @author coolGi2007
* @version 11-28-2021 * @version 12-03-2021
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public abstract class ConfigGui { public abstract class ConfigGui {
/* /*
Small wiki on how to use this config Small wiki on how to use this config
Create a new class that extends this class Create a new class that extends this class
Every time you want to add a button put a @Entry before it and if you want it to be within a range then do @Entry(min = 0, max = 10) Every time you want to add a button put a @Entry before it and if you want it to be within a range then do @Entry(min = 0, max = 10)
MAKE SURE THE VARIABLE YOU ARE PUTTING IN IS A STATIC VARIABLE MAKE SURE THE VARIABLE YOU ARE PUTTING IN IS A STATIC VARIABLE
If you want to make a config asking if you want coolness then do this If you want to make a config asking if you want coolness then do this
public class Config extends ConfigGui { public class Config extends ConfigGui {
@Entry @Entry
public static bool coolness = false; public static bool coolness = false;
} }
If you want a comment then do this If you want a comment then do this
@Comment public static Comment text1; @Comment public static Comment text1;
FOR THE CONFIG TO SHOW FOR THE CONFIG TO SHOW
you need to have this somewhere in the main class you need to have this somewhere in the main class
ConfigGui.init(ModInfo.ID, Config.class); ConfigGui.init(ModInfo.ID, Config.class);
For putting nested classes do @ScreenEntry for example
public class Config extends ConfigGui {
@Entry
public static bool coolness = false;
public static NestedScreen nestedScreen = new NestedScreen();
public static void NestedScreen() {
@Entry(min = 0, max = 100)
public static int howMuchCoolness = 0;
}
}
*/ */
private static final Pattern INTEGER_ONLY = Pattern.compile("(-?[0-9]*)"); private static final Pattern INTEGER_ONLY = Pattern.compile("(-?[0-9]*)");
private static final Pattern DECIMAL_ONLY = Pattern.compile("-?([\\d]+\\.?[\\d]*|[\\d]*\\.?[\\d]+|\\.)"); private static final Pattern DECIMAL_ONLY = Pattern.compile("-?([\\d]+\\.?[\\d]*|[\\d]*\\.?[\\d]+|\\.)");
@@ -109,10 +123,8 @@ public abstract class ConfigGui {
for (Field field : config.getFields()) { for (Field field : config.getFields()) {
EntryInfo info = new EntryInfo(); EntryInfo info = new EntryInfo();
if (field.isAnnotationPresent(Entry.class) || field.isAnnotationPresent(Comment.class)) if (field.isAnnotationPresent(Entry.class) || field.isAnnotationPresent(Comment.class) || field.isAnnotationPresent(ScreenEntry.class))
if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) initEntry(modid, field, info); if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) initClient(modid, field, info);
else if (field.isAnnotationPresent(ScreenEntry.class))
if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) initScreen(modid, field, info);
if (field.isAnnotationPresent(Entry.class)) if (field.isAnnotationPresent(Entry.class))
try { try {
info.defaultValue = field.get(null); info.defaultValue = field.get(null);
@@ -131,17 +143,21 @@ public abstract class ConfigGui {
} }
} }
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
private static void initEntry(String modid, Field field, EntryInfo info) { private static void initClient(String modid, Field field, EntryInfo info) {
Class<?> type = field.getType(); Class<?> type = field.getType();
Entry e = field.getAnnotation(Entry.class); Entry e = field.getAnnotation(Entry.class);
ScreenEntry s = field.getAnnotation(ScreenEntry.class);
info.width = e != null ? e.width() : 0; info.width = e != null ? e.width() : 0;
info.field = field; info.field = field;
info.id = modid; info.id = modid;
if (e != null) { if (e != null) {
if (!e.name().equals("")) info.name = new TranslatableComponent(e.name()); if (!e.name().equals(""))
if (type == int.class) textField(info, Integer::parseInt, INTEGER_ONLY, e.min(), e.max(), true); info.name = new TranslatableComponent(e.name());
else if (type == double.class) textField(info, Double::parseDouble, DECIMAL_ONLY, e.min(), e.max(), false); if (type == int.class)
textField(info, Integer::parseInt, INTEGER_ONLY, e.min(), e.max(), true);
else if (type == double.class)
textField(info, Double::parseDouble, DECIMAL_ONLY, e.min(), e.max(), false);
else if (type == String.class || type == List.class) { else if (type == String.class || type == List.class) {
info.max = e.max() == Double.MAX_VALUE ? Integer.MAX_VALUE : (int) e.max(); info.max = e.max() == Double.MAX_VALUE ? Integer.MAX_VALUE : (int) e.max();
textField(info, String::length, null, Math.min(e.min(), 0), Math.max(e.max(), 1), true); textField(info, String::length, null, Math.min(e.min(), 0), Math.max(e.max(), 1), true);
@@ -160,20 +176,15 @@ public abstract class ConfigGui {
button.setMessage(func.apply(info.value)); button.setMessage(func.apply(info.value));
}, func); }, func);
} }
} else if (s != null) {
if (!s.name().equals("")) info.name = new TranslatableComponent(s.name());
Function<Object, Component> func = value -> new TextComponent((Boolean) value ? "True" : "False").withStyle((Boolean) value ? ChatFormatting.GREEN : ChatFormatting.RED);
info.widget = new AbstractMap.SimpleEntry<Button.OnPress, Function<Object, Component>>(button -> {
button.setMessage(info.name);
}, func);
} }
entries.add(info); entries.add(info);
} }
@Environment(EnvType.CLIENT)
public static void initScreen(String modid, Field field, EntryInfo info) {
// entries.add(new Button(this.width / 2 - 100, this.height - 28, 200, 20, new TranslatableComponent(modid +".config.title"), (button) ->
// Objects.requireNonNull(minecraft).setScreen(ConfigGui.getScreen(this, modid))));
// ButtonEntry.create(
// new Button(this.width / 2 - 100, this.height - 28, 200, 20, new TranslatableComponent(modid +".config.title"), (button) ->
// Objects.requireNonNull(minecraft).setScreen(ConfigGui.getScreen(this, modid))),
// new TranslatableComponent(modid +".config.title"),
//
// );
}
private static void textField(EntryInfo info, Function<String,Number> f, Pattern pattern, double min, double max, boolean cast) { private static void textField(EntryInfo info, Function<String,Number> f, Pattern pattern, double min, double max, boolean cast) {
boolean isNumber = pattern != null; boolean isNumber = pattern != null;
@@ -442,6 +453,7 @@ public abstract class ConfigGui {
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD) @Target(ElementType.FIELD)
public @interface ScreenEntry { public @interface ScreenEntry {
String name() default "";
} }
// Where the @Comment is defined // Where the @Comment is defined
Binary file not shown.

Before

Width:  |  Height:  |  Size: 184 KiB