From 2a5e2f082824f3e7f96f076653747c26076befe7 Mon Sep 17 00:00:00 2001 From: cheaterpaul Date: Sat, 25 May 2024 13:41:48 +0200 Subject: [PATCH] add overlays to blood charged items and tech crossbows --- .../vampirism/api/client/VIngameOverlays.java | 8 +++ .../vampirism/api/items/IBloodChargeable.java | 5 +- .../vampirism/client/core/ModScreens.java | 2 + .../gui/overlay/BloodChargedOverlay.java | 38 ++++++++++++++ .../client/gui/overlay/HeldItemOverlay.java | 30 +++++++++++ .../overlay/TechCrossbowChargedOverlay.java | 48 ++++++++++++++++++ .../vampirism/items/VampireSwordItem.java | 10 ---- .../textures/gui/sprites/widget/arrow.png | Bin 0 -> 603 bytes .../textures/gui/sprites/widget/arrows.png | Bin 0 -> 13156 bytes .../textures/gui/sprites/widget/blood_bar.png | Bin 0 -> 618 bytes .../gui/sprites/widget/blood_bar.png.mcmeta | 10 ++++ .../gui/sprites/widget/blood_bar_content.png | Bin 0 -> 608 bytes .../widget/blood_bar_content.png.mcmeta | 10 ++++ 13 files changed, 150 insertions(+), 11 deletions(-) create mode 100644 src/main/java/de/teamlapen/vampirism/client/gui/overlay/BloodChargedOverlay.java create mode 100644 src/main/java/de/teamlapen/vampirism/client/gui/overlay/HeldItemOverlay.java create mode 100644 src/main/java/de/teamlapen/vampirism/client/gui/overlay/TechCrossbowChargedOverlay.java create mode 100644 src/main/resources/assets/vampirism/textures/gui/sprites/widget/arrow.png create mode 100644 src/main/resources/assets/vampirism/textures/gui/sprites/widget/arrows.png create mode 100644 src/main/resources/assets/vampirism/textures/gui/sprites/widget/blood_bar.png create mode 100644 src/main/resources/assets/vampirism/textures/gui/sprites/widget/blood_bar.png.mcmeta create mode 100644 src/main/resources/assets/vampirism/textures/gui/sprites/widget/blood_bar_content.png create mode 100644 src/main/resources/assets/vampirism/textures/gui/sprites/widget/blood_bar_content.png.mcmeta diff --git a/src/api/java/de/teamlapen/vampirism/api/client/VIngameOverlays.java b/src/api/java/de/teamlapen/vampirism/api/client/VIngameOverlays.java index d723306fb9..ac2ea24086 100644 --- a/src/api/java/de/teamlapen/vampirism/api/client/VIngameOverlays.java +++ b/src/api/java/de/teamlapen/vampirism/api/client/VIngameOverlays.java @@ -48,4 +48,12 @@ public class VIngameOverlays { public static final ResourceLocation BAT = VResourceLocation.mod("bat"); public static final ResourceLocation DISGUISE = VResourceLocation.mod("disguise"); public static final ResourceLocation SUN = VResourceLocation.mod("sun"); + /** + * Horizontal blood bar overlay for each held item + */ + public static final ResourceLocation BLOOD_CHARGED = VResourceLocation.mod("blood_charged"); + /** + * Vertical charged crossbow bolts overlay for each held item + */ + public static final ResourceLocation TECH_CROSSBOW_CHARGED = VResourceLocation.mod("tech_crossbow_charged"); } diff --git a/src/api/java/de/teamlapen/vampirism/api/items/IBloodChargeable.java b/src/api/java/de/teamlapen/vampirism/api/items/IBloodChargeable.java index 589d0e354d..91a9f903e5 100644 --- a/src/api/java/de/teamlapen/vampirism/api/items/IBloodChargeable.java +++ b/src/api/java/de/teamlapen/vampirism/api/items/IBloodChargeable.java @@ -1,5 +1,7 @@ package de.teamlapen.vampirism.api.items; +import de.teamlapen.vampirism.api.VampirismDataComponents; +import de.teamlapen.vampirism.api.components.IBloodCharged; import net.minecraft.world.item.ItemStack; public interface IBloodChargeable { @@ -26,6 +28,7 @@ public interface IBloodChargeable { * @return the charge percentage of the item */ default float getChargePercentage(ItemStack stack) { - return canBeCharged(stack) ? 0 : 1; + IBloodCharged bloodCharge = stack.get(VampirismDataComponents.BLOOD_CHARGED.get()); + return bloodCharge != null ? bloodCharge.charged() : 0; } } diff --git a/src/main/java/de/teamlapen/vampirism/client/core/ModScreens.java b/src/main/java/de/teamlapen/vampirism/client/core/ModScreens.java index 748737bf57..332f9100a6 100644 --- a/src/main/java/de/teamlapen/vampirism/client/core/ModScreens.java +++ b/src/main/java/de/teamlapen/vampirism/client/core/ModScreens.java @@ -46,5 +46,7 @@ static void registerScreenOverlays(@NotNull RegisterGuiLayersEvent event) { event.registerAbove(VanillaGuiLayers.CAMERA_OVERLAYS, VIngameOverlays.BAT, new BatOverlay()); event.registerAbove(VanillaGuiLayers.CAMERA_OVERLAYS, VIngameOverlays.DISGUISE, new DisguiseOverlay()); event.registerAbove(VanillaGuiLayers.CAMERA_OVERLAYS, VIngameOverlays.SUN, new SunOverlay()); + event.registerAboveAll(VIngameOverlays.BLOOD_CHARGED, new BloodChargedOverlay()); + event.registerAboveAll(VIngameOverlays.TECH_CROSSBOW_CHARGED, new TechCrossbowChargedOverlay()); } } diff --git a/src/main/java/de/teamlapen/vampirism/client/gui/overlay/BloodChargedOverlay.java b/src/main/java/de/teamlapen/vampirism/client/gui/overlay/BloodChargedOverlay.java new file mode 100644 index 0000000000..388c9738e8 --- /dev/null +++ b/src/main/java/de/teamlapen/vampirism/client/gui/overlay/BloodChargedOverlay.java @@ -0,0 +1,38 @@ +package de.teamlapen.vampirism.client.gui.overlay; + +import de.teamlapen.vampirism.api.items.IBloodChargeable; +import de.teamlapen.vampirism.api.util.VResourceLocation; +import net.minecraft.client.DeltaTracker; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.NotNull; + +public class BloodChargedOverlay extends HeldItemOverlay { + + public static final ResourceLocation OUTER = VResourceLocation.mod("widget/blood_bar"); + public static final ResourceLocation INNER = VResourceLocation.mod( "widget/blood_bar_content"); + private static final int WIDTH = 90; + private static final int HEIGHT = 12; + + @Override + protected void renderMainHand(@NotNull GuiGraphics pGuiGraphics, @NotNull DeltaTracker deltaTracker, ItemStack stack) { + if (stack.getItem() instanceof IBloodChargeable item) { + int y = pGuiGraphics.guiHeight() - 45; + int x = pGuiGraphics.guiWidth() / 2 + 91; + x = (x + (pGuiGraphics.guiWidth() - x) / 2) - WIDTH/2; + pGuiGraphics.blitSprite(OUTER, x, y, WIDTH, HEIGHT); + pGuiGraphics.blitSprite(INNER, x, y, (int) (WIDTH * item.getChargePercentage(stack)), HEIGHT); + } + } + + @Override + protected void renderOffHand(@NotNull GuiGraphics pGuiGraphics, @NotNull DeltaTracker deltaTracker, ItemStack stack) { + if (stack.getItem() instanceof IBloodChargeable item) { + int y = pGuiGraphics.guiHeight() - 45; + int x = (pGuiGraphics.guiWidth() / 2 - 91) / 2 - WIDTH/2; + pGuiGraphics.blitSprite(OUTER, x, y, WIDTH, HEIGHT); + pGuiGraphics.blitSprite(INNER, x, y, (int) (WIDTH * item.getChargePercentage(stack)), HEIGHT); + } + } +} diff --git a/src/main/java/de/teamlapen/vampirism/client/gui/overlay/HeldItemOverlay.java b/src/main/java/de/teamlapen/vampirism/client/gui/overlay/HeldItemOverlay.java new file mode 100644 index 0000000000..bda2da117a --- /dev/null +++ b/src/main/java/de/teamlapen/vampirism/client/gui/overlay/HeldItemOverlay.java @@ -0,0 +1,30 @@ +package de.teamlapen.vampirism.client.gui.overlay; + +import net.minecraft.client.DeltaTracker; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.LayeredDraw; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.item.ItemStack; +import org.jetbrains.annotations.NotNull; + +public abstract class HeldItemOverlay implements LayeredDraw.Layer { + + protected final Minecraft mc = Minecraft.getInstance(); + + @Override + public void render(@NotNull GuiGraphics pGuiGraphics, @NotNull DeltaTracker deltaTracker) { + LocalPlayer player = mc.player; + ItemStack mainItem = player.getItemInHand(InteractionHand.MAIN_HAND); + ItemStack offHand = player.getItemInHand(InteractionHand.OFF_HAND); + + renderMainHand(pGuiGraphics, deltaTracker, mainItem); + + renderOffHand(pGuiGraphics, deltaTracker, offHand); + } + + protected abstract void renderMainHand(@NotNull GuiGraphics pGuiGraphics, @NotNull DeltaTracker deltaTracker, ItemStack stack); + + protected abstract void renderOffHand(@NotNull GuiGraphics pGuiGraphics, @NotNull DeltaTracker deltaTracker, ItemStack stack); +} diff --git a/src/main/java/de/teamlapen/vampirism/client/gui/overlay/TechCrossbowChargedOverlay.java b/src/main/java/de/teamlapen/vampirism/client/gui/overlay/TechCrossbowChargedOverlay.java new file mode 100644 index 0000000000..037cc847ca --- /dev/null +++ b/src/main/java/de/teamlapen/vampirism/client/gui/overlay/TechCrossbowChargedOverlay.java @@ -0,0 +1,48 @@ +package de.teamlapen.vampirism.client.gui.overlay; + +import de.teamlapen.vampirism.api.util.VResourceLocation; +import de.teamlapen.vampirism.items.crossbow.TechCrossbowItem; +import net.minecraft.client.DeltaTracker; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.core.component.DataComponents; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.ChargedProjectiles; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class TechCrossbowChargedOverlay extends HeldItemOverlay { + public static final ResourceLocation OUTER = VResourceLocation.mod("widget/arrow"); + public static final ResourceLocation INNER = VResourceLocation.mc("widget/arrows"); + private final Minecraft mc = Minecraft.getInstance(); + + @Override + protected void renderMainHand(@NotNull GuiGraphics pGuiGraphics, @NotNull DeltaTracker deltaTracker, ItemStack stack) { + if (stack.getItem() instanceof TechCrossbowItem) { + List projectiles = stack.getOrDefault(DataComponents.CHARGED_PROJECTILES, ChargedProjectiles.EMPTY).getItems(); + int x = pGuiGraphics.guiWidth() - 30; + int y = pGuiGraphics.guiHeight() - 60; + pGuiGraphics.blitSprite(OUTER, x, y, 20, 20); + if (projectiles.size() > 0) { + pGuiGraphics.blitSprite(INNER, 15,37 , 0,0, x + 3, y - 3 * projectiles.size() + 13, 15, 3 * projectiles.size()); + } + pGuiGraphics.drawString(mc.font, String.valueOf(projectiles.size()), x + 8, y + 12, -1, false); + } + } + + @Override + protected void renderOffHand(@NotNull GuiGraphics pGuiGraphics, @NotNull DeltaTracker deltaTracker, ItemStack stack) { + if (stack.getItem() instanceof TechCrossbowItem) { + List projectiles = stack.getOrDefault(DataComponents.CHARGED_PROJECTILES, ChargedProjectiles.EMPTY).getItems(); + int x = 15; + int y = pGuiGraphics.guiHeight() - 60; + pGuiGraphics.blitSprite(OUTER, x, y, 20, 20); + if (projectiles.size() > 0) { + pGuiGraphics.blitSprite(INNER, 15,37 , 0,0, x + 3, y - 3 * projectiles.size() + 13, 15, 3 * projectiles.size()); + } + pGuiGraphics.drawString(mc.font, String.valueOf(projectiles.size()), x + 8, y + 12, -1, false); + } + } +} diff --git a/src/main/java/de/teamlapen/vampirism/items/VampireSwordItem.java b/src/main/java/de/teamlapen/vampirism/items/VampireSwordItem.java index 7f5dbbc081..e796cd7439 100644 --- a/src/main/java/de/teamlapen/vampirism/items/VampireSwordItem.java +++ b/src/main/java/de/teamlapen/vampirism/items/VampireSwordItem.java @@ -277,16 +277,6 @@ protected float getSpeedModifier(@NotNull ItemStack stack) { */ protected abstract float getChargeUsage(); - /** - * Gets the charged value from the tag compound - * - * @return Value between 0 and 1 - */ - @Override - public float getChargePercentage(@NotNull ItemStack stack) { - return stack.getOrDefault(ModDataComponents.BLOOD_CHARGED, BloodCharged.EMPTY).charged(); - } - /** * @return Charging factor multiplied with amount to get charge percentage */ diff --git a/src/main/resources/assets/vampirism/textures/gui/sprites/widget/arrow.png b/src/main/resources/assets/vampirism/textures/gui/sprites/widget/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..64901f1e958715e1a27aaffa2d64e1abf1d1d936 GIT binary patch literal 603 zcmV-h0;K(kP)EX>4Tx04R}tkv&MmKpe$iQ;Sk64t7vc%ut=|q9Ts93Pq?;YK2xEOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY7Kg)$ED^s%9DK zL|n|~R>kgD1TcsoMldQdQ=dzvlJFc~_we!cF3PjK&;2=imAuISpGX{Ix?vG-5YKE{ zI_G`jFe^z4@j3B?K^G)`eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{001*dL_t(I%VR7nE&b0xMZm;BWxxVsbai(#QeqIyr&M?0 psDYyf4od?W2Yul%YTzI=5CF>N2gH{F@ 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 G{C@zWFopjB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/vampirism/textures/gui/sprites/widget/blood_bar.png b/src/main/resources/assets/vampirism/textures/gui/sprites/widget/blood_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..ff164e9f5083b58a2730a9858a28426c80075cf1 GIT binary patch literal 618 zcmV-w0+s!VP)000aK1^@s6Dic6H0004mX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$iQ;Sk64t7vc%ut=|q9Ts93Pq?;YK2xEOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY7Kg)$ED^s%9DK zL|n|~R>kgD1TcsoMldQdQ=dzvlJFc~_we!cF3PjK&;2=imAuISpGX{Ix?vG-5YKE{ zI_G`jFe^z4@j3B?K^G)`eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{002TsL_t(Y$74LPkMlpnC?Efi((71B(Q}INE|AO<6Pn0NU0GH8}`WVgLXD07*qoM6N<$ Ef-`IPx&QzG literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/vampirism/textures/gui/sprites/widget/blood_bar.png.mcmeta b/src/main/resources/assets/vampirism/textures/gui/sprites/widget/blood_bar.png.mcmeta new file mode 100644 index 0000000000..9d678f6f5e --- /dev/null +++ b/src/main/resources/assets/vampirism/textures/gui/sprites/widget/blood_bar.png.mcmeta @@ -0,0 +1,10 @@ +{ + "gui": { + "scaling": { + "type": "nine_slice", + "width": 75, + "height": 12, + "border": 3 + } + } +} diff --git a/src/main/resources/assets/vampirism/textures/gui/sprites/widget/blood_bar_content.png b/src/main/resources/assets/vampirism/textures/gui/sprites/widget/blood_bar_content.png new file mode 100644 index 0000000000000000000000000000000000000000..2bbf7df2c2ca54459047f6d1beaa5ffd3638d4b8 GIT binary patch literal 608 zcmV-m0-ybfP)000aK1^@s6Dic6H0004mX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmKpe$iQ;Sk64t7vc%ut=|q9Ts93Pq?;YK2xEOfLO`CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY7Kg)$ED^s%9DK zL|n|~R>kgD1TcsoMldQdQ=dzvlJFc~_we!cF3PjK&;2=imAuISpGX{Ix?vG-5YKE{ zI_G`jFe^z4@j3B?K^G)`eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{001~iL_t(Y$L-J|0stTkfIw!l?Eep4v1zgyENfgM15$^$ uu`;(i-ey$*3|IVfmb0AYEN3}OQjY^TAp{V&1gpsa0000