Compare commits

...

22 Commits

Author SHA1 Message Date
Markil3
929aeec7ba Gets ready for release 1.1 2021-04-01 12:57:15 -06:00
Markil3
2eff4a4bb2 Adds the ability to always show hands and crosshairs.
Apparently, @rflambert doesn't want the hands to fade. It seemed like a good idea, so I added a configurable option to the main repo.
2021-03-26 11:25:55 -06:00
Markil3
83d17c1037 Catches any errors that occur when triggering events.
It is pretty annoying for the game to crash because of a GUI mod. This should reduce that.
2021-03-26 10:24:23 -06:00
Markil3
b2329a34a9 Fixes a ClassCastException (#1) 2021-03-25 17:11:44 -06:00
Markil3
be64f84832 Sets up for Fabric 1.14
Note that we had to remove the modmenu and cloth APIs, since we couldn't figure out how to get the dependency mess to work. Maybe we will fix it later, but at least the .toml config file still works.
2021-03-03 08:26:28 -07:00
Markil3
238d32a27a Fixes the configuration code not triggering. 2021-03-02 15:32:01 -07:00
Markil3
30d3eb9880 Stabilizes the mod for 1.15 2021-03-02 15:28:37 -07:00
Markil3
b9d0d3eaf9 Sets the mod to use 1.15 2021-03-02 15:28:16 -07:00
Markil3
d2252917b6 Gets ready for version 1.0 release. 2021-03-02 11:26:32 -07:00
Markil3
95111de1aa Updates the URLs to point to the appropriate locations. 2021-03-02 11:26:06 -07:00
Markil3
7be634fc47 Makes both the Cloth and the ModMenu APIs optional.
We want users to be able to use this with as few dependencies as possible.
2021-03-02 11:18:20 -07:00
Markil3
ddd266a0ab Removes the Fabric API dependency.
We didn't need it.
2021-03-02 11:11:45 -07:00
Markil3
c560e50288 Adjusts the health and hunger to always show under wither, poison, and hunger. 2021-03-02 10:41:53 -07:00
Markil3
fb52f20d14 Tweaks potions some more 2021-03-02 10:35:45 -07:00
Markil3
8798691dc0 Moves the status bar adjustments to HudHook
They really do belong there. Hooking into the profiler was just a crutch.
2021-03-02 10:27:29 -07:00
Markil3
37df8eef93 Removed the need for the "name" field.
It kept getting picked up by the autoconfig API.
2021-03-02 10:07:51 -07:00
Markil3
9cd7488f67 Adds support for configuring the timings via Clith Config and Mod Menu. 2021-03-02 09:42:28 -07:00
Markil3
3b42b1729d Makes the hotbar and experience/jump bars slide in and out. 2021-03-01 18:54:47 -07:00
Markil3
1bf31b7bcd Makes potion icons fade over time 2021-03-01 17:18:41 -07:00
Markil3
b66a152603 Locks down some fieldsso that they are now private. 2021-02-27 09:18:29 -07:00
Markil3
a54ec64baa Renames EventBus to TimerUtils.
It makes more sense.
2021-02-27 09:17:14 -07:00
Markil3
c11bf47f17 Makes some changes to make the methods here resemble that of the Forge implementation more. 2021-02-27 09:15:37 -07:00
13 changed files with 1496 additions and 424 deletions

View File

@@ -1,5 +1,5 @@
plugins { plugins {
id 'fabric-loom' version '0.5-SNAPSHOT' id 'fabric-loom' version '0.6-SNAPSHOT'
id 'maven-publish' id 'maven-publish'
} }
@@ -11,11 +11,8 @@ version = project.mod_version + "-" + project.minecraft_version + "-fabric"
group = project.maven_group group = project.maven_group
repositories { repositories {
// Add repositories to retrieve artifacts from in here. maven { url "https://maven.shedaniel.me/" }
// You should only use this when depending on other mods because maven { url "https://maven.terraformersmc.com/" }
// Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
// See https://docs.gradle.org/current/userguide/declaring_repositories.html
// for more information about repositories.
} }
dependencies { dependencies {
@@ -24,8 +21,9 @@ dependencies {
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
// Fabric API. This is technically optional, but you probably want it anyway. // modApi "me.shedaniel.cloth:config-2:${project.cloth_version}"
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" modApi "me.sargunvohra.mcmods:autoconfig1u:${project.autoconfig_version}"
// modImplementation "io.github.prospector:modmenu:${project.modmenu_version}"
// PSA: Some older mods, compiled on Loom 0.2.1, might have outdated Maven POMs. // PSA: Some older mods, compiled on Loom 0.2.1, might have outdated Maven POMs.
// You may need to force-disable transitiveness on them. // You may need to force-disable transitiveness on them.

View File

@@ -3,15 +3,15 @@ org.gradle.jvmargs=-Xmx1G
# Fabric Properties # Fabric Properties
# check these on https://fabricmc.net/use # check these on https://fabricmc.net/use
minecraft_version=1.16.4 minecraft_version=1.14.3
yarn_mappings=1.16.4+build.9 yarn_mappings=1.14.3+build.13
loader_version=0.11.1 loader_version=0.11.2
cloth_version=2.9.3
modmenu_version=1.6.3-95
autoconfig_version=2.2.0
# Mod Properties # Mod Properties
mod_version = 0.1 mod_version = 1.1
maven_group = markil3 maven_group = markil3
archives_base_name = immersive_hud archives_base_name = immersive_hud
# Dependencies
# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api
fabric_version=0.30.3+1.16

View File

@@ -0,0 +1,331 @@
package markil3.immersive_hud;
import net.minecraft.util.math.MathHelper;
//import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
import static markil3.immersive_hud.Main.TICKS_PER_SECOND;
/**
* Configuration manager of this mod, which reads from and writes to this mod's
* configuration file.
* <p>
* The methods that change this mod's configuration do not automatically write
* those changes to the configuration file on disk. Instead, they only update
* the configuration in memory.
*
* @author Markil 3
*/
public class ConfigManager
{
public static class TimeValues
{
private static final int SHOW_TIME = 6 * TICKS_PER_SECOND;
private static final int FADE_IN = TICKS_PER_SECOND / 2;
private static final int FADE_OUT = TICKS_PER_SECOND;
private int maxTime = SHOW_TIME;
private int fadeIn = FADE_IN;
private int fadeOut = FADE_OUT;
/**
* Obtains the maximum time that the hotbar can be on the screen,
* including fading.
*
* @return The maximum hotbar display time.
*/
public int getMaxTime()
{
return this.maxTime;
}
/**
* Obtains the time that the hotbar takes to fade in.
*
* @return The hotbar fade in time.
*/
public int getFadeInTime()
{
return this.fadeIn;
}
/**
* Obtains the time that the hotbar takes to fade out.
*
* @return The hotbar fade out time.
*/
public int getFadeOutTime()
{
return this.fadeOut;
}
public void setMaxTime(int time)
{
this.maxTime = time;
}
public void setFadeInTime(int time)
{
this.fadeIn = time;
}
public void setFadeOutTime(int time)
{
this.fadeOut = time;
}
}
private TimeValues hotbarTime = new TimeValues();
private TimeValues experienceTime = new TimeValues();
private TimeValues jumpTime = new TimeValues();
private TimeValues healthTime = new TimeValues();
private TimeValues hungerTime = new TimeValues();
private TimeValues effectTime = new TimeValues();
private int crosshairTime = 6 * TICKS_PER_SECOND;
private boolean hideCrosshair = true;
private int handTime = 30 * TICKS_PER_SECOND;
private boolean hideHands = true;
private boolean showArmor = true;
private double minHealth = 0.5;
private int minHunger = 17;
/**
* Returns the instance of this class.
*
* @return the instance of this class
*/
public static ConfigManager getInstance()
{
try
{
if (Class.forName("me.sargunvohra.mcmods.autoconfig1u.AutoConfig") != null)
{
return AutoConfig.getConfigHolder(ConfigManagerCloth.class)
.getConfig();
}
else
{
throw new ClassNotFoundException();
}
}
catch (ClassNotFoundException e)
{
return new ConfigManager();
}
}
// Validations
/**
* Obtains time values related to the hotbar.
*
* @return The hotbar display time values.
*/
public TimeValues getHotbarTime()
{
return this.hotbarTime;
}
/**
* Obtains time values related to the experience bar.
*
* @return The experience bar display time values.
*/
public TimeValues getExperienceTime()
{
return this.experienceTime;
}
/**
* Obtains time values related to the jump bar.
*
* @return The jump display time values.
*/
public TimeValues getJumpTime()
{
return this.jumpTime;
}
/**
* Obtains time values related to the health bar.
*
* @return The health display time values.
*/
public TimeValues getHealthTime()
{
return this.healthTime;
}
/**
* Obtains time values related to the hunger bar.
*
* @return The hunger display time values.
*/
public TimeValues getHungerTime()
{
return this.hungerTime;
}
/**
* Obtains time values related to potion effects.
*
* @return Potion display time values.
*/
public TimeValues getPotionTime()
{
return this.effectTime;
}
/**
* Obtains the time that the crosshairs are allowed to display.
*
* @return The crosshair display time values.
*/
public int getCrosshairTime()
{
return this.crosshairTime;
}
/**
* Checks whether the crosshairs should be hidden after a period of time.
*
* @return - Whether or not crosshairs will be hidden.
*/
public boolean hideCrosshair()
{
return this.hideCrosshair;
}
/**
* Obtains the time that the hands are allowed to display.
*
* @return The hand display time values.
*/
public int getHandTime()
{
return this.handTime;
}
/**
* Checks whether hands should be hidden after a period of time.
*
* @return - Whether or not hands will be hidden.
*/
public boolean hideHands()
{
return this.hideHands;
}
/**
* Checks whether the armor bar should render.
*
* @return Whether or not armor shows on the HUD.
*/
public boolean shouldShowArmor()
{
return this.showArmor;
}
/**
* Obtains the minimum health for fading. Anything below that and the health
* always displays.
*
* @return The health boundary, from 0 to 1.
*/
public double getMinHealth()
{
return this.minHealth;
}
/**
* Obtains the minimum hunger for fading. Anything below that and the hunger
* always displays.
*
* @return The hunger boundary, from 0 to 20.
*/
public int getMinHunger()
{
return this.minHunger;
}
/**
* Sets the time that the hands are allowed to display.
*
* @param time - The hand display time values.
*/
public void setCrosshairTime(int time)
{
this.crosshairTime = time;
}
/**
* Sets whether the crosshairs should be hidden after a period of time.
*
* @param hide - Whether or not crosshairs will be hidden.
*/
public void hideCrosshair(boolean hide)
{
this.hideCrosshair = hide;
}
/**
* Sets the time that the hands are allowed to display.
*
* @param time - The hand display time values.
*/
public void setHandTime(int time)
{
this.handTime = time;
}
/**
* Sets whether hands should be hidden after a period of time.
*
* @param hide - Whether or not hands will be hidden.
*/
public void hideHands(boolean hide)
{
this.hideHands = hide;
}
/**
* Determines whether the armor bar should render.
*
* @param show - Whether or not armor shows on the HUD.
*/
public void shouldShowArmor(boolean show)
{
this.showArmor = show;
}
/**
* Sets the minimum health for fading. Anything below that and the health
* always displays.
*
* @param boundary - The health boundary, from 0 to 1.
*/
public void setMinHealth(double boundary)
{
this.minHealth = MathHelper.clamp(boundary, 0, 1);
}
/**
* Sets the minimum hunger for fading. Anything below that and the hunger
* always displays.
*
* @param boundary - The hunger boundary, from 0 to 20.
*/
public void setMinHunger(int boundary)
{
this.minHunger = MathHelper.clamp(boundary, 0, 20);
}
/**
* Saves changes to this mod's configuration.
*/
// public void save()
// {
// SPEC.save();
// }
}

View File

@@ -0,0 +1,14 @@
package markil3.immersive_hud;
import me.sargunvohra.mcmods.autoconfig1u.ConfigData;
import me.sargunvohra.mcmods.autoconfig1u.annotation.Config;
@Config(name = "immersive_hud")
public class ConfigManagerCloth extends ConfigManager implements ConfigData
{
@Override
public void validatePostLoad() throws ConfigData.ValidationException
{
this.setMinHealth(this.getMinHealth());
}
}

View File

@@ -18,8 +18,12 @@
package markil3.immersive_hud; package markil3.immersive_hud;
import net.fabricmc.api.ModInitializer; import net.fabricmc.api.ModInitializer;
import net.minecraft.client.gui.DrawableHelper;
import net.minecraft.client.util.math.MatrixStack; import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
import me.sargunvohra.mcmods.autoconfig1u.serializer.Toml4jConfigSerializer;
//import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
//import me.sargunvohra.mcmods.autoconfig1u.serializer.Toml4jConfigSerializer;
/** /**
* The main entry point for the Immersive HUD mod. * The main entry point for the Immersive HUD mod.
@@ -29,9 +33,23 @@ import net.minecraft.client.util.math.MatrixStack;
*/ */
public class Main implements ModInitializer public class Main implements ModInitializer
{ {
public static final int TICKS_PER_SECOND = 20;
@Override @Override
public void onInitialize() public void onInitialize()
{ {
try
{
if (Class.forName("me.sargunvohra.mcmods.autoconfig1u.AutoConfig") != null)
{
AutoConfig.register(ConfigManagerCloth.class,
Toml4jConfigSerializer::new);
}
}
catch (ClassNotFoundException e)
{
// Do nothing
}
} }
/** /**
@@ -45,9 +63,19 @@ public class Main implements ModInitializer
* *
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
static float getAlpha(int renderTime) static float getAlpha(double renderTime,
double maxTime,
double fadeInTime,
double fadeOutTime)
{ {
return Math.min(renderTime / 20.0F, if (renderTime <= fadeOutTime)
1.0F); {
return (float) (renderTime / fadeOutTime);
}
else if (renderTime > maxTime - fadeInTime)
{
return (float) ((maxTime - renderTime) / fadeInTime);
}
return 1F;
} }
} }

View File

@@ -16,13 +16,14 @@
*/ */
package markil3.immersive_hud; package markil3.immersive_hud;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.platform.GlStateManager;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.effect.StatusEffect;
import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.entity.effect.StatusEffects; import net.minecraft.entity.effect.StatusEffects;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.BowItem; import net.minecraft.item.BowItem;
@@ -33,18 +34,19 @@ import net.minecraft.item.FilledMapItem;
import net.minecraft.item.FishingRodItem; import net.minecraft.item.FishingRodItem;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.LingeringPotionItem;
import net.minecraft.item.RangedWeaponItem; import net.minecraft.item.RangedWeaponItem;
import net.minecraft.item.ShieldItem; import net.minecraft.item.ShieldItem;
import net.minecraft.item.SnowballItem; import net.minecraft.item.SnowballItem;
import net.minecraft.item.ThrowablePotionItem; import net.minecraft.item.SplashPotionItem;
import net.minecraft.item.TridentItem; import net.minecraft.item.TridentItem;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import net.minecraft.util.hit.EntityHitResult; import net.minecraft.util.hit.EntityHitResult;
import net.minecraft.util.hit.HitResult; import net.minecraft.util.hit.HitResult;
import net.minecraft.util.math.MathHelper;
import org.apache.logging.log4j.LogManager; import java.util.HashMap;
import org.apache.logging.log4j.Logger; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.Optional; import java.util.Optional;
@@ -54,35 +56,19 @@ import java.util.Optional;
* @author Markil 3 * @author Markil 3
* @version 0.1-1.16.4-fabric * @version 0.1-1.16.4-fabric
*/ */
public class EventBus public class TimerUtils
{ {
/**
* The number of ticks that the hand will be onscreen. Every tick is 1/20th
* of a second.
*/
static final int HAND_TIME = 10 * 20;
/**
* The number of ticks most elements will be onscreen. Every tick is 1/20th
* of a second.
*/
static final int VISUAL_TIME = 6 * 20;
/**
* The number of ticks that the health and hunger bars will be onscreen.
* Every tick is 1/20th of a second.
*/
static final int HEALTH_TIME = (int) ((float) VISUAL_TIME * 2.5);
/** /**
* How many more ticks the hand will be onscreen. Every tick is 1/20th of a * How many more ticks the hand will be onscreen. Every tick is 1/20th of a
* second. * second.
*/ */
private static int mainHandTime, offHandTime; private static double mainHandTime, offHandTime;
/** /**
* How many more ticks the crosshair will be onscreen. Every tick is 1/20th * How many more ticks the crosshair will be onscreen. Every tick is 1/20th
* of a second. * of a second.
*/ */
private static int crosshairTime; private static double crosshairTime;
/** /**
* If true, then the hand (and crosshairs) will be locked onto the screen * If true, then the hand (and crosshairs) will be locked onto the screen
* without disappearing until this flag is updated. * without disappearing until this flag is updated.
@@ -95,11 +81,13 @@ public class EventBus
*/ */
private static int mapLock; private static int mapLock;
private static HashMap<StatusEffect, Double> effectTime = new HashMap<>();
/** /**
* How many more ticks the hotbar will be onscreen. Every tick is 1/20th of * How many more ticks the hotbar will be onscreen. Every tick is 1/20th of
* a second. * a second.
*/ */
private static int hotbarTime; private static double hotbarTime;
/** /**
* The last hotbar slot that was selected. This is used to check for a * The last hotbar slot that was selected. This is used to check for a
* change in the hotbar slot. * change in the hotbar slot.
@@ -115,7 +103,7 @@ public class EventBus
* How many more ticks the health bar will be onscreen. Every tick is 1/20th * How many more ticks the health bar will be onscreen. Every tick is 1/20th
* of a second. * of a second.
*/ */
private static int healthTime; private static double healthTime;
/** /**
* Records what the health was previously. Used to check for a change in the * Records what the health was previously. Used to check for a change in the
* health. * health.
@@ -133,7 +121,7 @@ public class EventBus
* How many more ticks the hunger bar will be onscreen. Every tick is 1/20th * How many more ticks the hunger bar will be onscreen. Every tick is 1/20th
* of a second. * of a second.
*/ */
private static int hungerTime; private static double hungerTime;
/** /**
* Records what the hunger level was previously. Used to check for a change * Records what the hunger level was previously. Used to check for a change
* in hunger. * in hunger.
@@ -149,7 +137,7 @@ public class EventBus
* How many more ticks the mount's health bar will be onscreen. Every tick * How many more ticks the mount's health bar will be onscreen. Every tick
* is 1/20th of a second. * is 1/20th of a second.
*/ */
private static int mountTime; private static double mountTime;
/** /**
* Records what the health of the mount was previously. Used to check for a * Records what the health of the mount was previously. Used to check for a
* change in the health. * change in the health.
@@ -165,19 +153,120 @@ public class EventBus
* How many more ticks the mount's jump bar will be onscreen. Every tick is * How many more ticks the mount's jump bar will be onscreen. Every tick is
* 1/20th of a second. * 1/20th of a second.
*/ */
private static int jumpTime; private static double jumpTime;
/** /**
* How many more ticks the experience bar will be onscreen. Every tick is * How many more ticks the experience bar will be onscreen. Every tick is
* 1/20th of a second. * 1/20th of a second.
*/ */
private static int experienceTime; private static double experienceTime;
/** /**
* Records what the experience was previously. Used to check for a change in * Records what the experience was previously. Used to check for a change in
* the health. * the health.
*/ */
private static float experienceProgress = -1; private static float experienceProgress = -1;
/**
* Sets the transparency level of the next drawn element.
*
* @param alpha - The transparency, from 0 to 1.
*/
public static void setAlpha(float alpha)
{
GlStateManager.color4f(1.0F, 1.0F, 1.0F, alpha);
}
/**
* Resets the transparency level.
*
* @see #setAlpha(float)
*/
public static void resetAlpha()
{
setAlpha(1.0F);
}
/**
* Obtains the offset from the bottom of the screen that the hotbar
* receives.
*
* @return The offset the hotbar uses.
*/
public static int getHotbarTranslation()
{
ConfigManager.TimeValues hotbar =
ConfigManager.getInstance().getHotbarTime();
return (int) (22F * (1 - Main.getAlpha(hotbarTime,
hotbar.getMaxTime(),
hotbar.getFadeInTime(),
hotbar.getFadeOutTime())));
}
/**
* Obtains the offset from the bottom of the screen that the experience bar
* receives.
*
* @return The offset the experience bar uses.
*/
public static int getExperienceTranslation()
{
ConfigManager.TimeValues experience =
ConfigManager.getInstance().getExperienceTime();
return (int) ((12F + (22 - getHotbarTranslation())) * (1 - Main.getAlpha(
experienceTime,
experience.getMaxTime(),
experience.getFadeInTime(),
experience.getFadeOutTime()))) + getHotbarTranslation();
}
/**
* Obtains the offset from the bottom of the screen that the jump bar
* receives.
*
* @return The offset the jump bar uses.
*/
public static int getJumpTranslation()
{
ConfigManager.TimeValues jump =
ConfigManager.getInstance().getExperienceTime();
return (int) ((12F + (22 - getHotbarTranslation())) * (1 - Main.getAlpha(
jumpTime,
jump.getMaxTime(),
jump.getFadeInTime(),
jump.getFadeOutTime()))) + getHotbarTranslation();
}
/**
* Obtains the offset that the status bars (health, hunger, etc.) gets from
* their usual position.
*
* @return The offset.
*/
public static float getHealthTranslation()
{
ConfigManager.TimeValues hotbar =
ConfigManager.getInstance().getHotbarTime();
ConfigManager.TimeValues experience =
ConfigManager.getInstance().getExperienceTime();
ConfigManager.TimeValues jump =
ConfigManager.getInstance().getJumpTime();
float hotbarAlpha = Main.getAlpha(hotbarTime,
hotbar.getMaxTime(),
hotbar.getFadeInTime(),
hotbar.getFadeOutTime());
float experienceAlpha = Main.getAlpha(experienceTime,
experience.getMaxTime(),
experience.getFadeInTime(),
experience.getFadeOutTime());
float jumpAlpha = Main.getAlpha(jumpTime,
jump.getMaxTime(),
jump.getFadeInTime(),
jump.getFadeOutTime());
return 7 * (1 - Math.max(experienceAlpha,
jumpAlpha)) + 22 * (1 - hotbarAlpha);
}
/** /**
* Run whenever the player clicks a mouse button. This brings the hands into * Run whenever the player clicks a mouse button. This brings the hands into
* view, and briefly brings the health and hunger into view if the held item * view, and briefly brings the health and hunger into view if the held item
@@ -190,6 +279,12 @@ public class EventBus
*/ */
public static void onClick(Hand hand, boolean clear) public static void onClick(Hand hand, boolean clear)
{ {
ConfigManager.TimeValues health =
ConfigManager.getInstance().getHealthTime();
ConfigManager.TimeValues hunger =
ConfigManager.getInstance().getHungerTime();
double handTime = ConfigManager.getInstance().getHandTime();
MinecraftClient mc = MinecraftClient.getInstance(); MinecraftClient mc = MinecraftClient.getInstance();
LivingEntity entity; LivingEntity entity;
Item item; Item item;
@@ -219,29 +314,29 @@ public class EventBus
.map(ItemStack::getItem) .map(ItemStack::getItem)
.orElse(null); .orElse(null);
} }
crosshairTime = VISUAL_TIME; crosshairTime = ConfigManager.getInstance().getCrosshairTime();
if (hand == Hand.MAIN_HAND) if (hand == Hand.MAIN_HAND)
{ {
mainHandTime = HAND_TIME; mainHandTime = handTime;
mainHandLock = item != null; mainHandLock = item != null;
} }
else else
{ {
offHandTime = HAND_TIME; offHandTime = handTime;
offHandLock = item != null; offHandLock = item != null;
} }
if (item != null) if (item != null)
{ {
if (item.isFood()) if (item.isFood())
{ {
healthTime = HEALTH_TIME; healthTime = health.getMaxTime() - (healthTime > 0 ?
hungerTime = HEALTH_TIME; health.getFadeInTime() :
0);
hungerTime = hunger.getMaxTime() - (hungerTime > 0 ?
hunger.getFadeInTime() :
0);
} }
} }
else
{
System.out.println("Unusing hand " + hand);
}
} }
/** /**
@@ -249,15 +344,19 @@ public class EventBus
* hands into and out of view as needed. * hands into and out of view as needed.
* *
* @param hand - The hand being rendered. * @param hand - The hand being rendered.
* @param matrixStack - The rendering stack.
* *
* @return If true, then don't render this hand at all. * @return If true, then don't render this hand at all.
* *
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
public static boolean onRenderHand(Hand hand, MatrixStack matrixStack) public static boolean onRenderHand(Hand hand,
float ticks)
{
final float HAND_UP_TIME = 20F;
boolean hideHands = ConfigManager.getInstance().hideHands();
if (hideHands)
{ {
final int HAND_UP_TIME = 20;
switch (hand) switch (hand)
{ {
case OFF_HAND: case OFF_HAND:
@@ -267,13 +366,15 @@ public class EventBus
} }
else if (!offHandLock && (mapLock & 0b01) == 0) else if (!offHandLock && (mapLock & 0b01) == 0)
{ {
offHandTime--; if (offHandTime > 0)
{
offHandTime -= ticks;
}
if (offHandTime < HAND_UP_TIME) if (offHandTime < HAND_UP_TIME)
{ {
matrixStack GlStateManager.translatef(0,
.translate(0, (float) (-1.0F * (HAND_UP_TIME - offHandTime) /
-1.0F * (HAND_UP_TIME - offHandTime) / HAND_UP_TIME),
HAND_UP_TIME,
0); 0);
} }
} }
@@ -285,19 +386,21 @@ public class EventBus
} }
else if (!mainHandLock && (mapLock & 0b10) == 0) else if (!mainHandLock && (mapLock & 0b10) == 0)
{ {
System.out.println("Decreasing main hand time"); if (mainHandTime > 0)
mainHandTime--; {
mainHandTime -= ticks;
}
if (mainHandTime < HAND_UP_TIME) if (mainHandTime < HAND_UP_TIME)
{ {
matrixStack GlStateManager.translatef(0,
.translate(0, (float) (-1.0F * (HAND_UP_TIME - mainHandTime) /
-1.0F * (HAND_UP_TIME - mainHandTime) / HAND_UP_TIME),
HAND_UP_TIME,
0); 0);
} }
} }
break; break;
} }
}
return false; return false;
} }
@@ -309,18 +412,26 @@ public class EventBus
* *
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
public static boolean drawCrosshair() public static boolean drawCrosshair(float ticks)
{ {
final double CROSSHAIR_TIME =
ConfigManager.getInstance().getCrosshairTime();
MinecraftClient mc = MinecraftClient.getInstance(); MinecraftClient mc = MinecraftClient.getInstance();
Entity entity = mc.getCameraEntity(); Entity entity = mc.getCameraEntity();
boolean changed = false; boolean changed = false;
if (mc.crosshairTarget != null && mc.crosshairTarget boolean canceled = false;
boolean hideCrosshair = ConfigManager.getInstance().hideCrosshair();
if (hideCrosshair)
{
if (mc.hitResult != null && mc.hitResult
.getType() != HitResult.Type.MISS) .getType() != HitResult.Type.MISS)
{ {
if (mc.crosshairTarget.getType() == HitResult.Type if (mc.hitResult.getType() == HitResult.Type
.ENTITY) .ENTITY)
{ {
if (((EntityHitResult) mc.crosshairTarget).getEntity() != entity if (((EntityHitResult) mc.hitResult).getEntity() != entity
.getVehicle()) .getVehicle())
{ {
changed = true; changed = true;
@@ -334,25 +445,20 @@ public class EventBus
if (changed || mainHandLock || offHandLock || crosshairTime if (changed || mainHandLock || offHandLock || crosshairTime
> 0) > 0)
{ {
RenderSystem.color4f(1.0F, setAlpha(Main.getAlpha(crosshairTime > 0 ?
1.0F,
1.0F,
Main.getAlpha(crosshairTime > 0 ?
crosshairTime : crosshairTime :
VISUAL_TIME)); CROSSHAIR_TIME, CROSSHAIR_TIME, 0, 0));
} }
else else
{ {
RenderSystem.color4f(1.0F, canceled = true;
1.0F,
1.0F,
0F);
} }
if (crosshairTime > 0) if (crosshairTime > 0)
{ {
crosshairTime--; crosshairTime -= ticks;
} }
return false; }
return canceled;
} }
/** /**
@@ -363,14 +469,18 @@ public class EventBus
* *
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
public static boolean drawMountHealth() public static boolean drawMountHealth(float ticks)
{ {
/* /*
* When the health percentage falls to this level or below, the * When the health percentage falls to this level or below, the
* health bar won't disappear, allowing the player to be constantly * health bar won't disappear, allowing the player to be constantly
* reminded of their low health. * reminded of their low health.
*/ */
final float CONST_BOUNDARY = 0.5F; final double HEALTH_BOUNDARY =
ConfigManager.getInstance().getMinHealth();
ConfigManager.TimeValues healthTimes =
ConfigManager.getInstance().getHealthTime();
MinecraftClient mc = MinecraftClient.getInstance(); MinecraftClient mc = MinecraftClient.getInstance();
Entity entity = mc.getCameraEntity(); Entity entity = mc.getCameraEntity();
@@ -378,7 +488,7 @@ public class EventBus
LivingEntity mount; LivingEntity mount;
boolean changed = false; boolean changed = false;
if (tmp == null) if (tmp == null || !(tmp instanceof LivingEntity))
{ {
mountHealth = -1; mountHealth = -1;
mountMaxHealth = -1; mountMaxHealth = -1;
@@ -391,33 +501,134 @@ public class EventBus
mountHealth = mount.getHealth(); mountHealth = mount.getHealth();
changed = true; changed = true;
} }
if (mountMaxHealth != mount.getMaxHealth()) if (mountMaxHealth != mount.getHealthMaximum())
{ {
mountMaxHealth = mount.getMaxHealth(); mountMaxHealth = mount.getHealthMaximum();
changed = true; changed = true;
} }
} }
if (changed) if (changed)
{ {
mountTime = VISUAL_TIME; mountTime = healthTimes.getMaxTime() - (mountTime > 0 ?
healthTimes.getFadeInTime() :
0);
} }
else if (mountTime > 0) else if (mountTime > 0)
{ {
mountTime--; mountTime -= ticks;
} }
if (mountTime > 0)
{
/* /*
* Renders it along with health. * Only makes a change if the player is healthy. Otherwise,
* the bar is shown.
*/ */
RenderSystem.color4f(1.0F, if (mountHealth / mountMaxHealth > HEALTH_BOUNDARY)
1.0F, {
1.0F, if (tmp != null && mountTime > 0)
Main.getAlpha(mountTime)); {
GlStateManager.pushMatrix();
GlStateManager.translatef(0F,
getHealthTranslation(),
0F);
setAlpha(Main.getAlpha(mountTime,
healthTimes.getMaxTime(),
healthTimes.getFadeInTime(),
healthTimes.getFadeOutTime()));
return false; return false;
} }
return true; return true;
} }
GlStateManager.pushMatrix();
GlStateManager.translatef(0F,
getHealthTranslation(),
0F);
return false;
}
/**
* Updates the timings of some of the potions currently affecting the
* player.
*
* @param player - The player being affected.
*/
public static void updatePotions(ClientPlayerEntity player)
{
for (StatusEffect effect :
new HashSet<>(effectTime.keySet()))
{
if (!player.hasStatusEffect(effect))
{
effectTime.remove(effect);
}
}
}
/**
* Updates the timings of some of the potions currently affecting the
* player.
*
* @param effectinstance - The effect to update
* @param ticks
*/
public static boolean updatePotion(StatusEffectInstance effectinstance,
float ticks)
{
final int BLINK_TIME = 200;
ConfigManager.TimeValues potion =
ConfigManager.getInstance().getPotionTime();
Double time = effectTime.get(effectinstance.getEffectType());
if (time == null)
{
effectTime.put(effectinstance.getEffectType(),
(time = (double) potion.getMaxTime()));
}
else
{
effectTime.put(effectinstance.getEffectType(), (time -= ticks));
}
return Main.getAlpha(time,
potion.getMaxTime(),
potion.getFadeInTime(),
potion.getFadeOutTime()) > 0 || effectinstance.getDuration() <= BLINK_TIME;
}
/**
* Obtains how transparent
*
* @param effectinstance
*
* @return
*/
public static float getPotionAlpha(StatusEffectInstance effectinstance)
{
ConfigManager.TimeValues potion =
ConfigManager.getInstance().getPotionTime();
final int BLINK_TIME = 200;
float effectAlpha = 0.0F;
if (effectinstance.getDuration() <= BLINK_TIME)
{
effectAlpha =
MathHelper.sin(7000F / (effectinstance.getDuration() + 16F * (float) Math.PI)) * 50F / (effectinstance
.getDuration() + 100F) + 0.5F;
}
else if (effectinstance.getDuration() <= BLINK_TIME + potion.getFadeInTime())
{
effectAlpha =
-(effectinstance.getDuration() - BLINK_TIME) / 22F + 0.454F;
}
else
{
effectAlpha =
Main.getAlpha(effectTime.getOrDefault(effectinstance.getEffectType(),
0.0),
potion.getMaxTime(),
potion.getFadeInTime(),
potion.getFadeOutTime());
}
return effectAlpha;
}
/** /**
* Determines whether or not to draw the armor bar, adjusting the alpha as * Determines whether or not to draw the armor bar, adjusting the alpha as
@@ -429,27 +640,23 @@ public class EventBus
*/ */
public static boolean drawArmor() public static boolean drawArmor()
{ {
ConfigManager.TimeValues healthTimes;
/* /*
* Sets the armor to fade in and out in sync with the health. * Sets the armor to fade in and out in sync with the health.
* Technically, since this method gets called before health, it will * Technically, since this method gets called before health, it will
* be 1 tick behind, but I'm not too concerned about it. * be 1 tick behind, but I'm not too concerned about it.
*/ */
if (healthTime > 0) if (ConfigManager.getInstance().shouldShowArmor() && healthTime > 0)
{ {
RenderSystem.color4f(1.0F, healthTimes = ConfigManager.getInstance().getHealthTime();
1.0F, setAlpha(Main.getAlpha(healthTime,
1.0F, healthTimes.getMaxTime(),
Main.getAlpha(healthTime)); healthTimes.getFadeInTime(),
} healthTimes.getFadeOutTime()));
else
{
RenderSystem.color4f(1.0F,
1.0F,
1.0F,
0.0F);
}
return false; return false;
} }
return true;
}
/** /**
* Determines whether or not to draw the health bar, adjusting the alpha as * Determines whether or not to draw the health bar, adjusting the alpha as
@@ -459,14 +666,17 @@ public class EventBus
* *
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
public static boolean drawHealth() public static boolean drawHealth(float ticks)
{ {
/* /*
* When the health percentage falls to this level or below, the * When the health percentage falls to this level or below, the
* health bar won't disappear, allowing the player to be constantly * health bar won't disappear, allowing the player to be constantly
* reminded of their low health. * reminded of their low health.
*/ */
final float CONST_BOUNDARY = 0.5F; final double HEALTH_BOUNDARY =
ConfigManager.getInstance().getMinHealth();
ConfigManager.TimeValues healthTimes =
ConfigManager.getInstance().getHealthTime();
MinecraftClient mc = MinecraftClient.getInstance(); MinecraftClient mc = MinecraftClient.getInstance();
LivingEntity entity; LivingEntity entity;
@@ -479,14 +689,7 @@ public class EventBus
return true; return true;
} }
boolean changed = false; boolean changed = false;
boolean canceled;
/*
* Resets the transparency from the armor call.
*/
RenderSystem.color4f(1.0F,
1.0F,
1.0F,
1F);
/** /**
* Checks for a change in current or max health. * Checks for a change in current or max health.
@@ -496,31 +699,39 @@ public class EventBus
health = entity.getHealth(); health = entity.getHealth();
changed = true; changed = true;
} }
if (maxHealth != entity.getMaxHealth()) if (maxHealth != entity.getHealthMaximum())
{ {
maxHealth = entity.getMaxHealth(); maxHealth = entity.getHealthMaximum();
changed = true; changed = true;
} }
if (changed) if (changed)
{ {
healthTime = HEALTH_TIME; healthTime = healthTimes.getMaxTime() - (healthTime > 0 ?
healthTimes.getFadeInTime() :
0);
} }
else if (healthTime > 0) else if (healthTime > 0)
{ {
healthTime--; healthTime -= ticks;
} }
/* /*
* Only makes a change if the player is healthy. Otherwise, * Only makes a change if the player is healthy. Otherwise,
* the bar is shown. * the bar is shown.
*/ */
if (health / maxHealth > CONST_BOUNDARY) if (health / maxHealth > HEALTH_BOUNDARY && !entity
.hasStatusEffect(StatusEffects.WITHER) && !entity.hasStatusEffect(
StatusEffects.POISON))
{ {
RenderSystem.color4f(1.0F, setAlpha(Main.getAlpha(healthTime,
1.0F, healthTimes.getMaxTime(),
1.0F, healthTimes.getFadeInTime(),
Main.getAlpha(healthTime)); healthTimes.getFadeOutTime()));
} }
return false; canceled =
healthTime == 0 && health / maxHealth > HEALTH_BOUNDARY && !entity
.hasStatusEffect(StatusEffects.WITHER) && !entity.hasStatusEffect(
StatusEffects.POISON);
return canceled;
} }
/** /**
@@ -531,26 +742,22 @@ public class EventBus
* *
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
public static boolean drawHunger() public static boolean drawHunger(float ticks)
{ {
/* /*
* When hunger falls to this level or below, the hunger bar won't * When hunger falls to this level or below, the hunger bar won't
* disappear, allowing the player to be constantly reminded of their * disappear, allowing the player to be constantly reminded of their
* low hunger. * low hunger.
*/ */
final int HUNGER_BOUNDARY = 15; final int HUNGER_BOUNDARY = ConfigManager.getInstance().getMinHunger();
ConfigManager.TimeValues hungerTimes =
ConfigManager.getInstance().getHungerTime();
MinecraftClient mc = MinecraftClient.getInstance(); MinecraftClient mc = MinecraftClient.getInstance();
PlayerEntity entity; PlayerEntity entity;
boolean canceled;
boolean changed = false; boolean changed = false;
/*
* Resets the transparency from last time.
*/
RenderSystem.color4f(1.0F,
1.0F,
1.0F,
1F);
if (mc.getCameraEntity() instanceof PlayerEntity) if (mc.getCameraEntity() instanceof PlayerEntity)
{ {
entity = (PlayerEntity) mc.getCameraEntity(); entity = (PlayerEntity) mc.getCameraEntity();
@@ -578,21 +785,32 @@ public class EventBus
} }
if (changed) if (changed)
{ {
hungerTime = HEALTH_TIME; hungerTime = hungerTimes.getMaxTime() - (hungerTime > 0 ?
hungerTimes.getFadeInTime() :
0);
} }
else if (hungerTime > 0) else if (hungerTime > 0)
{ {
hungerTime--; hungerTime -= ticks;
}
if (hungerTime <= 0 && hunger > HUNGER_BOUNDARY)
{
return true;
} }
RenderSystem.color4f(1.0F,
1.0F,
1.0F,
Main.getAlpha(hungerTime));
/* /*
* Only makes a change if the player is satisfied. Otherwise, * Only makes a change if the player is healthy. Otherwise,
* the bar is shown. * the bar is shown.
*/ */
return false; if (hunger > HUNGER_BOUNDARY && !entity.hasStatusEffect(StatusEffects.HUNGER))
{
setAlpha(Main.getAlpha(hungerTime,
hungerTimes.getMaxTime(),
hungerTimes.getFadeInTime(),
hungerTimes.getFadeOutTime()));
}
return hungerTime == 0 && hunger > HUNGER_BOUNDARY && !entity
.hasStatusEffect(StatusEffects.HUNGER);
} }
/** /**
@@ -603,12 +821,13 @@ public class EventBus
* *
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
public static boolean drawJumpbar() public static boolean drawJumpbar(float ticks)
{ {
ConfigManager.TimeValues jump =
ConfigManager.getInstance().getJumpTime();
MinecraftClient mc = MinecraftClient.getInstance(); MinecraftClient mc = MinecraftClient.getInstance();
ClientPlayerEntity entity; ClientPlayerEntity entity;
boolean changed = false;
if (mc.getCameraEntity() instanceof ClientPlayerEntity) if (mc.getCameraEntity() instanceof ClientPlayerEntity)
{ {
entity = (ClientPlayerEntity) mc.getCameraEntity(); entity = (ClientPlayerEntity) mc.getCameraEntity();
@@ -620,18 +839,22 @@ public class EventBus
if (entity.method_3151() > 0) if (entity.method_3151() > 0)
{ {
jumpTime = VISUAL_TIME; jumpTime = jump.getMaxTime() - (jumpTime > 0 ?
jump.getFadeInTime() :
0);
} }
else if (jumpTime > 0) else if (jumpTime > 0)
{ {
jumpTime--; jumpTime -= ticks;
} }
if (experienceTime > 0) if (jumpTime > 0)
{ {
RenderSystem.color4f(1.0F, GlStateManager.pushMatrix();
1.0F, GlStateManager.translatef(0F, TimerUtils.getJumpTranslation(), 0F);
1.0F, setAlpha(Main.getAlpha(jumpTime,
Main.getAlpha(jumpTime)); jump.getMaxTime(),
jump.getFadeInTime(),
jump.getFadeOutTime()));
return false; return false;
} }
return true; return true;
@@ -645,8 +868,11 @@ public class EventBus
* *
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
public static boolean drawExperience() public static boolean drawExperience(float ticks)
{ {
ConfigManager.TimeValues experience =
ConfigManager.getInstance().getExperienceTime();
MinecraftClient mc = MinecraftClient.getInstance(); MinecraftClient mc = MinecraftClient.getInstance();
ClientPlayerEntity entity; ClientPlayerEntity entity;
boolean changed = false; boolean changed = false;
@@ -667,18 +893,24 @@ public class EventBus
} }
if (changed) if (changed)
{ {
experienceTime = VISUAL_TIME; experienceTime = experience.getMaxTime() - (experienceTime > 0 ?
experience.getFadeInTime() :
0);
} }
else if (experienceTime > 0) else if (experienceTime > 0)
{ {
experienceTime--; experienceTime -= ticks;
} }
if (experienceTime > 0) if (experienceTime > 0)
{ {
RenderSystem.color4f(1.0F, GlStateManager.pushMatrix();
1.0F, GlStateManager.translatef(0F,
1.0F, TimerUtils.getExperienceTranslation(),
Main.getAlpha(experienceTime)); 0F);
setAlpha(Main.getAlpha(experienceTime,
experience.getMaxTime(),
experience.getFadeInTime(),
experience.getFadeOutTime()));
return false; return false;
} }
return true; return true;
@@ -694,8 +926,16 @@ public class EventBus
* @see #recolorHotbar() * @see #recolorHotbar()
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
public static boolean updateHotbar() public static boolean updateHotbar(float ticks)
{ {
ConfigManager.TimeValues health =
ConfigManager.getInstance().getHealthTime();
ConfigManager.TimeValues hunger =
ConfigManager.getInstance().getHungerTime();
ConfigManager.TimeValues hotbar =
ConfigManager.getInstance().getHotbarTime();
double handTime = ConfigManager.getInstance().getHandTime();
MinecraftClient mc = MinecraftClient.getInstance(); MinecraftClient mc = MinecraftClient.getInstance();
ClientPlayerEntity entity; ClientPlayerEntity entity;
Item item, handItem = null; Item item, handItem = null;
@@ -808,7 +1048,7 @@ public class EventBus
* Items that have the crosshairs enabled for as long * Items that have the crosshairs enabled for as long
* as the item is being held at all. * as the item is being held at all.
*/ */
else if (item instanceof ThrowablePotionItem || else if (item instanceof SplashPotionItem || item instanceof LingeringPotionItem ||
item instanceof SnowballItem || item instanceof item instanceof SnowballItem || item instanceof
EggItem || item instanceof EnderPearlItem || item EggItem || item instanceof EnderPearlItem || item
instanceof FishingRodItem) instanceof FishingRodItem)
@@ -853,18 +1093,22 @@ public class EventBus
*/ */
if (item.isFood()) if (item.isFood())
{ {
healthTime = HEALTH_TIME; healthTime = health.getMaxTime() - (healthTime > 0 ?
hungerTime = HEALTH_TIME; health.getFadeInTime() :
0);
hungerTime = hunger.getMaxTime() - (hungerTime > 0 ?
hunger.getFadeInTime() :
0);
} }
if (i == 0) if (i == 0)
{ {
mainHandItem = item; mainHandItem = item;
mainHandTime = HAND_TIME; mainHandTime = handTime;
} }
else if (i == 1) else if (i == 1)
{ {
offHandItem = item; offHandItem = item;
offHandTime = HAND_TIME; offHandTime = handTime;
} }
} }
i++; i++;
@@ -876,17 +1120,19 @@ public class EventBus
if (selectedHotbarSlot != entity.inventory.selectedSlot) if (selectedHotbarSlot != entity.inventory.selectedSlot)
{ {
selectedHotbarSlot = entity.inventory.selectedSlot; selectedHotbarSlot = entity.inventory.selectedSlot;
mainHandTime = HAND_TIME; mainHandTime = handTime;
changed = true; changed = true;
} }
if (changed) if (changed)
{ {
hotbarTime = VISUAL_TIME; hotbarTime = hotbar.getMaxTime() - (hotbarTime > 0 ?
hotbar.getFadeInTime() :
0);
} }
else if (hotbarTime > 0) else if (hotbarTime > 0)
{ {
hotbarTime--; hotbarTime -= ticks;
} }
return hotbarTime == 0; return hotbarTime == 0;
@@ -902,9 +1148,13 @@ public class EventBus
*/ */
public static void recolorHotbar() public static void recolorHotbar()
{ {
RenderSystem.color4f(1.0F, ConfigManager.TimeValues hotbar =
1.0F, ConfigManager.getInstance().getHotbarTime();
1.0F, GlStateManager.pushMatrix();
Main.getAlpha(hotbarTime)); GlStateManager.translatef(0F, TimerUtils.getHotbarTranslation(), 0F);
setAlpha(Main.getAlpha(hotbarTime,
hotbar.getMaxTime(),
hotbar.getFadeInTime(),
hotbar.getFadeOutTime()));
} }
} }

View File

@@ -17,25 +17,22 @@
package markil3.immersive_hud.mixin; package markil3.immersive_hud.mixin;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.AbstractClientPlayerEntity;
import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.item.HeldItemRenderer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import markil3.immersive_hud.EventBus; import markil3.immersive_hud.TimerUtils;
/** /**
* This mixin hooks into the client player class to check for when the hands * This mixin hooks into the client player class to check for when the hands
* move. Note that most of the logic can be found in {@link EventBus}. * move. Note that most of the logic can be found in {@link TimerUtils}.
* *
* @author Markil 3 * @author Markil 3
* @version 0.1-1.16.4-fabric * @version 0.1-1.16.4-fabric
@@ -43,6 +40,9 @@ import markil3.immersive_hud.EventBus;
@Mixin(ClientPlayerEntity.class) @Mixin(ClientPlayerEntity.class)
public class ClientPlayerHook public class ClientPlayerHook
{ {
private static final Logger LOGGER =
LogManager.getLogger(ClientPlayerHook.class);
/** /**
* Updates hand timing every time an attack is initiated. * Updates hand timing every time an attack is initiated.
* *
@@ -54,7 +54,18 @@ public class ClientPlayerHook
@Inject(method = "swingHand", at = @At(value = "TAIL")) @Inject(method = "swingHand", at = @At(value = "TAIL"))
public void swingHand(Hand hand, CallbackInfo callbackInfo) public void swingHand(Hand hand, CallbackInfo callbackInfo)
{ {
EventBus.onClick(hand, hand == null); try
{
TimerUtils.onClick(hand, hand == null);
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.network" +
".ClientPlayerEntity#swingHand " +
"event",
e);
}
} }
/** /**
@@ -68,7 +79,18 @@ public class ClientPlayerHook
@Inject(method = "setCurrentHand", at = @At(value = "TAIL")) @Inject(method = "setCurrentHand", at = @At(value = "TAIL"))
public void setCurrentHand(Hand hand, CallbackInfo callbackInfo) public void setCurrentHand(Hand hand, CallbackInfo callbackInfo)
{ {
EventBus.onClick(hand, hand == null); try
{
TimerUtils.onClick(hand, hand == null);
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.network" +
".ClientPlayerEntity#setCurrentHand " +
"event",
e);
}
} }
/** /**
@@ -80,11 +102,22 @@ public class ClientPlayerHook
*/ */
@Inject(method = "clearActiveItem", at = @At(value = "HEAD")) @Inject(method = "clearActiveItem", at = @At(value = "HEAD"))
public void clearActiveItem(CallbackInfo callbackInfo) public void clearActiveItem(CallbackInfo callbackInfo)
{
try
{ {
if (MinecraftClient.getInstance().cameraEntity instanceof LivingEntity) if (MinecraftClient.getInstance().cameraEntity instanceof LivingEntity)
{ {
EventBus.onClick(((LivingEntity) MinecraftClient.getInstance().cameraEntity) TimerUtils.onClick(((LivingEntity) MinecraftClient.getInstance().cameraEntity)
.getActiveHand(), true); .getActiveHand(), true);
} }
} }
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.network" +
".ClientPlayerEntity#clearActiveItem " +
"event",
e);
}
}
} }

View File

@@ -16,69 +16,70 @@
*/ */
package markil3.immersive_hud.mixin; package markil3.immersive_hud.mixin;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.gui.hud.InGameHud;
import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.network.AbstractClientPlayerEntity;
import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.FirstPersonRenderer;
import net.minecraft.client.render.item.HeldItemRenderer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.Hand; import net.minecraft.util.Hand;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import markil3.immersive_hud.EventBus; import markil3.immersive_hud.TimerUtils;
/** /**
* This mixin hooks into the hand renderer to make the hands move in and out of * This mixin hooks into the hand renderer to make the hands move in and out of
* view. Note that most of the logic can be found in {@link EventBus}. * view. Note that most of the logic can be found in {@link TimerUtils}.
* *
* @author Markil 3 * @author Markil 3
* @version 0.1-1.16.4-fabric * @version 0.1-1.16.4-fabric
*/ */
@Mixin(HeldItemRenderer.class) @Mixin(FirstPersonRenderer.class)
public class HeldItemHook public class HeldItemHook
{ {
private static final Logger LOGGER = LogManager.getLogger(HeldItemHook.class);
/** /**
* Determines whether or not to render a certain hand. * Determines whether or not to render a certain hand.
* *
* @param player
* @param tickDelta
* @param pitch
* @param hand * @param hand
* @param swingProgress
* @param item
* @param equipProgress
* @param matrices
* @param vertexConsumers
* @param light
* @param callbackInfo * @param callbackInfo
* *
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
@Inject(method = "renderFirstPersonItem", at = @At(value = "INVOKE", @Inject(method = "renderFirstPersonItem" +
target = "Lnet/minecraft/client/util/math/MatrixStack;push()V", "(Lnet/minecraft/client/network/AbstractClientPlayerEntity;" +
shift = At.Shift.AFTER), cancellable = true) "FFLnet/minecraft/util/Hand;FLnet/minecraft/item/ItemStack;F)V",
public void renderHand(AbstractClientPlayerEntity player, at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform" +
float tickDelta, "/GlStateManager;pushMatrix()V", shift = At.Shift.AFTER),
float pitch, cancellable = true)
public void renderHand(AbstractClientPlayerEntity abstractClientPlayerEntity,
float f,
float g,
Hand hand, Hand hand,
float swingProgress, float h,
ItemStack item, ItemStack itemStack,
float equipProgress, float i,
MatrixStack matrices,
VertexConsumerProvider vertexConsumers,
int light,
CallbackInfo callbackInfo) CallbackInfo callbackInfo)
{ {
if (EventBus.onRenderHand(hand, matrices)) try
{
if (TimerUtils.onRenderHand(hand, f))
{ {
callbackInfo.cancel(); callbackInfo.cancel();
} }
} }
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.render" +
".FirstPersonRenderer#renderFirstPersonItem " +
"event",
e);
}
}
} }

View File

@@ -16,22 +16,27 @@
*/ */
package markil3.immersive_hud.mixin; package markil3.immersive_hud.mixin;
import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.platform.GlStateManager;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.hud.InGameHud; import net.minecraft.client.gui.hud.InGameHud;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.util.profiler.DummyProfiler; import net.minecraft.entity.effect.StatusEffectInstance;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import markil3.immersive_hud.EventBus; import markil3.immersive_hud.TimerUtils;
/** /**
* This mixin hooks into the HUD class to modify most of the HUD elements. Note * This mixin hooks into the HUD class to modify most of the HUD elements. Note
* that most of the logic can be found in {@link EventBus}. * that most of the logic can be found in {@link TimerUtils}.
* *
* @author Markil 3 * @author Markil 3
* @version 0.1-1.16.4-fabric * @version 0.1-1.16.4-fabric
@@ -39,199 +44,637 @@ import markil3.immersive_hud.EventBus;
@Mixin(InGameHud.class) @Mixin(InGameHud.class)
public class HudHook public class HudHook
{ {
private static final Logger LOGGER = LogManager.getLogger(HudHook.class);
private StatusEffectInstance currentEffect;
/** /**
* Determines whether or not to draw the crosshair. * Determines whether or not to draw the crosshair.
* *
* @param stack - The matrix drawing stack.
* @param callbackInfo * @param callbackInfo
* *
* @version 0.2-1.16.4-fabric
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
@Inject(method = "renderCrosshair", at = @At(value = "HEAD")) @Inject(method = "renderCrosshair", at = @At(value = "HEAD"),
public void startCrosshair(MatrixStack stack, CallbackInfo callbackInfo) cancellable = true)
public void startCrosshair(CallbackInfo callbackInfo)
{ {
EventBus.drawCrosshair(); LOGGER.debug("Starting crosshair");
try
{
if (TimerUtils.drawCrosshair(MinecraftClient.getInstance()
.getTickDelta()))
{
callbackInfo.cancel();
}
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderCrosshair " +
"event",
e);
}
} }
/** /**
* Resets any changes from drawing the crosshair. * Resets any changes from drawing the crosshair.
* *
* @param stack - The matrix drawing stack.
* @param callbackInfo * @param callbackInfo
* *
* @version 0.2-1.16.4-fabric
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
@Inject(method = "renderCrosshair", at = @At(value = "TAIL")) @Inject(method = "renderCrosshair", at = @At(value = "TAIL"))
public void finishCrosshair(MatrixStack stack, CallbackInfo callbackInfo) public void finishCrosshair(CallbackInfo callbackInfo)
{
LOGGER.debug("Finishing crosshair");
try
{ {
/* /*
* Resets the color so that nothing else is bothered. * Resets the color so that nothing else is bothered.
*/ */
RenderSystem.color4f(1, 1, 1, 1F); TimerUtils.resetAlpha();
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderCrosshair " +
"event",
e);
}
} }
/** /**
* Determines whether or not to draw the horse jump bar. * Determines whether or not to draw the horse jump bar.
* *
* @param stack - The matrix drawing stack.
* @param callbackInfo * @param callbackInfo
* *
* @version 0.2-1.16.4-fabric
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
@Inject(method = "renderMountJumpBar", at = @At(value = "HEAD")) @Inject(method = "renderMountJumpBar", at = @At(value = "HEAD"),
public void startJumpbar(MatrixStack stack, cancellable = true)
int x, public void startJumpbar(int x, CallbackInfo callbackInfo)
CallbackInfo callbackInfo)
{ {
EventBus.drawJumpbar(); LOGGER.debug("Starting jumpbar");
try
{
if (TimerUtils.drawJumpbar(MinecraftClient.getInstance()
.getTickDelta()))
{
callbackInfo.cancel();
}
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderMountJumpBar " +
"event",
e);
}
} }
/** /**
* Resets any changes from drawing the horse jump bar. * Resets any changes from drawing the horse jump bar.
* *
* @param stack - The matrix drawing stack.
* @param callbackInfo * @param callbackInfo
* *
* @version 0.2-1.16.4-fabric
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
@Inject(method = "renderMountJumpBar", at = @At(value = "TAIL")) @Inject(method = "renderMountJumpBar", at = @At(value = "TAIL"))
public void finishJumpbar(MatrixStack stack, public void finishJumpbar(
int x, int x,
CallbackInfo callbackInfo) CallbackInfo callbackInfo)
{ {
LOGGER.debug("Finishing jumpbar");
try
{
GlStateManager.popMatrix();
/* /*
* Resets the color so that nothing else is bothered. * Resets the color so that nothing else is bothered.
*/ */
RenderSystem.color4f(1, 1, 1, 1F); TimerUtils.resetAlpha();
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderMountJumpBar " +
"event",
e);
}
} }
/** /**
* Determines whether or not to draw the experience bar. * Determines whether or not to draw the experience bar.
* *
* @param stack - The matrix drawing stack.
* @param callbackInfo * @param callbackInfo
* *
* @version 0.2-1.16.4-fabric
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
@Inject(method = "renderExperienceBar", at = @At(value = "HEAD"), @Inject(method = "renderExperienceBar", at = @At(value = "HEAD"),
cancellable = true) cancellable = true)
public void startExperience(MatrixStack stack, public void startExperience(int x, CallbackInfo callbackInfo)
int x,
CallbackInfo callbackInfo)
{ {
if (EventBus.drawExperience()) LOGGER.debug("Starting experience bar");
try
{
if (TimerUtils.drawExperience(MinecraftClient.getInstance()
.getTickDelta()))
{ {
callbackInfo.cancel(); callbackInfo.cancel();
} }
} }
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderExperienceBar " +
"event",
e);
}
}
/** /**
* Resets any changes from drawing the experience bar. * Resets any changes from drawing the experience bar.
* *
* @param stack - The matrix drawing stack.
* @param callbackInfo * @param callbackInfo
* *
* @version 0.2-1.16.4-fabric
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
@Inject(method = "renderExperienceBar", at = @At(value = "TAIL")) @Inject(method = "renderExperienceBar", at = @At(value = "TAIL"))
public void finishExperience(MatrixStack stack, public void finishExperience(int x, CallbackInfo callbackInfo)
int x, {
CallbackInfo callbackInfo) LOGGER.debug("Finishing experience bar");
try
{
GlStateManager.popMatrix();
/*
* Resets the color so that nothing else is bothered.
*/
TimerUtils.resetAlpha();
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderExperienceBar " +
"event",
e);
}
}
/**
* Changes the position of the status bars as the ones below them move up
* and down.
*
* @return The same matrix stack, with a new matrix pushed onto it.
*/
@Inject(method = "renderStatusBars", at = @At("HEAD"))
public void startStatus(CallbackInfo info)
{
LOGGER.debug("Starting status bars");
try
{
GlStateManager.pushMatrix();
GlStateManager.translatef(0F,
TimerUtils.getHealthTranslation(),
0F);
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderStatusBars " +
"event",
e);
}
}
/**
* Adjusts the armor GUI.
*
* @param callbackInfo
*/
@Inject(method = "renderStatusBars()V", at = @At(value = "INVOKE",
target = "Lnet" +
"/minecraft/util/profiler/Profiler;push" +
"(Ljava/lang/String;)V"))
public void renderArmor(CallbackInfo callbackInfo)
{
LOGGER.debug("Rendering armor");
try
{
if (TimerUtils.drawArmor())
{
TimerUtils.setAlpha(0F);
}
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderStatusBars " +
"event",
e);
}
}
/**
* Adjusts the health GUI.
*
* @param callbackInfo
*/
@Inject(method = "renderStatusBars()V", at = @At(value = "INVOKE",
target = "Lnet" +
"/minecraft/util/profiler/Profiler;swap" +
"(Ljava/lang/String;)V",
ordinal = 0))
public void renderHealth(CallbackInfo callbackInfo)
{
LOGGER.debug("Rendering health");
try
{
/*
* Resets the transparency from the previous call.
*/
TimerUtils.setAlpha(1F);
if (TimerUtils.drawHealth(MinecraftClient.getInstance()
.getTickDelta()))
{
TimerUtils.setAlpha(0F);
}
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderStatusBars " +
"event",
e);
}
}
/**
* Adjusts the food GUI.
*
* @param callbackInfo
*/
@Inject(method = "renderStatusBars()V", at = @At(value = "INVOKE",
target = "Lnet" +
"/minecraft/util/profiler/Profiler;swap" +
"(Ljava/lang/String;)V",
ordinal = 1))
public void renderFood(CallbackInfo callbackInfo)
{
LOGGER.debug("Rendering food");
try
{
/*
* Resets the transparency from the previous call.
*/
TimerUtils.setAlpha(1F);
if (TimerUtils.drawHunger(MinecraftClient.getInstance()
.getTickDelta()))
{
TimerUtils.setAlpha(0F);
}
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderStatusBars " +
"event",
e);
}
}
/**
* Resets the air GUI.
*
* @param callbackInfo
*/
@Inject(method = "renderStatusBars()V", at = @At(value = "INVOKE",
target = "Lnet" +
"/minecraft/util/profiler/Profiler;swap" +
"(Ljava/lang/String;)V",
ordinal = 2))
public void renderAir(CallbackInfo callbackInfo)
{
LOGGER.debug("Rendering air");
try
{ {
/* /*
* Resets the color so that nothing else is bothered. * Resets the color so that nothing else is bothered.
*/ */
RenderSystem.color4f(1, 1, 1, 1F); TimerUtils.setAlpha(1F);
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderStatusBars " +
"event",
e);
}
}
@Inject(method = "renderStatusBars", at = @At("TAIL"))
public void finishStatus(CallbackInfo info)
{
LOGGER.debug("Finishing status bars");
try
{
GlStateManager.popMatrix();
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderStatusBars " +
"event",
e);
}
} }
/** /**
* Determines whether or not to draw the mount's health. * Determines whether or not to draw the mount's health.
* *
* @param stack - The matrix drawing stack.
* @param callbackInfo * @param callbackInfo
* *
* @version 0.2-1.16.4-fabric
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
@Inject(method = "renderMountHealth", at = @At(value = "HEAD")) @Inject(method = "renderMountHealth", at = @At(value = "HEAD"),
public void startMountHealth(MatrixStack stack, CallbackInfo callbackInfo) cancellable = true)
public void startMountHealth(CallbackInfo callbackInfo)
{ {
EventBus.drawMountHealth(); try
{
if (TimerUtils.drawMountHealth(MinecraftClient.getInstance()
.getTickDelta()))
{
callbackInfo.cancel();
}
else
{
LOGGER.debug("Starting mount health");
}
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderMountHealth " +
"event",
e);
}
} }
/** /**
* Resets any changes from drawing the mount's health. * Resets any changes from drawing the mount's health.
* *
* @param stack - The matrix drawing stack.
* @param callbackInfo * @param callbackInfo
* *
* @version 0.2-1.16.4-fabric
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
@Inject(method = "renderMountHealth", at = @At(value = "TAIL")) @Inject(method = "renderMountHealth", at = @At(value = "TAIL"))
public void finishMountHealth(MatrixStack stack, CallbackInfo callbackInfo) public void finishMountHealth(CallbackInfo callbackInfo)
{
LOGGER.debug("Finishing mount health");
try
{ {
/* /*
* Resets the color so that nothing else is bothered. * Resets the color so that nothing else is bothered.
*/ */
RenderSystem.color4f(1, 1, 1, 1F); GlStateManager.popMatrix();
TimerUtils.resetAlpha();
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderMountHealth " +
"event",
e);
}
}
/**
* Makes the actual adjustment to the hotbar as needed.
*
* @version 0.2-1.16.4-fabric
* @since 0.1-1.16.4-fabric
*/
@Inject(method = "renderStatusEffectOverlay()V", at =
@At(value = "HEAD", shift = At.Shift.AFTER))
public void startPotion(CallbackInfo info)
{
LOGGER.debug("Starting potions");
try
{
TimerUtils.updatePotions(MinecraftClient.getInstance().cameraEntity instanceof ClientPlayerEntity ?
((ClientPlayerEntity) MinecraftClient.getInstance().cameraEntity) :
null);
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderStatusEffectOverlay " +
"event",
e);
}
}
/**
* Makes the actual adjustment to the hotbar as needed.
*
* @version 0.2-1.16.4-fabric
* @since 0.1-1.16.4-fabric
*/
@Redirect(method = "renderStatusEffectOverlay()V", at =
@At(value = "INVOKE",
target =
"Lnet/minecraft/entity/effect/StatusEffectInstance;" +
"shouldShowIcon()Z"))
public boolean shouldRenderPotion(StatusEffectInstance effect)
{
LOGGER.debug("Updating potions");
try
{
currentEffect = effect;
return TimerUtils.updatePotion(effect,
MinecraftClient.getInstance().getTickDelta());
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderStatusEffectOverlay " +
"event",
e);
}
return true;
}
/**
* Makes the actual adjustment to the hotbar as needed.
*
* @param f - The original transparency
*
* @version 0.2-1.16.4-fabric
* @since 0.1-1.16.4-fabric
*/
@ModifyVariable(method = "renderStatusEffectOverlay()V", at =
@At(value = "STORE"))
public float updatePotion(float f)
{
LOGGER.debug("Adjusting potions");
try
{
return TimerUtils.getPotionAlpha(currentEffect);
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderStatusEffectOverlay " +
"event",
e);
}
return 1F;
}
/**
* Resets any changes from drawing the potion effects.
*
* @param callbackInfo
*
* @version 0.2-1.16.4-fabric
* @since 0.2-1.16.4-fabric
*/
@Inject(method = "renderStatusEffectOverlay", at = @At(value = "TAIL"))
public void finishPotion(CallbackInfo callbackInfo)
{
LOGGER.debug("Finishing potions");
try
{
/*
* Resets the color so that nothing else is bothered.
*/
TimerUtils.resetAlpha();
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderStatusEffectOverlay " +
"event",
e);
}
} }
/** /**
* Determines whether or not to draw the hotbar. * Determines whether or not to draw the hotbar.
* *
* @param tickDelta * @param tickDelta
* @param matrices - The matrix drawing stack.
* @param callbackInfo * @param callbackInfo
* *
* @version 0.2-1.16.4-fabric
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
@Inject(method = "renderHotbar", at = @At(value = "HEAD"), cancellable = @Inject(method = "renderHotbar", at = @At(value = "HEAD"), cancellable =
true) true)
public void startHotbar(float tickDelta, public void startHotbar(float tickDelta,
MatrixStack matrices,
CallbackInfo callbackInfo) CallbackInfo callbackInfo)
{ {
if (EventBus.updateHotbar()) LOGGER.debug("Starting hotbar");
try
{
if (TimerUtils.updateHotbar(tickDelta))
{ {
callbackInfo.cancel(); callbackInfo.cancel();
} }
} }
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderHotbar " +
"event",
e);
}
}
/** /**
* Makes the actual adjustment to the hotbar as needed. * Makes the actual adjustment to the hotbar as needed.
* *
* @param tickDelta * @param tickDelta
* @param matrices - The matrix drawing stack.
* @param callbackInfo * @param callbackInfo
* *
* @version 0.2-1.16.4-fabric
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
@Inject(method = "renderHotbar", at = @At(value = "INVOKE", target = @Inject(method = "renderHotbar", at = @At(value = "INVOKE", target =
"Lcom/mojang/blaze3d/systems/RenderSystem;color4f(FFFF)V", shift "Lcom/mojang/blaze3d/platform/GlStateManager;color4f(FFFF)V", shift
= At.Shift.AFTER)) = At.Shift.AFTER))
public void adjustHotbar(float tickDelta, public void adjustHotbar(float tickDelta,
MatrixStack matrices,
CallbackInfo callbackInfo) CallbackInfo callbackInfo)
{ {
EventBus.recolorHotbar(); LOGGER.debug("Adjusting hotbar");
try
{
TimerUtils.recolorHotbar();
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud" +
".InGameHud#renderHotbar " +
"event",
e);
}
} }
/** /**
* Resets any changes from drawing the hotbar. * Resets any changes from drawing the hotbar.
* *
* @param tickDelta * @param tickDelta
* @param matrices - The matrix drawing stack.
* @param callbackInfo * @param callbackInfo
* *
* @version 0.2-1.16.4-fabric
* @since 0.1-1.16.4-fabric * @since 0.1-1.16.4-fabric
*/ */
@Inject(method = "renderHotbar", at = @At(value = "TAIL")) @Inject(method = "renderHotbar", at = @At(value = "TAIL"))
public void finishHotbar(float tickDelta, public void finishHotbar(float tickDelta,
MatrixStack matrices,
CallbackInfo callbackInfo) CallbackInfo callbackInfo)
{ {
LOGGER.debug("Finishing hotbar");
try
{
GlStateManager.popMatrix();
/* /*
* Resets the color so that nothing else is bothered. * Resets the color so that nothing else is bothered.
*/ */
RenderSystem.color4f(1, 1, 1, 1F); TimerUtils.resetAlpha();
}
catch (Exception e)
{
LOGGER.error(
"Error in running net.minecraft.client.gui.hud.InGameHud#renderHotbar " +
"event",
e);
}
} }
} }

View File

@@ -1,85 +0,0 @@
/**
* Copyright (C) 2021 Markil 3
* <p>
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
* <p>
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
* <p>
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
package markil3.immersive_hud.mixin;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.util.profiler.DummyProfiler;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import markil3.immersive_hud.EventBus;
/**
* This class hooks into the profiler to trigger color changes for the status
* indicators.
*
* @author Markil 3
* @version 0.1-1.16.4-fabric
*/
@Mixin(DummyProfiler.class)
public class ProfilerHook
{
/**
* Hooks into the profiler to add logic to drawing armor.
*
* @param section - The profiler section
* @param callbackInfo
*
* @since 0.1-1.16.4-fabric
*/
@Inject(method = "push", at = @At(value = "TAIL"))
public void renderArmor(String section, CallbackInfo callbackInfo)
{
if (section.equals("armor"))
{
EventBus.drawArmor();
}
}
/**
* Hooks into the profiler to add logic to drawing status bars besides
* armor.
*
* @param section - The profiler section
* @param callbackInfo
*
* @since 0.1-1.16.4-fabric
*/
@Inject(method = "swap", at = @At(value = "TAIL"))
public void renderStatus(String section, CallbackInfo callbackInfo)
{
switch (section)
{
case "health":
EventBus.drawHealth();
break;
case "food":
EventBus.drawHunger();
break;
case "air":
/*
* Resets the color so that nothing else is bothered.
*/
RenderSystem.color4f(1, 1, 1, 1F);
break;
}
}
}

View File

@@ -0,0 +1,53 @@
{
"immersive_hud.configGui.title": "Immersive HUD Configuration",
"option.immersive_hud.hotbarMaxTime": "Hotbar Display Time",
"option.immersive_hud.hotbarFadeIn": "Hotbar Fade In Time",
"option.immersive_hud.hotbarFadeOut": "Hotbar Fade Out Time",
"option.immersive_hud.experienceMaxTime": "Experience Display Time",
"option.immersive_hud.experienceFadeIn": "Experience Fade In Time",
"option.immersive_hud.experienceFadeOut": "Experience Fade Out Time",
"option.immersive_hud.jumpMaxTime": "Jump Bar Display Time",
"option.immersive_hud.jumpFadeIn": "Jump Bar Fade In Time",
"option.immersive_hud.jumpFadeOut": "Jump Bar Fade Out Time",
"option.immersive_hud.healthMaxTime": "Health Bar Display Time",
"option.immersive_hud.healthFadeIn": "Health Bar Fade In Time",
"option.immersive_hud.healthFadeOut": "Health Bar Fade Out Time",
"option.immersive_hud.hungerMaxTime": "Hunger Bar Display Time",
"option.immersive_hud.hungerFadeIn": "Hunger Bar Fade In Time",
"option.immersive_hud.hungerFadeOut": "Hunger Bar Fade Out Time",
"option.immersive_hud.effectMaxTime": "Potion Display Time",
"option.immersive_hud.effectFadeIn": "Potion Fade In Time",
"option.immersive_hud.effectFadeOut": "Potion Fade Out Time",
"option.immersive_hud.crosshairTime": "Crosshair Display Time",
"option.immersive_hud.hideCrosshair": "Hide Crosshair",
"option.immersive_hud.handTime": "Hand Display Time",
"option.immersive_hud.hideHands": "Hide Hands",
"option.immersive_hud.minHealth": "Minimum Health Fade",
"option.immersive_hud.minHunger": "Minimum Hunger Fade",
"option.immersive_hud.showArmor": "Show Armor",
"tooltip.immersive_hud.hotbarMaxTime": "How long the hotbar can be displayed on screen in seconds",
"tooltip.immersive_hud.hotbarFadeIn": "How many seconds it takes for the hotbar to fade in",
"tooltip.immersive_hud.hotbarFadeOut": "How many seconds it takes for the hotbar to move out",
"tooltip.immersive_hud.experienceMaxTime": "How long the experience bar can be displayed on screen in seconds",
"tooltip.immersive_hud.experienceFadeIn": "How many seconds it takes for the experience bar to fade in",
"tooltip.immersive_hud.experienceFadeOut": "How many seconds it takes for the experience bar to move out",
"tooltip.immersive_hud.jumpMaxTime": "How long the horse jump bar can be displayed on screen in seconds",
"tooltip.immersive_hud.jumpFadeIn": "How many seconds it takes for the horse jump bar to fade in",
"tooltip.immersive_hud.jumpFadeOut": "How many seconds it takes for the horse jump bar to fade out",
"tooltip.immersive_hud.healthMaxTime": "How long the health bar can be displayed on screen in seconds",
"tooltip.immersive_hud.healthFadeIn": "How many seconds it takes for the health bar to fade in",
"tooltip.immersive_hud.healthFadeOut": "How many seconds it takes for the health bar to fade out",
"tooltip.immersive_hud.hungerMaxTime": "How long the hunger bar can be displayed on screen in seconds",
"tooltip.immersive_hud.hungerFadeIn": "How many seconds it takes for the hunger bar to fade in",
"tooltip.immersive_hud.hungerFadeOut": "How many seconds it takes for the hunger bar to fade out",
"tooltip.immersive_hud.effectMaxTime": "How long potion icons can be displayed on screen in seconds",
"tooltip.immersive_hud.effectFadeIn": "How many seconds it takes for potion icons to fade in",
"tooltip.immersive_hud.effectFadeOut": "How many seconds it takes for potion icons to fade out",
"tooltip.immersive_hud.crosshairTime": "How many seconds the crosshairs can be on screen",
"tooltip.immersive_hud.hideCrosshair": "Whether or not the crosshairs should be hidden after a period of time",
"tooltip.immersive_hud.handTime": "How many seconds the hands can be on screen",
"tooltip.immersive_hud.hideHands": "Whether or not hands should be hidden after a period of time",
"tooltip.immersive_hud.minHealth": "When the percentage of health goes below this level, the health bar won't fade away",
"tooltip.immersive_hud.minHunger": "When the hunger level goes below this level, the hunger bar won't fade away",
"tooltip.immersive_hud.showArmor": "Whether or not the armor bar should display on the HUD"
}

View File

@@ -9,8 +9,9 @@
"Markil 3" "Markil 3"
], ],
"contact": { "contact": {
"homepage": "https://fabricmc.net/", "homepage": "https://www.planetminecraft.com/mod/immersive-hud/",
"sources": "https://github.com/FabricMC/fabric-example-mod" "sources": "https://github.com/Markil3/MinecraftImmersiveHUD",
"issues": "https://github.com/Markil3/MinecraftImmersiveHUD/issues"
}, },
"license": "GPL-3.0-only", "license": "GPL-3.0-only",
@@ -20,6 +21,9 @@
"entrypoints": { "entrypoints": {
"main": [ "main": [
"markil3.immersive_hud.Main" "markil3.immersive_hud.Main"
],
"modmenu": [
"markil3.immersive_hud.ModMenu"
] ]
}, },
"mixins": [ "mixins": [
@@ -31,7 +35,10 @@
"depends": { "depends": {
"fabricloader": ">=0.7.4", "fabricloader": ">=0.7.4",
"fabric": "*", "minecraft": "1.14.x"
"minecraft": "1.16.x" },
"suggests": {
"modmenu": "*",
"cloth-config2": "*"
} }
} }

View File

@@ -8,8 +8,7 @@
"client": [ "client": [
"ClientPlayerHook", "ClientPlayerHook",
"HeldItemHook", "HeldItemHook",
"HudHook", "HudHook"
"ProfilerHook"
], ],
"injectors": { "injectors": {
"defaultRequire": 1 "defaultRequire": 1