diff --git a/build.gradle.kts b/build.gradle.kts index 23a2b3e0..daa910a5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,6 @@ plugins { - id("dev.isxander.modstitch.base") version "0.6.2-unstable" + id("dev.isxander.modstitch.base") version "0.7.1-unstable" + id("fabric-loom") version "1.13-SNAPSHOT" apply false id("me.modmuss50.mod-publish-plugin") version "0.8.4" `maven-publish` id("org.ajoberstar.grgit") version "5.3.2" @@ -8,11 +9,11 @@ plugins { val debugifyVersion = "1.1" modstitch { - minecraftVersion = "1.21.10" + minecraftVersion = "1.21.11" modLoaderVersion = "0.18.0" parchment { - mappingsVersion = "2025.10.12" + mappingsVersion = "2025.12.20" } metadata { @@ -212,14 +213,14 @@ val generatePatchedTable by tasks.registering { val previous = entries.filterIsInstance() - val timestamp = `java.time`.LocalDateTime.now().format(`java.time.format`.DateTimeFormatter.ISO_DATE_TIME) + //val timestamp = `java.time`.LocalDateTime.now().format(`java.time.format`.DateTimeFormatter.ISO_DATE_TIME) val markdownTable = """ - - - # List of Patched Bugs diff --git a/gradle.properties b/gradle.properties index 6f6f0145..6f8db085 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,6 +9,6 @@ curseforgeId=596224 githubProject=isXander/Debugify # Libraries -fabricApiVersion=0.138.3+1.21.10 -yaclVersion=3.8.0+1.21.9-fabric -modMenuVersion=16.0.0-rc.1 +fabricApiVersion=0.139.4+1.21.11 +yaclVersion=3.8.1+1.21.11-fabric +modMenuVersion=17.0.0-alpha.1 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 249e5832..f8e1ee31 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 17b9d0f7..23449a2b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip +networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/client/java/dev/isxander/debugify/client/gui/NoYACLScreen.java b/src/client/java/dev/isxander/debugify/client/gui/NoYACLScreen.java index e7992079..c19b2f1d 100644 --- a/src/client/java/dev/isxander/debugify/client/gui/NoYACLScreen.java +++ b/src/client/java/dev/isxander/debugify/client/gui/NoYACLScreen.java @@ -2,6 +2,7 @@ import net.fabricmc.loader.api.FabricLoader; import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.ActiveTextCollector; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.screens.Screen; @@ -15,6 +16,7 @@ import java.net.URI; import java.util.List; +import org.jspecify.annotations.Nullable; public class NoYACLScreen extends Screen { private final Screen parent; @@ -38,12 +40,12 @@ public NoYACLScreen(Screen parent) { @Override protected void init() { - this.wrappedText = font.split(unwrappedText, width - 50); + this.wrappedText = this.font.split(unwrappedText, width - 50); this.addRenderableWidget( Button.builder(CommonComponents.GUI_BACK, button -> minecraft.setScreen(parent)) .pos( (this.width - 150) / 2, - Mth.clamp(90 + wrappedText.size() * 9 + 12, this.height / 6 + 96, this.height - 24) + Mth.clamp(90 + this.wrappedText.size() * 9 + 12, this.height / 6 + 96, this.height - 24) ) .size(150, 20) .build() @@ -54,35 +56,44 @@ protected void init() { public void render(GuiGraphics graphics, int mouseX, int mouseY, float delta) { super.render(graphics, mouseX, mouseY, delta); - graphics.drawCenteredString(font, title, width / 2, 70, -1); + graphics.drawCenteredString(this.font, title, this.width / 2, 70, -1); int y = 90; for (FormattedCharSequence line : wrappedText) { - graphics.drawCenteredString(font, line, width / 2, y, -1); - y += font.lineHeight; + graphics.drawCenteredString(this.font, line, this.width / 2, y, -1); + y += this.font.lineHeight; } } - @Override public boolean mouseClicked(MouseButtonEvent mouseButtonEvent, boolean bl) { if (super.mouseClicked(mouseButtonEvent, bl)) { return true; } - Style style = getStyle((int) mouseButtonEvent.x(), (int) mouseButtonEvent.y()); - return handleComponentClicked(style); + Style style = this.getStyle((int) mouseButtonEvent.x(), (int) mouseButtonEvent.y()); + return this.handleClickEvent(style.getClickEvent()); } protected Style getStyle(int mouseX, int mouseY) { int y = mouseY - 90; - int line = y / font.lineHeight; + int line = y / this.font.lineHeight; + + if (y < 0 || y > y + this.wrappedText.size() * this.font.lineHeight) return null; + if (line < 0 || line >= this.wrappedText.size()) return null; - if (y < 0 || y > y + wrappedText.size() * font.lineHeight) return null; - if (line < 0 || line >= wrappedText.size()) return null; + FormattedCharSequence text = this.wrappedText.get(line); + int x = mouseX - (this.width / 2 - this.font.width(text) / 2); - FormattedCharSequence text = wrappedText.get(line); - int x = mouseX - (width / 2 - font.width(text) / 2); + ActiveTextCollector.ClickableStyleFinder clickableStyleFinder = new ActiveTextCollector.ClickableStyleFinder(this.font, mouseX, mouseY); + return clickableStyleFinder.result(); + } + + protected boolean handleClickEvent(@Nullable ClickEvent clickEvent) { + if (clickEvent == null) { + return false; + } - return font.getSplitter().componentStyleAtWidth(wrappedText.get(line), x); + defaultHandleGameClickEvent(clickEvent, this.minecraft, this); + return true; } } diff --git a/src/client/java/dev/isxander/debugify/client/helpers/mc237493/DebugifyTelemetry.java b/src/client/java/dev/isxander/debugify/client/helpers/mc237493/DebugifyTelemetry.java index d4385d5c..12f9f30c 100644 --- a/src/client/java/dev/isxander/debugify/client/helpers/mc237493/DebugifyTelemetry.java +++ b/src/client/java/dev/isxander/debugify/client/helpers/mc237493/DebugifyTelemetry.java @@ -1,50 +1,37 @@ package dev.isxander.debugify.client.helpers.mc237493; +import com.mojang.serialization.Codec; import java.util.Arrays; import java.util.Comparator; +import java.util.function.IntFunction; import net.minecraft.network.chat.Component; +import net.minecraft.util.ByIdMap; import net.minecraft.util.Mth; -import net.minecraft.util.OptionEnum; +import net.minecraft.util.StringRepresentable; -public enum DebugifyTelemetry implements OptionEnum { +public enum DebugifyTelemetry { OFF(0, "options.telemetry.state.none", "debugify.mc_237493.tooltip.off"), MINIMAL(1, "options.telemetry.state.minimal", "debugify.mc_237493.tooltip.minimal"), ALL(2, "options.telemetry.state.all", "debugify.mc_237493.tooltip.all"); - private static final DebugifyTelemetry[] VALUES = Arrays.stream(values()) - .sorted(Comparator.comparingInt(DebugifyTelemetry::getId)) - .toArray(DebugifyTelemetry[]::new); - + private static final IntFunction BY_ID = ByIdMap.continuous(value -> value.id, values(), ByIdMap.OutOfBoundsStrategy.WRAP); + public static final Codec LEGACY_CODEC = Codec.INT.xmap(BY_ID::apply, value -> value.id); private final int id; - private final String translationKey; - private final String tooltipTranslationKey; + private final Component caption; + private final Component tooltip; - DebugifyTelemetry(int id, String translationKey, String tooltipTranslationKey) { + DebugifyTelemetry(int id, final String key, final String translationKey) { this.id = id; - this.translationKey = translationKey; - this.tooltipTranslationKey = tooltipTranslationKey; - } - - @Override - public int getId() { - return this.id; - } - - @Override - public String getKey() { - return this.translationKey; - } - - public String getTooltipKey() { - return this.tooltipTranslationKey; + this.caption = Component.translatable(key); + this.tooltip = Component.translatable(translationKey); } - public Component getTooltipText() { - return Component.translatable(getTooltipKey(), getCaption()); + public Component caption() { + return this.caption; } - public static DebugifyTelemetry byId(int id) { - return VALUES[Mth.positiveModulo(id, VALUES.length)]; + public Component tooltip() { + return this.tooltip; } } diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc115092/SquidRendererMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc115092/SquidRendererMixin.java index 70484605..79fde490 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc115092/SquidRendererMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc115092/SquidRendererMixin.java @@ -6,7 +6,7 @@ import dev.isxander.debugify.fixes.FixCategory; import net.minecraft.client.renderer.entity.SquidRenderer; import net.minecraft.client.renderer.entity.state.SquidRenderState; -import net.minecraft.world.entity.animal.Squid; +import net.minecraft.world.entity.animal.squid.Squid; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc122477/EditBoxMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc122477/EditBoxMixin.java index 12520170..4e61ef7a 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc122477/EditBoxMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc122477/EditBoxMixin.java @@ -4,11 +4,11 @@ import dev.isxander.debugify.fixes.FixCategory; import dev.isxander.debugify.client.helpers.mc122477.KeyboardPollCounter; import dev.isxander.debugify.fixes.OS; -import net.minecraft.Util; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.components.EditBox; import net.minecraft.client.input.CharacterEvent; import net.minecraft.network.chat.Component; +import net.minecraft.util.Util; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc197260/ArmorStandRendererMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc197260/ArmorStandRendererMixin.java index 0a03ba4f..36eaa382 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc197260/ArmorStandRendererMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc197260/ArmorStandRendererMixin.java @@ -1,6 +1,5 @@ package dev.isxander.debugify.client.mixins.basic.mc197260; -import com.mojang.datafixers.util.Pair; import dev.isxander.debugify.fixes.BugFix; import dev.isxander.debugify.fixes.FixCategory; import net.minecraft.client.Minecraft; @@ -9,9 +8,7 @@ import net.minecraft.client.renderer.entity.state.ArmorStandRenderState; import org.spongepowered.asm.mixin.Mixin; -import java.util.Comparator; -import java.util.stream.IntStream; -import net.minecraft.client.model.ArmorStandArmorModel; +import net.minecraft.client.model.object.armorstand.ArmorStandArmorModel; import net.minecraft.client.renderer.LightTexture; import net.minecraft.client.renderer.entity.ArmorStandRenderer; import net.minecraft.core.BlockPos; @@ -39,13 +36,14 @@ protected ArmorStandRendererMixin(EntityRendererProvider.Context context) { BlockPos mainPos = BlockPos.containing(livingEntity.x, livingEntity.y, livingEntity.z); ClientLevel level = Minecraft.getInstance().level; - livingEntity.lightCoords = IntStream.of(-1, 0, 2, 3) - .mapToObj(operand -> { - BlockPos pos = mainPos.offset(0, operand, 0); - return Pair.of(level.getBrightness(LightLayer.BLOCK, pos), pos); - }) - .max(Comparator.comparingInt(Pair::getFirst)) - .map(p -> LightTexture.pack(p.getFirst(), level.getBrightness(LightLayer.SKY, p.getSecond()))) - .orElse(livingEntity.lightCoords); + int maxSkyLight = 0; + int maxBlockLight = 0; + for (int offset : new int[] { -1, 0, 2, 3 }) { + BlockPos pos = mainPos.offset(0, offset, 0); + maxSkyLight = Math.max(maxSkyLight, level.getBrightness(LightLayer.SKY, pos)); + maxBlockLight = Math.max(maxBlockLight, level.getBrightness(LightLayer.BLOCK, pos)); + } + + livingEntity.lightCoords = LightTexture.pack(maxBlockLight, maxSkyLight); } } diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc22882/AbstractContainerScreenMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc22882/AbstractContainerScreenMixin.java deleted file mode 100644 index cc04e6ff..00000000 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc22882/AbstractContainerScreenMixin.java +++ /dev/null @@ -1,22 +0,0 @@ -package dev.isxander.debugify.client.mixins.basic.mc22882; - -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import com.mojang.blaze3d.platform.InputConstants; -import dev.isxander.debugify.fixes.BugFix; -import dev.isxander.debugify.fixes.FixCategory; -import dev.isxander.debugify.fixes.OS; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@BugFix(id = "MC-22882", category = FixCategory.BASIC, env = BugFix.Env.CLIENT, os = OS.MAC, modConflicts = "ctrl-q", description = "Ctrl + Q won't work on Mac") -@Mixin(AbstractContainerScreen.class) -public class AbstractContainerScreenMixin { - @ModifyExpressionValue(method = "keyPressed", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/input/KeyEvent;hasControlDown()Z")) - private boolean hasControlDown(boolean ctrl) { - var window = Minecraft.getInstance().getWindow(); - return InputConstants.isKeyDown(window, InputConstants.KEY_LCONTROL) - || InputConstants.isKeyDown(window, InputConstants.KEY_RCONTROL); - } -} diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc22882/MinecraftMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc22882/MinecraftMixin.java deleted file mode 100644 index b1ea4386..00000000 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc22882/MinecraftMixin.java +++ /dev/null @@ -1,21 +0,0 @@ -package dev.isxander.debugify.client.mixins.basic.mc22882; - -import com.mojang.blaze3d.platform.InputConstants; -import dev.isxander.debugify.fixes.BugFix; -import dev.isxander.debugify.fixes.FixCategory; -import dev.isxander.debugify.fixes.OS; -import net.minecraft.client.Minecraft; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; - -@BugFix(id = "MC-22882", category = FixCategory.BASIC, env = BugFix.Env.CLIENT, os = OS.MAC, modConflicts = "ctrl-q", description = "Ctrl + Q won't work on Mac") -@Mixin(Minecraft.class) -public class MinecraftMixin { - @ModifyArg(method = "handleKeybinds", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;drop(Z)Z")) - private boolean shouldDropEntireStack(boolean ctrlPressed) { - var window = Minecraft.getInstance().getWindow(); - return InputConstants.isKeyDown(window, InputConstants.KEY_LCONTROL) - || InputConstants.isKeyDown(window, InputConstants.KEY_RCONTROL); - } -} diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc237493/OptionsMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc237493/OptionsMixin.java index 96fefb40..04624839 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc237493/OptionsMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc237493/OptionsMixin.java @@ -27,9 +27,9 @@ public abstract class OptionsMixin implements DebugifyTelemetryAccessor { @Unique private final OptionInstance debugifyTelemetry = new OptionInstance<>( "options.telemetry.button", - value -> Tooltip.create(value.getTooltipText()), - OptionInstance.forOptionEnum(), - new OptionInstance.Enum<>(Arrays.asList(DebugifyTelemetry.values()), Codec.INT.xmap(DebugifyTelemetry::byId, DebugifyTelemetry::getId)), + value -> Tooltip.create(value.tooltip()), + (component, value) -> value.caption(), + new OptionInstance.Enum<>(Arrays.asList(DebugifyTelemetry.values()), DebugifyTelemetry.LEGACY_CODEC), DebugifyTelemetry.OFF, value -> telemetryOptInExtra().set(value == DebugifyTelemetry.ALL) ); diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc237493/TelemetryInfoScreenMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc237493/TelemetryInfoScreenMixin.java index a3c8dfaa..1e30931f 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc237493/TelemetryInfoScreenMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc237493/TelemetryInfoScreenMixin.java @@ -5,13 +5,15 @@ import dev.isxander.debugify.fixes.BugFix; import dev.isxander.debugify.fixes.FixCategory; import net.minecraft.client.Options; -import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.layouts.LayoutElement; +import net.minecraft.client.gui.layouts.LinearLayout; import net.minecraft.client.gui.screens.telemetry.TelemetryEventWidget; import net.minecraft.client.gui.screens.telemetry.TelemetryInfoScreen; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; @BugFix(id = "MC-237493", category = FixCategory.BASIC, env = BugFix.Env.CLIENT, modConflicts = "no-telemetry", description = "Telemetry cannot be disabled") @Mixin(TelemetryInfoScreen.class) @@ -25,8 +27,8 @@ public class TelemetryInfoScreenMixin { * @author * @reason */ - @Overwrite - private AbstractWidget createTelemetryCheckbox() { - return ((DebugifyTelemetryAccessor) options).getTelemetryOption().createButton(options, 0, 0, 308, state -> telemetryEventWidget.onOptInChanged(state == DebugifyTelemetry.ALL)); + @Redirect(method = "init", at = @At(ordinal = 5, value = "INVOKE", target = "Lnet/minecraft/client/gui/layouts/LinearLayout;addChild(Lnet/minecraft/client/gui/layouts/LayoutElement;)Lnet/minecraft/client/gui/layouts/LayoutElement;")) + private LayoutElement createTelemetryCheckbox(LinearLayout layout, LayoutElement child) { + return layout.addChild(((DebugifyTelemetryAccessor) options).getTelemetryOption().createButton(options, 0, 0, 308, state -> telemetryEventWidget.onOptInChanged(state == DebugifyTelemetry.ALL))); } } diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc268420/GuiMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc268420/GuiMixin.java index 75301fde..2bd39612 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc268420/GuiMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc268420/GuiMixin.java @@ -7,7 +7,7 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiGraphics; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -21,8 +21,8 @@ public class GuiMixin { private Minecraft minecraft; // the FULL sprite never shows anyway so no need to wrap it - @WrapWithCondition(method = "renderCrosshair", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;blitSprite(Lcom/mojang/blaze3d/pipeline/RenderPipeline;Lnet/minecraft/resources/ResourceLocation;IIII)V", ordinal = 2)) - private boolean fixAttackIndicatorFlashing(GuiGraphics instance, RenderPipeline renderPipeline, ResourceLocation resourceLocation, int i, int j, int k, int l) { + @WrapWithCondition(method = "renderCrosshair", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;blitSprite(Lcom/mojang/blaze3d/pipeline/RenderPipeline;Lnet/minecraft/resources/Identifier;IIII)V", ordinal = 2)) + private boolean fixAttackIndicatorFlashing(GuiGraphics instance, RenderPipeline renderPipeline, Identifier resourceLocation, int i, int j, int k, int l) { return this.minecraft.player.getAttackStrengthScale(0.0F) * 17F > 0; } } diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc298558/AtmosphericFogEnvironmentMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc298558/AtmosphericFogEnvironmentMixin.java index d33171a7..31bb0e93 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc298558/AtmosphericFogEnvironmentMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc298558/AtmosphericFogEnvironmentMixin.java @@ -19,10 +19,10 @@ public class AtmosphericFogEnvironmentMixin { */ @Definition(id = "rainFogMultiplier", field = "Lnet/minecraft/client/renderer/fog/environment/AtmosphericFogEnvironment;rainFogMultiplier:F") @Definition(id = "rainLevel", local = @Local(type = float.class, ordinal = 3)) - @Definition(id = "gtDeltaTicks", local = @Local(type = float.class, ordinal = 1)) + @Definition(id = "gtDeltaTicks", local = @Local(type = float.class, ordinal = 0)) // `?.` instead of `this.` since the `this` is DUPed making it impossible to target @Expression("?.rainFogMultiplier = ?.rainFogMultiplier + (rainLevel - ?.rainFogMultiplier) * @(gtDeltaTicks) * 0.2") - @ModifyExpressionValue(method = "setupFog", at = @At("MIXINEXTRAS:EXPRESSION")) + @ModifyExpressionValue(method = "updateRainFogState", at = @At("MIXINEXTRAS:EXPRESSION")) private float clampFog(float original) { // it's impossible to target `gtDeltaTicks * 0.2` since in bytecode // it's `...) * gtDeltaTicks) * 0.2`. so instead just modify `gtDeltaTicks` with min 5, since 5 * 0.2 is 1 diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc46737/GameRendererMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc46737/GameRendererMixin.java index 04dacb95..03d03a6b 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc46737/GameRendererMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc46737/GameRendererMixin.java @@ -5,15 +5,15 @@ import dev.isxander.debugify.fixes.FixCategory; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.resources.Identifier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @BugFix(id = "MC-46737", category = FixCategory.BASIC, env = BugFix.Env.CLIENT, description = "Entities' shaders are applied when beginning to spectate them in third person") @Mixin(GameRenderer.class) public class GameRendererMixin { - @WrapWithCondition(method = "checkEntityPostEffect", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;setPostEffect(Lnet/minecraft/resources/ResourceLocation;)V")) - private boolean thirdPersonCheck(GameRenderer renderer, ResourceLocation location) { + @WrapWithCondition(method = "checkEntityPostEffect", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;setPostEffect(Lnet/minecraft/resources/Identifier;)V")) + private boolean thirdPersonCheck(GameRenderer renderer, Identifier id) { return Minecraft.getInstance().options.getCameraType().isFirstPerson(); } } diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc61489/BookEditScreenMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc61489/BookEditScreenMixin.java index dd0c04a9..b1671a92 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc61489/BookEditScreenMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc61489/BookEditScreenMixin.java @@ -1,5 +1,6 @@ package dev.isxander.debugify.client.mixins.basic.mc61489; +import dev.isxander.debugify.client.utils.ClientUtils; import dev.isxander.debugify.fixes.BugFix; import dev.isxander.debugify.fixes.FixCategory; import net.minecraft.client.gui.screens.Screen; @@ -7,6 +8,7 @@ import net.minecraft.network.chat.Component; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyArg; @@ -28,23 +30,8 @@ private int modifyHeight(int original) { return original + (this.height - IMAGE_HEIGHT) / 3; } - @ModifyArg(method = "init", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/inventory/PageButton;(IIZLnet/minecraft/client/gui/components/Button$OnPress;Z)V"), index = 1) - private int modifyPageButtonsYPos(int original) { - return original + (this.height - IMAGE_HEIGHT) / 3; - } - - @ModifyArg(method = "init", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/Button$Builder;bounds(IIII)Lnet/minecraft/client/gui/components/Button$Builder;"), index = 1) - private int modifyButtonsYPos(int original) { - return original + (this.height - IMAGE_HEIGHT) / 3; - } - - @ModifyArg(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;drawString(Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Component;IIIZ)V"), index = 3) - private int modifyStringYPos(int original) { - return original + (this.height - IMAGE_HEIGHT) / 3; - } - - @ModifyArg(method = "renderBackground", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;blit(Lcom/mojang/blaze3d/pipeline/RenderPipeline;Lnet/minecraft/resources/ResourceLocation;IIFFIIII)V"), index = 3) - private int modifyBlitYPos(int original) { - return original + (this.height - IMAGE_HEIGHT) / 3; + @Overwrite + private int backgroundTop() { + return 2 + (this.height - IMAGE_HEIGHT) / 3; } } diff --git a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc61489/BookViewScreenMixin.java b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc61489/BookViewScreenMixin.java index 59bdcdd0..afe0552f 100644 --- a/src/client/java/dev/isxander/debugify/client/mixins/basic/mc61489/BookViewScreenMixin.java +++ b/src/client/java/dev/isxander/debugify/client/mixins/basic/mc61489/BookViewScreenMixin.java @@ -1,18 +1,15 @@ package dev.isxander.debugify.client.mixins.basic.mc61489; -import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import dev.isxander.debugify.client.utils.ClientUtils; import dev.isxander.debugify.fixes.BugFix; import dev.isxander.debugify.fixes.FixCategory; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.BookViewScreen; import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.Style; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; // Compared to the original patch, we use / 3 here since it seems to line up better. Else, in a windowed screen the Done button appears at the very bottom / slightly off-screen. @BugFix(id = "MC-61489", category = FixCategory.BASIC, env = BugFix.Env.CLIENT, enabled = false, modConflicts = {"fixbookgui", "stendhal", "scribble"}, description = "Book GUI is not vertically centered") @@ -26,33 +23,8 @@ protected BookViewScreenMixin(Component component) { super(component); } - @ModifyArg(method = "createMenuControls", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/Button$Builder;bounds(IIII)Lnet/minecraft/client/gui/components/Button$Builder;"), index = 1) - private int modifyMenuControlsYPos(int original) { - return original + (this.height - IMAGE_HEIGHT) / 3; - } - - @ModifyArg(method = "createPageControlButtons", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screens/inventory/PageButton;(IIZLnet/minecraft/client/gui/components/Button$OnPress;Z)V"), index = 1) - private int modifyPageControlsYPos(int original) { - return original + (this.height - IMAGE_HEIGHT) / 3; - } - - @ModifyArg(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;drawString(Lnet/minecraft/client/gui/Font;Lnet/minecraft/network/chat/Component;IIIZ)V"), index = 3) - private int modifyPageMessageYPos(int original) { - return original + (this.height - IMAGE_HEIGHT) / 3; - } - - @ModifyArg(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;drawString(Lnet/minecraft/client/gui/Font;Lnet/minecraft/util/FormattedCharSequence;IIIZ)V"), index = 3) - private int modifyPageComponentsYPos(int original) { - return original + (this.height - IMAGE_HEIGHT) / 3; - } - - @ModifyArg(method = "renderBackground", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiGraphics;blit(Lcom/mojang/blaze3d/pipeline/RenderPipeline;Lnet/minecraft/resources/ResourceLocation;IIFFIIII)V"), index = 3) - private int translateRenderBackground(int original) { - return original + (this.height - IMAGE_HEIGHT) / 3; - } - - @WrapMethod(method = "getClickedComponentStyleAt") - private Style modifyClickedComponentStyleAtYPos(double x, double y, Operation