Skip to content

Commit a3dcdc7

Browse files
committed
Merge branch '1.21.6'
2 parents a2dd66b + 18f39a2 commit a3dcdc7

File tree

4 files changed

+53
-37
lines changed

4 files changed

+53
-37
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
## 2.0.0+1.21.6 - 2025-07-29
4+
5+
### Added
6+
7+
- Internal refactoring to allow for interoperability with other mods
8+
39
## 1.2.0+1.21.6 - 2025-07-24
410

511
### Added

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Mod version
2-
mod_version=1.2.0
2+
mod_version=2.0.0
33

44
# Minecraft/Java version
55
# Also hardcoded in fabric.mod.json and *.mixin.json
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package se.icus.mag.statuseffecttimer;
2+
3+
import net.minecraft.client.MinecraftClient;
4+
import net.minecraft.client.gui.DrawContext;
5+
import net.minecraft.client.resource.language.I18n;
6+
import net.minecraft.entity.effect.StatusEffectInstance;
7+
import net.minecraft.util.math.MathHelper;
8+
9+
public class StatusEffectTimerRenderer {
10+
public void drawStatusEffectOverlay(MinecraftClient client, DrawContext context, StatusEffectInstance statusEffectInstance, int x, int y) {
11+
String duration = getDurationAsString(statusEffectInstance);
12+
int durationLength = client.textRenderer.getWidth(duration);
13+
context.drawTextWithShadow(client.textRenderer, duration, x + 13 - (durationLength / 2), y + 14, 0x99FFFFFF);
14+
15+
int amplifier = statusEffectInstance.getAmplifier();
16+
if (amplifier > 0) {
17+
// Convert to roman numerals if possible
18+
String amplifierString = (amplifier < 10) ? I18n.translate("enchantment.level." + (amplifier + 1)) : "**";
19+
int amplifierLength = client.textRenderer.getWidth(amplifierString);
20+
context.drawTextWithShadow(client.textRenderer, amplifierString, x + 22 - amplifierLength, y + 3, 0x99FFFFFF);
21+
}
22+
}
23+
24+
private String getDurationAsString(StatusEffectInstance statusEffectInstance) {
25+
if (statusEffectInstance.isInfinite()) {
26+
return I18n.translate("effect.duration.infinite");
27+
}
28+
29+
int ticks = MathHelper.floor((float) statusEffectInstance.getDuration());
30+
int seconds = ticks / 20;
31+
32+
if (seconds >= 3600) {
33+
return seconds / 3600 + "h";
34+
} else if (seconds >= 60) {
35+
return seconds / 60 + "m";
36+
} else {
37+
return String.valueOf(seconds);
38+
}
39+
}
40+
}

src/main/java/se/icus/mag/statuseffecttimer/mixin/StatusEffectTimerMixin.java

Lines changed: 6 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,23 @@
77
import net.minecraft.client.gui.DrawContext;
88
import net.minecraft.client.gui.hud.InGameHud;
99
import net.minecraft.client.render.RenderTickCounter;
10-
import net.minecraft.client.resource.language.I18n;
1110
import net.minecraft.entity.effect.StatusEffectInstance;
12-
import net.minecraft.util.math.MathHelper;
1311
import org.spongepowered.asm.mixin.Final;
1412
import org.spongepowered.asm.mixin.Mixin;
1513
import org.spongepowered.asm.mixin.Shadow;
14+
import org.spongepowered.asm.mixin.Unique;
1615
import org.spongepowered.asm.mixin.injection.At;
1716
import org.spongepowered.asm.mixin.injection.Inject;
1817
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
19-
20-
import java.util.List;
18+
import se.icus.mag.statuseffecttimer.StatusEffectTimerRenderer;
2119

2220
// Set priority to 500, to load before default at 1000. This is to better cooperate with HUDTweaks.
2321
@Environment(EnvType.CLIENT)
2422
@Mixin(value = InGameHud.class, priority = 500)
2523
public abstract class StatusEffectTimerMixin {
24+
@Unique
25+
private StatusEffectTimerRenderer renderer = new StatusEffectTimerRenderer();
26+
2627
@Shadow @Final
2728
private MinecraftClient client;
2829

@@ -33,37 +34,6 @@ public abstract class StatusEffectTimerMixin {
3334
private void appendOverlayDrawing(DrawContext context, RenderTickCounter tickCounter, CallbackInfo c,
3435
@Local StatusEffectInstance statusEffectInstance,
3536
@Local(ordinal = 2) int x, @Local(ordinal = 3) int y) {
36-
drawStatusEffectOverlay(context, statusEffectInstance, x, y);
37-
}
38-
39-
private void drawStatusEffectOverlay(DrawContext context, StatusEffectInstance statusEffectInstance, int x, int y) {
40-
String duration = getDurationAsString(statusEffectInstance);
41-
int durationLength = client.textRenderer.getWidth(duration);
42-
context.drawTextWithShadow(client.textRenderer, duration, x + 13 - (durationLength / 2), y + 14, 0x99FFFFFF);
43-
44-
int amplifier = statusEffectInstance.getAmplifier();
45-
if (amplifier > 0) {
46-
// Convert to roman numerals if possible
47-
String amplifierString = (amplifier < 10) ? I18n.translate("enchantment.level." + (amplifier + 1)) : "**";
48-
int amplifierLength = client.textRenderer.getWidth(amplifierString);
49-
context.drawTextWithShadow(client.textRenderer, amplifierString, x + 22 - amplifierLength, y + 3, 0x99FFFFFF);
50-
}
51-
}
52-
53-
private String getDurationAsString(StatusEffectInstance statusEffectInstance) {
54-
if (statusEffectInstance.isInfinite()) {
55-
return I18n.translate("effect.duration.infinite");
56-
}
57-
58-
int ticks = MathHelper.floor((float) statusEffectInstance.getDuration());
59-
int seconds = ticks / 20;
60-
61-
if (seconds >= 3600) {
62-
return seconds / 3600 + "h";
63-
} else if (seconds >= 60) {
64-
return seconds / 60 + "m";
65-
} else {
66-
return String.valueOf(seconds);
67-
}
37+
renderer.drawStatusEffectOverlay(client, context, statusEffectInstance, x, y);
6838
}
6939
}

0 commit comments

Comments
 (0)