Compare commits

...

5 Commits

Author SHA1 Message Date
Markil3
47675e4412 Fixes a crash on some computers where the configuration file can't always be made. 2021-04-01 18:18:17 -06:00
Markil3
5219932076 Changes:
+ Adds the ability to determine whether hands and crosshairs disappear or not. This can be changed in the mod configuration.
* Reduces the chance of the mod crashing the game for ordinary events (any errors will be reported to the console, though).
Bug Fixes
* Fixes crash when mounting boat or minecart (#1 thanks, @theFuzzyWarble!)
2021-04-01 13:09:55 -06:00
Markil3
bb18357bfe 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:00:18 -06:00
Markil3
5e3b714190 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 09:27:07 -06:00
Markil3
5059774b34 Fixes a ClassCastException (#1) 2021-03-25 17:15:36 -06:00
5 changed files with 311 additions and 208 deletions

View File

@@ -10,6 +10,6 @@ forge_version=26.0.63
# Mod Properties # Mod Properties
mod_version = 1.0 mod_version = 1.1.1
maven_group = markil3 maven_group = markil3
archives_base_name = immersive_hud archives_base_name = immersive_hud

View File

@@ -3,6 +3,7 @@ package markil3.immersive_hud;
import com.electronwill.nightconfig.core.file.CommentedFileConfig; import com.electronwill.nightconfig.core.file.CommentedFileConfig;
import com.electronwill.nightconfig.core.io.WritingMode; import com.electronwill.nightconfig.core.io.WritingMode;
import net.minecraft.client.Minecraft;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.common.ForgeConfigSpec;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
@@ -49,7 +50,7 @@ public class ConfigManager
new ForgeConfigSpec.Builder().configure(ConfigManager::new); new ForgeConfigSpec.Builder().configure(ConfigManager::new);
INSTANCE = specPair.getLeft(); INSTANCE = specPair.getLeft();
SPEC = specPair.getRight(); SPEC = specPair.getRight();
CommentedFileConfig config = CommentedFileConfig.builder(CONFIG_PATH) CommentedFileConfig config = CommentedFileConfig.builder(Minecraft.getInstance().gameDir.toPath().toAbsolutePath().resolve(CONFIG_PATH))
.sync() .sync()
.autoreload() .autoreload()
.writingMode(WritingMode.REPLACE) .writingMode(WritingMode.REPLACE)
@@ -154,7 +155,9 @@ public class ConfigManager
private final TimeValues hungerTime; private final TimeValues hungerTime;
private final TimeValues effectTime; private final TimeValues effectTime;
private final ForgeConfigSpec.IntValue crosshairTime; private final ForgeConfigSpec.IntValue crosshairTime;
private final ForgeConfigSpec.BooleanValue hideCrosshair;
private final ForgeConfigSpec.IntValue handTime; private final ForgeConfigSpec.IntValue handTime;
private final ForgeConfigSpec.BooleanValue hideHands;
private final ForgeConfigSpec.BooleanValue showArmor; private final ForgeConfigSpec.BooleanValue showArmor;
private final ForgeConfigSpec.DoubleValue minHealth; private final ForgeConfigSpec.DoubleValue minHealth;
private final ForgeConfigSpec.IntValue minHunger; private final ForgeConfigSpec.IntValue minHunger;
@@ -181,6 +184,10 @@ public class ConfigManager
6 * TICKS_PER_SECOND, 6 * TICKS_PER_SECOND,
0, 0,
10 * 60 * TICKS_PER_SECOND); 10 * 60 * TICKS_PER_SECOND);
this.hideCrosshair =
configSpecBuilder.translation(
"immersive_hud.configGui.hideCrosshair.title")
.define("hideCrosshair", true);
this.handTime = this.handTime =
configSpecBuilder.translation( configSpecBuilder.translation(
"immersive_hud.configGui.handTime.title") "immersive_hud.configGui.handTime.title")
@@ -188,6 +195,10 @@ public class ConfigManager
30 * TICKS_PER_SECOND, 30 * TICKS_PER_SECOND,
0, 0,
10 * 60 * TICKS_PER_SECOND); 10 * 60 * TICKS_PER_SECOND);
this.hideHands =
configSpecBuilder.translation(
"immersive_hud.configGui.hideHands.title")
.define("hideHands", true);
this.showArmor = configSpecBuilder.translation( this.showArmor = configSpecBuilder.translation(
"immersive_hud.configGui.showArmor.title") "immersive_hud.configGui.showArmor.title")
.define("showArmor", true); .define("showArmor", true);
@@ -281,6 +292,16 @@ public class ConfigManager
return this.crosshairTime.get(); return this.crosshairTime.get();
} }
/**
* 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.get();
}
/** /**
* Obtains the time that the hands are allowed to display. * Obtains the time that the hands are allowed to display.
* *
@@ -291,6 +312,16 @@ public class ConfigManager
return this.handTime.get(); return this.handTime.get();
} }
/**
* 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.get();
}
/** /**
* Checks whether the armor bar should render. * Checks whether the armor bar should render.
* *
@@ -334,6 +365,16 @@ public class ConfigManager
// } // }
// //
// /** // /**
// * 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.set(hide);
// }
//
// /**
// * Sets the time that the hands are allowed to display. // * Sets the time that the hands are allowed to display.
// * // *
// * @param time - The hand display time values. // * @param time - The hand display time values.
@@ -344,6 +385,16 @@ public class ConfigManager
// } // }
// //
// /** // /**
// * 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.set(hide);
// }
//
// /**
// * Determines whether the armor bar should render. // * Determines whether the armor bar should render.
// * // *
// * @param show - Whether or not armor shows on the HUD. // * @param show - Whether or not armor shows on the HUD.

View File

@@ -23,7 +23,6 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.RenderGameOverlayEvent; import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.client.event.RenderHandEvent;
import net.minecraftforge.client.event.RenderSpecificHandEvent; import net.minecraftforge.client.event.RenderSpecificHandEvent;
import net.minecraftforge.event.entity.EntityMountEvent; import net.minecraftforge.event.entity.EntityMountEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent;
@@ -62,14 +61,24 @@ public class EventBus
@SubscribeEvent @SubscribeEvent
public static void onClick(final PlayerInteractEvent event) public static void onClick(final PlayerInteractEvent event)
{ {
DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> try
{ {
Item item = DistExecutor.runWhenOn(Dist.CLIENT, () -> () ->
Optional.ofNullable(event.getItemStack()) {
.map(ItemStack::getItem) Item item =
.orElse(null); Optional.ofNullable(event.getItemStack())
TimerUtils.onClick(event.getHand(), item); .map(ItemStack::getItem)
}); .orElse(null);
TimerUtils.onClick(event.getHand(), item);
});
}
catch (Exception e)
{
LOGGER.error(
"Error in running markil3.immersive_hud.EventBus#onClick " +
"event",
e);
}
} }
/** /**
@@ -84,10 +93,20 @@ public class EventBus
@SubscribeEvent @SubscribeEvent
public static void onMount(final EntityMountEvent event) public static void onMount(final EntityMountEvent event)
{ {
DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> try
{ {
TimerUtils.resetMountHealth(); DistExecutor.runWhenOn(Dist.CLIENT, () -> () ->
}); {
TimerUtils.resetMountHealth();
});
}
catch (Exception e)
{
LOGGER.error(
"Error in running markil3.immersive_hud.EventBus#onMount " +
"event",
e);
}
} }
/** /**
@@ -99,10 +118,20 @@ public class EventBus
@SubscribeEvent @SubscribeEvent
public static void onRenderHand(final RenderSpecificHandEvent event) public static void onRenderHand(final RenderSpecificHandEvent event)
{ {
if (TimerUtils.onRenderHand(event.getHand(), try
event.getPartialTicks()))
{ {
event.setCanceled(true); if (TimerUtils.onRenderHand(event.getHand(),
event.getPartialTicks()))
{
event.setCanceled(true);
}
}
catch (Exception e)
{
LOGGER.error(
"Error in running markil3.immersive_hud" +
".EventBus#onRenderHand event",
e);
} }
} }
@@ -115,153 +144,162 @@ public class EventBus
@SubscribeEvent @SubscribeEvent
public static void onGUIDraw(final RenderGameOverlayEvent event) public static void onGUIDraw(final RenderGameOverlayEvent event)
{ {
Minecraft mc = Minecraft.getInstance(); try
boolean fadeIn = false;
switch (event.getType())
{ {
case CROSSHAIRS: Minecraft mc = Minecraft.getInstance();
if (event instanceof RenderGameOverlayEvent.Pre) boolean fadeIn = false;
switch (event.getType())
{ {
if (TimerUtils.drawCrosshair(event.getPartialTicks())) case CROSSHAIRS:
if (event instanceof RenderGameOverlayEvent.Pre)
{
if (TimerUtils.drawCrosshair(event.getPartialTicks()))
{
event.setCanceled(true);
}
}
/*
* Reset the transparency.
*/
else if (event instanceof RenderGameOverlayEvent.Post)
{
resetAlpha();
}
break;
case POTION_ICONS:
if (event instanceof RenderGameOverlayEvent.Pre)
{
TimerUtils.updatePotions(mc.player);
event.setCanceled(true);
RenderUtils.renderPotionIcons(mc,
mc.ingameGUI, event.getPartialTicks());
resetAlpha();
}
break;
case HOTBAR:
if (event instanceof RenderGameOverlayEvent.Pre)
{ {
event.setCanceled(true); event.setCanceled(true);
if (!TimerUtils.drawHotbar(event.getPartialTicks()))
{
RenderUtils.renderHotbar(mc, mc.ingameGUI,
event.getPartialTicks(), TimerUtils.hotbarTime);
}
} }
} break;
/* case HEALTH:
* Reset the transparency. if (event instanceof RenderGameOverlayEvent.Pre)
*/
else if (event instanceof RenderGameOverlayEvent.Post)
{
resetAlpha();
}
break;
case POTION_ICONS:
if (event instanceof RenderGameOverlayEvent.Pre)
{
TimerUtils.updatePotions(mc.player);
event.setCanceled(true);
RenderUtils.renderPotionIcons(mc,
mc.ingameGUI, event.getPartialTicks());
resetAlpha();
}
break;
case HOTBAR:
if (event instanceof RenderGameOverlayEvent.Pre)
{
event.setCanceled(true);
if (!TimerUtils.drawHotbar(event.getPartialTicks()))
{ {
RenderUtils.renderHotbar(mc, mc.ingameGUI, if (TimerUtils.drawHealth(event.getPartialTicks()))
event.getPartialTicks(), TimerUtils.hotbarTime); {
event.setCanceled(true);
}
} }
} else if (event instanceof RenderGameOverlayEvent.Post)
break; {
case HEALTH: GlStateManager.popMatrix();
if (event instanceof RenderGameOverlayEvent.Pre) resetAlpha();
{ }
if (TimerUtils.drawHealth(event.getPartialTicks())) break;
case FOOD:
if (event instanceof RenderGameOverlayEvent.Pre)
{
if (TimerUtils.drawHunger(event.getPartialTicks()))
{
event.setCanceled(true);
}
}
/*
* Reset the transparency.
*/
else if (event instanceof RenderGameOverlayEvent.Post)
{
GlStateManager.popMatrix();
resetAlpha();
}
break;
case ARMOR:
if (event instanceof RenderGameOverlayEvent.Pre)
{
if (TimerUtils.drawArmor(event.getPartialTicks()))
{
event.setCanceled(true);
}
}
/*
* Reset the transparency.
*/
else if (event instanceof RenderGameOverlayEvent.Post)
{
GlStateManager.popMatrix();
resetAlpha();
}
break;
case AIR:
if (event instanceof RenderGameOverlayEvent.Pre)
{
if (TimerUtils.drawAir(event.getPartialTicks()))
{
event.setCanceled(true);
}
}
/*
* Reset the transparency.
*/
else if (event instanceof RenderGameOverlayEvent.Post)
{
GlStateManager.popMatrix();
resetAlpha();
}
break;
case HEALTHMOUNT:
if (event instanceof RenderGameOverlayEvent.Pre)
{
if (TimerUtils.drawMountHealth(event.getPartialTicks()))
{
event.setCanceled(true);
}
}
else if (event instanceof RenderGameOverlayEvent.Post)
{
GlStateManager.popMatrix();
resetAlpha();
}
break;
case JUMPBAR:
if (event instanceof RenderGameOverlayEvent.Pre)
{ {
event.setCanceled(true); event.setCanceled(true);
if (!TimerUtils.drawJumpbar(event.getPartialTicks()))
{
RenderUtils.renderHorseJumpBar(mc,
mc.ingameGUI,
event.getPartialTicks(),
TimerUtils.jumpTime);
}
} }
} break;
else if (event instanceof RenderGameOverlayEvent.Post) case EXPERIENCE:
{ if (event instanceof RenderGameOverlayEvent.Pre)
GlStateManager.popMatrix();
resetAlpha();
}
break;
case FOOD:
if (event instanceof RenderGameOverlayEvent.Pre)
{
if (TimerUtils.drawHunger(event.getPartialTicks()))
{ {
event.setCanceled(true); event.setCanceled(true);
if (!TimerUtils.drawExperience(event.getPartialTicks()))
{
RenderUtils.renderExperience(mc,
mc.ingameGUI,
event.getPartialTicks(),
TimerUtils.experienceTime);
}
} }
break;
} }
/* }
* Reset the transparency. catch (Exception e)
*/ {
else if (event instanceof RenderGameOverlayEvent.Post) LOGGER.error(
{ "Error in running markil3.immersive_hud.EventBus#onGUIDraw event",
GlStateManager.popMatrix(); e);
resetAlpha();
}
break;
case ARMOR:
if (event instanceof RenderGameOverlayEvent.Pre)
{
if (TimerUtils.drawArmor(event.getPartialTicks()))
{
event.setCanceled(true);
}
}
/*
* Reset the transparency.
*/
else if (event instanceof RenderGameOverlayEvent.Post)
{
GlStateManager.popMatrix();
resetAlpha();
}
break;
case AIR:
if (event instanceof RenderGameOverlayEvent.Pre)
{
if (TimerUtils.drawAir(event.getPartialTicks()))
{
event.setCanceled(true);
}
}
/*
* Reset the transparency.
*/
else if (event instanceof RenderGameOverlayEvent.Post)
{
GlStateManager.popMatrix();
resetAlpha();
}
break;
case HEALTHMOUNT:
if (event instanceof RenderGameOverlayEvent.Pre)
{
if (TimerUtils.drawMountHealth(event.getPartialTicks()))
{
event.setCanceled(true);
}
}
else if (event instanceof RenderGameOverlayEvent.Post)
{
GlStateManager.popMatrix();
resetAlpha();
}
break;
case JUMPBAR:
if (event instanceof RenderGameOverlayEvent.Pre)
{
event.setCanceled(true);
if (!TimerUtils.drawJumpbar(event.getPartialTicks()))
{
RenderUtils.renderHorseJumpBar(mc,
mc.ingameGUI,
event.getPartialTicks(),
TimerUtils.jumpTime);
}
}
break;
case EXPERIENCE:
if (event instanceof RenderGameOverlayEvent.Pre)
{
event.setCanceled(true);
if (!TimerUtils.drawExperience(event.getPartialTicks()))
{
RenderUtils.renderExperience(mc,
mc.ingameGUI,
event.getPartialTicks(),
TimerUtils.experienceTime);
}
}
break;
} }
} }
} }

View File

@@ -294,55 +294,60 @@ public class TimerUtils
{ {
float HAND_UP_TIME = 20F; float HAND_UP_TIME = 20F;
switch (hand) boolean hideHands =
ConfigManager.getInstance().hideHands();
if (hideHands)
{ {
case OFF_HAND: switch (hand)
if (mainHandTime > 0 && mainHandTime < HAND_UP_TIME)
{ {
/* case OFF_HAND:
* Undo the transformation of the previous hand if (mainHandTime > 0 && mainHandTime < HAND_UP_TIME)
*/
GlStateManager.translatef(0,
(float) (1.0F * (HAND_UP_TIME - mainHandTime) / HAND_UP_TIME),
0);
}
if (offHandTime == 0 && !offHandLock)
{
return true;
}
else if (!offHandLock && (mapLock & 0b01) == 0)
{
if (offHandTime > 0)
{
offHandTime -= ticks;
}
if (offHandTime < HAND_UP_TIME)
{ {
/*
* Undo the transformation of the previous hand
*/
GlStateManager.translatef(0, GlStateManager.translatef(0,
(float) (-1.0F * (HAND_UP_TIME - offHandTime) / HAND_UP_TIME), (float) (1.0F * (HAND_UP_TIME - mainHandTime) / HAND_UP_TIME),
0); 0);
} }
} if (offHandTime == 0 && !offHandLock)
break;
case MAIN_HAND:
if (mainHandTime == 0 && !mainHandLock)
{
return true;
}
else if (!mainHandLock && (mapLock & 0b10) == 0)
{
if (mainHandTime > 0)
{ {
mainHandTime -= ticks; return true;
} }
if (mainHandTime < HAND_UP_TIME) else if (!offHandLock && (mapLock & 0b01) == 0)
{ {
GlStateManager.translatef(0, if (offHandTime > 0)
(float) (-1.0F * (HAND_UP_TIME - mainHandTime) / HAND_UP_TIME), {
0); offHandTime -= ticks;
}
if (offHandTime < HAND_UP_TIME)
{
GlStateManager.translatef(0,
(float) (-1.0F * (HAND_UP_TIME - offHandTime) / HAND_UP_TIME),
0);
}
} }
break;
case MAIN_HAND:
if (mainHandTime == 0 && !mainHandLock)
{
return true;
}
else if (!mainHandLock && (mapLock & 0b10) == 0)
{
if (mainHandTime > 0)
{
mainHandTime -= ticks;
}
if (mainHandTime < HAND_UP_TIME)
{
GlStateManager.translatef(0,
(float) (-1.0F * (HAND_UP_TIME - mainHandTime) / HAND_UP_TIME),
0);
}
}
break;
} }
break;
} }
return false; return false;
} }
@@ -378,34 +383,39 @@ public class TimerUtils
boolean changed = false; boolean changed = false;
boolean canceled = false; boolean canceled = false;
if (mc.objectMouseOver != null && mc.objectMouseOver.getType() != RayTraceResult.Type.MISS) boolean hideCrosshair =
ConfigManager.getInstance().hideCrosshair();
if (hideCrosshair)
{ {
if (mc.objectMouseOver.getType() == RayTraceResult.Type.ENTITY) if (mc.objectMouseOver != null && mc.objectMouseOver.getType() != RayTraceResult.Type.MISS)
{ {
if (mc.objectMouseOver.hitInfo == null || mc.objectMouseOver.hitInfo != mc.player if (mc.objectMouseOver.getType() == RayTraceResult.Type.ENTITY)
.getRidingEntity()) {
if (mc.objectMouseOver.hitInfo == null || mc.objectMouseOver.hitInfo != mc.player
.getRidingEntity())
{
changed = true;
}
}
else
{ {
changed = true; changed = true;
} }
} }
if (changed || mainHandLock || offHandLock || crosshairTime > 0)
{
setAlpha(Main.getAlpha(crosshairTime > 0 ?
crosshairTime :
CROSSHAIR_TIME, CROSSHAIR_TIME, 0, 0));
}
else else
{ {
changed = true; canceled = true;
}
if (crosshairTime > 0)
{
crosshairTime -= ticks;
} }
}
if (changed || mainHandLock || offHandLock || crosshairTime > 0)
{
setAlpha(Main.getAlpha(crosshairTime > 0 ?
crosshairTime :
CROSSHAIR_TIME, CROSSHAIR_TIME, 0, 0));
}
else
{
canceled = true;
}
if (crosshairTime > 0)
{
crosshairTime -= ticks;
} }
return canceled; return canceled;
@@ -923,7 +933,7 @@ public class TimerUtils
Entity tmp = mc.player.getRidingEntity(); Entity tmp = mc.player.getRidingEntity();
boolean changed = false; boolean changed = false;
if (tmp == null) if (tmp == null || !(tmp instanceof LivingEntity))
{ {
mountHealth = -1; mountHealth = -1;
mountMaxHealth = -1; mountMaxHealth = -1;

View File

@@ -19,7 +19,9 @@
"option.immersive_hud.effectFadeIn": "Potion Fade In Time", "option.immersive_hud.effectFadeIn": "Potion Fade In Time",
"option.immersive_hud.effectFadeOut": "Potion Fade Out Time", "option.immersive_hud.effectFadeOut": "Potion Fade Out Time",
"option.immersive_hud.crosshairTime": "Crosshair Display Time", "option.immersive_hud.crosshairTime": "Crosshair Display Time",
"option.immersive_hud.hideCrosshair": "Hide Crosshair",
"option.immersive_hud.handTime": "Hand Display Time", "option.immersive_hud.handTime": "Hand Display Time",
"option.immersive_hud.hideHands": "Hide Hands",
"option.immersive_hud.minHealth": "Minimum Health Fade", "option.immersive_hud.minHealth": "Minimum Health Fade",
"option.immersive_hud.minHunger": "Minimum Hunger Fade", "option.immersive_hud.minHunger": "Minimum Hunger Fade",
"option.immersive_hud.showArmor": "Show Armor", "option.immersive_hud.showArmor": "Show Armor",
@@ -42,7 +44,9 @@
"tooltip.immersive_hud.effectFadeIn": "How many seconds it takes for potion icons to fade in", "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.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.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.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.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.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" "tooltip.immersive_hud.showArmor": "Whether or not the armor bar should display on the HUD"