diff --git a/src/main/java/com/atsuishio/superbwarfare/client/overlay/HeatBarOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/overlay/HeatBarOverlay.java index 98ff8637d..23da796ed 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/HeatBarOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/HeatBarOverlay.java @@ -14,6 +14,7 @@ import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.LayeredDraw; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.neoforged.api.distmarker.Dist; @@ -68,8 +69,12 @@ public class HeatBarOverlay implements LayeredDraw.Layer { float rate = (float) (heat / 100.0); float barHeight = 56 * rate; + poseStack.pushPose(); + RenderHelper.preciseBlit(guiGraphics, TEXTURE, posX + 2.5f, posY + 1.5f + 56 - barHeight, - 10.5f, 0, 2.25f, barHeight, width, height); + 10.5f, 0, 2.25f, barHeight, width, height, rate >= 0.795f ? calculateGradientColor(rate) : 0xFFFFFF); + + poseStack.popPose(); RenderSystem.depthMask(true); RenderSystem.defaultBlendFunc(); @@ -79,4 +84,15 @@ public class HeatBarOverlay implements LayeredDraw.Layer { poseStack.popPose(); } + + public static int calculateGradientColor(float rate) { + float clampedRate = Mth.clamp(rate, 0.795f, 1.0f); + float normalized = (clampedRate - 0.795f) / (1.0f - 0.795f); + + int red = 255; + int green = (int) (255 * (1 - normalized)); + int blue = (int) (255 * (1 - normalized)); + + return (red << 16) | (green << 8) | blue; + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java index 737435697..4c0667797 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java @@ -81,25 +81,6 @@ public abstract class GunItem extends Item implements CustomRendererItem, GeoIte return this.cache; } - @Override - public boolean isBarVisible(@NotNull ItemStack stack) { - var data = GunData.from(stack); - return data.heat.get() != 0; - } - - @Override - public int getBarWidth(@NotNull ItemStack stack) { - var data = GunData.from(stack); - return Math.round((float) data.heat.get() * 13.0F / 100F); - } - - @Override - public int getBarColor(@NotNull ItemStack stack) { - var data = GunData.from(stack); - double f = 1 - data.heat.get() / 100.0F; - return Mth.hsvToRgb((float) f / 3.0F, 1.0F, 1.0F); - } - @Override public boolean isPerspectiveAware() { return true; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/HomemadeShotgunItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/HomemadeShotgunItem.java index 07d6583a4..326dfa94b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/HomemadeShotgunItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/shotgun/HomemadeShotgunItem.java @@ -15,13 +15,11 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvent; -import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; -import org.jetbrains.annotations.NotNull; import software.bernie.geckolib.animation.*; import software.bernie.geckolib.constant.DataTickets; import software.bernie.geckolib.renderer.GeoItemRenderer; @@ -35,23 +33,6 @@ public class HomemadeShotgunItem extends GunItem { super(new Item.Properties().durability(24).rarity(Rarity.COMMON)); } - @Override - public boolean isBarVisible(@NotNull ItemStack stack) { - return stack.isDamaged(); - } - - @Override - public int getBarWidth(@NotNull ItemStack pStack) { - return Math.round(13.0F - (float) pStack.getDamageValue() * 13.0F / (float) this.getMaxDamage(pStack)); - } - - @Override - public int getBarColor(@NotNull ItemStack pStack) { - float stackMaxDamage = this.getMaxDamage(pStack); - float f = Math.max(0.0F, (stackMaxDamage - (float) pStack.getDamageValue()) / stackMaxDamage); - return Mth.hsvToRgb(f / 3.0F, 1.0F, 1.0F); - } - @Override public Set getReloadSound() { return Set.of(ModSounds.HOMEMADE_SHOTGUN_RELOAD_EMPTY.get(), ModSounds.HOMEMADE_SHOTGUN_NORMAL.get());