完善过热条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.gui.LayeredDraw;
|
||||||
import net.minecraft.client.renderer.GameRenderer;
|
import net.minecraft.client.renderer.GameRenderer;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import net.minecraft.util.Mth;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.neoforged.api.distmarker.Dist;
|
import net.neoforged.api.distmarker.Dist;
|
||||||
|
@ -68,8 +69,12 @@ public class HeatBarOverlay implements LayeredDraw.Layer {
|
||||||
float rate = (float) (heat / 100.0);
|
float rate = (float) (heat / 100.0);
|
||||||
float barHeight = 56 * rate;
|
float barHeight = 56 * rate;
|
||||||
|
|
||||||
|
poseStack.pushPose();
|
||||||
|
|
||||||
RenderHelper.preciseBlit(guiGraphics, TEXTURE, posX + 2.5f, posY + 1.5f + 56 - barHeight,
|
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.depthMask(true);
|
||||||
RenderSystem.defaultBlendFunc();
|
RenderSystem.defaultBlendFunc();
|
||||||
|
@ -79,4 +84,15 @@ public class HeatBarOverlay implements LayeredDraw.Layer {
|
||||||
|
|
||||||
poseStack.popPose();
|
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;
|
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
|
@Override
|
||||||
public boolean isPerspectiveAware() {
|
public boolean isPerspectiveAware() {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -15,13 +15,11 @@ import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.sounds.SoundEvent;
|
import net.minecraft.sounds.SoundEvent;
|
||||||
import net.minecraft.util.Mth;
|
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.world.item.ItemDisplayContext;
|
import net.minecraft.world.item.ItemDisplayContext;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.Rarity;
|
import net.minecraft.world.item.Rarity;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import software.bernie.geckolib.animation.*;
|
import software.bernie.geckolib.animation.*;
|
||||||
import software.bernie.geckolib.constant.DataTickets;
|
import software.bernie.geckolib.constant.DataTickets;
|
||||||
import software.bernie.geckolib.renderer.GeoItemRenderer;
|
import software.bernie.geckolib.renderer.GeoItemRenderer;
|
||||||
|
@ -35,23 +33,6 @@ public class HomemadeShotgunItem extends GunItem {
|
||||||
super(new Item.Properties().durability(24).rarity(Rarity.COMMON));
|
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
|
@Override
|
||||||
public Set<SoundEvent> getReloadSound() {
|
public Set<SoundEvent> getReloadSound() {
|
||||||
return Set.of(ModSounds.HOMEMADE_SHOTGUN_RELOAD_EMPTY.get(), ModSounds.HOMEMADE_SHOTGUN_NORMAL.get());
|
return Set.of(ModSounds.HOMEMADE_SHOTGUN_RELOAD_EMPTY.get(), ModSounds.HOMEMADE_SHOTGUN_NORMAL.get());
|
||||||
|
|
Loading…
Add table
Reference in a new issue