完善过热条HUD,移除耐久条位置的过热条
This commit is contained in:
parent
cdc7971afd
commit
3eeb8795d3
3 changed files with 17 additions and 39 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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());
|
||||
|
|
Loading…
Add table
Reference in a new issue