Skip to content

Commit

Permalink
v1.2.2-pre1
Browse files Browse the repository at this point in the history
  • Loading branch information
KingContaria committed Aug 29, 2022
1 parent ead2886 commit 2ef395c
Show file tree
Hide file tree
Showing 9 changed files with 194 additions and 116 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+1.16.1
mod_version = 1.2.2-pre1+1.16.1
maven_group = com.kingcontaria.standardsettings
archives_base_name = standardsettings
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.kingcontaria.standardsettings;

import com.kingcontaria.standardsettings.mixins.BakedModelManagerAccessor;
import com.kingcontaria.standardsettings.mixins.MinecraftClientAccessor;
import com.kingcontaria.standardsettings.mixins.accessors.BakedModelManagerAccessor;
import com.kingcontaria.standardsettings.mixins.accessors.MinecraftClientAccessor;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.options.*;
import net.minecraft.client.render.entity.PlayerModelPart;
Expand Down Expand Up @@ -195,7 +195,7 @@ public void load(String levelName) {
options.gamma = gamma;
options.viewDistance = viewDistance;
options.entityDistanceScaling = entityDistanceScaling;
window.calculateScaleFactor(options.guiScale = guiScale, options.forceUnicodeFont);
window.setScaleFactor(window.calculateScaleFactor(options.guiScale = guiScale, options.forceUnicodeFont));
options.particles = particles;
window.setFramerateLimit(options.maxFps = maxFps);
options.graphicsMode = graphicsMode;
Expand Down
194 changes: 104 additions & 90 deletions src/main/java/com/kingcontaria/standardsettings/StandardSettings.java

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -11,29 +11,31 @@

public class CreateWorldScreenMixin {

private static boolean bl = true;
private static boolean shouldResetSettings = true;

// reset settings to standardoptions at the start of world creation
@Inject(method = "createLevel", at = @At("HEAD"))
private void resetSettings(CallbackInfo info) {
if (bl) {
int i = 0;
// don't reset settings if the last world was reset on world preview
if (shouldResetSettings) {
StandardSettings.LOGGER.info("Reset to StandardSettings...");
StandardSettings.load();
StandardSettings.LOGGER.info("Checking Settings...");
StandardSettings.LOGGER.info("Checking and saving Settings...");
StandardSettings.checkSettings();
StandardSettings.client.options.write();
bl = false;
shouldResetSettings = false;
}
}

// activate OnWorldJoin options when finishing world creation
// if instance is unfocused, it will instead wait
@Inject(method = "createLevel", at = @At("RETURN"))
private void onWorldJoin(CallbackInfo ci) {
if (StandardSettings.client.isWindowFocused()) {
StandardSettings.changeSettingsOnJoin();
} else {
StandardSettings.changeOnWindowActivation = true;
}
bl = true;
shouldResetSettings = true;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@
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 @@ -15,30 +12,38 @@
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.attribute.UserDefinedFileAttributeView;
import java.util.*;
import java.util.stream.Stream;

@Mixin(MinecraftClient.class)

public abstract class MinecraftClientMixin {
public class MinecraftClientMixin {

// initialize StandardSettings, doesn't use ClientModInitializer because GameOptions need to be initialized first
@Inject(method = "<init>", at = @At("RETURN"))
private void initializeStandardSettings(RunArgs args, CallbackInfo ci) {
StandardSettings.initializeEntityCulling();

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

long start = System.nanoTime();

// create config file if necessary
if (!StandardSettings.standardoptionsFile.getParentFile().exists()) {
StandardSettings.standardoptionsFile.getParentFile().mkdir();
if (!StandardSettings.standardoptionsFile.getParentFile().mkdir()) {
StandardSettings.LOGGER.error("Failed to create config file");
return;
}
}

// create file and mark with current StandardSettings version
try {
UserDefinedFileAttributeView view = Files.getFileAttributeView(StandardSettings.standardoptionsFile.toPath(), UserDefinedFileAttributeView.class);
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);
Expand All @@ -48,29 +53,44 @@ private void initializeStandardSettings(RunArgs args, CallbackInfo ci) {
return;
}

// check the marked StandardSettings versions along the standardoptions file chain
Map<UserDefinedFileAttributeView, int[]> fileVersionsMap = new HashMap<>();
List<String> lines = new ArrayList<>();
List<File> fileChain = new ArrayList<>();
try {
lines = StandardSettings.resolveGlobalFile(StandardSettings.standardoptionsFile);
for (File file : StandardSettings.filesLastModifiedMap.keySet()) {
UserDefinedFileAttributeView view = Files.getFileAttributeView(file.toPath(), UserDefinedFileAttributeView.class);
// resolve standardoptions file chain
File file = StandardSettings.standardoptionsFile;
do {
fileChain.add(file);
try {
lines = com.google.common.io.Files.readLines(file, StandardCharsets.UTF_8);
} catch (IOException e) {
break;
}
} while (lines != null && lines.size() > 0 && (file = new File(lines.get(0))).exists() && !fileChain.contains(file));

// get the StandardSettings versions marked to the files
for (File file2 : fileChain) {
UserDefinedFileAttributeView view = Files.getFileAttributeView(file2.toPath(), UserDefinedFileAttributeView.class);
fileVersionsMap.put(view, readVersion(view));
}
} catch (Exception e) {
StandardSettings.LOGGER.error("Failed to check for file versions", e);
}

// Finds the highest StandardSettings version of the file chain
int[] highestVersion = new int[]{1,2,0,0};
for (int[] fileVersion : fileVersionsMap.values()) {
if (StandardSettings.compareVersions(highestVersion, fileVersion)) {
highestVersion = fileVersion;
}
}

// Update standardoptions file if necessary and update the StandardSettings versions marked to the file
try {
List<String> linesToAdd = StandardSettings.checkVersion(highestVersion, lines);
if (linesToAdd != null) {
com.google.common.io.Files.append(System.lineSeparator() + String.join(System.lineSeparator(), linesToAdd), StandardSettings.lastUsedFile, Charset.defaultCharset());
com.google.common.io.Files.append(System.lineSeparator() + String.join(System.lineSeparator(), linesToAdd), fileChain.get(fileChain.size() - 1), Charset.defaultCharset());
StandardSettings.LOGGER.info("Finished updating standardoptions.txt");
}
for (Map.Entry<UserDefinedFileAttributeView, int[]> entry : fileVersionsMap.entrySet()) {
Expand All @@ -82,11 +102,13 @@ private void initializeStandardSettings(RunArgs args, CallbackInfo ci) {
}
}
}

} catch (IOException e) {
StandardSettings.LOGGER.error("Failed to update standardoptions.txt", e);
}
}

// reads the last marked StandardSettings version from the file
private int[] readVersion(UserDefinedFileAttributeView view) {
try {
String name = "standardsettings";
Expand All @@ -95,11 +117,12 @@ private int[] readVersion(UserDefinedFileAttributeView view) {
buf.flip();
String value = Charset.defaultCharset().decode(buf).toString();
return Stream.of(value.split("\\.")).mapToInt(Integer::parseInt).toArray();
} catch (IOException | IllegalArgumentException e) {
} catch (Exception e) {
return new int[]{1,2,0,0};
}
}

// activate OnWorldJoin options when focusing the instance
@Inject(method = "onWindowFocusChanged", at = @At("RETURN"))
private void changeSettingsOnJoin(boolean focused, CallbackInfo ci) {
if (focused && StandardSettings.changeOnWindowActivation) {
Expand All @@ -108,6 +131,7 @@ private void changeSettingsOnJoin(boolean focused, CallbackInfo ci) {
}
}

// activate OnWorldJoin Options when resizing the instance
@Inject(method = "onResolutionChanged", at = @At("HEAD"))
private void changeSettingsOnResize(CallbackInfo ci) {
if (StandardSettings.changeOnWindowActivation && StandardSettings.changeOnResize) {
Expand All @@ -116,11 +140,11 @@ private void changeSettingsOnResize(CallbackInfo ci) {
}
}

// save the world file name of the last world
@Inject(method = "disconnect(Lnet/minecraft/client/gui/screen/Screen;)V", at = @At("HEAD"))
private void cacheOptions(CallbackInfo ci) {
StandardSettings.changeOnWindowActivation = false;
try {
StandardSettings.lastQuitWorld = StandardSettings.client.getServer().getIconFile().getParentFile().getName();
StandardSettings.lastWorld = StandardSettings.client.getServer().getIconFile().getParentFile().getName();
} catch (Exception e) {
// empty catch block
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ private void isNewWorld(LevelStorage.Session session, DataFixer dataFixer, Callb
isNewWorld = !playerDataDir.exists();
}

// saves the standardoptions to world file for verification purposes
@Inject(method = "<init>", at = @At("TAIL"))
private void saveStandardoptionsTxt(LevelStorage.Session session, DataFixer dataFixer, CallbackInfo ci) {
if (isNewWorld && StandardSettings.standardoptionsCache != null) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.kingcontaria.standardsettings.mixins.accessors;

import net.minecraft.client.render.model.BakedModelManager;
import net.minecraft.client.render.model.ModelLoader;
import net.minecraft.resource.ResourceManager;
import net.minecraft.util.profiler.Profiler;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;

@Mixin(BakedModelManager.class)

public interface BakedModelManagerAccessor {
@Invoker
ModelLoader callPrepare(ResourceManager resourceManager, Profiler profiler);

@Invoker
void callApply(ModelLoader modelLoader, ResourceManager resourceManager, Profiler profiler);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.kingcontaria.standardsettings.mixins.accessors;

import net.minecraft.client.MinecraftClient;
import net.minecraft.util.profiler.ProfileResult;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
import org.spongepowered.asm.mixin.gen.Invoker;

@Mixin(MinecraftClient.class)

public interface MinecraftClientAccessor {
@Accessor
void setOpenProfilerSection(String value);
@Accessor
String getOpenProfilerSection();

@Invoker
void callInitFont(boolean forcesUnicode);
}
4 changes: 2 additions & 2 deletions src/main/resources/standardsettings.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
"package": "com.kingcontaria.standardsettings.mixins",
"compatibilityLevel": "JAVA_8",
"client": [
"BakedModelManagerAccessor",
"MinecraftClientAccessor",
"accessors.BakedModelManagerAccessor",
"accessors.MinecraftClientAccessor",
"CreateWorldScreenMixin",
"MinecraftClientMixin",
"WorldListWidgetEntryMixin",
Expand Down

0 comments on commit 2ef395c

Please sign in to comment.