Re-implement config files

This commit is contained in:
James Seibel
2021-02-27 21:45:37 -06:00
parent 807818e078
commit 673474cd64
4 changed files with 74 additions and 34 deletions
+1 -1
View File
@@ -34,7 +34,7 @@ public class LodMain
private void init(final FMLCommonSetupEvent event)
{
Minecraft.getInstance().getFramebuffer().enableStencil();
ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, LodConfig.COMMON_SPEC);
ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, LodConfig.clientSpec);
}
@@ -54,7 +54,7 @@ public class ClientProxy
RenderGlobalHook.endRenderingStencil();
GL11.glStencilFunc(GL11.GL_EQUAL, 0, 0xFF);
if (LodConfig.COMMON.drawLODs.get())
if (LodConfig.CLIENT.drawLODs.get())
renderLods(event.getPartialTicks());
GL11.glDisable(GL11.GL_STENCIL_TEST);
@@ -163,7 +163,7 @@ public class LodRenderer
if ((int)player.getPosX() / LodChunk.WIDTH != prevChunkX ||
(int)player.getPosZ() / LodChunk.WIDTH != prevChunkZ ||
previousChunkRenderDistance != mc.gameSettings.renderDistanceChunks ||
prevFogDistance != LodConfig.COMMON.fogDistance.get() ||
prevFogDistance != LodConfig.CLIENT.fogDistance.get() ||
lodDimension != newDimension)
{
// yes
@@ -171,7 +171,7 @@ public class LodRenderer
prevChunkX = (int)player.getPosX() / LodChunk.WIDTH;
prevChunkZ = (int)player.getPosZ() / LodChunk.WIDTH;
prevFogDistance = LodConfig.COMMON.fogDistance.get();
prevFogDistance = LodConfig.CLIENT.fogDistance.get();
}
else
{
@@ -189,15 +189,15 @@ public class LodRenderer
return;
}
if (LodConfig.COMMON.drawCheckerBoard.get())
if (LodConfig.CLIENT.drawCheckerBoard.get())
{
if (debugging != LodConfig.COMMON.drawCheckerBoard.get())
if (debugging != LodConfig.CLIENT.drawCheckerBoard.get())
regen = true;
debugging = true;
}
else
{
if (debugging != LodConfig.COMMON.drawCheckerBoard.get())
if (debugging != LodConfig.CLIENT.drawCheckerBoard.get())
regen = true;
debugging = false;
}
@@ -656,7 +656,7 @@ public class LodRenderer
// generate our new buildable buffers
NearFarBuffer nearFarBuffers = lodBufferBuilder.createBuffers(
buildableNearBuffer, buildableFarBuffer,
LodConfig.COMMON.fogDistance.get(), lodArray, colorArray);
LodConfig.CLIENT.fogDistance.get(), lodArray, colorArray);
// update our buffers
buildableNearBuffer = nearFarBuffers.nearBuffer;
@@ -734,12 +734,12 @@ public class LodRenderer
{
NearFarFogSetting fogSetting = new NearFarFogSetting();
LodConfig.COMMON.fogDistance.get();
LodConfig.CLIENT.fogDistance.get();
switch(reflectionHandler.getFogQuality())
{
case FANCY:
switch(LodConfig.COMMON.fogDistance.get())
switch(LodConfig.CLIENT.fogDistance.get())
{
case NEAR_AND_FAR:
fogSetting.nearFogSetting = FogDistance.NEAR;
@@ -764,7 +764,7 @@ public class LodRenderer
// and far portion; and fast fog is rendered from the
// frustrum's perspective instead of the camera
switch(LodConfig.COMMON.fogDistance.get())
switch(LodConfig.CLIENT.fogDistance.get())
{
case NEAR_AND_FAR:
fogSetting.nearFogSetting = FogDistance.NEAR;
@@ -1,34 +1,30 @@
package com.backsun.lod.util;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.logging.log4j.LogManager;
import com.backsun.lod.ModInfo;
import com.backsun.lod.util.enums.FogDistance;
import com.electronwill.nightconfig.core.file.CommentedFileConfig;
import com.electronwill.nightconfig.core.io.WritingMode;
import net.minecraftforge.common.ForgeConfigSpec;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.config.ModConfig;
/**
*
* @author James Seibel
* @version 02-14-2021
* @version 02-27-2021
*/
@Mod.EventBusSubscriber
public class LodConfig
{
public static final LodConfig.Common COMMON;
public static final ForgeConfigSpec COMMON_SPEC;
// create the required variables
static
{
final Pair<Common, ForgeConfigSpec> specPair = new ForgeConfigSpec.Builder().configure(LodConfig.Common::new);
COMMON_SPEC = specPair.getRight();
COMMON = specPair.getLeft();
}
public static class Common
public static class Client
{
public ForgeConfigSpec.BooleanValue drawLODs;
@@ -37,24 +33,28 @@ public class LodConfig
public ForgeConfigSpec.BooleanValue drawCheckerBoard;
Common(ForgeConfigSpec.Builder builder)
Client(ForgeConfigSpec.Builder builder)
{
builder.comment(ModInfo.MODNAME + " configuration settings").push("common");
builder.comment(ModInfo.MODNAME + " configuration settings").push("client");
drawLODs = builder
.comment("If true LODs will be drawn, if false LODs will "
+ "not be rendered. However they will "
+ "still be generated.")
.comment("If false LODs will not be drawn, \n"
+ "however they will still be generated \n"
+ "and saved to file for later use.")
.define("drawLODs", true);
fogDistance = builder
.comment("At what distance should Fog be drawn on the LODs?")
.comment("\n"
+ "At what distance should Fog be drawn on the LODs? \n"
+ "If fog cuts off ubruptly or you are using Optifine's \"fast\" \n"
+ "fog option set this to " + FogDistance.NEAR.toString() + " or " + FogDistance.FAR.toString() + ".")
.defineEnum("fogDistance", FogDistance.NEAR_AND_FAR);
drawCheckerBoard = builder
.comment("If false the LODs will draw with their normal world colors. "
+ "If true they will draw as a black and white checkerboard. "
+ "This can be used for debugging or imagining you are playing a "
.comment("\n"
+ "If false the LODs will draw with their normal world colors. \n"
+ "If true they will draw as a black and white checkerboard. \n"
+ "This can be used for debugging or imagining you are playing a \n"
+ "giant game of chess ;)")
.define("drawCheckerBoard", false);
@@ -62,4 +62,44 @@ public class LodConfig
}
}
/**
* {@link Path} to the configuration file of this mod
*/
private static final Path CONFIG_PATH =
Paths.get("config", ModInfo.MODID + ".toml");
public static final ForgeConfigSpec clientSpec;
public static final Client CLIENT;
static {
final Pair<Client, ForgeConfigSpec> specPair = new ForgeConfigSpec.Builder().configure(Client::new);
clientSpec = specPair.getRight();
CLIENT = specPair.getLeft();
// setup the config file
CommentedFileConfig config = CommentedFileConfig.builder(CONFIG_PATH)
.writingMode(WritingMode.REPLACE)
.build();
config.load();
config.save();
clientSpec.setConfig(config);
}
@SubscribeEvent
public static void onLoad(final ModConfig.Loading configEvent)
{
LogManager.getLogger().debug(ModInfo.MODNAME, "Loaded forge config file {}", configEvent.getConfig().getFileName());
}
@SubscribeEvent
public static void onFileChange(final ModConfig.Reloading configEvent)
{
LogManager.getLogger().debug(ModInfo.MODNAME, "Forge config just got changed on the file system!");
}
}