diff --git a/build.gradle b/build.gradle index a13029f..95e4d28 100644 --- a/build.gradle +++ b/build.gradle @@ -1,12 +1,11 @@ plugins { id 'java' - id 'fabric-loom' version '1.11.4' + id 'net.fabricmc.fabric-loom' version "${loom_version}" } dependencies { minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" - modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" + implementation "net.fabricmc:fabric-loader:${project.loader_version}" } version = "${project.mod_version}+${project.minecraft_version}" @@ -15,8 +14,12 @@ processResources { inputs.property "version", project.version filesMatching("fabric.mod.json") { - expand "mod_version": project.version - } + expand( + "mod_version": project.version, + "minecraft_version": project.minecraft_version, + "loader_version": project.loader_version + ) +} filesMatching("*.mixins.json") { expand "java_version": project.java_version diff --git a/gradle.properties b/gradle.properties index 02e3e07..6da5b95 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,12 +1,8 @@ -# Mod version -mod_version=2.0.0 - -# Minecraft/Java version -# Also hardcoded in fabric.mod.json and *.mixin.json -minecraft_version=1.21.6 -java_version=21 +# Fabric Properties +minecraft_version=26.1 +loader_version=0.19.0 +loom_version=1.16-SNAPSHOT +java_version=25 -# Fabric versions -- check these on https://fabricmc.net/develop -# Also hardcoded in fabric.mod.json -yarn_mappings=1.21.6+build.1 -loader_version=0.16.14 +# Mod Properties +mod_version=2.0.0 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ca025c8..c61a118 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/src/main/java/se/icus/mag/statuseffecttimer/StatusEffectTimerRenderer.java b/src/main/java/se/icus/mag/statuseffecttimer/StatusEffectTimerRenderer.java index 0eae279..f928ea3 100644 --- a/src/main/java/se/icus/mag/statuseffecttimer/StatusEffectTimerRenderer.java +++ b/src/main/java/se/icus/mag/statuseffecttimer/StatusEffectTimerRenderer.java @@ -1,32 +1,32 @@ package se.icus.mag.statuseffecttimer; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.resource.language.I18n; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.util.math.MathHelper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.resources.language.I18n; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.util.Mth; public class StatusEffectTimerRenderer { - public void drawStatusEffectOverlay(MinecraftClient client, DrawContext context, StatusEffectInstance statusEffectInstance, int x, int y) { + public void drawStatusEffectOverlay(Minecraft client, GuiGraphicsExtractor context, MobEffectInstance statusEffectInstance, int x, int y) { String duration = getDurationAsString(statusEffectInstance); - int durationLength = client.textRenderer.getWidth(duration); - context.drawTextWithShadow(client.textRenderer, duration, x + 13 - (durationLength / 2), y + 14, 0x99FFFFFF); + int durationLength = client.font.width(duration); + context.text(client.font, duration, x + 13 - (durationLength / 2), y + 14, 0x99FFFFFF); int amplifier = statusEffectInstance.getAmplifier(); if (amplifier > 0) { // Convert to roman numerals if possible - String amplifierString = (amplifier < 10) ? I18n.translate("enchantment.level." + (amplifier + 1)) : "**"; - int amplifierLength = client.textRenderer.getWidth(amplifierString); - context.drawTextWithShadow(client.textRenderer, amplifierString, x + 22 - amplifierLength, y + 3, 0x99FFFFFF); + String amplifierString = (amplifier < 10) ? I18n.get("enchantment.level." + (amplifier + 1)) : "**"; + int amplifierLength = client.font.width(amplifierString); + context.text(client.font, amplifierString, x + 22 - amplifierLength, y + 3, 0x99FFFFFF); } } - private String getDurationAsString(StatusEffectInstance statusEffectInstance) { - if (statusEffectInstance.isInfinite()) { - return I18n.translate("effect.duration.infinite"); + private String getDurationAsString(MobEffectInstance statusEffectInstance) { + if (statusEffectInstance.isInfiniteDuration()) { + return I18n.get("effect.duration.infinite"); } - int ticks = MathHelper.floor((float) statusEffectInstance.getDuration()); + int ticks = Mth.floor((float) statusEffectInstance.getDuration()); int seconds = ticks / 20; if (seconds >= 3600) { diff --git a/src/main/java/se/icus/mag/statuseffecttimer/mixin/StatusEffectTimerMixin.java b/src/main/java/se/icus/mag/statuseffecttimer/mixin/StatusEffectTimerMixin.java index 7f9880e..42c4a4c 100644 --- a/src/main/java/se/icus/mag/statuseffecttimer/mixin/StatusEffectTimerMixin.java +++ b/src/main/java/se/icus/mag/statuseffecttimer/mixin/StatusEffectTimerMixin.java @@ -3,11 +3,11 @@ import com.llamalad7.mixinextras.sugar.Local; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.hud.InGameHud; -import net.minecraft.client.render.RenderTickCounter; -import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.DeltaTracker; +import net.minecraft.world.effect.MobEffectInstance; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -19,21 +19,21 @@ // Set priority to 500, to load before default at 1000. This is to better cooperate with HUDTweaks. @Environment(EnvType.CLIENT) -@Mixin(value = InGameHud.class, priority = 500) +@Mixin(value = Gui.class, priority = 500) public abstract class StatusEffectTimerMixin { @Unique private StatusEffectTimerRenderer renderer = new StatusEffectTimerRenderer(); @Shadow @Final - private MinecraftClient client; + private Minecraft minecraft; - @Inject(method = "renderStatusEffectOverlay", + @Inject(method = "extractEffects", at = @At(value = "INVOKE", - target = "Lnet/minecraft/client/gui/DrawContext;drawGuiTexture(Lcom/mojang/blaze3d/pipeline/RenderPipeline;Lnet/minecraft/util/Identifier;IIIII)V", + target = "Lnet/minecraft/client/gui/GuiGraphicsExtractor;blitSprite(Lcom/mojang/blaze3d/pipeline/RenderPipeline;Lnet/minecraft/resources/Identifier;IIIII)V", shift = At.Shift.AFTER)) - private void appendOverlayDrawing(DrawContext context, RenderTickCounter tickCounter, CallbackInfo c, - @Local StatusEffectInstance statusEffectInstance, - @Local(ordinal = 2) int x, @Local(ordinal = 3) int y) { - renderer.drawStatusEffectOverlay(client, context, statusEffectInstance, x, y); + private void onExtractEffects(GuiGraphicsExtractor graphics, DeltaTracker deltaTracker, CallbackInfo c, + @Local MobEffectInstance statusEffectInstance, + @Local(ordinal = 2) int x, @Local(ordinal = 3) int y) { + renderer.drawStatusEffectOverlay(minecraft, graphics, statusEffectInstance, x, y); } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 0ca5eec..93bbe80 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -24,7 +24,7 @@ ], "depends": { - "minecraft": ">=1.21.6", - "fabricloader": ">=0.16.14" + "minecraft": ">=${minecraft_version}", + "fabricloader": ">=${loader_version}" } } diff --git a/src/main/resources/statuseffecttimer.mixins.json b/src/main/resources/statuseffecttimer.mixins.json index d36caec..d2966f9 100644 --- a/src/main/resources/statuseffecttimer.mixins.json +++ b/src/main/resources/statuseffecttimer.mixins.json @@ -1,7 +1,7 @@ { "required": true, "package": "se.icus.mag.statuseffecttimer.mixin", - "compatibilityLevel": "JAVA_17", + "compatibilityLevel": "JAVA_25", "client": [ "StatusEffectTimerMixin" ],