package WayofTime.bloodmagic.client.hud; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.client.Sprite; import WayofTime.bloodmagic.client.hud.element.ElementDemonAura; import WayofTime.bloodmagic.client.hud.element.ElementDivinedInformation; import WayofTime.bloodmagic.client.hud.element.ElementHolding; import WayofTime.bloodmagic.tile.TileAltar; import WayofTime.bloodmagic.tile.TileIncenseAltar; import WayofTime.bloodmagic.tile.TileInversionPillar; import WayofTime.bloodmagic.util.helper.NumeralHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ScaledResolution; import net.minecraft.client.resources.I18n; import net.minecraft.util.ResourceLocation; import org.apache.commons.lang3.tuple.Pair; import javax.vecmath.Vector2f; import java.awt.Point; import java.util.function.Consumer; import java.util.function.Function; public class Elements { public static void registerElements() { ElementRegistry.registerHandler( new ResourceLocation(BloodMagic.MODID, "blood_altar"), new ElementDivinedInformation(2, true, TileAltar.class) { @Override public void gatherInformation(Consumer>> information) { // Current tier information.accept(Pair.of( new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 0, 46, 16, 16), altar -> altar == null ? "IV" : NumeralHelper.toRoman(altar.getTier().toInt()) )); // Stored/Capacity information.accept(Pair.of( new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 16, 46, 16, 16), altar -> String.format("%d/%d", altar == null ? 0 : altar.getCurrentBlood(), altar == null ? 10000 : altar.getCapacity()) )); } }, new Vector2f(0.01F, 0.01F) ); ElementRegistry.registerHandler( new ResourceLocation(BloodMagic.MODID, "blood_altar_adv"), new ElementDivinedInformation(5, false, TileAltar.class) { @Override public void gatherInformation(Consumer>> information) { // Current tier information.accept(Pair.of( new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 0, 46, 16, 16), altar -> altar == null ? "IV" : NumeralHelper.toRoman(altar.getTier().toInt()) )); // Stored/Capacity information.accept(Pair.of( new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 16, 46, 16, 16), altar -> String.format("%d/%d", altar == null ? 0 : altar.getCurrentBlood(), altar == null ? 10000 : altar.getCapacity()) )); // Crafting progress/Crafting requirement information.accept(Pair.of( new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 32, 46, 16, 16), altar -> { if (altar == null || !altar.isActive()) return I18n.format("hud.bloodmagic.inactive"); int progress = altar.getProgress(); int totalLiquidRequired = altar.getLiquidRequired() * altar.getStackInSlot(0).getCount(); return String.format("%d/%d", progress, totalLiquidRequired); } )); // Consumption rate information.accept(Pair.of( new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 48, 46, 16, 16), altar -> altar == null ? "0" : String.valueOf((int) (altar.getConsumptionRate() * (altar.getConsumptionMultiplier() + 1))) )); // Total charge information.accept(Pair.of( new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 64, 46, 16, 16), altar -> altar == null ? "0" : String.valueOf(altar.getTotalCharge()) )); } }, new Vector2f(0.01F, 0.01F) ); ElementRegistry.registerHandler( new ResourceLocation(BloodMagic.MODID, "incense_altar"), new ElementDivinedInformation(2, true, TileIncenseAltar.class) { @Override public void gatherInformation(Consumer>> information) { // Current tranquility information.accept(Pair.of( new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 80, 46, 16, 16), incense -> incense == null ? "0" : String.valueOf((int) ((100D * (int) (100 * incense.tranquility)) / 100D)) )); // Sacrifice bonus information.accept(Pair.of( new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 96, 46, 16, 16), incense -> incense == null ? "0" : String.valueOf((int) (100 * incense.incenseAddition)) )); } }, new Vector2f(0.01F, 0.01F) ); ElementRegistry.registerHandler( new ResourceLocation(BloodMagic.MODID, "inversion_pillar"), new ElementDivinedInformation(1, true, TileInversionPillar.class) { @Override public void gatherInformation(Consumer>> information) { // Current inversion information.accept(Pair.of( new Sprite(new ResourceLocation(BloodMagic.MODID, "textures/gui/widgets.png"), 112, 46, 16, 16), pillar -> pillar == null ? "0" : String.valueOf(((int) (10 * pillar.getCurrentInversion())) / 10D) )); } }, new Vector2f(0.01F, 0.01F) ); ElementRegistry.registerHandler( new ResourceLocation(BloodMagic.MODID, "demon_will_aura"), new ElementDemonAura(), new Vector2f(0.01F, 0.01F) ); ElementRegistry.registerHandler( new ResourceLocation(BloodMagic.MODID, "holding"), new ElementHolding(), new Vector2f(0.72F, 1.0F) ); ElementRegistry.readConfig(); } }