Makes potion icons fade over time.
This commit is contained in:
@@ -140,6 +140,24 @@ public class EventBus
|
|||||||
resetAlpha();
|
resetAlpha();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case POTION_ICONS:
|
||||||
|
if (event instanceof RenderGameOverlayEvent.Pre)
|
||||||
|
{
|
||||||
|
TimerUtils.updatePotions(mc.player);
|
||||||
|
event.setCanceled(true);
|
||||||
|
RenderUtils.renderPotionIcons(mc,
|
||||||
|
mc.ingameGUI,
|
||||||
|
event.getMatrixStack());
|
||||||
|
resetAlpha();
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Reset the transparency.
|
||||||
|
*/
|
||||||
|
else if (event instanceof RenderGameOverlayEvent.Post)
|
||||||
|
{
|
||||||
|
resetAlpha();
|
||||||
|
}
|
||||||
|
break;
|
||||||
case HOTBAR:
|
case HOTBAR:
|
||||||
if (event instanceof RenderGameOverlayEvent.Pre)
|
if (event instanceof RenderGameOverlayEvent.Pre)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,32 +1,36 @@
|
|||||||
/**
|
/**
|
||||||
* Copyright (C) 2009-2021 Mojang Studios
|
* Copyright (C) 2009-2021 Mojang Studios
|
||||||
*
|
* <p>
|
||||||
* Players are free to create, build, and mod within Minecraft if the
|
* Players are free to create, build, and mod within Minecraft if the branding
|
||||||
* branding usage guidelines are followed. Fan art, logos, videos, and screen
|
* usage guidelines are followed. Fan art, logos, videos, and screen shots are
|
||||||
* shots are acceptable as long as they are not used to falsely represent
|
* acceptable as long as they are not used to falsely represent Mojang Minecraft
|
||||||
* Mojang Minecraft assets. If you intend to use any portion of the name in
|
* assets. If you intend to use any portion of the name in relation to
|
||||||
* relation to services, products, or distribution, you must adhere to the
|
* services, products, or distribution, you must adhere to the following
|
||||||
* following requirements.
|
* requirements.
|
||||||
*
|
* <p>
|
||||||
* Mojang's terms of service and brand guidelines are designed to let you
|
* Mojang's terms of service and brand guidelines are designed to let you know
|
||||||
* know in plain terms what you can and cannot do with your game, the Mojang
|
* in plain terms what you can and cannot do with your game, the Mojang brand or
|
||||||
* brand or Mojang assets.
|
* Mojang assets. https://account.mojang.com/documents/minecraft_eula
|
||||||
* https://account.mojang.com/documents/minecraft_eula
|
|
||||||
*/
|
*/
|
||||||
package markil3.immersive_hud;
|
package markil3.immersive_hud;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import com.google.common.collect.Ordering;
|
||||||
import com.mojang.blaze3d.matrix.MatrixStack;
|
import com.mojang.blaze3d.matrix.MatrixStack;
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.AbstractGui;
|
import net.minecraft.client.gui.AbstractGui;
|
||||||
import net.minecraft.client.gui.IngameGui;
|
import net.minecraft.client.gui.IngameGui;
|
||||||
|
import net.minecraft.client.gui.screen.inventory.ContainerScreen;
|
||||||
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
import net.minecraft.client.renderer.IRenderTypeBuffer;
|
||||||
import net.minecraft.client.renderer.RenderHelper;
|
import net.minecraft.client.renderer.RenderHelper;
|
||||||
import net.minecraft.client.renderer.model.IBakedModel;
|
import net.minecraft.client.renderer.model.IBakedModel;
|
||||||
import net.minecraft.client.renderer.model.ItemCameraTransforms;
|
import net.minecraft.client.renderer.model.ItemCameraTransforms;
|
||||||
import net.minecraft.client.renderer.texture.AtlasTexture;
|
import net.minecraft.client.renderer.texture.AtlasTexture;
|
||||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
import net.minecraft.client.renderer.texture.OverlayTexture;
|
||||||
|
import net.minecraft.client.renderer.texture.PotionSpriteUploader;
|
||||||
|
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
|
||||||
import net.minecraft.client.renderer.texture.TextureManager;
|
import net.minecraft.client.renderer.texture.TextureManager;
|
||||||
import net.minecraft.client.settings.AttackIndicatorStatus;
|
import net.minecraft.client.settings.AttackIndicatorStatus;
|
||||||
import net.minecraft.crash.CrashReport;
|
import net.minecraft.crash.CrashReport;
|
||||||
@@ -35,10 +39,16 @@ import net.minecraft.crash.ReportedException;
|
|||||||
import net.minecraft.entity.LivingEntity;
|
import net.minecraft.entity.LivingEntity;
|
||||||
import net.minecraft.entity.player.PlayerEntity;
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.potion.Effect;
|
||||||
|
import net.minecraft.potion.EffectInstance;
|
||||||
import net.minecraft.util.HandSide;
|
import net.minecraft.util.HandSide;
|
||||||
import net.minecraft.util.ResourceLocation;
|
import net.minecraft.util.ResourceLocation;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
import net.minecraft.world.World;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Contains methods for rendering various HUD elements. Most of these methods
|
* Contains methods for rendering various HUD elements. Most of these methods
|
||||||
* come from {@link IngameGui} and
|
* come from {@link IngameGui} and
|
||||||
@@ -50,6 +60,102 @@ import net.minecraft.world.World;
|
|||||||
*/
|
*/
|
||||||
public class RenderUtils
|
public class RenderUtils
|
||||||
{
|
{
|
||||||
|
public static void renderPotionIcons(Minecraft mc,
|
||||||
|
IngameGui gui,
|
||||||
|
MatrixStack matrixStack)
|
||||||
|
{
|
||||||
|
int scaledWidth = mc.getMainWindow().getScaledWidth();
|
||||||
|
int scaledHeight = mc.getMainWindow().getScaledHeight();
|
||||||
|
|
||||||
|
Collection<EffectInstance> collection =
|
||||||
|
mc.player.getActivePotionEffects();
|
||||||
|
if (!collection.isEmpty())
|
||||||
|
{
|
||||||
|
RenderSystem.enableBlend();
|
||||||
|
int i = 0;
|
||||||
|
int j = 0;
|
||||||
|
PotionSpriteUploader potionspriteuploader =
|
||||||
|
mc.getPotionSpriteUploader();
|
||||||
|
List<Runnable> list =
|
||||||
|
Lists.newArrayListWithExpectedSize(collection.size());
|
||||||
|
mc.getTextureManager()
|
||||||
|
.bindTexture(ContainerScreen.INVENTORY_BACKGROUND);
|
||||||
|
|
||||||
|
for (EffectInstance effectinstance : Ordering.natural()
|
||||||
|
.reverse()
|
||||||
|
.sortedCopy(collection))
|
||||||
|
{
|
||||||
|
Effect effect = effectinstance.getPotion();
|
||||||
|
float effectAlpha = TimerUtils.getPotionAlpha(mc.player, effectinstance);
|
||||||
|
if (!effectinstance.shouldRenderHUD() || effectAlpha < 0.01F)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// Rebind in case previous renderHUDEffect changed texture
|
||||||
|
mc.getTextureManager()
|
||||||
|
.bindTexture(ContainerScreen.INVENTORY_BACKGROUND);
|
||||||
|
if (effectinstance.isShowIcon())
|
||||||
|
{
|
||||||
|
int k = scaledWidth;
|
||||||
|
int l = 1;
|
||||||
|
if (mc.isDemo())
|
||||||
|
{
|
||||||
|
l += 15;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (effect.isBeneficial())
|
||||||
|
{
|
||||||
|
++i;
|
||||||
|
k = k - 25 * i;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
++j;
|
||||||
|
k = k - 25 * j;
|
||||||
|
l += 26;
|
||||||
|
}
|
||||||
|
|
||||||
|
RenderSystem.color4f(1.0F, 1.0F, 1.0F, effectAlpha);
|
||||||
|
if (effectinstance.isAmbient())
|
||||||
|
{
|
||||||
|
gui.blit(matrixStack, k, l, 165, 166, 24, 24);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gui.blit(matrixStack, k, l, 141, 166, 24, 24);
|
||||||
|
}
|
||||||
|
|
||||||
|
TextureAtlasSprite textureatlassprite =
|
||||||
|
potionspriteuploader.getSprite(effect);
|
||||||
|
int j1 = k;
|
||||||
|
int k1 = l;
|
||||||
|
float f1 = effectAlpha;
|
||||||
|
list.add(() -> {
|
||||||
|
mc.getTextureManager()
|
||||||
|
.bindTexture(textureatlassprite.getAtlasTexture()
|
||||||
|
.getTextureLocation());
|
||||||
|
RenderSystem.color4f(1.0F, 1.0F, 1.0F, f1);
|
||||||
|
gui.blit(matrixStack,
|
||||||
|
j1 + 3,
|
||||||
|
k1 + 3,
|
||||||
|
gui.getBlitOffset(),
|
||||||
|
18,
|
||||||
|
18,
|
||||||
|
textureatlassprite);
|
||||||
|
});
|
||||||
|
effectinstance.renderHUDEffect(gui,
|
||||||
|
matrixStack,
|
||||||
|
k,
|
||||||
|
l,
|
||||||
|
gui.getBlitOffset(),
|
||||||
|
effectAlpha);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
list.forEach(Runnable::run);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Renders the horse jump bar.
|
* Renders the horse jump bar.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.mojang.blaze3d.matrix.MatrixStack;
|
|||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.entity.player.ClientPlayerEntity;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.LivingEntity;
|
import net.minecraft.entity.LivingEntity;
|
||||||
import net.minecraft.item.BowItem;
|
import net.minecraft.item.BowItem;
|
||||||
@@ -19,10 +20,16 @@ import net.minecraft.item.ShootableItem;
|
|||||||
import net.minecraft.item.SnowballItem;
|
import net.minecraft.item.SnowballItem;
|
||||||
import net.minecraft.item.ThrowablePotionItem;
|
import net.minecraft.item.ThrowablePotionItem;
|
||||||
import net.minecraft.item.TridentItem;
|
import net.minecraft.item.TridentItem;
|
||||||
|
import net.minecraft.potion.Effect;
|
||||||
|
import net.minecraft.potion.EffectInstance;
|
||||||
import net.minecraft.potion.Effects;
|
import net.minecraft.potion.Effects;
|
||||||
import net.minecraft.util.Hand;
|
import net.minecraft.util.Hand;
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
import net.minecraft.util.math.RayTraceResult;
|
import net.minecraft.util.math.RayTraceResult;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class TimerUtils
|
public class TimerUtils
|
||||||
@@ -66,6 +73,8 @@ public class TimerUtils
|
|||||||
*/
|
*/
|
||||||
private static int mapLock;
|
private static int mapLock;
|
||||||
|
|
||||||
|
private static HashMap<Effect, Integer> 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.
|
||||||
@@ -310,6 +319,63 @@ public class TimerUtils
|
|||||||
return canceled;
|
return canceled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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 (Effect effect : Collections.checkedSet(effectTime.keySet(),
|
||||||
|
Effect.class))
|
||||||
|
{
|
||||||
|
if (!player.isPotionActive(effect))
|
||||||
|
{
|
||||||
|
effectTime.remove(effect);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtains how transparent
|
||||||
|
*
|
||||||
|
* @param player
|
||||||
|
* @param effectinstance
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static float getPotionAlpha(ClientPlayerEntity player,
|
||||||
|
EffectInstance effectinstance)
|
||||||
|
{
|
||||||
|
final int BLINK_TIME = 200;
|
||||||
|
float effectAlpha = 0.0F;
|
||||||
|
Integer time = effectTime.get(effectinstance.getPotion());
|
||||||
|
if (time == null)
|
||||||
|
{
|
||||||
|
effectTime.put(effectinstance.getPotion(), (time = VISUAL_TIME));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
effectTime.put(effectinstance.getPotion(), (time -= 1));
|
||||||
|
}
|
||||||
|
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 + 10)
|
||||||
|
{
|
||||||
|
effectAlpha = -(effectinstance.getDuration() - 200) / 22F + 0.454F;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
effectAlpha = Main.getAlpha(time);
|
||||||
|
}
|
||||||
|
return effectAlpha;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Updates several fields relating to what items are being held by the
|
* Updates several fields relating to what items are being held by the
|
||||||
* player.
|
* player.
|
||||||
|
|||||||
Reference in New Issue
Block a user