diff --git a/gradle.properties b/gradle.properties index c3e7c2d7..35553363 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ loader_version_range=[4,) mod_id=reliquary mod_name=Reliquary Reincarnations mod_license=All Rights Reserved -mod_version=2.0.45 +mod_version=2.0.46 mod_group_id=reliquary mod_authors=P3pp3rF1y mod_description=Two words: magical swag. Oh, and a gun. diff --git a/src/main/java/reliquary/client/gui/hud/CharmPane.java b/src/main/java/reliquary/client/gui/hud/CharmPane.java index cd2c2f08..eacfc47b 100644 --- a/src/main/java/reliquary/client/gui/hud/CharmPane.java +++ b/src/main/java/reliquary/client/gui/hud/CharmPane.java @@ -99,11 +99,14 @@ private static void removeExpiredMobCharms() { for (Iterator> iterator = charmsToDraw.entrySet().iterator(); iterator.hasNext(); ) { Map.Entry entry = iterator.next(); CharmToDraw charmToDraw = entry.getValue(); - if (Boolean.TRUE.equals(Config.COMMON.items.mobCharm.keepAlmostDestroyedDisplayed.get()) && charmToDraw.getCharm().getDamageValue() >= (charmToDraw.getCharm().getMaxDamage() * 0.9)) { - continue; + float percentToMaxDamage = 1 - (float) charmToDraw.getCharm().getDamageValue() / charmToDraw.getCharm().getMaxDamage(); + + int expirationDuration = secondsToExpire * 1000; + if (percentToMaxDamage < 0.1f) { + expirationDuration = (int) (expirationDuration + (expirationDuration * 2 * (1 - percentToMaxDamage * 10))); } - if (charmToDraw.time + secondsToExpire * 1000 < System.currentTimeMillis()) { + if (charmToDraw.time + expirationDuration < System.currentTimeMillis()) { iterator.remove(); changed = true; } diff --git a/src/main/java/reliquary/network/MobCharmDamagePayload.java b/src/main/java/reliquary/network/MobCharmDamagePayload.java index 97df80e5..3ce200a1 100644 --- a/src/main/java/reliquary/network/MobCharmDamagePayload.java +++ b/src/main/java/reliquary/network/MobCharmDamagePayload.java @@ -11,7 +11,7 @@ public record MobCharmDamagePayload(ItemStack mobCharm, int slot) implements CustomPacketPayload { public static final Type TYPE = new Type<>(Reliquary.getRL("mob_charm_damage")); public static final StreamCodec STREAM_CODEC = StreamCodec.composite( - ItemStack.STREAM_CODEC, + ItemStack.OPTIONAL_STREAM_CODEC, MobCharmDamagePayload::mobCharm, ByteBufCodecs.INT, MobCharmDamagePayload::slot, diff --git a/src/main/java/reliquary/reference/Config.java b/src/main/java/reliquary/reference/Config.java index 09e75f4a..ff7932df 100644 --- a/src/main/java/reliquary/reference/Config.java +++ b/src/main/java/reliquary/reference/Config.java @@ -880,7 +880,6 @@ public static class MobCharmSettings { public final IntValue dropDurabilityRepair; public final IntValue maxCharmsToDisplay; public final IntValue pedestalRange; - public final BooleanValue keepAlmostDestroyedDisplayed; @SuppressWarnings("java:S4968") // ? extends String is the type parameter returned from defineList so it can't be just String here public final ConfigValue> entityBlockList; @@ -911,9 +910,6 @@ public static class MobCharmSettings { .comment("Range in which mob charm or belt in pedestals will keep monsters from attacking players") .defineInRange("pedestalRange", 21, 10, 100); - keepAlmostDestroyedDisplayed = builder - .comment("Determines if almost destroyed charms stay displayed in the hud") - .define("keepAlmostDestroyedDisplayed", true); entityBlockList = builder .comment("List of hostile entities that are not supposed to have mob charms registered for them") .defineList("entityBlockList", this::getDefaultEntityBlockList, () -> BuiltInRegistries.ENTITY_TYPE.getKey(EntityType.ZOMBIE).toString() , entityName -> ((String) entityName).matches(REGISTRY_NAME_MATCHER));