mirror of
https://github.com/GTNewHorizons/waila.git
synced 2026-11-14 17:14:51 +00:00
Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
76406153ee | ||
|
|
cb1b75a17b | ||
|
|
f172a0dbb0 |
No files matched your search
@@ -16,7 +16,7 @@ import mcp.mobius.waila.handlers.HUDHandlerBlocks;
|
||||
import mcp.mobius.waila.handlers.HUDHandlerEntities;
|
||||
import mcp.mobius.waila.handlers.VanillaTooltipHandler;
|
||||
import mcp.mobius.waila.handlers.nei.NEIHandler;
|
||||
import mcp.mobius.waila.overlay.EntityIconRenderer;
|
||||
import mcp.mobius.waila.overlay.BreakProgressRenderer;
|
||||
import mcp.mobius.waila.overlay.tooltiprenderers.TTRenderAspectString;
|
||||
import mcp.mobius.waila.overlay.tooltiprenderers.TTRenderBar;
|
||||
import mcp.mobius.waila.overlay.tooltiprenderers.TTRenderFluidBar;
|
||||
@@ -54,7 +54,8 @@ public class ProxyClient extends ProxyServer {
|
||||
ModuleRegistrar.instance().addConfig("General", "general.showents");
|
||||
ModuleRegistrar.instance().addConfig("General", "general.showhp");
|
||||
ModuleRegistrar.instance().addConfig("General", "general.showcrop");
|
||||
ModuleRegistrar.instance().addConfig("General", EntityIconRenderer.CFG_SHOW, true);
|
||||
ModuleRegistrar.instance().addConfig("General", BreakProgressRenderer.CFG_ENABLED, true);
|
||||
ModuleRegistrar.instance().addConfig("General", BreakProgressRenderer.CFG_TOP, false);
|
||||
|
||||
ModuleRegistrar.instance().registerTooltipRenderer("waila.health", new TTRenderHealth());
|
||||
ModuleRegistrar.instance().registerTooltipRenderer("waila.stack", new TTRenderStack());
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
package mcp.mobius.waila.overlay;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.multiplayer.PlayerControllerMP;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.util.MovingObjectPosition;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.ForgeHooks;
|
||||
|
||||
import cpw.mods.fml.relauncher.ReflectionHelper;
|
||||
import mcp.mobius.waila.Waila;
|
||||
import mcp.mobius.waila.api.impl.ConfigHandler;
|
||||
import mcp.mobius.waila.utils.ColorUtils;
|
||||
|
||||
/**
|
||||
* Draws the block break progress as a thin line on the edge of the tooltip box (Jade style). Based on the break
|
||||
* progress of WDMla (https://github.com/GTNewHorizons/WDMla).
|
||||
*/
|
||||
public final class BreakProgressRenderer {
|
||||
|
||||
public static final String CFG_ENABLED = "general.breakprogress";
|
||||
public static final String CFG_TOP = "general.breakprogresstop";
|
||||
|
||||
/** Alpha change per game tick */
|
||||
private static final float FADE_PER_TICK = 0.1f;
|
||||
/** Alpha while mining. The line is fully opaque only in the last tick before the block breaks. */
|
||||
private static final float MAX_ALPHA = 0.6f;
|
||||
|
||||
private static float progress;
|
||||
private static float alpha;
|
||||
private static boolean canHarvest = true;
|
||||
private static long lastFrame;
|
||||
private static World lastWorld;
|
||||
private static int lastX, lastY, lastW, lastH;
|
||||
|
||||
private static Field curBlockDamageField;
|
||||
private static boolean fieldFailed;
|
||||
|
||||
private BreakProgressRenderer() {}
|
||||
|
||||
private static boolean isEnabled() {
|
||||
return ConfigHandler.instance().getConfig(CFG_ENABLED, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the progress state. Call this one time per frame before you draw.
|
||||
*/
|
||||
public static void update(float partialTicks) {
|
||||
final Minecraft mc = Minecraft.getMinecraft();
|
||||
long now = Minecraft.getSystemTime();
|
||||
// A paused or lagging client must not fade out in one step
|
||||
float deltaTicks = Math.min((now - lastFrame) / 50f, 1f);
|
||||
lastFrame = now;
|
||||
|
||||
if (mc.theWorld != lastWorld) {
|
||||
lastWorld = mc.theWorld;
|
||||
progress = alpha = 0;
|
||||
}
|
||||
if (!isEnabled() || mc.playerController == null || mc.theWorld == null || mc.thePlayer == null) {
|
||||
progress = alpha = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
float damage = getBlockDamage(mc.playerController);
|
||||
MovingObjectPosition target = RayTracing.instance().getTarget();
|
||||
if (damage <= 0 || target == null || target.typeOfHit != MovingObjectPosition.MovingObjectType.BLOCK) {
|
||||
// Not mining (anymore), fade out the last progress
|
||||
alpha = Math.max(alpha - deltaTicks * FADE_PER_TICK, 0f);
|
||||
return;
|
||||
}
|
||||
|
||||
int x = target.blockX, y = target.blockY, z = target.blockZ;
|
||||
Block block = mc.theWorld.getBlock(x, y, z);
|
||||
canHarvest = ForgeHooks.canHarvestBlock(block, mc.thePlayer, mc.theWorld.getBlockMetadata(x, y, z));
|
||||
alpha = Math.min(alpha + deltaTicks * FADE_PER_TICK, MAX_ALPHA);
|
||||
float perTick = block.getPlayerRelativeBlockHardness(mc.thePlayer, mc.theWorld, x, y, z);
|
||||
if (damage + perTick >= 1f) {
|
||||
// The block breaks in the next tick
|
||||
alpha = progress = 1f;
|
||||
} else {
|
||||
progress = MathHelper.clamp_float(damage + partialTicks * perTick, 0f, 1f);
|
||||
}
|
||||
}
|
||||
|
||||
private static float getBlockDamage(PlayerControllerMP controller) {
|
||||
if (fieldFailed) return 0f;
|
||||
try {
|
||||
if (curBlockDamageField == null) {
|
||||
curBlockDamageField = ReflectionHelper
|
||||
.findField(PlayerControllerMP.class, "curBlockDamageMP", "field_78770_f");
|
||||
}
|
||||
return curBlockDamageField.getFloat(controller);
|
||||
} catch (Exception e) {
|
||||
fieldFailed = true;
|
||||
Waila.log.error("Cannot read the block damage, break progress is disabled", e);
|
||||
return 0f;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the line on the outer row of the tooltip box. The arguments are the box geometry from {@link Tooltip}.
|
||||
*/
|
||||
public static void draw(int x, int y, int w, int h) {
|
||||
lastX = x;
|
||||
lastY = y;
|
||||
lastW = w;
|
||||
lastH = h;
|
||||
if (!isEnabled() || alpha <= 0) return;
|
||||
|
||||
int width = (int) ((w - 1) * progress);
|
||||
if (width <= 0) return;
|
||||
|
||||
// Transparent as the box background
|
||||
float boxAlpha = (OverlayConfig.alpha >>> 24) / 255f;
|
||||
int base = canHarvest ? ColorUtils.breakProgress.getColor() : ColorUtils.breakProgressFailure.getColor();
|
||||
int color = ((int) (((base >>> 24) & 0xFF) * alpha * boxAlpha) << 24) | (base & 0xFFFFFF);
|
||||
|
||||
boolean top = ConfigHandler.instance().getConfig(CFG_TOP, false);
|
||||
DisplayUtil.drawGradientRect(x + 1, top ? y : y + h, width, 1, color, color);
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws only the fading line, for when the tooltip itself is already gone.
|
||||
*/
|
||||
public static void drawLast() {
|
||||
draw(lastX, lastY, lastW, lastH);
|
||||
}
|
||||
}
|
||||
@@ -1,162 +0,0 @@
|
||||
package mcp.mobius.waila.overlay;
|
||||
|
||||
import java.nio.FloatBuffer;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.ScaledResolution;
|
||||
import net.minecraft.client.renderer.ActiveRenderInfo;
|
||||
import net.minecraft.client.renderer.GLAllocation;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.client.renderer.entity.RenderManager;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.opengl.GL12;
|
||||
|
||||
import mcp.mobius.waila.api.impl.ConfigHandler;
|
||||
import mcp.mobius.waila.utils.WailaExceptionHandler;
|
||||
|
||||
/**
|
||||
* Draws a small turning 3D model of an entity as the tooltip icon. Based on {@code GuiInventory.func_147046_a} and the
|
||||
* entity icon of WDMla (https://github.com/GTNewHorizons/WDMla).
|
||||
*/
|
||||
public final class EntityIconRenderer {
|
||||
|
||||
public static final String CFG_SHOW = "general.showentityicon";
|
||||
|
||||
/** Degrees per second */
|
||||
private static final float TURN_SPEED = 45f;
|
||||
|
||||
private static final Set<Class<?>> failedClasses = new HashSet<>();
|
||||
private static final FloatBuffer modelview = GLAllocation.createDirectFloatBuffer(16);
|
||||
|
||||
private EntityIconRenderer() {}
|
||||
|
||||
public static boolean isEnabled() {
|
||||
return ConfigHandler.instance().getConfig(CFG_SHOW, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Draws the entity in the square with the top left corner (x, y) and the side length size.
|
||||
*/
|
||||
public static void render(int x, int y, int size, Entity entity) {
|
||||
if (entity == null || failedClasses.contains(entity.getClass())) return;
|
||||
|
||||
final Minecraft mc = Minecraft.getMinecraft();
|
||||
// The body of most mobs is longer than the bounding box is wide, and the model turns
|
||||
float extent = Math.max(Math.max(entity.height, entity.width * 1.5f), 0.1f);
|
||||
float scale = size / extent;
|
||||
float angle = (Minecraft.getSystemTime() % 360000L) / 1000f * TURN_SPEED;
|
||||
|
||||
float yaw = entity.rotationYaw;
|
||||
float prevYaw = entity.prevRotationYaw;
|
||||
float pitch = entity.rotationPitch;
|
||||
float prevPitch = entity.prevRotationPitch;
|
||||
float bodyYaw = 0, prevBodyYaw = 0, headYaw = 0, prevHeadYaw = 0;
|
||||
EntityLivingBase living = entity instanceof EntityLivingBase l ? l : null;
|
||||
if (living != null) {
|
||||
bodyYaw = living.renderYawOffset;
|
||||
prevBodyYaw = living.prevRenderYawOffset;
|
||||
headYaw = living.rotationYawHead;
|
||||
prevHeadYaw = living.prevRotationYawHead;
|
||||
}
|
||||
float playerViewY = RenderManager.instance.playerViewY;
|
||||
float infoX = ActiveRenderInfo.rotationX, infoZ = ActiveRenderInfo.rotationZ;
|
||||
float infoYZ = ActiveRenderInfo.rotationYZ, infoXZ = ActiveRenderInfo.rotationXZ,
|
||||
infoXY = ActiveRenderInfo.rotationXY;
|
||||
boolean hideGui = mc.gameSettings.hideGUI;
|
||||
|
||||
// Entity renderers change blend, depth, alpha and lighting state (so save all of it)
|
||||
int matrixDepth = GL11.glGetInteger(GL11.GL_MODELVIEW_STACK_DEPTH);
|
||||
int attribDepth = GL11.glGetInteger(GL11.GL_ATTRIB_STACK_DEPTH);
|
||||
GL11.glPushMatrix();
|
||||
GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS);
|
||||
try {
|
||||
// Models can be larger than their bounding box, do not draw over the text
|
||||
ScaledResolution res = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
|
||||
float factor = res.getScaleFactor() * OverlayConfig.scale;
|
||||
int margin = 3;
|
||||
GL11.glEnable(GL11.GL_SCISSOR_TEST);
|
||||
GL11.glScissor(
|
||||
(int) ((x - margin) * factor),
|
||||
(int) (mc.displayHeight - (y + size + margin) * factor),
|
||||
(int) ((size + 2 * margin) * factor),
|
||||
(int) ((size + 2 * margin) * factor));
|
||||
|
||||
GL11.glEnable(GL11.GL_COLOR_MATERIAL);
|
||||
GL11.glEnable(GL11.GL_DEPTH_TEST);
|
||||
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
|
||||
GL11.glColor4f(1f, 1f, 1f, 1f);
|
||||
|
||||
GL11.glTranslatef(x + size / 2f, y + size / 2f + entity.height * scale / 2f, 100f);
|
||||
GL11.glScalef(-scale, scale, scale);
|
||||
GL11.glRotatef(180f, 0f, 0f, 1f);
|
||||
GL11.glRotatef(-15f, 1f, 0f, 0f);
|
||||
GL11.glRotatef(135f, 0f, 1f, 0f);
|
||||
RenderHelper.enableStandardItemLighting();
|
||||
GL11.glRotatef(-135f + angle, 0f, 1f, 0f);
|
||||
GL11.glTranslatef(0f, entity.yOffset, 0f);
|
||||
|
||||
entity.rotationYaw = entity.prevRotationYaw = 0f;
|
||||
entity.rotationPitch = entity.prevRotationPitch = 0f;
|
||||
if (living != null) {
|
||||
living.renderYawOffset = living.prevRenderYawOffset = 0f;
|
||||
living.rotationYawHead = living.prevRotationYawHead = 0f;
|
||||
}
|
||||
RenderManager.instance.playerViewY = 180f;
|
||||
setBillboardAxes();
|
||||
// Hide name tags
|
||||
mc.gameSettings.hideGUI = true;
|
||||
|
||||
RenderManager.instance.renderEntityWithPosYaw(entity, 0d, 0d, 0d, 0f, 1f);
|
||||
} catch (Exception | LinkageError e) {
|
||||
failedClasses.add(entity.getClass());
|
||||
WailaExceptionHandler.handleErr(e, "EntityIconRenderer | " + entity.getClass().getName(), null);
|
||||
} finally {
|
||||
mc.gameSettings.hideGUI = hideGui;
|
||||
RenderManager.instance.playerViewY = playerViewY;
|
||||
ActiveRenderInfo.rotationX = infoX;
|
||||
ActiveRenderInfo.rotationZ = infoZ;
|
||||
ActiveRenderInfo.rotationYZ = infoYZ;
|
||||
ActiveRenderInfo.rotationXZ = infoXZ;
|
||||
ActiveRenderInfo.rotationXY = infoXY;
|
||||
entity.rotationYaw = yaw;
|
||||
entity.prevRotationYaw = prevYaw;
|
||||
entity.rotationPitch = pitch;
|
||||
entity.prevRotationPitch = prevPitch;
|
||||
if (living != null) {
|
||||
living.renderYawOffset = bodyYaw;
|
||||
living.prevRenderYawOffset = prevBodyYaw;
|
||||
living.rotationYawHead = headYaw;
|
||||
living.prevRotationYawHead = prevHeadYaw;
|
||||
}
|
||||
|
||||
// A renderer can leave unbalanced pushes behind, but should never pop the caller's. Query each
|
||||
// stack once and pop down to where it started.
|
||||
for (int i = GL11.glGetInteger(GL11.GL_ATTRIB_STACK_DEPTH) - attribDepth; i > 0; i--) GL11.glPopAttrib();
|
||||
for (int i = GL11.glGetInteger(GL11.GL_MODELVIEW_STACK_DEPTH) - matrixDepth; i > 0; i--) GL11.glPopMatrix();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Billboards (like Thaumcraft wisps) face the camera with the axes in {@link ActiveRenderInfo}, which belong to the
|
||||
* world view. Point them at the screen of the icon instead.
|
||||
*/
|
||||
private static void setBillboardAxes() {
|
||||
modelview.clear();
|
||||
GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, modelview);
|
||||
// The rows of the rotation are the screen right and down axes in model space, all with the same length
|
||||
float len = (float) Math.sqrt(
|
||||
modelview.get(0) * modelview.get(0) + modelview.get(4) * modelview.get(4)
|
||||
+ modelview.get(8) * modelview.get(8));
|
||||
// Vanilla stores the left axis in rotationX/Z and the up axis in rotationYZ/XZ/XY
|
||||
ActiveRenderInfo.rotationX = -modelview.get(0) / len;
|
||||
ActiveRenderInfo.rotationZ = -modelview.get(8) / len;
|
||||
ActiveRenderInfo.rotationYZ = -modelview.get(1) / len;
|
||||
ActiveRenderInfo.rotationXZ = -modelview.get(5) / len;
|
||||
ActiveRenderInfo.rotationXY = -modelview.get(9) / len;
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,6 @@ package mcp.mobius.waila.overlay;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.RenderHelper;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.util.MovingObjectPosition;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
@@ -12,6 +11,8 @@ import mcp.mobius.waila.api.impl.ConfigHandler;
|
||||
|
||||
public class OverlayRenderer {
|
||||
|
||||
private static boolean hasBlending;
|
||||
private static boolean hasDepthTest;
|
||||
private static int boundTexIndex;
|
||||
|
||||
public static boolean isOverlayVisible() {
|
||||
@@ -22,8 +23,17 @@ public class OverlayRenderer {
|
||||
&& ConfigHandler.instance().showTooltip());
|
||||
}
|
||||
|
||||
public static void renderOverlay(Tooltip tooltip) {
|
||||
if (!isOverlayVisible() || RayTracing.instance().getTarget() == null) return;
|
||||
public static void renderOverlay(Tooltip tooltip, float partialTicks) {
|
||||
if (!isOverlayVisible()) return;
|
||||
|
||||
BreakProgressRenderer.update(partialTicks);
|
||||
|
||||
if (RayTracing.instance().getTarget() == null
|
||||
|| RayTracing.instance().getTarget().typeOfHit == MovingObjectPosition.MovingObjectType.MISS) {
|
||||
// Keep drawing the progress bar while it fades out after the block was broken
|
||||
BreakProgressRenderer.drawLast();
|
||||
return;
|
||||
}
|
||||
|
||||
if (RayTracing.instance().getTarget().typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK
|
||||
&& RayTracing.instance().getTargetStack() != null) {
|
||||
@@ -57,6 +67,8 @@ public class OverlayRenderer {
|
||||
OverlayConfig.gradient1,
|
||||
OverlayConfig.gradient2);
|
||||
|
||||
BreakProgressRenderer.draw(tooltip.x, tooltip.y, tooltip.w, tooltip.h);
|
||||
|
||||
GL11.glEnable(GL11.GL_BLEND);
|
||||
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
tooltip.draw();
|
||||
@@ -68,11 +80,8 @@ public class OverlayRenderer {
|
||||
|
||||
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
|
||||
|
||||
Entity entity = tooltip.entity;
|
||||
if (tooltip.hasIcon && tooltip.stack != null && tooltip.stack.getItem() != null)
|
||||
DisplayUtil.renderStack(tooltip.x + 5, tooltip.y + tooltip.h / 2 - 8, tooltip.stack);
|
||||
else if (tooltip.hasIcon && entity != null)
|
||||
EntityIconRenderer.render(tooltip.x + 5, tooltip.y + tooltip.h / 2 - 8, 16, entity);
|
||||
|
||||
loadGLState();
|
||||
GL11.glPopMatrix();
|
||||
@@ -80,12 +89,17 @@ public class OverlayRenderer {
|
||||
}
|
||||
|
||||
private static void saveGLState() {
|
||||
hasBlending = GL11.glGetBoolean(GL11.GL_BLEND);
|
||||
hasDepthTest = GL11.glGetBoolean(GL11.GL_DEPTH_TEST);
|
||||
boundTexIndex = GL11.glGetInteger(GL11.GL_TEXTURE_BINDING_2D);
|
||||
// Icons turn on lighting, lights, color material and rescale normal
|
||||
GL11.glPushAttrib(GL11.GL_CURRENT_BIT | GL11.GL_ENABLE_BIT | GL11.GL_LIGHTING_BIT | GL11.GL_COLOR_BUFFER_BIT);
|
||||
GL11.glPushAttrib(GL11.GL_CURRENT_BIT);
|
||||
}
|
||||
|
||||
private static void loadGLState() {
|
||||
if (hasBlending) GL11.glEnable(GL11.GL_BLEND);
|
||||
else GL11.glDisable(GL11.GL_BLEND);
|
||||
if (hasDepthTest) GL11.glEnable(GL11.GL_DEPTH_TEST);
|
||||
else GL11.glDisable(GL11.GL_DEPTH_TEST);
|
||||
GL11.glBindTexture(GL11.GL_TEXTURE_2D, boundTexIndex);
|
||||
GL11.glPopAttrib();
|
||||
}
|
||||
|
||||
@@ -14,7 +14,6 @@ import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.common.config.Configuration;
|
||||
|
||||
@@ -50,7 +49,6 @@ public class Tooltip {
|
||||
Point pos;
|
||||
boolean hasIcon = false;
|
||||
ItemStack stack;
|
||||
Entity entity;
|
||||
|
||||
IWailaCommonAccessor accessor = DataAccessorCommon.instance;
|
||||
|
||||
@@ -108,11 +106,6 @@ public class Tooltip {
|
||||
this.stack = stack;
|
||||
}
|
||||
|
||||
public Tooltip(List<String> textData, Entity entity) {
|
||||
this(textData, entity != null && EntityIconRenderer.isEnabled());
|
||||
this.entity = entity;
|
||||
}
|
||||
|
||||
public Tooltip(List<String> textData, boolean hasIcon) {
|
||||
|
||||
if (hasIcon) hasIcon = ConfigHandler.instance().showIcon();
|
||||
|
||||
@@ -23,19 +23,13 @@ import mcp.mobius.waila.utils.Constants;
|
||||
|
||||
public class WailaTickHandler {
|
||||
|
||||
private static Tooltip tooltip = null;
|
||||
private static World lastWorld = null;
|
||||
private Tooltip tooltip = null;
|
||||
private final MetaDataProvider handler = new MetaDataProvider();
|
||||
|
||||
private static void reset() {
|
||||
tooltip = null;
|
||||
RayTracing.instance().clear();
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void tickRender(TickEvent.RenderTickEvent event) {
|
||||
if (event.phase == TickEvent.Phase.END) {
|
||||
OverlayRenderer.renderOverlay(tooltip);
|
||||
OverlayRenderer.renderOverlay(tooltip, event.renderTickTime);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,18 +37,15 @@ public class WailaTickHandler {
|
||||
public void tickClient(TickEvent.ClientTickEvent event) {
|
||||
if (event.phase == TickEvent.Phase.START) return;
|
||||
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
// The tooltip and the ray trace target hold the entity, which holds the world
|
||||
if (mc.theWorld != lastWorld) reset();
|
||||
lastWorld = mc.theWorld;
|
||||
|
||||
if (!OverlayRenderer.isOverlayVisible()) {
|
||||
reset();
|
||||
this.tooltip = null;
|
||||
RayTracing.instance().clear();
|
||||
return;
|
||||
}
|
||||
|
||||
RayTracing.instance().fire();
|
||||
MovingObjectPosition target = RayTracing.instance().getTarget();
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
EntityPlayer player = mc.thePlayer;
|
||||
World world = mc.theWorld;
|
||||
|
||||
@@ -105,7 +96,7 @@ public class WailaTickHandler {
|
||||
currenttip.addAll(currenttipBody);
|
||||
currenttip.addAll(currenttipTail);
|
||||
|
||||
tooltip = new Tooltip(currenttip, targetStack);
|
||||
this.tooltip = new Tooltip(currenttip, targetStack);
|
||||
}
|
||||
} else if (target != null && target.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY) {
|
||||
DataAccessorCommon accessor = DataAccessorCommon.instance;
|
||||
@@ -151,7 +142,7 @@ public class WailaTickHandler {
|
||||
currenttip.addAll(currenttipBody);
|
||||
currenttip.addAll(currenttipTail);
|
||||
|
||||
tooltip = new Tooltip(currenttip, targetEnt);
|
||||
this.tooltip = new Tooltip(currenttip, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,9 @@ public class ColorUtils {
|
||||
fuelFurnaceBarTop = color.argb("fuelFurnaceBarTop", "0xFFFF8800"),
|
||||
fuelFurnaceBarBottom = color.argb("fuelFurnaceBarBottom", "0xFFFFCC00"),
|
||||
progressBarTop = color.argb("progressBarTop", "0xFFFF0000"),
|
||||
progressBarBottom = color.argb("progressBarBottom", "0xFF8B0000");
|
||||
progressBarBottom = color.argb("progressBarBottom", "0xFF8B0000"),
|
||||
breakProgress = color.argb("breakProgress", "0xFFFFFFFF"),
|
||||
breakProgressFailure = color.argb("breakProgressFailure", "0xFFAA0000");
|
||||
// spotless:on
|
||||
|
||||
}
|
||||
@@ -153,7 +153,8 @@ option.stevescarts.shifttoggle=Shift toggle
|
||||
option.general.showents=Show entities
|
||||
option.general.showhp=Show entities health
|
||||
option.general.showcrop=Show crop growth
|
||||
option.general.showentityicon=Show entity icon
|
||||
option.general.breakprogress=Show break progress
|
||||
option.general.breakprogresstop=Break progress on top
|
||||
option.thaumcraft.aspects=Show aspects
|
||||
|
||||
nei.options.keys.showenchant=Show enchanting values
|
||||
Reference in new issue
Block a user