Skip to content

Commit

Permalink
v1.2.1-rc2
Browse files Browse the repository at this point in the history
  • Loading branch information
KingContaria committed Aug 9, 2022
1 parent 2c94855 commit ebb4d9d
Show file tree
Hide file tree
Showing 4 changed files with 122 additions and 9 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-rc1+1.16.1
mod_version = 1.2.1-rc2+1.16.1
maven_group = com.kingcontaria.standardsettings
archives_base_name = standardsettings
Original file line number Diff line number Diff line change
Expand Up @@ -81,14 +81,16 @@ public class OptionsCache {
private int perspective;
private String piedirectory;
private boolean hudHidden;
private String[] keysAll;
private float[] soundCategories;
private final String[] keysAll;
private final float[] soundCategories;
private Set<PlayerModelPart> playerModelParts;

public OptionsCache(MinecraftClient client) {
this.client = client;
this.options = client.options;
this.window = client.getWindow();
keysAll = new String[options.keysAll.length];
soundCategories = new float[SoundCategory.values().length];
}

public void save(String levelName) {
Expand Down Expand Up @@ -152,12 +154,10 @@ public void save(String levelName) {
perspective = options.perspective;
piedirectory = ((MinecraftClientAccessor)client).getOpenProfilerSection();
hudHidden = options.hudHidden;
keysAll = new String[options.keysAll.length];
int i = 0;
for (KeyBinding key : options.keysAll) {
keysAll[i++] = key.getBoundKeyTranslationKey();
}
soundCategories = new float[SoundCategory.values().length];
i = 0;
for (SoundCategory sound : SoundCategory.values()) {
soundCategories[i++] = options.getSoundVolume(sound);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,15 @@

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;

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

public static final int[] version = new int[]{1,2,1,-998};
public static final Logger LOGGER = LogManager.getLogger();
public static final MinecraftClient client = MinecraftClient.getInstance();
public static final GameOptions options = client.options;
Expand Down Expand Up @@ -64,9 +67,13 @@ public static void load() {
}

if (standardoptionsCache == null || standardoptionsTxtLastModified != standardoptionsFile.lastModified() || (lastUsedGlobalFile != null && fileLastModified != lastUsedGlobalFile.lastModified())) {
LOGGER.info(standardoptionsTxtLastModified == 0 ? "Loading & Caching StandardSettings on first load" : "Reloading & caching StandardSettings because the file has been changed");
LOGGER.info("Reloading & caching StandardSettings...");
standardoptionsTxtLastModified = standardoptionsFile.lastModified();
List<String> lines = Files.readLines(standardoptionsFile, StandardCharsets.UTF_8);
if (lines.size() == 0) {
LOGGER.error("standardoptions.txt is empty");
return;
}
File globalFile = new File(lines.get(0));
if (lines.get(0) != null && globalFile.exists()) {
LOGGER.info("Using global standardoptions file");
Expand All @@ -80,7 +87,7 @@ public static void load() {
}
load(standardoptionsCache);
LOGGER.info("Finished loading StandardSettings ({} ms)", (System.nanoTime() - start) / 1000000.0f);
} catch (IOException e) {
} catch (Exception e) {
LOGGER.error("Failed to load StandardSettings", e);
}
}
Expand Down Expand Up @@ -256,8 +263,9 @@ public static void checkSettings() {
options.fov = (int) check("FOV", options.fov, 30, 110, false);
options.gamma = check("Brightness", options.gamma, 0, 5, true);
options.viewDistance = check("Render Distance", options.viewDistance, 2, 32);
options.entityDistanceScaling = check("Entity Distance", options.entityDistanceScaling, 0.5f, 5, true);
float entityDistanceScalingTemp = options.entityDistanceScaling;
if ((options.entityDistanceScaling = check("Entity Distance", options.entityDistanceScaling, 0.5f, 5, true)) != (options.entityDistanceScaling = (float) (Math.round(options.entityDistanceScaling * 4) / 4))) {
if (entityDistanceScalingTemp != (options.entityDistanceScaling = Math.round(options.entityDistanceScaling * 4) / 4.0f)) {
LOGGER.warn("Entity Distance was set to a false interval ({})", entityDistanceScalingTemp);
}
options.guiScale = check("GUI Scale", options.guiScale, 0, Integer.MAX_VALUE);
Expand All @@ -284,8 +292,9 @@ public static void checkSettings() {
renderDistanceOnWorldJoin = check("Render Distance (On World Join)", renderDistanceOnWorldJoin, 2, 32);
}
if (entityDistanceScalingOnWorldJoin != 0) {
entityDistanceScalingOnWorldJoin = check("Entity Distance (On World Join)", entityDistanceScalingOnWorldJoin, 0.5f, 5, true);
entityDistanceScalingTemp = entityDistanceScalingOnWorldJoin;
if ((entityDistanceScalingOnWorldJoin = check("Entity Distance (On World Join)", entityDistanceScalingOnWorldJoin, 0.5f, 5, true)) != (entityDistanceScalingOnWorldJoin = (float) (Math.round(entityDistanceScalingOnWorldJoin * 4) / 4))) {
if (entityDistanceScalingTemp != (entityDistanceScalingOnWorldJoin = Math.round(entityDistanceScalingOnWorldJoin * 4) / 4.0f)) {
LOGGER.warn("Entity Distance (On World Join) was set to a false interval ({})", entityDistanceScalingTemp);
}
}
Expand Down Expand Up @@ -422,4 +431,39 @@ public static String getStandardoptionsTxt() {

return string.toString();
}

public static String[] checkVersion(int[] fileVersion) {
List<String> lines = new ArrayList<>();
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)));
} else {
return null;
}
if (compareVersions(fileVersion, new int[]{1,2,1,-1000})) {
lines.add("entityCulling:" + (FabricLoader.getInstance().getModContainer("sodium").isPresent() ? SodiumClientMod.options().advanced.useEntityCulling : ""));
lines.add("f1:");
lines.add("guiScaleOnWorldJoin:");
lines.add("changeOnResize:false");
}
if (lines.size() == 0) {
LOGGER.info("Didn't find anything to update, good luck on the runs!");
return null;
}
return lines.toArray(new String[0]);
}

// returns true when versionToCheck is older than versionToCompareTo
public static boolean compareVersions(int[] versionToCheck, int[] versionToCompareTo) {
int i = 0;
for (int v1 : versionToCheck) {
int v2 = versionToCompareTo[i++];
if (v1 == v2) continue;
return v1 < v2;
}
return false;
}

public static String getVersion() {
return String.join(".", Arrays.stream(version).mapToObj(String::valueOf).toArray(String[]::new));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,23 @@
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;
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.stream.Stream;

@Mixin(MinecraftClient.class)

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);
if (!StandardSettings.standardoptionsFile.exists()) {
StandardSettings.LOGGER.info("Creating StandardSettings File...");

Expand All @@ -28,10 +36,71 @@ private void initializeStandardSettings(RunArgs args, CallbackInfo ci) {

try {
Files.write(StandardSettings.standardoptionsFile.toPath(), StandardSettings.getStandardoptionsTxt().getBytes());
view.write("standardsettings", Charset.defaultCharset().encode(StandardSettings.getVersion()));
StandardSettings.LOGGER.info("Finished creating StandardSettings File ({} ms)", (System.nanoTime() - start) / 1000000.0f);
} catch (IOException e) {
StandardSettings.LOGGER.error("Failed to create StandardSettings File", e);
}
return;
}

File globalFile = null;
UserDefinedFileAttributeView globalFileView = null;
try {
List<String> 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);
}
}
} catch (IOException e) {
StandardSettings.LOGGER.error("Failed to check for global file", 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(System.lineSeparator() + 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);
}
}
}

try {
String[] linesToAdd = StandardSettings.checkVersion(fileVersion);
if (linesToAdd != null) {
com.google.common.io.Files.append(String.join(System.lineSeparator(), linesToAdd), globalFile != null ? globalFile : StandardSettings.standardoptionsFile, 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()));
}
}
} catch (IOException e) {
StandardSettings.LOGGER.error("Failed to update standardoptions.txt", e);
}
}

private int[] readVersion(UserDefinedFileAttributeView view) {
try {
String name = "standardsettings";
ByteBuffer buf = ByteBuffer.allocate(view.size(name));
view.read(name, buf);
buf.flip();
String value = Charset.defaultCharset().decode(buf).toString();
return Stream.of(value.split("\\.")).mapToInt(Integer::parseInt).toArray();
} catch (IOException | IllegalArgumentException e) {
return new int[]{1,2,0,0};
}
}

Expand Down

0 comments on commit ebb4d9d

Please sign in to comment.