66import net .minecraft .client .MinecraftClient ;
77import net .minecraft .client .gui .DrawContext ;
88import net .minecraft .client .gui .hud .InGameHud ;
9- import net .minecraft .client .resource .language .I18n ;
109import net .minecraft .entity .effect .StatusEffectInstance ;
11- import net .minecraft .util .math .MathHelper ;
1210import org .spongepowered .asm .mixin .Final ;
1311import org .spongepowered .asm .mixin .Mixin ;
1412import org .spongepowered .asm .mixin .Shadow ;
13+ import org .spongepowered .asm .mixin .Unique ;
1514import org .spongepowered .asm .mixin .injection .At ;
1615import org .spongepowered .asm .mixin .injection .Inject ;
1716import org .spongepowered .asm .mixin .injection .callback .CallbackInfo ;
17+ import se .icus .mag .statuseffecttimer .StatusEffectTimerRenderer ;
1818
1919import java .util .List ;
2020
2121// Set priority to 500, to load before default at 1000. This is to better cooperate with HUDTweaks.
2222@ Environment (EnvType .CLIENT )
2323@ Mixin (value = InGameHud .class , priority = 500 )
2424public abstract class StatusEffectTimerMixin {
25+ @ Unique
26+ private StatusEffectTimerRenderer renderer = new StatusEffectTimerRenderer ();
27+
2528 @ Shadow @ Final
2629 private MinecraftClient client ;
2730
@@ -31,38 +34,7 @@ private void appendOverlayDrawing(DrawContext context, float tickDelta, Callback
3134 @ Local List <Runnable > list , @ Local StatusEffectInstance statusEffectInstance ,
3235 @ Local (ordinal = 4 ) int x , @ Local (ordinal = 3 ) int y ) {
3336 list .add (() -> {
34- drawStatusEffectOverlay (context , statusEffectInstance , x , y );
37+ renderer . drawStatusEffectOverlay (client , context , statusEffectInstance , x , y );
3538 });
3639 }
37-
38- private void drawStatusEffectOverlay (DrawContext context , StatusEffectInstance statusEffectInstance , int x , int y ) {
39- String duration = getDurationAsString (statusEffectInstance );
40- int durationLength = client .textRenderer .getWidth (duration );
41- context .drawTextWithShadow (client .textRenderer , duration , x + 13 - (durationLength / 2 ), y + 14 , 0x99FFFFFF );
42-
43- int amplifier = statusEffectInstance .getAmplifier ();
44- if (amplifier > 0 ) {
45- // Convert to roman numerals if possible
46- String amplifierString = (amplifier < 10 ) ? I18n .translate ("enchantment.level." + (amplifier + 1 )) : "**" ;
47- int amplifierLength = client .textRenderer .getWidth (amplifierString );
48- context .drawTextWithShadow (client .textRenderer , amplifierString , x + 22 - amplifierLength , y + 3 , 0x99FFFFFF );
49- }
50- }
51-
52- private String getDurationAsString (StatusEffectInstance statusEffectInstance ) {
53- if (statusEffectInstance .isInfinite ()) {
54- return I18n .translate ("effect.duration.infinite" );
55- }
56-
57- int ticks = MathHelper .floor ((float ) statusEffectInstance .getDuration ());
58- int seconds = ticks / 20 ;
59-
60- if (seconds >= 3600 ) {
61- return seconds / 3600 + "h" ;
62- } else if (seconds >= 60 ) {
63- return seconds / 60 + "m" ;
64- } else {
65- return String .valueOf (seconds );
66- }
67- }
6840}
0 commit comments