Skip to content

Commit

Permalink
v1.2.1.1
Browse files Browse the repository at this point in the history
  • Loading branch information
KingContaria committed Aug 16, 2022
1 parent f4b72a2 commit 4512510
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 61 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ org.gradle.jvmargs=-Xmx1G
loader_version=0.13.3

# Mod Properties
mod_version = 1.2.1+1.16.1
mod_version = 1.2.1.1+1.16.1
maven_group = com.kingcontaria.standardsettings
archives_base_name = standardsettings
19 changes: 3 additions & 16 deletions src/main/java/com/kingcontaria/standardsettings/OptionsCache.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

import com.kingcontaria.standardsettings.mixins.BakedModelManagerAccessor;
import com.kingcontaria.standardsettings.mixins.MinecraftClientAccessor;
import me.jellysquid.mods.sodium.client.SodiumClientMod;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.options.*;
import net.minecraft.client.render.entity.PlayerModelPart;
Expand All @@ -14,7 +12,6 @@
import net.minecraft.sound.SoundCategory;
import net.minecraft.util.Arm;

import java.io.IOException;
import java.util.Optional;
import java.util.Set;

Expand Down Expand Up @@ -73,7 +70,7 @@ public class OptionsCache {
private int biomeBlendRadius;
private double mouseWheelSensitivity;
private boolean rawMouseInput;
private boolean entityCulling;
private Optional<Boolean> entityCulling;
private boolean sneaking;
private boolean sprinting;
private boolean chunkborders;
Expand Down Expand Up @@ -143,9 +140,7 @@ public void save(String levelName) {
biomeBlendRadius = options.biomeBlendRadius;
mouseWheelSensitivity = options.mouseWheelSensitivity;
rawMouseInput = options.rawMouseInput;
if (FabricLoader.getInstance().getModContainer("sodium").isPresent()) {
entityCulling = SodiumClientMod.options().advanced.useEntityCulling;
}
entityCulling = StandardSettings.getEntityCulling();
sneaking = options.keySneak.isPressed();
sprinting = options.keySprint.isPressed();
client.debugRenderer.toggleShowChunkBorder();
Expand Down Expand Up @@ -238,15 +233,7 @@ public void load(String levelName) {
options.biomeBlendRadius = biomeBlendRadius;
options.mouseWheelSensitivity = mouseWheelSensitivity;
options.rawMouseInput = rawMouseInput;
if (FabricLoader.getInstance().getModContainer("sodium").isPresent()) {
if (SodiumClientMod.options().advanced.useEntityCulling != (SodiumClientMod.options().advanced.useEntityCulling = entityCulling)) {
try {
SodiumClientMod.options().writeChanges();
} catch (IOException e) {
// empty catch block
}
}
}
entityCulling.ifPresent(StandardSettings::setEntityCulling);
if (options.sneakToggled && (sneaking != options.keySneak.isPressed())) {
options.keySneak.setPressed(true);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.google.common.io.Files;
import com.kingcontaria.standardsettings.mixins.*;
import me.jellysquid.mods.sodium.client.SodiumClientMod;
import me.jellysquid.mods.sodium.client.gui.SodiumGameOptions;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.loader.api.FabricLoader;
Expand All @@ -17,19 +18,20 @@
import org.apache.logging.log4j.Logger;

import java.io.*;
import java.lang.reflect.Field;
import java.nio.charset.StandardCharsets;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;

@Environment(value= EnvType.CLIENT)
public class StandardSettings {

public static final int[] version = new int[]{1,2,1,0};
public static final int[] version = new int[]{1,2,1,1};
public static final Logger LOGGER = LogManager.getLogger();
public static final MinecraftClient client = MinecraftClient.getInstance();
public static final GameOptions options = client.options;
private static final Window window = client.getWindow();
public static final File standardoptionsFile = new File("config/standardoptions.txt");
public static final File standardoptionsFile = new File(FabricLoader.getInstance().getConfigDir().resolve("standardoptions.txt").toUri());
public static boolean changeOnWindowActivation = false;
public static boolean changeOnResize = false;
private static int renderDistanceOnWorldJoin;
Expand All @@ -39,7 +41,9 @@ public class StandardSettings {
public static OptionsCache optionsCache = new OptionsCache(client);
public static String lastQuitWorld;
public static String[] standardoptionsCache;
private static Map<File, Long> filesLastModifiedMap;
public static Map<File, Long> filesLastModifiedMap;
public static File lastUsedFile;
private static final Field[] entityCulling = new Field[2];

public static void load() {
long start = System.nanoTime();
Expand Down Expand Up @@ -89,11 +93,12 @@ private static boolean wereFilesModified(Map<File, Long> map) {
return wasModified.get();
}

private static List<String> resolveGlobalFile(File file) {
public static List<String> resolveGlobalFile(File file) {
filesLastModifiedMap = new HashMap<>();
List<String> lines = null;
do {
filesLastModifiedMap.put(file, file.lastModified());
lastUsedFile = file;
try {
lines = Files.readLines(file, StandardCharsets.UTF_8);
} catch (IOException e) {
Expand Down Expand Up @@ -211,12 +216,7 @@ private static void load(String[] lines) {
options.setPlayerModelPart(playerModelPart, Boolean.parseBoolean(strings[1])); break;
}
} break;
case "entityCulling":
if (FabricLoader.getInstance().getModContainer("sodium").isPresent()) {
if (SodiumClientMod.options().advanced.useEntityCulling != (SodiumClientMod.options().advanced.useEntityCulling = Boolean.parseBoolean(strings[1]))) {
SodiumClientMod.options().writeChanges();
}
} break;
case "entityCulling": setEntityCulling(Boolean.parseBoolean(strings[1])); break;
case "sneaking": options.keySneak.setPressed(options.sneakToggled && (Boolean.parseBoolean(strings[1]) != options.keySneak.isPressed())); break;
case "sprinting": options.keySprint.setPressed(options.sprintToggled && (Boolean.parseBoolean(strings[1]) != options.keySprint.isPressed())); break;
case "chunkborders":
Expand Down Expand Up @@ -248,6 +248,7 @@ public static void changeSettingsOnJoin() {

if (renderDistanceOnWorldJoin != 0) {
options.viewDistance = renderDistanceOnWorldJoin;
client.worldRenderer.scheduleTerrainUpdate();
}
if (entityDistanceScalingOnWorldJoin != 0) {
options.entityDistanceScaling = entityDistanceScalingOnWorldJoin;
Expand Down Expand Up @@ -438,11 +439,61 @@ public static String getStandardoptionsTxt() {
for (PlayerModelPart playerModelPart : PlayerModelPart.values()) {
string.append("modelPart_").append(playerModelPart.getName()).append(":").append(options.getEnabledPlayerModelParts().contains(playerModelPart)).append(l);
}
string.append("entityCulling:").append(FabricLoader.getInstance().getModContainer("sodium").isPresent() ? SodiumClientMod.options().advanced.useEntityCulling : "").append(l).append("sneaking:").append(l).append("sprinting:").append(l).append("chunkborders:").append(l).append("hitboxes:").append(l).append("perspective:").append(l).append("piedirectory:").append(l).append("f1:").append(l).append("fovOnWorldJoin:").append(l).append("guiScaleOnWorldJoin:").append(l).append("renderDistanceOnWorldJoin:").append(l).append("entityDistanceScalingOnWorldJoin:").append(l).append("changeOnResize:false");
string.append("entityCulling:").append(getEntityCulling().isPresent() ? getEntityCulling().get() : "").append(l).append("sneaking:").append(l).append("sprinting:").append(l).append("chunkborders:").append(l).append("hitboxes:").append(l).append("perspective:").append(l).append("piedirectory:").append(l).append("f1:").append(l).append("fovOnWorldJoin:").append(l).append("guiScaleOnWorldJoin:").append(l).append("renderDistanceOnWorldJoin:").append(l).append("entityDistanceScalingOnWorldJoin:").append(l).append("changeOnResize:false");

return string.toString();
}

public static void initializeEntityCulling() {
if (!FabricLoader.getInstance().getModContainer("sodium").isPresent()) return;
Class entityCullingClass;
label:
{
for (Class clas : SodiumGameOptions.class.getClasses()) {
for (Field field : clas.getFields()) {
if (field.toString().toLowerCase().contains("entityculling")) {
entityCulling[0] = field;
entityCullingClass = clas;
break label;
}
}
}
return;
}
for (Field field : SodiumGameOptions.class.getFields()) {
if (field.getType().equals(entityCullingClass)) {
entityCulling[1] = field; return;
}
}
}

public static Optional<Boolean> getEntityCulling() {
if (entityCulling[0] == null || entityCulling[1] == null) return Optional.empty();
try {
return Optional.of((boolean) entityCulling[0].get(entityCulling[1].get(SodiumClientMod.options())));
} catch (IllegalAccessException e) {
LOGGER.error("Failed to get EntityCulling", e);
}
return Optional.empty();
}

public static void setEntityCulling(boolean value) {
if (entityCulling[0] == null || entityCulling[1] == null) return;
Optional<Boolean> entityCullingTemp = getEntityCulling();
try {
entityCulling[0].set(entityCulling[1].get(SodiumClientMod.options()), value);
} catch (IllegalAccessException e) {
LOGGER.error("Failed to set EntityCulling to " + value, e);
}
if (!(entityCullingTemp.isPresent() && entityCullingTemp.get() != getEntityCulling().get())) {
try {
SodiumClientMod.options().writeChanges();
} catch (IOException e) {
LOGGER.error("Failed to save sodium options");
}
}
}

public static List<String> checkVersion(int[] fileVersion, List<String> existingLines) {
if (compareVersions(fileVersion, version)) {
LOGGER.warn("standardoptions.txt was marked with an outdated StandardSettings version ({}), updating now...", String.join(".", Arrays.stream(fileVersion).mapToObj(String::valueOf).toArray(String[]::new)));
Expand All @@ -464,7 +515,7 @@ public static List<String> checkVersion(int[] fileVersion, List<String> existing
LOGGER.info("Didn't find anything to update, good luck on the runs!");
return lines;
}
lines.add("entityCulling:" + (FabricLoader.getInstance().getModContainer("sodium").isPresent() ? SodiumClientMod.options().advanced.useEntityCulling : ""));
lines.add("entityCulling:" + (getEntityCulling().isPresent() ? getEntityCulling().get() : ""));
lines.add("f1:");
lines.add("guiScaleOnWorldJoin:");
lines.add("changeOnResize:false");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
import com.kingcontaria.standardsettings.StandardSettings;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.RunArgs;
import org.apache.logging.log4j.Logger;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
Expand All @@ -14,8 +17,7 @@
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.attribute.UserDefinedFileAttributeView;
import java.util.Arrays;
import java.util.List;
import java.util.*;
import java.util.stream.Stream;

@Mixin(MinecraftClient.class)
Expand All @@ -24,8 +26,10 @@ public abstract class MinecraftClientMixin {

@Inject(method = "<init>", at = @At("RETURN"))
private void initializeStandardSettings(RunArgs args, CallbackInfo ci) {
UserDefinedFileAttributeView view = Files.getFileAttributeView(StandardSettings.standardoptionsFile.toPath(), UserDefinedFileAttributeView.class);
StandardSettings.initializeEntityCulling();

if (!StandardSettings.standardoptionsFile.exists()) {
UserDefinedFileAttributeView view = Files.getFileAttributeView(StandardSettings.standardoptionsFile.toPath(), UserDefinedFileAttributeView.class);
StandardSettings.LOGGER.info("Creating StandardSettings File...");

long start = System.nanoTime();
Expand All @@ -44,47 +48,38 @@ private void initializeStandardSettings(RunArgs args, CallbackInfo ci) {
return;
}

File globalFile = null;
UserDefinedFileAttributeView globalFileView = null;
List<String> lines = null;
Map<UserDefinedFileAttributeView, int[]> fileVersionsMap = new HashMap<>();
List<String> lines = new ArrayList<>();
try {
lines = com.google.common.io.Files.readLines(StandardSettings.standardoptionsFile, Charset.defaultCharset());
if (lines.size() > 0) {
String firstLine = com.google.common.io.Files.readLines(StandardSettings.standardoptionsFile, Charset.defaultCharset()).get(0);
globalFile = new File(firstLine);
if (!globalFile.exists()) {
globalFile = null;
} else {
globalFileView = Files.getFileAttributeView(globalFile.toPath(), UserDefinedFileAttributeView.class);
}
lines = StandardSettings.resolveGlobalFile(StandardSettings.standardoptionsFile);
for (File file : StandardSettings.filesLastModifiedMap.keySet()) {
UserDefinedFileAttributeView view = Files.getFileAttributeView(file.toPath(), UserDefinedFileAttributeView.class);
fileVersionsMap.put(view, readVersion(view));
}
} catch (Exception e) {
StandardSettings.LOGGER.error("Failed to check for global file", e);
StandardSettings.LOGGER.error("Failed to check for file versions", e);
}

int[] fileVersion = readVersion(view);
if (globalFile != null) {
int[] globalFileVersion = readVersion(globalFileView);
if (StandardSettings.compareVersions(fileVersion, globalFileVersion)) {
fileVersion = globalFileVersion;
try {
view.write("standardsettings", Charset.defaultCharset().encode(String.join(".", Arrays.stream(globalFileVersion).mapToObj(String::valueOf).toArray(String[]::new))));
} catch (IOException e) {
StandardSettings.LOGGER.error("Failed to adjust standardoptions.txt version to global file version", e);
}
int[] highestVersion = new int[]{1,2,0,0};
for (int[] fileVersion : fileVersionsMap.values()) {
if (StandardSettings.compareVersions(highestVersion, fileVersion)) {
highestVersion = fileVersion;
}
}

try {
List<String> linesToAdd = StandardSettings.checkVersion(fileVersion, lines);
List<String> linesToAdd = StandardSettings.checkVersion(highestVersion, lines);
if (linesToAdd != null) {
com.google.common.io.Files.append(System.lineSeparator() + String.join(System.lineSeparator(), linesToAdd), globalFile != null ? globalFile : StandardSettings.standardoptionsFile, Charset.defaultCharset());
com.google.common.io.Files.append(System.lineSeparator() + String.join(System.lineSeparator(), linesToAdd), StandardSettings.lastUsedFile, Charset.defaultCharset());
StandardSettings.LOGGER.info("Finished updating standardoptions.txt");
}
if (StandardSettings.compareVersions(fileVersion, StandardSettings.version)) {
view.write("standardsettings", Charset.defaultCharset().encode(StandardSettings.getVersion()));
if (globalFile != null) {
globalFileView.write("standardsettings", Charset.defaultCharset().encode(StandardSettings.getVersion()));
for (Map.Entry<UserDefinedFileAttributeView, int[]> entry : fileVersionsMap.entrySet()) {
if (StandardSettings.compareVersions(entry.getValue(), StandardSettings.version)) {
try {
entry.getKey().write("standardsettings", Charset.defaultCharset().encode(StandardSettings.getVersion()));
} catch (IOException e) {
StandardSettings.LOGGER.error("Failed to sign version number to file", e);
}
}
}
} catch (IOException e) {
Expand Down

0 comments on commit 4512510

Please sign in to comment.