Fixed the forge and fabric not building and made the gradlew an executable

This commit is contained in:
coolGi2007
2021-12-02 09:45:56 +00:00
parent 0f19b338b6
commit a587ac4b4c
11 changed files with 749 additions and 244 deletions
@@ -142,14 +142,14 @@ public class ClientProxy
boolean PreDebugToggle = false;
boolean PreDrawToggle = false;
public void onKeyInput() {
if (Config.Client.AdvancedModOptions.Debugging.enableDebugKeybindings)
if (Config.Client.Advanced.Debugging.enableDebugKeybindings)
{
// Only activates when you press the key
if (DebugToggle.isDown() && DebugToggle.isDown() != PreDebugToggle)
Config.Client.AdvancedModOptions.Debugging.debugMode = Config.Client.AdvancedModOptions.Debugging.debugMode.getNext();
Config.Client.Advanced.Debugging.debugMode = Config.Client.Advanced.Debugging.debugMode.getNext();
if (DrawToggle.isDown() && DrawToggle.isDown() != PreDebugToggle)
Config.Client.AdvancedModOptions.Debugging.drawLods = !Config.Client.AdvancedModOptions.Debugging.drawLods;
Config.Client.Advanced.Debugging.drawLods = !Config.Client.Advanced.Debugging.drawLods;
}
PreDebugToggle = DebugToggle.isDown();
PreDrawToggle = DrawToggle.isDown();
@@ -25,34 +25,35 @@ import com.seibel.lod.core.enums.rendering.*;
import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton.IClient.IAdvanced.*;
import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton.IClient.IGraphics.*;
import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton.IClient.IWorldGenerator;
import com.seibel.lod.fabric.wrappers.config.ConfigGui;
import me.shedaniel.autoconfig.ConfigData;
import me.shedaniel.autoconfig.annotation.ConfigEntry;
/**
* This handles any configuration the user has access to.
* @author coolGi2007
* @version 11-29-2021
* @version 12-02-2021
*/
@me.shedaniel.autoconfig.annotation.Config(name = ModInfo.ID)
public class Config implements ConfigData
//public class Config extends ConfigGui
{
// CONFIG STRUCTURE
// -> Client
// |
// |-> Graphics
// | |-> QualityOption
// | |-> FogQualityOption
// | |-> AdvancedGraphicsOption
// | |-> Quality
// | |-> FogQuality
// | |-> AdvancedGraphics
// |
// |-> World Generation
// |
// |-> Advanced Mod Option
// |-> Advanced
// |-> Threads
// |-> Buffers
// |-> Debugging
// Since the original config system uses forge stuff, that means we have to rewrite the whole config system
// TODO: Stop using autoconfig and use manual config for cloth config
@ConfigEntry.Gui.CollapsibleObject
public Client client = new Client();
@@ -66,22 +67,22 @@ public class Config implements ConfigData
public WorldGenerator worldGenerator = new WorldGenerator();
@ConfigEntry.Gui.CollapsibleObject
public AdvancedModOptions advancedModOptions = new AdvancedModOptions();
public Advanced advanced = new Advanced();
public static class Graphics
{
@ConfigEntry.Gui.CollapsibleObject
public QualityOption qualityOption = new QualityOption();
public Quality quality = new Quality();
@ConfigEntry.Gui.CollapsibleObject
public FogQualityOption fogQualityOption = new FogQualityOption();
public FogQuality fogQuality = new FogQuality();
@ConfigEntry.Gui.CollapsibleObject
public AdvancedGraphicsOption advancedGraphicsOption = new AdvancedGraphicsOption();
public AdvancedGraphics advancedGraphicsOption = new AdvancedGraphics();
public static class QualityOption
public static class Quality
{
@ConfigEntry.Category("lod.Graphics.QualityOption")
@ConfigEntry.Gui.Tooltip
@@ -104,8 +105,8 @@ public class Config implements ConfigData
@ConfigEntry.Gui.Tooltip
public static HorizontalQuality horizontalQuality = IQuality.HORIZONTAL_QUALITY_DEFAULT;
}
public static class FogQualityOption
public static class FogQuality
{
@ConfigEntry.Category("lod.Graphics.FogQualityOption")
@ConfigEntry.Gui.Tooltip
@@ -123,8 +124,8 @@ public class Config implements ConfigData
@ConfigEntry.Gui.Tooltip
public static boolean disableVanillaFog = IFogQuality.DISABLE_VANILLA_FOG_DEFAULT;
}
public static class AdvancedGraphicsOption
public static class AdvancedGraphics
{
@ConfigEntry.Category("lod.Graphics.AdvancedGraphicsOption")
@ConfigEntry.Gui.Tooltip
@@ -142,22 +143,13 @@ public class Config implements ConfigData
@ConfigEntry.Gui.Tooltip
public static VanillaOverdraw vanillaOverdraw = IAdvancedGraphics.VANILLA_OVERDRAW_DEFAULT;
@ConfigEntry.Category("lod.Graphics.AdvancedGraphicsOption")
@ConfigEntry.Gui.Tooltip
public static GpuUploadMethod gpuUploadMethod = IAdvancedGraphics.GPU_UPLOAD_METHOD_DEFAULT;
@ConfigEntry.Category("lod.Graphics.AdvancedGraphicsOption")
@ConfigEntry.Gui.Tooltip
@ConfigEntry.BoundedDiscrete(min = 0, max = 5000)
public static int gpuUploadTimeoutInMilleseconds = IAdvancedGraphics.GPU_UPLOAD_TIMEOUT_IN_MILLISECONDS_DEFAULT.defaultValue;
@ConfigEntry.Category("lod.Graphics.AdvancedGraphicsOption")
@ConfigEntry.Gui.Tooltip
public static boolean useExtendedNearClipPlane = IAdvancedGraphics.USE_EXTENDED_NEAR_CLIP_PLANE_DEFAULT;
}
}
//========================//
// WorldGenerator Configs //
//========================//
@@ -185,12 +177,12 @@ public class Config implements ConfigData
public static boolean useExperimentalPreGenLoading = false;
*/
}
//============================//
// AdvancedModOptions Configs //
//============================//
public static class AdvancedModOptions
//==================//
// Advanced Configs //
//==================//
public static class Advanced
{
@ConfigEntry.Gui.CollapsibleObject
public Threading threading = new Threading();
@@ -201,7 +193,7 @@ public class Config implements ConfigData
@ConfigEntry.Gui.CollapsibleObject
public Buffers buffers = new Buffers();
public static class Threading
{
@ConfigEntry.Category("lod.AdvancedModOptions.Threading")
@@ -217,9 +209,9 @@ public class Config implements ConfigData
public static int numberOfBufferBuilderThreads = IThreading.NUMBER_OF_BUFFER_BUILDER_THREADS_MIN_DEFAULT_MAX.defaultValue;
}
//===============//
// Debug Options //
//===============//
@@ -237,10 +229,19 @@ public class Config implements ConfigData
@ConfigEntry.Gui.Tooltip
public static boolean enableDebugKeybindings = IDebugging.DEBUG_KEYBINDINGS_ENABLED_DEFAULT;
}
public static class Buffers
{
@ConfigEntry.Category("lod.Graphics.AdvancedGraphicsOption")
@ConfigEntry.Gui.Tooltip
public static GpuUploadMethod gpuUploadMethod = IBuffers.GPU_UPLOAD_METHOD_DEFAULT;
@ConfigEntry.Category("lod.Graphics.AdvancedGraphicsOption")
@ConfigEntry.Gui.Tooltip
@ConfigEntry.BoundedDiscrete(min = 0, max = 5000)
public static int gpuUploadTimeoutInMilleseconds = IBuffers.GPU_UPLOAD_TIMEOUT_IN_MILLISECONDS_DEFAULT.defaultValue;
@ConfigEntry.Category("lod.AdvancedModOptions.Buffers")
@ConfigEntry.Gui.Tooltip
public static BufferRebuildTimes rebuildTimes = IBuffers.REBUILD_TIMES_DEFAULT;
@@ -24,6 +24,7 @@ import com.seibel.lod.core.ModInfo;
import com.seibel.lod.core.api.ClientApi;
import com.seibel.lod.fabric.wrappers.DependencySetup;
import com.seibel.lod.fabric.wrappers.config.ConfigGui;
import me.shedaniel.autoconfig.AutoConfig;
import me.shedaniel.autoconfig.serializer.Toml4jConfigSerializer;
import net.fabricmc.api.ClientModInitializer;
@@ -59,6 +60,7 @@ public class Main implements ClientModInitializer
// This loads the mod after minecraft loads which doesn't causes a lot of issues
public static void init() {
// ConfigGui.init(ModInfo.ID, Config.class);
LodCommonMain.startup(null);
DependencySetup.createInitialBindings();
ClientApi.LOGGER.info(ModInfo.READABLE_NAME + ", Version: " + ModInfo.VERSION);
@@ -17,6 +17,12 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.Objects;
/**
* Adds a button to the menu to goto the config
*
* @author coolGi2007
* @version 12-02-2021
*/
@Mixin(OptionsScreen.class)
public class MixinOptionsScreen extends Screen {
// Get the texture for the button
@@ -29,7 +35,7 @@ public class MixinOptionsScreen extends Screen {
private void lodconfig$init(CallbackInfo ci) {
this.addRenderableWidget(new TexturedButtonWidget(
// Where the button is on the screen
this.width / 2 - 180, this.height / 6 - 12,
this.width / 2 + 159, this.height / 6 - 12,
// Width and height of the button
20, 20,
// Offset
@@ -38,6 +44,7 @@ public class MixinOptionsScreen extends Screen {
20, ICON_TEXTURE, 20, 40,
// Create the button and tell it where to go
(buttonWidget) -> Objects.requireNonNull(minecraft).setScreen(AutoConfig.getConfigScreen(Config.class, this).get()),
// (buttonWidget) -> Objects.requireNonNull(minecraft).setScreen(Config.getScreen(this, ModInfo.ID)),
// Add a title to the screen
new TranslatableComponent("text.autoconfig." + ModInfo.ID + ".title")));
}
@@ -0,0 +1,458 @@
package com.seibel.lod.fabric.wrappers.config;
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.mojang.blaze3d.vertex.PoseStack;
import com.seibel.lod.core.ModInfo;
import com.seibel.lod.fabric.Config;
import jdk.dynalink.beans.StaticClass;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiComponent;
import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.components.ContainerObjectSelectionList;
import net.minecraft.client.gui.components.EditBox;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.narration.NarratableEntry;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.resources.language.I18n;
import net.minecraft.network.chat.CommonComponents;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.TextComponent;
import net.minecraft.network.chat.TranslatableComponent;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.*;
import java.util.function.BiFunction;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.regex.Pattern;
/**
* Handles the configs gui
* Based upon MidnightConfig
* https://github.com/TeamMidnightDust/MidnightLib/blob/main/src/main/java/eu/midnightdust/lib/config/
* which is based upon TinyConfig
* https://github.com/Minenash/TinyConfig
*
* Credits to Minenash, TeamMidnightDust & Motschen
*
* @author coolGi2007
* @version 11-28-2021
*/
@SuppressWarnings("unchecked")
public abstract class ConfigGui {
/*
Small wiki on how to use this config
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)
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
public class Config extends ConfigGui {
@Entry
public static bool coolness = false;
}
If you want a comment then do this
@Comment public static Comment text1;
FOR THE CONFIG TO SHOW
you need to have this somewhere in the main class
ConfigGui.init(ModInfo.ID, Config.class);
*/
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 List<EntryInfo> entries = new ArrayList<>();
protected static class EntryInfo {
Field field;
Object widget;
int width;
int max;
Map.Entry<EditBox, Component> error;
Object defaultValue;
Object value;
String tempValue;
boolean inLimits = true;
String id;
TranslatableComponent name;
int index;
}
public static final Map<String,Class<?>> configClass = new HashMap<>();
private static Path path;
private static final Gson gson = new GsonBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).excludeFieldsWithModifiers(Modifier.PRIVATE).addSerializationExclusionStrategy(new HiddenAnnotationExclusionStrategy()).setPrettyPrinting().create();
public static void init(String modid, Class<?> config) {
path = FabricLoader.getInstance().getConfigDir().resolve(modid + ".json");
configClass.put(modid, config);
for (Field field : config.getFields()) {
EntryInfo info = new EntryInfo();
if (field.isAnnotationPresent(Entry.class) || field.isAnnotationPresent(Comment.class))
if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) initEntry(modid, field, info);
else if (field.isAnnotationPresent(ScreenEntry.class))
if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) initScreen(modid, field, info);
if (field.isAnnotationPresent(Entry.class))
try {
info.defaultValue = field.get(null);
} catch (IllegalAccessException ignored) {}
}
try { gson.fromJson(Files.newBufferedReader(path), config); }
catch (Exception e) { write(modid); }
for (EntryInfo info : entries) {
if (info.field.isAnnotationPresent(Entry.class))
try {
info.value = info.field.get(null);
info.tempValue = info.value.toString();
} catch (IllegalAccessException ignored) {
}
}
}
@Environment(EnvType.CLIENT)
private static void initEntry(String modid, Field field, EntryInfo info) {
Class<?> type = field.getType();
Entry e = field.getAnnotation(Entry.class);
info.width = e != null ? e.width() : 0;
info.field = field;
info.id = modid;
if (e != null) {
if (!e.name().equals("")) info.name = new TranslatableComponent(e.name());
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) {
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);
} else if (type == boolean.class) {
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 -> {
info.value = !(Boolean) info.value;
button.setMessage(func.apply(info.value));
}, func);
} else if (type.isEnum()) {
List<?> values = Arrays.asList(field.getType().getEnumConstants());
Function<Object, Component> func = value -> new TranslatableComponent(modid + ".config." + "enum." + type.getSimpleName() + "." + info.value.toString());
info.widget = new AbstractMap.SimpleEntry<Button.OnPress, Function<Object, Component>>(button -> {
int index = values.indexOf(info.value) + 1;
info.value = values.get(index >= values.size() ? 0 : index);
button.setMessage(func.apply(info.value));
}, func);
}
}
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) {
boolean isNumber = pattern != null;
info.widget = (BiFunction<EditBox, Button, Predicate<String>>) (t, b) -> s -> {
s = s.trim();
if (!(s.isEmpty() || !isNumber || pattern.matcher(s).matches())) return false;
Number value = 0;
boolean inLimits = false;
info.error = null;
if (!(isNumber && s.isEmpty()) && !s.equals("-") && !s.equals(".")) {
value = f.apply(s);
inLimits = value.doubleValue() >= min && value.doubleValue() <= max;
info.error = inLimits? null : new AbstractMap.SimpleEntry<>(t, new TextComponent(value.doubleValue() < min ?
"§cMinimum " + (isNumber? "value" : "length") + (cast? " is " + (int)min : " is " + min) :
"§cMaximum " + (isNumber? "value" : "length") + (cast? " is " + (int)max : " is " + max)));
}
info.tempValue = s;
t.setTextColor(inLimits? 0xFFFFFFFF : 0xFFFF7777);
info.inLimits = inLimits;
b.active = entries.stream().allMatch(e -> e.inLimits);
if (inLimits && info.field.getType() != List.class)
info.value = isNumber? value : s;
else if (inLimits) {
if (((List<String>) info.value).size() == info.index) ((List<String>) info.value).add("");
((List<String>) info.value).set(info.index, Arrays.stream(info.tempValue.replace("[", "").replace("]", "").split(", ")).toList().get(0));
}
return true;
};
}
// TODO[CONFIG]: Change to .toml
public static void write(String modid) {
path = FabricLoader.getInstance().getConfigDir().resolve(modid + ".json");
try {
if (!Files.exists(path)) Files.createFile(path);
Files.write(path, gson.toJson(configClass.get(modid).getDeclaredConstructor().newInstance()).getBytes());
} catch (Exception e) {
e.printStackTrace();
}
}
@Environment(EnvType.CLIENT)
public static Screen getScreen(Screen parent, String modid) {
return new ConfigScreen(parent, modid);
}
@Environment(EnvType.CLIENT)
private static class ConfigScreen extends Screen {
protected ConfigScreen(Screen parent, String modid) {
super(new TranslatableComponent(modid + ".config.title"));
this.parent = parent;
this.modid = modid;
this.translationPrefix = modid + ".config.";
}
private final String translationPrefix;
private final Screen parent;
private final String modid;
private ConfigListWidget list;
private boolean reload = false;
// Real Time config update //
@Override
public void tick() {
super.tick();
for (EntryInfo info : entries) {
try {info.field.set(null, info.value);} catch (IllegalAccessException ignored) {}
}
}
private void loadValues() {
try { gson.fromJson(Files.newBufferedReader(path), configClass.get(modid)); }
catch (Exception e) { write(modid); }
for (EntryInfo info : entries) {
if (info.field.isAnnotationPresent(Entry.class))
try {
info.value = info.field.get(null);
info.tempValue = info.value.toString();
} catch (IllegalAccessException ignored) {}
}
}
@Override
protected void init() {
super.init();
if (!reload) loadValues();
this.addRenderableWidget(new Button(this.width / 2 - 154, this.height - 28, 150, 20, CommonComponents.GUI_CANCEL, button -> {
loadValues();
Objects.requireNonNull(minecraft).setScreen(parent);
}));
Button done = this.addRenderableWidget(new Button(this.width / 2 + 4, this.height - 28, 150, 20, CommonComponents.GUI_DONE, (button) -> {
for (EntryInfo info : entries)
if (info.id.equals(modid)) {
try {
info.field.set(null, info.value);
} catch (IllegalAccessException ignored) {}
}
write(modid);
Objects.requireNonNull(minecraft).setScreen(parent);
}));
this.list = new ConfigListWidget(this.minecraft, this.width, this.height, 32, this.height - 32, 25);
if (this.minecraft != null && this.minecraft.level != null) this.list.setRenderBackground(false);
this.addWidget(this.list);
for (EntryInfo info : entries) {
if (info.id.equals(modid)) {
TranslatableComponent name = Objects.requireNonNullElseGet(info.name, () -> new TranslatableComponent(translationPrefix + info.field.getName()));
Button resetButton = new Button(width - 205, 0, 40, 20, new TextComponent("Reset").withStyle(ChatFormatting.RED), (button -> {
info.value = info.defaultValue;
info.tempValue = info.defaultValue.toString();
info.index = 0;
double scrollAmount = list.getScrollAmount();
this.reload = true;
Objects.requireNonNull(minecraft).setScreen(this);
list.setScrollAmount(scrollAmount);
}));
if (info.widget instanceof Map.Entry) {
Map.Entry<Button.OnPress, Function<Object, Component>> widget = (Map.Entry<Button.OnPress, Function<Object, Component>>) info.widget;
if (info.field.getType().isEnum()) widget.setValue(value -> new TranslatableComponent(translationPrefix + "enum." + info.field.getType().getSimpleName() + "." + info.value.toString()));
this.list.addButton(new Button(width - 160, 0,150, 20, widget.getValue().apply(info.value), widget.getKey()),resetButton, null,name);
} else if (info.field.getType() == List.class) {
if (!reload) info.index = 0;
EditBox widget = new EditBox(font, width - 160, 0, 150, 20, null);
widget.setMaxLength(info.width);
if (info.index < ((List<String>)info.value).size()) widget.insertText((String.valueOf(((List<String>)info.value).get(info.index))));
else widget.insertText("");
Predicate<String> processor = ((BiFunction<EditBox, Button, Predicate<String>>) info.widget).apply(widget, done);
widget.setFilter(processor);
resetButton.setWidth(20);
resetButton.setMessage(new TextComponent("R").withStyle(ChatFormatting.RED));
Button cycleButton = new Button(width - 185, 0, 20, 20, new TextComponent(String.valueOf(info.index)).withStyle(ChatFormatting.GOLD), (button -> {
((List<String>)info.value).remove("");
double scrollAmount = list.getScrollAmount();
this.reload = true;
info.index = info.index + 1;
if (info.index > ((List<String>)info.value).size()) info.index = 0;
Objects.requireNonNull(minecraft).setScreen(this);
list.setScrollAmount(scrollAmount);
}));
this.list.addButton(widget, resetButton, cycleButton, name);
} else if (info.widget != null) {
EditBox widget = new EditBox(font, width - 160, 0, 150, 20, null);
widget.setMaxLength(info.width);
widget.insertText(info.tempValue);
Predicate<String> processor = ((BiFunction<EditBox, Button, Predicate<String>>) info.widget).apply(widget, done);
widget.setFilter(processor);
this.list.addButton(widget, resetButton, null, name);
} else {
this.list.addButton(null,null,null,name);
}
}
}
}
@Override
public void render(PoseStack matrices, int mouseX, int mouseY, float delta) {
this.renderBackground(matrices);
this.list.render(matrices, mouseX, mouseY, delta);
drawCenteredString(matrices, font, title, width / 2, 15, 0xFFFFFF);
for (EntryInfo info : entries) {
if (info.id.equals(modid)) {
if (list.getHoveredButton(mouseX,mouseY).isPresent()) {
AbstractWidget buttonWidget = list.getHoveredButton(mouseX,mouseY).get();
Component text = ButtonEntry.buttonsWithText.get(buttonWidget);
TranslatableComponent name = new TranslatableComponent(this.translationPrefix + info.field.getName());
String key = translationPrefix + info.field.getName() + ".tooltip";
if (info.error != null && text.equals(name)) renderTooltip(matrices, info.error.getValue(), mouseX, mouseY);
else if (I18n.exists(key) && text.equals(name)) {
List<Component> list = new ArrayList<>();
for (String str : I18n.get(key).split("\n"))
list.add(new TextComponent(str));
renderTooltip(matrices, (Component) list, mouseX, mouseY);
}
}
}
}
super.render(matrices,mouseX,mouseY,delta);
}
}
@Environment(EnvType.CLIENT)
public static class ConfigListWidget extends ContainerObjectSelectionList<ButtonEntry> {
Font textRenderer;
public ConfigListWidget(Minecraft minecraftClient, int i, int j, int k, int l, int m) {
super(minecraftClient, i, j, k, l, m);
this.centerListVertically = false;
textRenderer = minecraftClient.font;
}
// @Override
public int getScrollbarPositionX() { return this.width -7; }
public void addButton(AbstractWidget button, AbstractWidget resetButton, AbstractWidget indexButton, Component text) {
this.addEntry(ButtonEntry.create(button, text, resetButton, indexButton));
}
@Override
public int getRowWidth() { return 10000; }
public Optional<AbstractWidget> getHoveredButton(double mouseX, double mouseY) {
for (ButtonEntry buttonEntry : this.children()) {
if (buttonEntry.button != null && buttonEntry.button.isMouseOver(mouseX, mouseY)) {
return Optional.of(buttonEntry.button);
}
}
return Optional.empty();
}
}
public static class ButtonEntry extends ContainerObjectSelectionList.Entry<ButtonEntry> {
private static final Font textRenderer = Minecraft.getInstance().font;
public final AbstractWidget button;
private final AbstractWidget resetButton;
private final AbstractWidget indexButton;
private final Component text;
private final List<AbstractWidget> children = new ArrayList<>();
public static final Map<AbstractWidget, Component> buttonsWithText = new HashMap<>();
private ButtonEntry(AbstractWidget button, Component text, AbstractWidget resetButton, AbstractWidget indexButton) {
buttonsWithText.put(button,text);
this.button = button;
this.resetButton = resetButton;
this.text = text;
this.indexButton = indexButton;
if (button != null) children.add(button);
if (resetButton != null) children.add(resetButton);
if (indexButton != null) children.add(indexButton);
}
public static ButtonEntry create(AbstractWidget button, Component text, AbstractWidget resetButton, AbstractWidget indexButton) {
return new ButtonEntry(button, text, resetButton, indexButton);
}
public void render(PoseStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) {
if (button != null) {
button.y = y;
button.render(matrices, mouseX, mouseY, tickDelta);
}
if (resetButton != null) {
resetButton.y = y;
resetButton.render(matrices, mouseX, mouseY, tickDelta);
}
if (indexButton != null) {
indexButton.y = y;
indexButton.render(matrices, mouseX, mouseY, tickDelta);
}
if (text != null && (!text.getString().contains("spacer") || button != null))
GuiComponent.drawString(matrices,textRenderer, text,12,y+5,0xFFFFFF);
}
@Override
public List<? extends GuiEventListener> children() {return children;}
@Override
public List<? extends NarratableEntry> narratables() {return children;}
}
// Where the @Entry is defined
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Entry {
int width() default 100;
double min() default Double.MIN_NORMAL;
double max() default Double.MAX_VALUE;
String name() default "";
}
// Where the @ScreenEntry is defined
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ScreenEntry {
}
// Where the @Comment is defined
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Comment {}
public static class HiddenAnnotationExclusionStrategy implements ExclusionStrategy {
public boolean shouldSkipClass(Class<?> clazz) { return false; }
public boolean shouldSkipField(FieldAttributes fieldAttributes) {
return fieldAttributes.getAnnotation(Entry.class) == null;
}
}
}
@@ -105,60 +105,60 @@ public class LodConfigWrapperSingleton implements ILodConfigWrapperSingleton
@Override
public HorizontalResolution getDrawResolution()
{
return Config.Client.Graphics.QualityOption.drawResolution;
return Config.Client.Graphics.Quality.drawResolution;
}
@Override
public void setDrawResolution(HorizontalResolution newHorizontalResolution)
{
Config.Client.Graphics.QualityOption.drawResolution = newHorizontalResolution;
Config.Client.Graphics.Quality.drawResolution = newHorizontalResolution;
}
@Override
public int getLodChunkRenderDistance()
{
return Config.Client.Graphics.QualityOption.lodChunkRenderDistance;
return Config.Client.Graphics.Quality.lodChunkRenderDistance;
}
@Override
public void setLodChunkRenderDistance(int newLodChunkRenderDistance)
{
Config.Client.Graphics.QualityOption.lodChunkRenderDistance = newLodChunkRenderDistance;
Config.Client.Graphics.Quality.lodChunkRenderDistance = newLodChunkRenderDistance;
}
@Override
public VerticalQuality getVerticalQuality()
{
return Config.Client.Graphics.QualityOption.verticalQuality;
return Config.Client.Graphics.Quality.verticalQuality;
}
@Override
public void setVerticalQuality(VerticalQuality newVerticalQuality)
{
Config.Client.Graphics.QualityOption.verticalQuality = newVerticalQuality;
Config.Client.Graphics.Quality.verticalQuality = newVerticalQuality;
}
@Override
public HorizontalScale getHorizontalScale()
{
return Config.Client.Graphics.QualityOption.horizontalScale;
return Config.Client.Graphics.Quality.horizontalScale;
}
@Override
public void setHorizontalScale(HorizontalScale newHorizontalScale)
{
Config.Client.Graphics.QualityOption.horizontalScale = newHorizontalScale;
Config.Client.Graphics.Quality.horizontalScale = newHorizontalScale;
}
@Override
public HorizontalQuality getHorizontalQuality()
{
return Config.Client.Graphics.QualityOption.horizontalQuality;
return Config.Client.Graphics.Quality.horizontalQuality;
}
@Override
public void setHorizontalQuality(HorizontalQuality newHorizontalQuality)
{
Config.Client.Graphics.QualityOption.horizontalQuality = newHorizontalQuality;
Config.Client.Graphics.Quality.horizontalQuality = newHorizontalQuality;
}
}
@@ -168,50 +168,50 @@ public class LodConfigWrapperSingleton implements ILodConfigWrapperSingleton
@Override
public FogDistance getFogDistance()
{
return Config.Client.Graphics.FogQualityOption.fogDistance;
return Config.Client.Graphics.FogQuality.fogDistance;
}
@Override
public void setFogDistance(FogDistance newFogDistance)
{
Config.Client.Graphics.FogQualityOption.fogDistance = newFogDistance;
Config.Client.Graphics.FogQuality.fogDistance = newFogDistance;
}
@Override
public FogDrawMode getFogDrawMode()
{
return Config.Client.Graphics.FogQualityOption.fogDrawMode;
return Config.Client.Graphics.FogQuality.fogDrawMode;
}
@Override
public void setFogDrawMode(FogDrawMode setFogDrawMode)
{
Config.Client.Graphics.FogQualityOption.fogDrawMode = setFogDrawMode;
Config.Client.Graphics.FogQuality.fogDrawMode = setFogDrawMode;
}
@Override
public FogColorMode getFogColorMode()
{
return Config.Client.Graphics.FogQualityOption.fogColorMode;
return Config.Client.Graphics.FogQuality.fogColorMode;
}
@Override
public void setFogColorMode(FogColorMode newFogColorMode)
{
Config.Client.Graphics.FogQualityOption.fogColorMode = newFogColorMode;
Config.Client.Graphics.FogQuality.fogColorMode = newFogColorMode;
}
@Override
public boolean getDisableVanillaFog()
{
return Config.Client.Graphics.FogQualityOption.disableVanillaFog;
return Config.Client.Graphics.FogQuality.disableVanillaFog;
}
@Override
public void setDisableVanillaFog(boolean newDisableVanillaFog)
{
Config.Client.Graphics.FogQualityOption.disableVanillaFog = newDisableVanillaFog;
Config.Client.Graphics.FogQuality.disableVanillaFog = newDisableVanillaFog;
}
}
@@ -221,83 +221,60 @@ public class LodConfigWrapperSingleton implements ILodConfigWrapperSingleton
@Override
public LodTemplate getLodTemplate()
{
return Config.Client.Graphics.AdvancedGraphicsOption.lodTemplate;
return Config.Client.Graphics.AdvancedGraphics.lodTemplate;
}
@Override
public void setLodTemplate(LodTemplate newLodTemplate)
{
Config.Client.Graphics.AdvancedGraphicsOption.lodTemplate = newLodTemplate;
Config.Client.Graphics.AdvancedGraphics.lodTemplate = newLodTemplate;
}
@Override
public boolean getDisableDirectionalCulling()
{
return Config.Client.Graphics.AdvancedGraphicsOption.disableDirectionalCulling;
return Config.Client.Graphics.AdvancedGraphics.disableDirectionalCulling;
}
@Override
public void setDisableDirectionalCulling(boolean newDisableDirectionalCulling)
{
Config.Client.Graphics.AdvancedGraphicsOption.disableDirectionalCulling = newDisableDirectionalCulling;
Config.Client.Graphics.AdvancedGraphics.disableDirectionalCulling = newDisableDirectionalCulling;
}
@Override
public boolean getAlwaysDrawAtMaxQuality()
{
return Config.Client.Graphics.AdvancedGraphicsOption.alwaysDrawAtMaxQuality;
return Config.Client.Graphics.AdvancedGraphics.alwaysDrawAtMaxQuality;
}
@Override
public void setAlwaysDrawAtMaxQuality(boolean newAlwaysDrawAtMaxQuality)
{
Config.Client.Graphics.AdvancedGraphicsOption.alwaysDrawAtMaxQuality = newAlwaysDrawAtMaxQuality;
Config.Client.Graphics.AdvancedGraphics.alwaysDrawAtMaxQuality = newAlwaysDrawAtMaxQuality;
}
@Override
public VanillaOverdraw getVanillaOverdraw()
{
return Config.Client.Graphics.AdvancedGraphicsOption.vanillaOverdraw;
return Config.Client.Graphics.AdvancedGraphics.vanillaOverdraw;
}
@Override
public void setVanillaOverdraw(VanillaOverdraw newVanillaOverdraw)
{
Config.Client.Graphics.AdvancedGraphicsOption.vanillaOverdraw = newVanillaOverdraw;
}
@Override
public GpuUploadMethod getGpuUploadMethod()
{
return Config.Client.Graphics.AdvancedGraphicsOption.gpuUploadMethod;
}
@Override
public void setGpuUploadMethod(GpuUploadMethod newDisableVanillaFog)
{
Config.Client.Graphics.AdvancedGraphicsOption.gpuUploadMethod = newDisableVanillaFog;
}
@Override
public int getGpuUploadTimeoutInMilliseconds()
{
return Config.Client.Graphics.AdvancedGraphicsOption.gpuUploadTimeoutInMilleseconds;
}
@Override
public void setGpuUploadTimeoutInMilliseconds(int newTimeoutInMilliseconds) {
Config.Client.Graphics.AdvancedGraphicsOption.gpuUploadTimeoutInMilleseconds = newTimeoutInMilliseconds;
Config.Client.Graphics.AdvancedGraphics.vanillaOverdraw = newVanillaOverdraw;
}
@Override
public boolean getUseExtendedNearClipPlane()
{
return Config.Client.Graphics.AdvancedGraphicsOption.useExtendedNearClipPlane;
return Config.Client.Graphics.AdvancedGraphics.useExtendedNearClipPlane;
}
@Override
public void setUseExtendedNearClipPlane(boolean newUseExtendedNearClipPlane)
{
Config.Client.Graphics.AdvancedGraphicsOption.useExtendedNearClipPlane = newUseExtendedNearClipPlane;
Config.Client.Graphics.AdvancedGraphics.useExtendedNearClipPlane = newUseExtendedNearClipPlane;
}
}
}
@@ -404,24 +381,24 @@ public class LodConfigWrapperSingleton implements ILodConfigWrapperSingleton
@Override
public int getNumberOfWorldGenerationThreads()
{
return Config.Client.AdvancedModOptions.Threading.numberOfWorldGenerationThreads;
return Config.Client.Advanced.Threading.numberOfWorldGenerationThreads;
}
@Override
public void setNumberOfWorldGenerationThreads(int newNumberOfWorldGenerationThreads)
{
Config.Client.AdvancedModOptions.Threading.numberOfWorldGenerationThreads = newNumberOfWorldGenerationThreads;
Config.Client.Advanced.Threading.numberOfWorldGenerationThreads = newNumberOfWorldGenerationThreads;
}
@Override
public int getNumberOfBufferBuilderThreads()
{
return Config.Client.AdvancedModOptions.Threading.numberOfBufferBuilderThreads;
return Config.Client.Advanced.Threading.numberOfBufferBuilderThreads;
}
@Override
public void setNumberOfBufferBuilderThreads(int newNumberOfWorldBuilderThreads)
{
Config.Client.AdvancedModOptions.Threading.numberOfBufferBuilderThreads = newNumberOfWorldBuilderThreads;
Config.Client.Advanced.Threading.numberOfBufferBuilderThreads = newNumberOfWorldBuilderThreads;
}
}
@@ -436,51 +413,75 @@ public class LodConfigWrapperSingleton implements ILodConfigWrapperSingleton
@Override
public boolean getDrawLods()
{
return Config.Client.AdvancedModOptions.Debugging.drawLods;
return Config.Client.Advanced.Debugging.drawLods;
}
@Override
public void setDrawLods(boolean newDrawLods)
{
Config.Client.AdvancedModOptions.Debugging.drawLods = newDrawLods;
Config.Client.Advanced.Debugging.drawLods = newDrawLods;
}
@Override
public DebugMode getDebugMode()
{
return Config.Client.AdvancedModOptions.Debugging.debugMode;
return Config.Client.Advanced.Debugging.debugMode;
}
@Override
public void setDebugMode(DebugMode newDebugMode)
{
Config.Client.AdvancedModOptions.Debugging.debugMode = newDebugMode;
Config.Client.Advanced.Debugging.debugMode = newDebugMode;
}
@Override
public boolean getDebugKeybindingsEnabled()
{
return Config.Client.AdvancedModOptions.Debugging.enableDebugKeybindings;
return Config.Client.Advanced.Debugging.enableDebugKeybindings;
}
@Override
public void setDebugKeybindingsEnabled(boolean newEnableDebugKeybindings)
{
Config.Client.AdvancedModOptions.Debugging.enableDebugKeybindings = newEnableDebugKeybindings;
Config.Client.Advanced.Debugging.enableDebugKeybindings = newEnableDebugKeybindings;
}
}
public static class Buffers implements IBuffers
{
@Override
public GpuUploadMethod getGpuUploadMethod()
{
return Config.Client.Advanced.Buffers.gpuUploadMethod;
}
@Override
public void setGpuUploadMethod(GpuUploadMethod newDisableVanillaFog)
{
Config.Client.Advanced.Buffers.gpuUploadMethod = newDisableVanillaFog;
}
@Override
public int getGpuUploadTimeoutInMilliseconds()
{
return Config.Client.Advanced.Buffers.gpuUploadTimeoutInMilleseconds;
}
@Override
public void setGpuUploadTimeoutInMilliseconds(int newTimeoutInMilliseconds) {
Config.Client.Advanced.Buffers.gpuUploadTimeoutInMilleseconds = newTimeoutInMilliseconds;
}
@Override
public BufferRebuildTimes getRebuildTimes()
{
return Config.Client.AdvancedModOptions.Buffers.rebuildTimes;
return Config.Client.Advanced.Buffers.rebuildTimes;
}
@Override
public void setRebuildTimes(BufferRebuildTimes newBufferRebuildTimes)
{
Config.Client.AdvancedModOptions.Buffers.rebuildTimes = newBufferRebuildTimes;
Config.Client.Advanced.Buffers.rebuildTimes = newBufferRebuildTimes;
}
}
}
@@ -7,6 +7,9 @@ import me.shedaniel.autoconfig.AutoConfig;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import java.util.HashMap;
import java.util.Map;
/**
* For making the config show up in modmenu
*/
@@ -16,4 +19,19 @@ public class ModMenuIntegration implements ModMenuApi {
public ConfigScreenFactory<?> getModConfigScreenFactory() {
return parent -> AutoConfig.getConfigScreen(Config.class, parent).get();
}
// For the custom config code
/*
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
return parent -> Config.getScreen(parent, ModInfo.ID);
}
@Override
public Map<String, ConfigScreenFactory<?>> getProvidedConfigScreenFactories() {
HashMap<String, ConfigScreenFactory<?>> map = new HashMap<>();
Config.configClass.forEach((modid, cClass) -> map.put(modid, parent -> ConfigGui.getScreen(parent, modid)));
return map;
}
*/
}
@@ -3,24 +3,26 @@
"text.autoconfig.lod.title": "Distant Horizons config",
"text.autoconfig.lod.option.client": "Client",
"text.autoconfig.lod.option.client.graphics": "Graphics",
"text.autoconfig.lod.option.client.graphics.qualityOption": "Quality option",
"text.autoconfig.lod.option.client.graphics.qualityOption.drawResolution": "Draw resolution",
"text.autoconfig.lod.option.client.graphics.qualityOption.drawResolution.@Tooltip": "What is the maximum detail fake chunks should be drawn at?",
"text.autoconfig.lod.option.client.graphics.qualityOption.lodChunkRenderDistance": "Chunk render distance",
"text.autoconfig.lod.option.client.graphics.qualityOption.lodChunkRenderDistance.@Tooltip": "The mod's render distance, measured in chunks",
"text.autoconfig.lod.option.client.graphics.qualityOption.verticalQuality": "Vertical quality",
"text.autoconfig.lod.option.client.graphics.qualityOption.verticalQuality.@Tooltip": "This indicates how detailed fake chunks will represent overhangs, caves, floating islands, ect. \nHigher options will use more memory and increase GPU usage",
"text.autoconfig.lod.option.client.graphics.qualityOption.horizontalScale": "Horizontal scale",
"text.autoconfig.lod.option.client.graphics.qualityOption.horizontalScale.@Tooltip": "This indicates how quickly fake chunks drop off in quality",
"text.autoconfig.lod.option.client.graphics.qualityOption.horizontalQuality": "Horizontal quality",
"text.autoconfig.lod.option.client.graphics.qualityOption.horizontalQuality.@Tooltip": "This indicates the exponential base of the quadratic drop-off",
"text.autoconfig.lod.option.client.graphics.fogQualityOption": "Fog quality option",
"text.autoconfig.lod.option.client.graphics.fogQualityOption.fogDistance": "Fog distance",
"text.autoconfig.lod.option.client.graphics.fogQualityOption.fogDistance.@Tooltip": "At what distance should Fog be drawn on the fake chunks?",
"text.autoconfig.lod.option.client.graphics.fogQualityOption.fogDrawOverride": "Fog draw override",
"text.autoconfig.lod.option.client.graphics.fogQualityOption.fogDrawOverride.@Tooltip": "When should fog be drawn?",
"text.autoconfig.lod.option.client.graphics.fogQualityOption.disableVanillaFog": "Disable vanilla fog",
"text.autoconfig.lod.option.client.graphics.fogQualityOption.disableVanillaFog.@Tooltip": "If true disable Minecraft's fog. \nMay cause issues with other mods that edit fog. \nMay cause errors with other fog editing mods",
"text.autoconfig.lod.option.client.graphics.quality": "Quality options",
"text.autoconfig.lod.option.client.graphics.quality.drawResolution": "Draw resolution",
"text.autoconfig.lod.option.client.graphics.quality.drawResolution.@Tooltip": "What is the maximum detail fake chunks should be drawn at?",
"text.autoconfig.lod.option.client.graphics.quality.lodChunkRenderDistance": "Chunk render distance",
"text.autoconfig.lod.option.client.graphics.quality.lodChunkRenderDistance.@Tooltip": "The mod's render distance, measured in chunks",
"text.autoconfig.lod.option.client.graphics.quality.verticalQuality": "Vertical quality",
"text.autoconfig.lod.option.client.graphics.quality.verticalQuality.@Tooltip": "This indicates how detailed fake chunks will represent overhangs, caves, floating islands, ect. \nHigher options will use more memory and increase GPU usage",
"text.autoconfig.lod.option.client.graphics.quality.horizontalScale": "Horizontal scale",
"text.autoconfig.lod.option.client.graphics.quality.horizontalScale.@Tooltip": "This indicates how quickly fake chunks drop off in quality",
"text.autoconfig.lod.option.client.graphics.quality.horizontalQuality": "Horizontal quality",
"text.autoconfig.lod.option.client.graphics.quality.horizontalQuality.@Tooltip": "This indicates the exponential base of the quadratic drop-off",
"text.autoconfig.lod.option.client.graphics.fogQuality": "Fog options",
"text.autoconfig.lod.option.client.graphics.fogQuality.fogDistance": "Fog distance",
"text.autoconfig.lod.option.client.graphics.fogQuality.fogDistance.@Tooltip": "At what distance should Fog be drawn on the fake chunks?",
"text.autoconfig.lod.option.client.graphics.fogQuality.fogDrawMode": "Fog draw mode",
"text.autoconfig.lod.option.client.graphics.fogQuality.fogDrawMode.@Tooltip": "When should fog be drawn?",
"text.autoconfig.lod.option.client.graphics.fogQuality.fogColorMode": "Fog color mode",
"text.autoconfig.lod.option.client.graphics.fogQuality.fogColorMode.@Tooltip": "What color should fog use?",
"text.autoconfig.lod.option.client.graphics.fogQuality.disableVanillaFog": "Disable vanilla fog",
"text.autoconfig.lod.option.client.graphics.fogQuality.disableVanillaFog.@Tooltip": "If true disable Minecraft's fog. \nMay cause issues with other mods that edit fog. \nMay cause errors with other fog editing mods",
"text.autoconfig.lod.option.client.graphics.advancedGraphicsOption": "Advanced quality option",
"text.autoconfig.lod.option.client.graphics.advancedGraphicsOption.lodTemplate": "LOD template",
"text.autoconfig.lod.option.client.graphics.advancedGraphicsOption.lodTemplate.@Tooltip": "How should the LODs be drawn? \nNOTE: Currently only CUBIC is implemented!",
@@ -30,8 +32,6 @@
"text.autoconfig.lod.option.client.graphics.advancedGraphicsOption.alwaysDrawAtMaxQuality.@Tooltip": "Disable quality falloff, all fake chunks will be drawn at the highest available detail level",
"text.autoconfig.lod.option.client.graphics.advancedGraphicsOption.vanillaOverdraw": "Vanilla overdraw",
"text.autoconfig.lod.option.client.graphics.advancedGraphicsOption.vanillaOverdraw.@Tooltip": "How often should LODs be drawn on top of regular chunks? \nHALF and ALWAYS will prevent holes in the world, but may look odd for transparent blocks or in caves.",
"text.autoconfig.lod.option.client.graphics.advancedGraphicsOption.gpuUploadMethod": "GPU upload method",
"text.autoconfig.lod.option.client.graphics.advancedGraphicsOption.gpuUploadMethod.@Tooltip": "What method should be used to upload geometry to the GPU?",
"text.autoconfig.lod.option.client.graphics.advancedGraphicsOption.useExtendedNearClipPlane": "Use extended near clip plane",
"text.autoconfig.lod.option.client.graphics.advancedGraphicsOption.useExtendedNearClipPlane.@Tooltip": "Will prevent some overdraw issues, but may cause nearby fake chunks to render incorrectly especially when in/near an ocean",
"text.autoconfig.lod.option.client.worldGenerator": "World generator",
@@ -41,24 +41,28 @@
"text.autoconfig.lod.option.client.worldGenerator.distanceGenerationMode.@Tooltip": "How much of the generation should be used when generating fake chunks",
"text.autoconfig.lod.option.client.worldGenerator.allowUnstableFeatureGeneration": "Allow unstable feature generation",
"text.autoconfig.lod.option.client.worldGenerator.allowUnstableFeatureGeneration.@Tooltip": "Some features may not be thread safe. \nCould cause instability and crashes",
"text.autoconfig.lod.option.client.worldGenerator.blockToAvoid": "Block to avoid",
"text.autoconfig.lod.option.client.worldGenerator.blockToAvoid.@Tooltip": "What block to avoid when generating fake chunks",
"text.autoconfig.lod.option.client.advancedModOptions": "Advance mod options",
"text.autoconfig.lod.option.client.advancedModOptions.threading": "Threading",
"text.autoconfig.lod.option.client.advancedModOptions.threading.numberOfWorldGenerationThreads": "NO. of world generation threads",
"text.autoconfig.lod.option.client.advancedModOptions.threading.numberOfWorldGenerationThreads.@Tooltip": "This is how many threads are used when generating LODs outside the normal render distance. \nIf you experience stuttering when generating distant LODs, decrease this number. If you want to increase LOD generation speed, increase this number \nCan only be between 1 and your current number of threads",
"text.autoconfig.lod.option.client.advancedModOptions.threading.numberOfBufferBuilderThreads": "NO. of buffer builder threads",
"text.autoconfig.lod.option.client.advancedModOptions.threading.numberOfBufferBuilderThreads.@Tooltip": "This is how many threads are used when building vertex buffers (The things sent to your GPU to draw the fake chunks) \nCan only be between 1 and your current number of threads",
"text.autoconfig.lod.option.client.advancedModOptions.buffers": "Buffers",
"text.autoconfig.lod.option.client.advancedModOptions.buffers.rebuildTimes": "Rebuild times",
"text.autoconfig.lod.option.client.advancedModOptions.buffers.rebuildTimes.@Tooltip": "Rebuild times",
"text.autoconfig.lod.option.client.debug": "Debug",
"text.autoconfig.lod.option.client.debug.drawLods": "Draw LOD's",
"text.autoconfig.lod.option.client.debug.drawLods.@Tooltip": "If true, the mod is enabled and fake chunks will be drawn.",
"text.autoconfig.lod.option.client.debug.debugMode": "Debug mode",
"text.autoconfig.lod.option.client.debug.debugMode.@Tooltip": "What type of debug mode do you want",
"text.autoconfig.lod.option.client.debug.enableDebugKeybindings": "Enable debug keybindings",
"text.autoconfig.lod.option.client.debug.enableDebugKeybindings.@Tooltip": "Enable debug keybindings to change the Debug mode on the fly in game",
"text.autoconfig.lod.option.client.worldGenerator.blocksToAvoid": "Block to avoid",
"text.autoconfig.lod.option.client.worldGenerator.blocksToAvoid.@Tooltip": "What block to avoid when generating fake chunks",
"text.autoconfig.lod.option.client.advanced": "Advance options",
"text.autoconfig.lod.option.client.advanced.threading": "Threading",
"text.autoconfig.lod.option.client.advanced.threading.numberOfWorldGenerationThreads": "NO. of world generation threads",
"text.autoconfig.lod.option.client.advanced.threading.numberOfWorldGenerationThreads.@Tooltip": "This is how many threads are used when generating LODs outside the normal render distance. \nIf you experience stuttering when generating distant LODs, decrease this number. If you want to increase LOD generation speed, increase this number \nCan only be between 1 and your current number of threads",
"text.autoconfig.lod.option.client.advanced.threading.numberOfBufferBuilderThreads": "NO. of buffer builder threads",
"text.autoconfig.lod.option.client.advanced.threading.numberOfBufferBuilderThreads.@Tooltip": "This is how many threads are used when building vertex buffers (The things sent to your GPU to draw the fake chunks) \nCan only be between 1 and your current number of threads",
"text.autoconfig.lod.option.client.advanced.buffers": "Buffers",
"text.autoconfig.lod.option.client.advanced.buffers.gpuUploadMethod": "GPU upload method",
"text.autoconfig.lod.option.client.advanced.buffers.gpuUploadMethod.@Tooltip": "What method should be used to upload geometry to the GPU?",
"text.autoconfig.lod.option.client.advanced.buffers.gpuUploadTimeoutInMilleseconds": "GPU upload timeout (milliseconds)",
"text.autoconfig.lod.option.client.advanced.buffers.gpuUploadTimeoutInMilleseconds.@Tooltip": "How long should we wait before uploading a buffer to the GPU? \nHelpful resource for frame times: https://fpstoms.com",
"text.autoconfig.lod.option.client.advanced.buffers.rebuildTimes": "Rebuild times",
"text.autoconfig.lod.option.client.advanced.buffers.rebuildTimes.@Tooltip": "Rebuild times",
"text.autoconfig.lod.option.client.advanced.debugging": "Debug",
"text.autoconfig.lod.option.client.advanced.debugging.drawLods": "Draw LOD's",
"text.autoconfig.lod.option.client.advanced.debugging.drawLods.@Tooltip": "If true, the mod is enabled and fake chunks will be drawn.",
"text.autoconfig.lod.option.client.advanced.debugging.debugMode": "Debug mode",
"text.autoconfig.lod.option.client.advanced.debugging.debugMode.@Tooltip": "What type of debug mode do you want",
"text.autoconfig.lod.option.client.advanced.debugging.enableDebugKeybindings": "Enable debug keybindings",
"text.autoconfig.lod.option.client.advanced.debugging.enableDebugKeybindings.@Tooltip": "Enable debug keybindings to change the Debug mode on the fly in game",
"toast.lod.title": "Distant Horizons",
"key.lod.category": "Distant Horizons",
"key.lod.DebugToggle": "Debug toggle",
@@ -6,6 +6,7 @@
"mixins": [],
"client": [
"MixinMinecraft",
"MixinOptionsScreen",
"MixinWorldRenderer",
"events.MixinClientLevel",
"events.MixinMinecraft",
@@ -19,10 +19,27 @@
package com.seibel.lod.forge;
import java.nio.file.Path;
import java.nio.file.Paths;
import net.minecraftforge.fml.event.config.ModConfigEvent;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.logging.log4j.LogManager;
import com.electronwill.nightconfig.core.file.CommentedFileConfig;
import com.electronwill.nightconfig.core.io.WritingMode;
import com.seibel.lod.core.ModInfo;
import com.seibel.lod.core.enums.config.*;
import com.seibel.lod.core.enums.config.BlocksToAvoid;
import com.seibel.lod.core.enums.config.BufferRebuildTimes;
import com.seibel.lod.core.enums.config.DistanceGenerationMode;
import com.seibel.lod.core.enums.config.GenerationPriority;
import com.seibel.lod.core.enums.config.GpuUploadMethod;
import com.seibel.lod.core.enums.config.HorizontalQuality;
import com.seibel.lod.core.enums.config.HorizontalResolution;
import com.seibel.lod.core.enums.config.HorizontalScale;
import com.seibel.lod.core.enums.config.LodTemplate;
import com.seibel.lod.core.enums.config.VanillaOverdraw;
import com.seibel.lod.core.enums.config.VerticalQuality;
import com.seibel.lod.core.enums.rendering.DebugMode;
import com.seibel.lod.core.enums.rendering.FogColorMode;
import com.seibel.lod.core.enums.rendering.FogDistance;
@@ -37,21 +54,17 @@ import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton.I
import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton.IClient.IGraphics.IFogQuality;
import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton.IClient.IGraphics.IQuality;
import com.seibel.lod.core.wrapperInterfaces.config.ILodConfigWrapperSingleton.IClient.IWorldGenerator;
import net.minecraftforge.common.ForgeConfigSpec;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.config.ModConfigEvent;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.logging.log4j.LogManager;
import java.nio.file.Path;
import java.nio.file.Paths;
import net.minecraftforge.fml.config.ModConfig;
/**
* This handles any configuration the user has access to.
* @author Leonardo Amato
* @author James Seibel
* @version 11-29-2021
* @version 12-1-2021
*/
@Mod.EventBusSubscriber
public class ForgeConfig
@@ -60,13 +73,13 @@ public class ForgeConfig
// -> Client
// |
// |-> Graphics
// | |-> QualityOption
// | |-> FogQualityOption
// | |-> AdvancedGraphicsOption
// | |-> Quality
// | |-> FogQuality
// | |-> AdvancedGraphics
// |
// |-> World Generation
// |
// |-> Advanced Mod Option
// |-> Advanced
// |-> Threads
// |-> Buffers
// |-> Debugging
@@ -77,7 +90,7 @@ public class ForgeConfig
{
public final Graphics graphics;
public final WorldGenerator worldGenerator;
public final AdvancedModOptions advancedModOptions;
public final Advanced advanced;
//================//
@@ -89,7 +102,7 @@ public class ForgeConfig
{
graphics = new Graphics(builder);
worldGenerator = new WorldGenerator(builder);
advancedModOptions = new AdvancedModOptions(builder);
advanced = new Advanced(builder);
}
builder.pop();
}
@@ -100,23 +113,23 @@ public class ForgeConfig
//==================//
public static class Graphics
{
public final QualityOption qualityOption;
public final FogQualityOption fogQuality;
public final AdvancedGraphicsOption advancedGraphicsOption;
public final Quality quality;
public final FogQuality fogQuality;
public final AdvancedGraphics advancedGraphics;
Graphics(ForgeConfigSpec.Builder builder)
{
builder.comment(IGraphics.DESC).push("Graphics");
{
qualityOption = new QualityOption(builder);
advancedGraphicsOption = new AdvancedGraphicsOption(builder);
fogQuality = new FogQualityOption(builder);
quality = new Quality(builder);
advancedGraphics = new AdvancedGraphics(builder);
fogQuality = new FogQuality(builder);
}
builder.pop();
}
public static class QualityOption
public static class Quality
{
public final ForgeConfigSpec.EnumValue<HorizontalResolution> drawResolution;
public final ForgeConfigSpec.IntValue lodChunkRenderDistance;
@@ -124,7 +137,7 @@ public class ForgeConfig
public final ForgeConfigSpec.EnumValue<HorizontalScale> horizontalScale;
public final ForgeConfigSpec.EnumValue<HorizontalQuality> horizontalQuality;
QualityOption(ForgeConfigSpec.Builder builder)
Quality(ForgeConfigSpec.Builder builder)
{
builder.comment(IQuality.DESC).push(this.getClass().getSimpleName());
@@ -159,14 +172,14 @@ public class ForgeConfig
}
public static class FogQualityOption
public static class FogQuality
{
public final ForgeConfigSpec.EnumValue<FogDistance> fogDistance;
public final ForgeConfigSpec.EnumValue<FogDrawMode> fogDrawMode;
public final ForgeConfigSpec.EnumValue<FogColorMode> fogColorMode;
public final ForgeConfigSpec.BooleanValue disableVanillaFog;
FogQualityOption(ForgeConfigSpec.Builder builder)
FogQuality(ForgeConfigSpec.Builder builder)
{
builder.comment(IFogQuality.DESC).push(this.getClass().getSimpleName());
@@ -195,17 +208,15 @@ public class ForgeConfig
}
public static class AdvancedGraphicsOption
public static class AdvancedGraphics
{
public final ForgeConfigSpec.EnumValue<LodTemplate> lodTemplate;
public final ForgeConfigSpec.BooleanValue disableDirectionalCulling;
public final ForgeConfigSpec.BooleanValue alwaysDrawAtMaxQuality;
public final ForgeConfigSpec.EnumValue<VanillaOverdraw> vanillaOverdraw;
public final ForgeConfigSpec.EnumValue<GpuUploadMethod> gpuUploadMethod;
public final ForgeConfigSpec.IntValue gpuUploadTimeoutInMilleseconds;
public final ForgeConfigSpec.BooleanValue useExtendedNearClipPlane;
AdvancedGraphicsOption(ForgeConfigSpec.Builder builder)
AdvancedGraphics(ForgeConfigSpec.Builder builder)
{
builder.comment(IAdvancedGraphics.DESC).push(this.getClass().getSimpleName());
@@ -229,17 +240,6 @@ public class ForgeConfig
+ IAdvancedGraphics.VANILLA_OVERDRAW_DESC)
.defineEnum("Vanilla Overdraw", IAdvancedGraphics.VANILLA_OVERDRAW_DEFAULT);
gpuUploadMethod = builder
.comment("\n\n"
+ IAdvancedGraphics.GPU_UPLOAD_METHOD_DESC)
.defineEnum("GPU Upload Method", IAdvancedGraphics.GPU_UPLOAD_METHOD_DEFAULT);
MinDefaultMax<Integer> minDefaultMax = IAdvancedGraphics.GPU_UPLOAD_TIMEOUT_IN_MILLISECONDS_DEFAULT;
gpuUploadTimeoutInMilleseconds = builder
.comment("\n\n"
+ IAdvancedGraphics.GPU_UPLOAD_TIMEOUT_IN_MILLISECONDS_DESC)
.defineInRange("GPU Upload Timeout in Milleseconds", minDefaultMax.defaultValue, minDefaultMax.minValue, minDefaultMax.maxValue);
// This is a temporary fix (like vanilla overdraw)
// hopefully we can remove both once we get individual chunk rendering figured out
useExtendedNearClipPlane = builder
@@ -303,16 +303,16 @@ public class ForgeConfig
//============================//
// AdvancedModOptions Configs //
//============================//
public static class AdvancedModOptions
//==================//
// Advanced Configs //
//==================//
public static class Advanced
{
public final Threading threading;
public final Debugging debugging;
public final Buffers buffers;
public AdvancedModOptions(ForgeConfigSpec.Builder builder)
public Advanced(ForgeConfigSpec.Builder builder)
{
builder.comment(IAdvanced.DESC).push(this.getClass().getSimpleName());
{
@@ -387,12 +387,27 @@ public class ForgeConfig
public static class Buffers
{
public final ForgeConfigSpec.EnumValue<GpuUploadMethod> gpuUploadMethod;
public final ForgeConfigSpec.IntValue gpuUploadTimeoutInMilleseconds;
public final ForgeConfigSpec.EnumValue<BufferRebuildTimes> rebuildTimes;
Buffers(ForgeConfigSpec.Builder builder)
{
builder.comment(IBuffers.DESC).push(this.getClass().getSimpleName());
gpuUploadMethod = builder
.comment("\n\n"
+ IBuffers.GPU_UPLOAD_METHOD_DESC)
.defineEnum("GPU Upload Method", IBuffers.GPU_UPLOAD_METHOD_DEFAULT);
MinDefaultMax<Integer> minDefaultMax = IBuffers.GPU_UPLOAD_TIMEOUT_IN_MILLISECONDS_DEFAULT;
gpuUploadTimeoutInMilleseconds = builder
.comment("\n\n"
+ IBuffers.GPU_UPLOAD_TIMEOUT_IN_MILLISECONDS_DESC)
.defineInRange("GPU Upload Timeout in Milleseconds", minDefaultMax.defaultValue, minDefaultMax.minValue, minDefaultMax.maxValue);
rebuildTimes = builder
.comment("\n\n"
+ IBuffers.REBUILD_TIMES_DESC)
@@ -437,4 +452,3 @@ public class ForgeConfig
}
}
@@ -134,60 +134,60 @@ public class LodConfigWrapperSingleton implements ILodConfigWrapperSingleton
@Override
public HorizontalResolution getDrawResolution()
{
return ForgeConfig.CLIENT.graphics.qualityOption.drawResolution.get();
return ForgeConfig.CLIENT.graphics.quality.drawResolution.get();
}
@Override
public void setDrawResolution(HorizontalResolution newHorizontalResolution)
{
ForgeConfig.CLIENT.graphics.qualityOption.drawResolution.set(newHorizontalResolution);
ForgeConfig.CLIENT.graphics.quality.drawResolution.set(newHorizontalResolution);
}
@Override
public int getLodChunkRenderDistance()
{
return ForgeConfig.CLIENT.graphics.qualityOption.lodChunkRenderDistance.get();
return ForgeConfig.CLIENT.graphics.quality.lodChunkRenderDistance.get();
}
@Override
public void setLodChunkRenderDistance(int newLodChunkRenderDistance)
{
ForgeConfig.CLIENT.graphics.qualityOption.lodChunkRenderDistance.set(newLodChunkRenderDistance);
ForgeConfig.CLIENT.graphics.quality.lodChunkRenderDistance.set(newLodChunkRenderDistance);
}
@Override
public VerticalQuality getVerticalQuality()
{
return ForgeConfig.CLIENT.graphics.qualityOption.verticalQuality.get();
return ForgeConfig.CLIENT.graphics.quality.verticalQuality.get();
}
@Override
public void setVerticalQuality(VerticalQuality newVerticalQuality)
{
ForgeConfig.CLIENT.graphics.qualityOption.verticalQuality.set(newVerticalQuality);
ForgeConfig.CLIENT.graphics.quality.verticalQuality.set(newVerticalQuality);
}
@Override
public HorizontalScale getHorizontalScale()
{
return ForgeConfig.CLIENT.graphics.qualityOption.horizontalScale.get();
return ForgeConfig.CLIENT.graphics.quality.horizontalScale.get();
}
@Override
public void setHorizontalScale(HorizontalScale newHorizontalScale)
{
ForgeConfig.CLIENT.graphics.qualityOption.horizontalScale.set(newHorizontalScale);
ForgeConfig.CLIENT.graphics.quality.horizontalScale.set(newHorizontalScale);
}
@Override
public HorizontalQuality getHorizontalQuality()
{
return ForgeConfig.CLIENT.graphics.qualityOption.horizontalQuality.get();
return ForgeConfig.CLIENT.graphics.quality.horizontalQuality.get();
}
@Override
public void setHorizontalQuality(HorizontalQuality newHorizontalQuality)
{
ForgeConfig.CLIENT.graphics.qualityOption.horizontalQuality.set(newHorizontalQuality);
ForgeConfig.CLIENT.graphics.quality.horizontalQuality.set(newHorizontalQuality);
}
}
@@ -248,84 +248,60 @@ public class LodConfigWrapperSingleton implements ILodConfigWrapperSingleton
@Override
public LodTemplate getLodTemplate()
{
return ForgeConfig.CLIENT.graphics.advancedGraphicsOption.lodTemplate.get();
return ForgeConfig.CLIENT.graphics.advancedGraphics.lodTemplate.get();
}
@Override
public void setLodTemplate(LodTemplate newLodTemplate)
{
ForgeConfig.CLIENT.graphics.advancedGraphicsOption.lodTemplate.set(newLodTemplate);
ForgeConfig.CLIENT.graphics.advancedGraphics.lodTemplate.set(newLodTemplate);
}
@Override
public boolean getDisableDirectionalCulling()
{
return ForgeConfig.CLIENT.graphics.advancedGraphicsOption.disableDirectionalCulling.get();
return ForgeConfig.CLIENT.graphics.advancedGraphics.disableDirectionalCulling.get();
}
@Override
public void setDisableDirectionalCulling(boolean newDisableDirectionalCulling)
{
ForgeConfig.CLIENT.graphics.advancedGraphicsOption.disableDirectionalCulling.set(newDisableDirectionalCulling);
ForgeConfig.CLIENT.graphics.advancedGraphics.disableDirectionalCulling.set(newDisableDirectionalCulling);
}
@Override
public boolean getAlwaysDrawAtMaxQuality()
{
return ForgeConfig.CLIENT.graphics.advancedGraphicsOption.alwaysDrawAtMaxQuality.get();
return ForgeConfig.CLIENT.graphics.advancedGraphics.alwaysDrawAtMaxQuality.get();
}
@Override
public void setAlwaysDrawAtMaxQuality(boolean newAlwaysDrawAtMaxQuality)
{
ForgeConfig.CLIENT.graphics.advancedGraphicsOption.alwaysDrawAtMaxQuality.set(newAlwaysDrawAtMaxQuality);
ForgeConfig.CLIENT.graphics.advancedGraphics.alwaysDrawAtMaxQuality.set(newAlwaysDrawAtMaxQuality);
}
@Override
public VanillaOverdraw getVanillaOverdraw()
{
return ForgeConfig.CLIENT.graphics.advancedGraphicsOption.vanillaOverdraw.get();
return ForgeConfig.CLIENT.graphics.advancedGraphics.vanillaOverdraw.get();
}
@Override
public void setVanillaOverdraw(VanillaOverdraw newVanillaOverdraw)
{
ForgeConfig.CLIENT.graphics.advancedGraphicsOption.vanillaOverdraw.set(newVanillaOverdraw);
}
@Override
public GpuUploadMethod getGpuUploadMethod()
{
return ForgeConfig.CLIENT.graphics.advancedGraphicsOption.gpuUploadMethod.get();
}
@Override
public void setGpuUploadMethod(GpuUploadMethod newDisableVanillaFog)
{
ForgeConfig.CLIENT.graphics.advancedGraphicsOption.gpuUploadMethod.set(newDisableVanillaFog);
}
@Override
public int getGpuUploadTimeoutInMilliseconds()
{
return ForgeConfig.CLIENT.graphics.advancedGraphicsOption.gpuUploadTimeoutInMilleseconds.get();
}
@Override
public void setGpuUploadTimeoutInMilliseconds(int newTimeoutInMilliseconds)
{
ForgeConfig.CLIENT.graphics.advancedGraphicsOption.gpuUploadTimeoutInMilleseconds.set(newTimeoutInMilliseconds);
ForgeConfig.CLIENT.graphics.advancedGraphics.vanillaOverdraw.set(newVanillaOverdraw);
}
@Override
public boolean getUseExtendedNearClipPlane()
{
return ForgeConfig.CLIENT.graphics.advancedGraphicsOption.useExtendedNearClipPlane.get();
return ForgeConfig.CLIENT.graphics.advancedGraphics.useExtendedNearClipPlane.get();
}
@Override
public void setUseExtendedNearClipPlane(boolean newUseExtendedNearClipPlane)
{
ForgeConfig.CLIENT.graphics.advancedGraphicsOption.useExtendedNearClipPlane.set(newUseExtendedNearClipPlane);
ForgeConfig.CLIENT.graphics.advancedGraphics.useExtendedNearClipPlane.set(newUseExtendedNearClipPlane);
}
}
}
@@ -432,24 +408,24 @@ public class LodConfigWrapperSingleton implements ILodConfigWrapperSingleton
@Override
public int getNumberOfWorldGenerationThreads()
{
return ForgeConfig.CLIENT.advancedModOptions.threading.numberOfWorldGenerationThreads.get();
return ForgeConfig.CLIENT.advanced.threading.numberOfWorldGenerationThreads.get();
}
@Override
public void setNumberOfWorldGenerationThreads(int newNumberOfWorldGenerationThreads)
{
ForgeConfig.CLIENT.advancedModOptions.threading.numberOfWorldGenerationThreads.set(newNumberOfWorldGenerationThreads);
ForgeConfig.CLIENT.advanced.threading.numberOfWorldGenerationThreads.set(newNumberOfWorldGenerationThreads);
}
@Override
public int getNumberOfBufferBuilderThreads()
{
return ForgeConfig.CLIENT.advancedModOptions.threading.numberOfBufferBuilderThreads.get();
return ForgeConfig.CLIENT.advanced.threading.numberOfBufferBuilderThreads.get();
}
@Override
public void setNumberOfBufferBuilderThreads(int newNumberOfWorldBuilderThreads)
{
ForgeConfig.CLIENT.advancedModOptions.threading.numberOfBufferBuilderThreads.set(newNumberOfWorldBuilderThreads);
ForgeConfig.CLIENT.advanced.threading.numberOfBufferBuilderThreads.set(newNumberOfWorldBuilderThreads);
}
}
@@ -464,54 +440,77 @@ public class LodConfigWrapperSingleton implements ILodConfigWrapperSingleton
@Override
public boolean getDrawLods()
{
return ForgeConfig.CLIENT.advancedModOptions.debugging.drawLods.get();
return ForgeConfig.CLIENT.advanced.debugging.drawLods.get();
}
@Override
public void setDrawLods(boolean newDrawLods)
{
ForgeConfig.CLIENT.advancedModOptions.debugging.drawLods.set(newDrawLods);
ForgeConfig.CLIENT.advanced.debugging.drawLods.set(newDrawLods);
}
@Override
public DebugMode getDebugMode()
{
return ForgeConfig.CLIENT.advancedModOptions.debugging.debugMode.get();
return ForgeConfig.CLIENT.advanced.debugging.debugMode.get();
}
@Override
public void setDebugMode(DebugMode newDebugMode)
{
ForgeConfig.CLIENT.advancedModOptions.debugging.debugMode.set(newDebugMode);
ForgeConfig.CLIENT.advanced.debugging.debugMode.set(newDebugMode);
}
@Override
public boolean getDebugKeybindingsEnabled()
{
return ForgeConfig.CLIENT.advancedModOptions.debugging.enableDebugKeybindings.get();
return ForgeConfig.CLIENT.advanced.debugging.enableDebugKeybindings.get();
}
@Override
public void setDebugKeybindingsEnabled(boolean newEnableDebugKeybindings)
{
ForgeConfig.CLIENT.advancedModOptions.debugging.enableDebugKeybindings.set(newEnableDebugKeybindings);
ForgeConfig.CLIENT.advanced.debugging.enableDebugKeybindings.set(newEnableDebugKeybindings);
}
}
public static class Buffers implements IBuffers
{
@Override
public GpuUploadMethod getGpuUploadMethod()
{
return ForgeConfig.CLIENT.advanced.buffers.gpuUploadMethod.get();
}
@Override
public void setGpuUploadMethod(GpuUploadMethod newDisableVanillaFog)
{
ForgeConfig.CLIENT.advanced.buffers.gpuUploadMethod.set(newDisableVanillaFog);
}
@Override
public int getGpuUploadTimeoutInMilliseconds()
{
return ForgeConfig.CLIENT.advanced.buffers.gpuUploadTimeoutInMilleseconds.get();
}
@Override
public void setGpuUploadTimeoutInMilliseconds(int newTimeoutInMilliseconds)
{
ForgeConfig.CLIENT.advanced.buffers.gpuUploadTimeoutInMilleseconds.set(newTimeoutInMilliseconds);
}
@Override
public BufferRebuildTimes getRebuildTimes()
{
return ForgeConfig.CLIENT.advancedModOptions.buffers.rebuildTimes.get();
return ForgeConfig.CLIENT.advanced.buffers.rebuildTimes.get();
}
@Override
public void setRebuildTimes(BufferRebuildTimes newBufferRebuildTimes)
{
ForgeConfig.CLIENT.advancedModOptions.buffers.rebuildTimes.set(newBufferRebuildTimes);
ForgeConfig.CLIENT.advanced.buffers.rebuildTimes.set(newBufferRebuildTimes);
}
}
}
}
}