Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,8 @@ public List<String> getMixins() {

mixins.add("Mixin_SimpleReloadInstance");
mixins.add("Mixin_MainMenuFpsUncap");
//? if > 1.8.9
mixins.add("Mixin_VersionedResourcePacks");
//? yacl_compat
mixins.add("compat.yacl.Mixin_YetAnotherConfigLib_Builder");

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package org.polyfrost.oneconfig.internal.mixin;

//? if > 1.8.9 {
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
import net.minecraft.client.Options;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;

@Mixin(Options.class)
public class Mixin_VersionedResourcePacks {
@Unique
private final Map<String, Object> oneconfig$legacyPacks = new HashMap<>();

@WrapOperation(
method = "processOptions",
at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Options$FieldAccess;process(Ljava/lang/String;Ljava/lang/Object;Ljava/util/function/Function;Ljava/util/function/Function;)Ljava/lang/Object;")
)
private Object oneconfig$carryLegacyPackLists(Options.FieldAccess access, String name, Object value, Function<String, Object> reader, Function<Object, String> writer, Operation<Object> original) {
Object result = original.call(access, name, value, reader, writer);
if (name.equals("resourcePacks") || name.equals("incompatibleResourcePacks")) {
String key = "oneconfig_legacy_" + name;
oneconfig$legacyPacks.put(key, original.call(access, key, oneconfig$legacyPacks.getOrDefault(key, writer.apply(result)), Function.identity(), Function.identity()));
}
return result;
}
}
//?}
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ public abstract class Mixin_RememberUnknownOptions {
@Unique
private static final String ocfg$SKIPPED_PREFIX = "Skipping bad option:";

@Unique
private static final String ocfg$LEGACY_PACKS_PREFIX = "oneconfig_legacy_";

@Shadow
private File file;

Expand All @@ -54,19 +57,26 @@ public abstract class Mixin_RememberUnknownOptions {
@Unique
private final Set<String> ocfg$rejectedKeys = new HashSet<>();

@Unique
private final Set<String> ocfg$legacyPackKeys = new HashSet<>();

@Unique
private int ocfg$dataVersion;

@Inject(method = "load", at = @At("HEAD"))
private void ocfg$rememberLines(CallbackInfo ci) {
ocfg$loadedLines.clear();
ocfg$rejectedKeys.clear();
ocfg$legacyPackKeys.clear();
ocfg$dataVersion = 0;
if (file == null || !file.exists()) return;
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
String line;
while ((line = reader.readLine()) != null) {
ocfg$loadedLines.add(line);
if (line.startsWith(ocfg$LEGACY_PACKS_PREFIX)) {
ocfg$legacyPackKeys.add(ocfg$keyOf(line.substring(ocfg$LEGACY_PACKS_PREFIX.length())));
}
if (line.startsWith("version:")) {
try {
ocfg$dataVersion = Integer.parseInt(line.substring("version:".length()).trim());
Expand All @@ -93,7 +103,10 @@ public abstract class Mixin_RememberUnknownOptions {
at = @At(value = "INVOKE", target = "Ljava/io/BufferedReader;readLine()Ljava/lang/String;", remap = false)
)
private String ocfg$readModernFormats(String line) {
return line == null ? null : LegacyOptionsFormat.toLegacyLine(line);
if (line == null) return null;
if (line.startsWith(ocfg$LEGACY_PACKS_PREFIX)) return line.substring(ocfg$LEGACY_PACKS_PREFIX.length());
if (ocfg$legacyPackKeys.contains(ocfg$keyOf(line))) return "";
return LegacyOptionsFormat.toLegacyLine(line);
}

@WrapWithCondition(
Expand All @@ -117,6 +130,10 @@ public abstract class Mixin_RememberUnknownOptions {
String line;
while ((line = reader.readLine()) != null) {
String key = ocfg$keyOf(line);
if ("resourcePacks".equals(key) || "incompatibleResourcePacks".equals(key)) {
key = ocfg$LEGACY_PACKS_PREFIX + key;
line = ocfg$LEGACY_PACKS_PREFIX + line;
}
if (key != null) saved.put(key, LegacyOptionsFormat.toModernLine(line, ocfg$dataVersion));
}
} catch (IOException e) {
Expand Down
4 changes: 4 additions & 0 deletions minecraft/src/main/resources/oneconfigv1.classtweaker
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,7 @@ classTweaker v1 official
#? if < 1.21.4 && > 1.8.9 {
#accessible field net/minecraft/client/renderer/entity/ItemRenderer itemColors Lnet/minecraft/client/color/item/ItemColors;
#?}

#? if > 1.8.9 {
#accessible class net/minecraft/client/Options$FieldAccess
#?}
Loading