Skip to content

Commit

Permalink
Support for 1.20
Browse files Browse the repository at this point in the history
  • Loading branch information
magicus committed Jan 19, 2024
1 parent 9505dc5 commit 4a98916
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 21 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

This is a Minecraft mod that overlays a timer on the Vanilla status effect HUD icons.

This mod requires Minecraft 1.16.5-1.19 and the Fabric loader.
This mod requires Minecraft 1.16.5-1.20 and the Fabric loader.

This mod overlays the number of seconds left of the status effect, or the number of minutes (followed by "m") if it is more than 60 seconds, on the vanilla status effect indicator. If the effect has an amplifier (as in "Haste II"), the amplifier is also overlaid. That's it. This is a very minimalistic mod. No settings are required nor provided.

Expand All @@ -25,7 +25,7 @@ This is what it looks like when you are using the mod.

The latest version is 1.1.1.

Direct download links for Minecraft 1.19:
Direct download links for Minecraft 1.20:

* Download from GitHub: [statuseffecttimer-1.1.1+1.19.jar](https://github.com/magicus/statuseffecttimer/releases/download/v1.1.1%2B1.19/statuseffecttimer-1.1.1+1.19.jar)
* Download from Modrinth: [statuseffecttimer-1.1.1+1.19.jar](https://cdn.modrinth.com/data/T9FDHbY5/versions/1.1.1+1.19/statuseffecttimer-1.1.1%2B1.19.jar)
Expand Down
8 changes: 4 additions & 4 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ org.gradle.jvmargs=-Xmx1G

# Fabric Properties
# check these on https://fabricmc.net/develop
minecraft_version=1.19
yarn_mappings=1.19+build.2
loader_version=0.14.7
minecraft_version=1.20
yarn_mappings=1.20+build.1
loader_version=0.15.6

# Mod Properties
mod_version = 1.1.1+1.19
Expand All @@ -14,4 +14,4 @@ archives_base_name = statuseffecttimer

# Dependencies
# Fabric api
fabric_version=0.56.0+1.19
fabric_version=0.83.0+1.20
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package se.icus.mag.statuseffecttimer.mixin;

import com.google.common.collect.Ordering;
import java.util.Collection;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawableHelper;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.hud.InGameHud;
import net.minecraft.client.resource.language.I18n;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.effect.StatusEffect;
import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.util.math.MathHelper;
Expand All @@ -19,17 +19,15 @@
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import java.util.Collection;

// 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)
public abstract class StatusEffectTimerMixin extends DrawableHelper {
public abstract class StatusEffectTimerMixin {
@Shadow @Final
private MinecraftClient client;

@Inject(method = "renderStatusEffectOverlay", at = @At("TAIL"))
private void renderDurationOverlay(MatrixStack matrices, CallbackInfo c) {
private void renderDurationOverlay(DrawContext context, CallbackInfo c) {
Collection<StatusEffectInstance> collection = this.client.player.getStatusEffects();
if (!collection.isEmpty()) {
// Replicate vanilla placement algorithm to get the duration
Expand Down Expand Up @@ -58,14 +56,14 @@ private void renderDurationOverlay(MatrixStack matrices, CallbackInfo c) {

String duration = getDurationAsString(statusEffectInstance);
int durationLength = client.textRenderer.getWidth(duration);
drawStringWithShadow(matrices, client.textRenderer, duration, x + 13 - (durationLength / 2), y + 14, 0x99FFFFFF);
context.drawTextWithShadow(client.textRenderer, duration, x + 13 - (durationLength / 2), y + 14, 0x99FFFFFF);

int amplifier = statusEffectInstance.getAmplifier();
if (amplifier > 0) {
// Most langages has "translations" for amplifier 1-5, converting to roman numerals
String amplifierString = (amplifier < 6) ? I18n.translate("potion.potency." + amplifier) : "**";
// Convert to roman numerals if possible
String amplifierString = (amplifier < 10) ? I18n.translate("enchantment.level." + (amplifier + 1)) : "**";
int amplifierLength = client.textRenderer.getWidth(amplifierString);
drawStringWithShadow(matrices, client.textRenderer, amplifierString, x + 22 - amplifierLength, y + 3, 0x99FFFFFF);
context.drawTextWithShadow(client.textRenderer, amplifierString, x + 22 - amplifierLength, y + 3, 0x99FFFFFF);
}
}
}
Expand All @@ -74,13 +72,16 @@ private void renderDurationOverlay(MatrixStack matrices, CallbackInfo c) {

@NotNull
private String getDurationAsString(StatusEffectInstance statusEffectInstance) {
if (statusEffectInstance.isInfinite()) {
return I18n.translate("effect.duration.infinite");
}

int ticks = MathHelper.floor((float) statusEffectInstance.getDuration());
int seconds = ticks / 20;

if (ticks > 32147) {
// Vanilla considers everything above this to be infinite
return "**";
} else if (seconds > 60) {
if (seconds >= 3600) {
return seconds / 3600 + "h";
} else if (seconds >= 60) {
return seconds / 60 + "m";
} else {
return String.valueOf(seconds);
Expand Down
2 changes: 1 addition & 1 deletion src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,6 @@

"depends": {
"fabricloader": ">=0.7.4",
"minecraft": "~1.19"
"minecraft": "~1.20"
}
}

0 comments on commit 4a98916

Please sign in to comment.