From 3eeb8795d3b555ed965f13eecf56bc57eac2f275 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Mon, 14 Jul 2025 18:14:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=BF=87=E7=83=AD=E6=9D=A1HU?= =?UTF-8?q?D=EF=BC=8C=E7=A7=BB=E9=99=A4=E8=80=90=E4=B9=85=E6=9D=A1?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=E7=9A=84=E8=BF=87=E7=83=AD=E6=9D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/overlay/HeatBarOverlay.java | 18 +++++++++++++++++- .../superbwarfare/item/gun/GunItem.java | 19 ------------------- .../item/gun/shotgun/HomemadeShotgunItem.java | 19 ------------------- 3 files changed, 17 insertions(+), 39 deletions(-) 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());