完善过热条HUD,移除耐久条位置的过热条

This commit is contained in:
17146 2025-07-14 18:14:50 +08:00 committed by Light_Quanta
parent cdc7971afd
commit 3eeb8795d3
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
3 changed files with 17 additions and 39 deletions

View file

@ -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;
}
}

View file

@ -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;

View file

@ -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<SoundEvent> getReloadSound() {
return Set.of(ModSounds.HOMEMADE_SHOTGUN_RELOAD_EMPTY.get(), ModSounds.HOMEMADE_SHOTGUN_NORMAL.get());