From 59c0b14e4d8bb8c16c1f2d86d0c11b80f7794176 Mon Sep 17 00:00:00 2001 From: LostLuma Date: Fri, 29 Sep 2023 03:46:46 +0200 Subject: [PATCH] 1.16.5 --- build.gradle | 8 ++-- gradle/libs.versions.toml | 8 ++-- .../java/dynamic_fps/impl/DynamicFPSMod.java | 24 +++++++++-- .../java/dynamic_fps/impl/GraphicsState.java | 7 ++-- .../java/dynamic_fps/impl/PowerState.java | 7 ++-- .../dynamic_fps/impl/compat/ClothConfig.java | 9 ++-- .../impl/config/DynamicFPSConfig.java | 20 +++++---- .../impl/mixin/DebugScreenOverlayMixin.java | 4 +- .../impl/mixin/ToastComponentMixin.java | 14 ++++--- .../impl/util/HudInfoRenderer.java | 23 ++++------- .../dynamic_fps/impl/util/Localization.java | 5 ++- .../java/dynamic_fps/impl/util/Logging.java | 6 +-- .../impl/util/ModCompatibility.java | 5 ++- .../dynamic_fps/impl/util/OptionsHolder.java | 41 ++++++++++--------- src/main/resources/dynamic_fps.mixins.json | 2 +- src/main/resources/fabric.mod.json | 11 +++-- 16 files changed, 110 insertions(+), 84 deletions(-) diff --git a/build.gradle b/build.gradle index 4271c4b4..42f742d7 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = project.maven_group -version = "${generateVersion()}+minecraft-${libs.versions.minecraft.get()}" +version = "${generateVersion()}+minecraft-${libs.versions.minecraft.get()}-to-1.18.2" base { archivesName = project.archives_base_name @@ -37,12 +37,12 @@ processResources { java { withSourcesJar() - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } tasks.withType(JavaCompile).configureEach { - it.options.release = 17 + it.options.release = 8 it.options.encoding = "UTF-8" it.options.compilerArgs += ["-Xlint:deprecation"] diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ac0a3c77..ee6a3949 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,11 +1,11 @@ [versions] -minecraft = "1.20" +minecraft = "1.16.5" fabric_loader = "0.14.22" -modmenu = "7.0.1" -fabric_api = "0.83.0+1.20" +modmenu = "1.15.0" +fabric_api = "0.29.4+1.16" -cloth_config = "11.0.99" +cloth_config = "4.14.54" [libraries] minecraft = { module = "com.mojang:minecraft", version.ref = "minecraft" } diff --git a/src/main/java/dynamic_fps/impl/DynamicFPSMod.java b/src/main/java/dynamic_fps/impl/DynamicFPSMod.java index 8acbdaa0..a9dd8de7 100644 --- a/src/main/java/dynamic_fps/impl/DynamicFPSMod.java +++ b/src/main/java/dynamic_fps/impl/DynamicFPSMod.java @@ -3,6 +3,7 @@ import dynamic_fps.impl.compat.FREX; import dynamic_fps.impl.config.Config; import dynamic_fps.impl.config.DynamicFPSConfig; +import dynamic_fps.impl.util.DynamicFPSSplashOverlay; import dynamic_fps.impl.util.HudInfoRenderer; import dynamic_fps.impl.util.KeyMappingHandler; import dynamic_fps.impl.util.Logging; @@ -16,6 +17,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.LoadingOverlay; import net.minecraft.client.gui.screens.PauseScreen; +import net.minecraft.client.sounds.SoundManager; import net.minecraft.sounds.SoundSource; import static dynamic_fps.impl.util.Localization.translationKey; @@ -136,7 +138,7 @@ private static boolean isLevelCoveredByScreen() { } private static boolean isLevelCoveredByOverlay() { - return OVERLAY_OPTIMIZATION_ACTIVE && minecraft.getOverlay() instanceof LoadingOverlay loadingOverlay && loadingOverlay.dynamic_fps$isReloadComplete(); + return OVERLAY_OPTIMIZATION_ACTIVE && minecraft.getOverlay() instanceof LoadingOverlay && ((DynamicFPSSplashOverlay)minecraft.getOverlay()).dynamic_fps$isReloadComplete(); } @SuppressWarnings("squid:S1215") // Garbage collector call @@ -145,11 +147,25 @@ public static void handleStateChange(PowerState previous, PowerState current) { Logging.getLogger().info("State changed from {} to {}.", previous, current); } - var before = config; + Config before = config; config = modConfig.get(current); hasRenderedLastFrame = false; // Render next frame w/o delay + // Fix LWJGL <3.2.x issue happening on some OSes + // Causing the cursor hover event to not execute + // If cursor is captured but window is unfocused + if (minecraft.screen == null && !minecraft.options.pauseOnLostFocus) { + if (current.configurable) { + minecraft.mouseHandler.releaseMouse(); + } else { + // Grabbing the mouse only works when Minecraft + // Agrees that the window is focused. The next client + // Tick is late enough for this, but still unnoticable. + minecraft.tell(minecraft.mouseHandler::grabMouse); + } + } + if (config.runGarbageCollector()) { System.gc(); } @@ -197,7 +213,7 @@ private static void checkForStateChanges() { } if (state != current) { - var previous = state; + PowerState previous = state; state = current; handleStateChange(previous, current); @@ -213,7 +229,7 @@ private static void setVolumeMultiplier(float multiplier) { // Makes for a rather jarring experience when music // Is stopped. Also fixes now-playing compatibility - var manager = minecraft.getSoundManager(); + SoundManager manager = minecraft.getSoundManager(); if (multiplier == 0) { manager.pause(); diff --git a/src/main/java/dynamic_fps/impl/GraphicsState.java b/src/main/java/dynamic_fps/impl/GraphicsState.java index 3f749711..bce61724 100644 --- a/src/main/java/dynamic_fps/impl/GraphicsState.java +++ b/src/main/java/dynamic_fps/impl/GraphicsState.java @@ -1,6 +1,7 @@ package dynamic_fps.impl; import java.util.Locale; +import java.util.Optional; import com.mojang.serialization.Codec; import com.mojang.serialization.DataResult; @@ -34,10 +35,10 @@ public T write(DynamicOps ops, GraphicsState value) { @Override public DataResult read(DynamicOps ops, T input) { - var value = ops.getStringValue(input).get().left(); + Optional value = ops.getStringValue(input).get().left(); - if (value.isEmpty()) { - return DataResult.error(() -> "Graphics state must not be empty!"); + if (!value.isPresent()) { + return DataResult.error("Graphics state must not be empty!"); } else { return DataResult.success(GraphicsState.valueOf(value.get().toUpperCase(Locale.ROOT))); } diff --git a/src/main/java/dynamic_fps/impl/PowerState.java b/src/main/java/dynamic_fps/impl/PowerState.java index 00a6d530..7295dbe1 100644 --- a/src/main/java/dynamic_fps/impl/PowerState.java +++ b/src/main/java/dynamic_fps/impl/PowerState.java @@ -1,6 +1,7 @@ package dynamic_fps.impl; import java.util.Locale; +import java.util.Optional; import com.mojang.serialization.Codec; import com.mojang.serialization.DataResult; @@ -48,10 +49,10 @@ public T write(DynamicOps ops, PowerState value) { @Override public DataResult read(DynamicOps ops, T input) { - var value = ops.getStringValue(input).get().left(); + Optional value = ops.getStringValue(input).get().left(); - if (value.isEmpty()) { - return DataResult.error(() -> "Power state must not be empty!"); + if (!value.isPresent()) { + return DataResult.error("Power state must not be empty!"); } else { return DataResult.success(PowerState.valueOf(value.get().toUpperCase(Locale.ROOT))); } diff --git a/src/main/java/dynamic_fps/impl/compat/ClothConfig.java b/src/main/java/dynamic_fps/impl/compat/ClothConfig.java index c83a53fc..e9bb6451 100644 --- a/src/main/java/dynamic_fps/impl/compat/ClothConfig.java +++ b/src/main/java/dynamic_fps/impl/compat/ClothConfig.java @@ -9,6 +9,7 @@ import dynamic_fps.impl.DynamicFPSMod; import dynamic_fps.impl.GraphicsState; import dynamic_fps.impl.PowerState; +import dynamic_fps.impl.config.Config; import dynamic_fps.impl.config.DynamicFPSConfig; public final class ClothConfig { @@ -20,16 +21,16 @@ public static Screen genConfigScreen(Screen parent) { ConfigEntryBuilder entryBuilder = builder.entryBuilder(); - for (var state : PowerState.values()) { + for (PowerState state : PowerState.values()) { if (!state.configurable) { continue; } - var config = DynamicFPSMod.modConfig.get(state); - var standard = DynamicFPSConfig.getDefaultConfig(state); + Config config = DynamicFPSMod.modConfig.get(state); + Config standard = DynamicFPSConfig.getDefaultConfig(state); builder.getOrCreateCategory( - localized("config", "category." + state.toString().toLowerCase())) + localized("config", "category.".concat(state.toString().toLowerCase()))) .addEntry( entryBuilder .startTextDescription( diff --git a/src/main/java/dynamic_fps/impl/config/DynamicFPSConfig.java b/src/main/java/dynamic_fps/impl/config/DynamicFPSConfig.java index b030b860..5392e0a7 100644 --- a/src/main/java/dynamic_fps/impl/config/DynamicFPSConfig.java +++ b/src/main/java/dynamic_fps/impl/config/DynamicFPSConfig.java @@ -8,8 +8,10 @@ import java.util.EnumMap; import java.util.Map; +import com.google.gson.JsonElement; import com.google.gson.JsonParser; import com.mojang.serialization.Codec; +import com.mojang.serialization.DataResult; import com.mojang.serialization.JsonOps; import com.mojang.serialization.codecs.RecordCodecBuilder; @@ -21,7 +23,7 @@ public final class DynamicFPSConfig { private Map configs; - private static final Path PATH = FabricLoader.getInstance().getConfigDir().resolve(DynamicFPSMod.MOD_ID + ".json"); + private static final Path PATH = FabricLoader.getInstance().getConfigDir().resolve(DynamicFPSMod.MOD_ID.concat(".json")); private static final Codec> STATES_CODEC = Codec.unboundedMap(PowerState.CODEC, Config.CODEC); private static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( @@ -31,7 +33,7 @@ public final class DynamicFPSConfig { private DynamicFPSConfig(Map configs) { this.configs = new EnumMap<>(configs); - for (var state : PowerState.values()) { + for (PowerState state : PowerState.values()) { if (state.configurable) { this.configs.computeIfAbsent(state, DynamicFPSConfig::getDefaultConfig); } @@ -60,25 +62,25 @@ public static DynamicFPSConfig load() { String data; try { - data = Files.readString(PATH); + data = String.join("", Files.readAllLines(PATH, StandardCharsets.UTF_8)); } catch (NoSuchFileException e) { return new DynamicFPSConfig(new EnumMap<>(PowerState.class)); } catch (IOException e) { throw new RuntimeException("Failed to load Dynamic FPS config.", e); } - var root = JsonParser.parseString(data); - var parsed = CODEC.parse(JsonOps.INSTANCE, root); + JsonElement root = new JsonParser().parse(data); + DataResult parsed = CODEC.parse(JsonOps.INSTANCE, root); return parsed.getOrThrow(false, RuntimeException::new); } public void save() { - var data = CODEC.encodeStart(JsonOps.INSTANCE, this); - var root = data.getOrThrow(false, RuntimeException::new); + DataResult data = CODEC.encodeStart(JsonOps.INSTANCE, this); + JsonElement root = data.getOrThrow(false, RuntimeException::new); try { - Files.writeString(PATH, root.toString(), StandardCharsets.UTF_8); + Files.write(PATH, root.toString().getBytes(StandardCharsets.UTF_8)); } catch (IOException e) { // Cloth Config's automatic saving does not support catching exceptions throw new RuntimeException("Failed to save Dynamic FPS config.", e); @@ -97,7 +99,7 @@ public static Config getDefaultConfig(PowerState state) { return new Config(0, 0.0f, GraphicsState.DEFAULT, false, false); } default: { - throw new RuntimeException("Getting default configuration for unhandled power state " + state.toString()); + throw new RuntimeException("Getting default configuration for unhandled power state ".concat(state.toString())); } } } diff --git a/src/main/java/dynamic_fps/impl/mixin/DebugScreenOverlayMixin.java b/src/main/java/dynamic_fps/impl/mixin/DebugScreenOverlayMixin.java index 1565ad04..4d5ad246 100644 --- a/src/main/java/dynamic_fps/impl/mixin/DebugScreenOverlayMixin.java +++ b/src/main/java/dynamic_fps/impl/mixin/DebugScreenOverlayMixin.java @@ -19,10 +19,10 @@ public class DebugScreenOverlayMixin { */ @Inject(method = "getGameInformation", at = @At("RETURN")) private void onGetGameInformation(CallbackInfoReturnable> callbackInfo) { - var status = DynamicFPSMod.powerState(); + PowerState status = DynamicFPSMod.powerState(); if (status != PowerState.FOCUSED) { - var result = callbackInfo.getReturnValue(); + List result = callbackInfo.getReturnValue(); int target = DynamicFPSMod.targetFrameRate(); result.add(2, String.format(Locale.ROOT, "§c[Dynamic FPS] FPS: %s P: %s§r", target, status.toString().toLowerCase())); diff --git a/src/main/java/dynamic_fps/impl/mixin/ToastComponentMixin.java b/src/main/java/dynamic_fps/impl/mixin/ToastComponentMixin.java index 52368925..03f2694b 100644 --- a/src/main/java/dynamic_fps/impl/mixin/ToastComponentMixin.java +++ b/src/main/java/dynamic_fps/impl/mixin/ToastComponentMixin.java @@ -1,19 +1,23 @@ package dynamic_fps.impl.mixin; +import java.util.Deque; + import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.Redirect; import dynamic_fps.impl.DynamicFPSMod; +import net.minecraft.client.gui.components.toasts.Toast; import net.minecraft.client.gui.components.toasts.ToastComponent; @Mixin(ToastComponent.class) public class ToastComponentMixin { - @Inject(method = "freeSlots", at = @At("HEAD"), cancellable = true) - private void hasFreeSlots(CallbackInfoReturnable callbackInfo) { + @Redirect(method = "render", at = @At(value = "INVOKE", target = "Ljava/util/Deque;isEmpty()Z")) + private boolean onQueueIsEmpty(Deque queued) { if (!DynamicFPSMod.shouldShowToasts()) { - callbackInfo.setReturnValue(0); + return true; + } else { + return queued.isEmpty(); } } } diff --git a/src/main/java/dynamic_fps/impl/util/HudInfoRenderer.java b/src/main/java/dynamic_fps/impl/util/HudInfoRenderer.java index 2026a883..cc1333d2 100644 --- a/src/main/java/dynamic_fps/impl/util/HudInfoRenderer.java +++ b/src/main/java/dynamic_fps/impl/util/HudInfoRenderer.java @@ -3,44 +3,37 @@ import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; -import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.client.gui.Font.DisplayMode; import net.minecraft.network.chat.Component; import static dynamic_fps.impl.util.Localization.localized; -import org.joml.Matrix4f; +import com.mojang.blaze3d.vertex.PoseStack; import dynamic_fps.impl.DynamicFPSMod; public final class HudInfoRenderer implements HudRenderCallback { @Override - public void onHudRender(GuiGraphics drawContext, float tickDelta) { + public void onHudRender(PoseStack poseStack, float tickDelta) { if (DynamicFPSMod.isDisabled()) { - drawCenteredText(drawContext, localized("gui", "hud.disabled"), 32); + drawCenteredText(poseStack, localized("gui", "hud.disabled"), 32); } else if (DynamicFPSMod.isForcingLowFPS()) { - drawCenteredText(drawContext, localized("gui", "hud.reducing"), 32); + drawCenteredText(poseStack, localized("gui", "hud.reducing"), 32); } } - private void drawCenteredText(GuiGraphics drawContext, Component component, float y) { + private void drawCenteredText(PoseStack poseStack, Component component, float y) { Minecraft client = Minecraft.getInstance(); Font fontRenderer = client.gui.getFont(); int windowWidth = client.getWindow().getGuiScaledWidth(); int stringWidth = fontRenderer.width(component); - fontRenderer.drawInBatch( + fontRenderer.drawShadow( + poseStack, component, (windowWidth - stringWidth) / 2f, y, - 0xFFFFFFFF, - true, - new Matrix4f(), - drawContext.bufferSource(), - DisplayMode.NORMAL, - 0, - 255 + 0xFFFFFFFF ); } } diff --git a/src/main/java/dynamic_fps/impl/util/Localization.java b/src/main/java/dynamic_fps/impl/util/Localization.java index 7d47bb1d..561dcc2f 100644 --- a/src/main/java/dynamic_fps/impl/util/Localization.java +++ b/src/main/java/dynamic_fps/impl/util/Localization.java @@ -2,15 +2,16 @@ import dynamic_fps.impl.DynamicFPSMod; import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TranslatableComponent; public final class Localization { /** e.g. keyString("title", "config") -> "title.dynamic_fps.config") */ public static String translationKey(String domain, String path) { - return domain + "." + DynamicFPSMod.MOD_ID + "." + path; + return String.join(".", domain, DynamicFPSMod.MOD_ID, path); } public static Component localized(String domain, String path, Object... args) { - return Component.translatable(translationKey(domain, path), args); + return new TranslatableComponent(translationKey(domain, path), args); } private Localization() {} diff --git a/src/main/java/dynamic_fps/impl/util/Logging.java b/src/main/java/dynamic_fps/impl/util/Logging.java index 296f74df..bb7c51de 100644 --- a/src/main/java/dynamic_fps/impl/util/Logging.java +++ b/src/main/java/dynamic_fps/impl/util/Logging.java @@ -1,12 +1,12 @@ package dynamic_fps.impl.util; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import dynamic_fps.impl.DynamicFPSMod; public class Logging { - private static final Logger logger = LoggerFactory.getLogger(DynamicFPSMod.MOD_ID); + private static final Logger logger = LogManager.getLogger(DynamicFPSMod.MOD_ID); public static Logger getLogger() { return logger; diff --git a/src/main/java/dynamic_fps/impl/util/ModCompatibility.java b/src/main/java/dynamic_fps/impl/util/ModCompatibility.java index 6aadf0e3..ffda4b1b 100644 --- a/src/main/java/dynamic_fps/impl/util/ModCompatibility.java +++ b/src/main/java/dynamic_fps/impl/util/ModCompatibility.java @@ -6,6 +6,7 @@ import org.jetbrains.annotations.Nullable; import net.fabricmc.loader.api.FabricLoader; +import net.fabricmc.loader.api.MappingResolver; import net.fabricmc.loader.api.ModContainer; import net.fabricmc.loader.api.metadata.CustomValue; import net.fabricmc.loader.api.metadata.ModMetadata; @@ -61,13 +62,13 @@ private static void parseScreenOverrides(@Nullable CustomValue parent, String ty return; } - var values = parent.getAsObject().get(type); + CustomValue values = parent.getAsObject().get(type); if (values == null || values.getType() != CvType.ARRAY) { return; } - var resolver = FabricLoader.getInstance().getMappingResolver(); + MappingResolver resolver = FabricLoader.getInstance().getMappingResolver(); values.getAsArray().forEach(value -> { if (value.getType() == CvType.STRING) { diff --git a/src/main/java/dynamic_fps/impl/util/OptionsHolder.java b/src/main/java/dynamic_fps/impl/util/OptionsHolder.java index f22862e3..3c9799bc 100644 --- a/src/main/java/dynamic_fps/impl/util/OptionsHolder.java +++ b/src/main/java/dynamic_fps/impl/util/OptionsHolder.java @@ -1,6 +1,7 @@ package dynamic_fps.impl.util; import dynamic_fps.impl.GraphicsState; +import net.minecraft.client.AmbientOcclusionStatus; import net.minecraft.client.CloudStatus; import net.minecraft.client.GraphicsStatus; import net.minecraft.client.Options; @@ -14,10 +15,10 @@ public class OptionsHolder { private static CloudStatus cloudStatus; private static GraphicsStatus graphicsStatus; - private static boolean ambientOcclusion; + private static AmbientOcclusionStatus ambientOcclusion; private static ParticleStatus particlesStatus; private static boolean entityShadows; - private static double entityDistance; + private static float entityDistance; /* * Create an in-memory copy of current vanilla graphics options. @@ -25,12 +26,12 @@ public class OptionsHolder { * This MUST be called while graphics options have not been changed yet. */ public static void copyOptions(Options options) { - cloudStatus = options.getCloudsType(); - graphicsStatus = options.graphicsMode().get(); - ambientOcclusion = options.ambientOcclusion().get(); - particlesStatus = options.particles().get(); - entityShadows = options.entityShadows().get(); - entityDistance = options.entityDistanceScaling().get(); + cloudStatus = options.renderClouds; + graphicsStatus = options.graphicsMode; + ambientOcclusion = options.ambientOcclusion; + particlesStatus = options.particles; + entityShadows = options.entityShadows; + entityDistance = options.entityDistanceScaling; } /* @@ -38,21 +39,21 @@ public static void copyOptions(Options options) { */ public static void applyOptions(Options options, GraphicsState state) { if (state == GraphicsState.DEFAULT) { - options.cloudStatus().set(cloudStatus); - options.graphicsMode().set(graphicsStatus); - options.ambientOcclusion().set(ambientOcclusion); - options.particles().set(particlesStatus); - options.entityShadows().set(entityShadows); - options.entityDistanceScaling().set(entityDistance); + options.renderClouds = cloudStatus; + options.graphicsMode = graphicsStatus; + options.ambientOcclusion = ambientOcclusion; + options.particles = particlesStatus; + options.entityShadows = entityShadows; + options.entityDistanceScaling = entityDistance; } else { // state == GraphicsState.REDUCED - options.cloudStatus().set(CloudStatus.OFF); - options.particles().set(ParticleStatus.MINIMAL); - options.entityShadows().set(false); - options.entityDistanceScaling().set(0.5); + options.renderClouds = CloudStatus.OFF; + options.particles = ParticleStatus.MINIMAL; + options.entityShadows = false; + options.entityDistanceScaling = 0.5f; if (state == GraphicsState.MINIMAL) { - options.graphicsMode().set(GraphicsStatus.FAST); - options.ambientOcclusion().set(false); + options.graphicsMode = GraphicsStatus.FAST; + options.ambientOcclusion = AmbientOcclusionStatus.OFF; } } } diff --git a/src/main/resources/dynamic_fps.mixins.json b/src/main/resources/dynamic_fps.mixins.json index da9d1887..6efbc76f 100644 --- a/src/main/resources/dynamic_fps.mixins.json +++ b/src/main/resources/dynamic_fps.mixins.json @@ -1,7 +1,7 @@ { "required": true, "package": "dynamic_fps.impl.mixin", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_8", "mixins": [], "client": [ "DebugScreenOverlayMixin", diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 98698870..e24e3435 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -33,7 +33,14 @@ ], "depends": { - "minecraft": ">=1.20.0", + "minecraft": [ + "=1.16.5", + "=1.17.0", + "=1.17.1", + "=1.18.0", + "=1.18.1", + "=1.18.2" + ], "fabricloader": ">=0.14.22", "fabric-resource-loader-v0": "*", "fabric-rendering-v1": "*", @@ -54,7 +61,6 @@ "net.minecraft.class_426", "net.minecraft.class_4288", "net.minecraft.class_6777", - "net.minecraft.class_443", "net.minecraft.class_446", "net.minecraft.class_445", "net.minecraft.class_6599" @@ -71,7 +77,6 @@ "net.minecraft.class_426": "net.minecraft.client.gui.screens.LanguageSelectScreen", "net.minecraft.class_4288": "net.minecraft.client.gui.screens.MouseSettingsScreen", "net.minecraft.class_6777": "net.minecraft.client.gui.screens.OnlineOptionsScreen", - "net.minecraft.class_443": "net.minecraft.client.gui.screens.SoundOptionsScreen", "net.minecraft.class_446": "net.minecraft.client.gui.screens.VideoSettingsScreen", "net.minecraft.class_445": "net.minecraft.client.gui.screens.WinScreen", "net.minecraft.class_6599": "net.minecraft.client.gui.screens.controls.KeyBindsScreen"