Skip to content

Commit

Permalink
Initial Work on a Soul Network HUD
Browse files Browse the repository at this point in the history
Tweaked the bars.png texture to make the red LP bar opaque.

Added `NetworkHelper.canPlayerSeeSoulNetwork()`.

Created ISoulNetworkViewer Interface.  Made ItemSigilDivination implement it.

Added ElementSoulNetwork to render the Soul Network HUD.  Registered in Elements.
  • Loading branch information
VT-14 committed Oct 3, 2023
1 parent 660a4aa commit 7994c0a
Show file tree
Hide file tree
Showing 6 changed files with 100 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package wayoftime.bloodmagic.api.compat;

import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;

/**
* Interface for Items that allow players to see their Soul Network HUD.
*/
public interface ISoulNetworkViewer
{
boolean canSeeDemonSoulNetwork(Level level, ItemStack stack, Player player);

int getSoulNetworkResolution(Level level, ItemStack stack, Player player);
}
5 changes: 5 additions & 0 deletions src/main/java/wayoftime/bloodmagic/client/hud/Elements.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.util.function.Consumer;
import java.util.function.Function;

import com.mojang.blaze3d.platform.GlStateManager;
import org.apache.commons.lang3.tuple.Pair;

import net.minecraft.client.resources.language.I18n;
Expand All @@ -13,6 +14,7 @@
import wayoftime.bloodmagic.client.hud.element.ElementDemonAura;
import wayoftime.bloodmagic.client.hud.element.ElementDivinedInformation;
import wayoftime.bloodmagic.client.hud.element.ElementHolding;
import wayoftime.bloodmagic.client.hud.element.ElementSoulNetwork;
import wayoftime.bloodmagic.common.tile.TileAltar;
import wayoftime.bloodmagic.common.tile.TileIncenseAltar;
import wayoftime.bloodmagic.util.helper.NumeralHelper;
Expand All @@ -21,7 +23,10 @@ public class Elements
{
public static void registerElements()
{
float screenHeight = (float) GlStateManager.Viewport.height();

ElementRegistry.registerHandler(new ResourceLocation(BloodMagic.MODID, "demon_will_aura"), new ElementDemonAura(), new Vec2(0.01f, 0.01f));
ElementRegistry.registerHandler(new ResourceLocation(BloodMagic.MODID, "soul_network"), new ElementSoulNetwork(), new Vec2(0.0f, 0.4f));

ElementRegistry.registerHandler(BloodMagic.rl("blood_altar"), new ElementDivinedInformation<TileAltar>(2, true, TileAltar.class)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package wayoftime.bloodmagic.client.hud.element;

import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Player;
import wayoftime.bloodmagic.BloodMagic;
import wayoftime.bloodmagic.core.data.SoulNetwork;
import wayoftime.bloodmagic.util.Utils;
import wayoftime.bloodmagic.util.helper.NetworkHelper;

public class ElementSoulNetwork extends HUDElement
{

private static final ResourceLocation BAR_LOCATION = new ResourceLocation(BloodMagic.MODID, "textures/hud/bars.png");
public ElementSoulNetwork() {super(36, 76);}

@Override
public void draw(GuiGraphics guiGraphics, float partialTicks, int drawX, int drawY)
{
drawX += 4; // Offset X to account for wider HUD Box.

Minecraft minecraft = Minecraft.getInstance();
Player player = minecraft.player;

guiGraphics.blit(BAR_LOCATION, drawX, drawY, 0, 78, 28, 70);

SoulNetwork soulNetwork = NetworkHelper.getSoulNetwork(player);
int maxOrb = NetworkHelper.getCurrentMaxOrb(soulNetwork);
int level = soulNetwork.getCurrentEssence();
int maxCapacity = NetworkHelper.getMaximumForTier(maxOrb);
int fillHeight = 61 * level / maxCapacity; // 60 would have the bar full at exactly 100%. Set to 61 so the bar
// is full slightly before the Soul Network is completely topped, so rituals don't flash the HUD.

guiGraphics.blit(BAR_LOCATION, drawX + 8, drawY + 66 - fillHeight, 32, 86 + (58 - fillHeight), 12, fillHeight);

if (player.isShiftKeyDown())
{
PoseStack poseStack = guiGraphics.pose();
poseStack.pushPose();
poseStack.translate(drawX + 14, drawY + 70, 0);
poseStack.scale(0.5f, 0.5f, 1f);
guiGraphics.drawCenteredString(minecraft.font, String.format("%,d LP", level), 0, 2, 0xffffffff);
poseStack.popPose();
}
}

@Override
public boolean shouldRender(Minecraft minecraft)
{
return NetworkHelper.canPlayerSeeSoulNetwork(Minecraft.getInstance().player);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import net.minecraftforge.api.distmarker.OnlyIn;
import wayoftime.bloodmagic.altar.IBloodAltar;
import wayoftime.bloodmagic.api.compat.IAltarReader;
import wayoftime.bloodmagic.api.compat.ISoulNetworkViewer;
import wayoftime.bloodmagic.client.hud.GuiEditHUD;
import wayoftime.bloodmagic.common.tile.TileIncenseAltar;
import wayoftime.bloodmagic.core.data.Binding;
Expand All @@ -28,7 +29,7 @@

import java.util.List;

public class ItemSigilDivination extends ItemSigilBase implements IAltarReader
public class ItemSigilDivination extends ItemSigilBase implements IAltarReader, ISoulNetworkViewer
{
private final boolean isSimple;

Expand Down Expand Up @@ -136,4 +137,10 @@ public void openEditHUDScreen()
{
Minecraft.getInstance().setScreen(new GuiEditHUD(null));
}

@Override
public boolean canSeeDemonSoulNetwork(Level world, ItemStack stack, Player player) {return !isSimple;}

@Override
public int getSoulNetworkResolution(Level world, ItemStack stack, Player player) {return 100;}
}
18 changes: 18 additions & 0 deletions src/main/java/wayoftime/bloodmagic/util/helper/NetworkHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,16 @@
import javax.annotation.Nullable;

import net.minecraft.core.BlockPos;
import net.minecraft.core.NonNullList;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.storage.DimensionDataStorage;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.server.ServerLifecycleHooks;
import org.jetbrains.annotations.NotNull;
import wayoftime.bloodmagic.api.compat.ISoulNetworkViewer;
import wayoftime.bloodmagic.common.item.BloodMagicItems;
import wayoftime.bloodmagic.common.item.BloodOrb;
import wayoftime.bloodmagic.common.item.IBindable;
import wayoftime.bloodmagic.common.item.IBloodOrb;
Expand Down Expand Up @@ -252,4 +257,17 @@ public static void incrementDungeonCounter()
dataHandler.setNumberOfDungeons(currentNumberOfDungeons + 1);
dataHandler.setDirty();
}

public static boolean canPlayerSeeSoulNetwork(Player player)
{
NonNullList<ItemStack> inventory = InventoryHelper.getActiveInventories(player);
for (ItemStack stack : inventory){
if ((stack.getItem() instanceof ISoulNetworkViewer) && ((ISoulNetworkViewer) stack.getItem()).canSeeDemonSoulNetwork(player.getCommandSenderWorld(), stack, player))
{
return true;
}
}

return false;
}
}
Binary file modified src/main/resources/assets/bloodmagic/textures/hud/bars.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 7994c0a

Please sign in to comment.