Skip to content
Open
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
13 changes: 8 additions & 5 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -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}"
Expand All @@ -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
Expand Down
18 changes: 7 additions & 11 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
}
}
4 changes: 2 additions & 2 deletions src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
],

"depends": {
"minecraft": ">=1.21.6",
"fabricloader": ">=0.16.14"
"minecraft": ">=${minecraft_version}",
"fabricloader": ">=${loader_version}"
}
}
2 changes: 1 addition & 1 deletion src/main/resources/statuseffecttimer.mixins.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"required": true,
"package": "se.icus.mag.statuseffecttimer.mixin",
"compatibilityLevel": "JAVA_17",
"compatibilityLevel": "JAVA_25",
"client": [
"StatusEffectTimerMixin"
],
Expand Down