mirror of
https://github.com/GTNewHorizons/waila.git
synced 2026-11-14 01:04:12 +00:00
Draw thaumcraft aspect icons in tooltip (#41)
Co-authored-by: Super <[email protected]> Co-authored-by: Martin Robertz <[email protected]>
This commit is contained in:
4 files changed
+112
-4
No files matched your search
@@ -20,6 +20,7 @@ import net.minecraft.world.World;
|
||||
import mcp.mobius.waila.api.IWailaConfigHandler;
|
||||
import mcp.mobius.waila.api.IWailaDataAccessor;
|
||||
import mcp.mobius.waila.api.IWailaDataProvider;
|
||||
import mcp.mobius.waila.api.SpecialChars;
|
||||
import mcp.mobius.waila.cbcore.LangUtil;
|
||||
|
||||
public class HUDHandlerIAspectContainer implements IWailaDataProvider {
|
||||
@@ -57,9 +58,10 @@ public class HUDHandlerIAspectContainer implements IWailaDataProvider {
|
||||
total += value;
|
||||
String amount = String.valueOf(value);
|
||||
|
||||
if (!aspect.equals("???"))
|
||||
currenttip.add(String.format("%s" + TAB + ALIGNRIGHT + WHITE + "%s", aspect, amount));
|
||||
else unknownAspects.add(String.format("%s" + TAB + ALIGNRIGHT + WHITE + "%s", aspect, amount));
|
||||
if (!aspect.equals("???")) currenttip.add(
|
||||
SpecialChars.getRenderString("waila.tcaspect", aspect) + TAB + ALIGNRIGHT + WHITE + amount);
|
||||
else unknownAspects.add(
|
||||
SpecialChars.getRenderString("waila.tcaspect", aspect) + TAB + ALIGNRIGHT + WHITE + amount);
|
||||
}
|
||||
|
||||
String id = tag.getString("WailaID");
|
||||
@@ -118,7 +120,7 @@ public class HUDHandlerIAspectContainer implements IWailaDataProvider {
|
||||
if (tileAspects.get(o) > 0) {
|
||||
if (playerAspects.containsKey(o)) {
|
||||
NBTTagCompound cmptag = new NBTTagCompound();
|
||||
cmptag.setString("key", (String) ThaumcraftModule.Aspect_getName.invoke(o));
|
||||
cmptag.setString("key", (String) ThaumcraftModule.Aspect_tag.get(o));
|
||||
cmptag.setInteger("value", tileAspects.get(o));
|
||||
aspects.appendTag(cmptag);
|
||||
} else {
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package mcp.mobius.waila.addons.thaumcraft;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.function.Function;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
import org.apache.logging.log4j.Level;
|
||||
|
||||
@@ -30,12 +32,17 @@ public class ThaumcraftModule {
|
||||
public static Class<?> Aspect = null;
|
||||
public static Field Aspect_tag = null;
|
||||
public static Method Aspect_getName = null;
|
||||
public static Method Aspect_getAspect = null;
|
||||
public static Method Aspect_getImage = null;
|
||||
public static Method Aspect_getColor = null;
|
||||
|
||||
public static Class<?> CommonProxy = null;
|
||||
public static Method CommonProxy_getKnownAspects = null;
|
||||
|
||||
public static Class<?> IGoggles = null;
|
||||
|
||||
public static ResourceLocation unknownAspectTexture = null;
|
||||
public static Color unknownAspectColor = null;
|
||||
public static Function<ItemStack, Boolean> isGoggles = stack -> IGoggles.isInstance(stack.getItem());
|
||||
|
||||
public static void register() {
|
||||
@@ -57,12 +64,18 @@ public class ThaumcraftModule {
|
||||
Aspect_tag = Aspect.getDeclaredField("tag");
|
||||
Aspect_tag.setAccessible(true);
|
||||
Aspect_getName = Aspect.getDeclaredMethod("getName");
|
||||
Aspect_getAspect = Aspect.getMethod("getAspect", java.lang.String.class);
|
||||
Aspect_getImage = Aspect.getDeclaredMethod("getImage");
|
||||
Aspect_getColor = Aspect.getDeclaredMethod("getColor");
|
||||
|
||||
CommonProxy = Class.forName("thaumcraft.common.CommonProxy");
|
||||
CommonProxy_getKnownAspects = CommonProxy.getDeclaredMethod("getKnownAspects");
|
||||
|
||||
IGoggles = Class.forName("thaumcraft.api.IGoggles");
|
||||
|
||||
unknownAspectTexture = new ResourceLocation("thaumcraft", "textures/aspects/_unknown.png");
|
||||
unknownAspectColor = new Color(0x654242);
|
||||
|
||||
ModuleRegistrar.instance().addConfigRemote("Thaumcraft", "thaumcraft.aspects");
|
||||
ModuleRegistrar.instance().registerBodyProvider(new HUDHandlerIAspectContainer(), IAspectContainer);
|
||||
ModuleRegistrar.instance().registerBodyProvider(new HUDHandlerIAspectContainer(), TileAlchemyFurnace);
|
||||
|
||||
@@ -17,6 +17,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.tooltiprenderers.TTRenderAspectString;
|
||||
import mcp.mobius.waila.overlay.tooltiprenderers.TTRenderHealth;
|
||||
import mcp.mobius.waila.overlay.tooltiprenderers.TTRenderProgressBar;
|
||||
import mcp.mobius.waila.overlay.tooltiprenderers.TTRenderStack;
|
||||
@@ -54,6 +55,8 @@ public class ProxyClient extends ProxyServer {
|
||||
ModuleRegistrar.instance().registerTooltipRenderer("waila.stack", new TTRenderStack());
|
||||
ModuleRegistrar.instance().registerTooltipRenderer("waila.progress", new TTRenderProgressBar());
|
||||
|
||||
ModuleRegistrar.instance().registerTooltipRenderer("waila.tcaspect", new TTRenderAspectString());
|
||||
|
||||
MinecraftForge.EVENT_BUS.register(new WorldUnloadEventHandler());
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
package mcp.mobius.waila.overlay.tooltiprenderers;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import mcp.mobius.waila.addons.thaumcraft.ThaumcraftModule;
|
||||
import mcp.mobius.waila.api.IWailaCommonAccessor;
|
||||
import mcp.mobius.waila.api.IWailaTooltipRenderer;
|
||||
import mcp.mobius.waila.overlay.DisplayUtil;
|
||||
import mcp.mobius.waila.overlay.OverlayConfig;
|
||||
|
||||
public class TTRenderAspectString implements IWailaTooltipRenderer {
|
||||
|
||||
@Override
|
||||
public Dimension getSize(String[] params, IWailaCommonAccessor accessor) {
|
||||
int width;
|
||||
if (params[0].equals("???")) {
|
||||
width = DisplayUtil.getDisplayWidth(params[0]);
|
||||
} else {
|
||||
try {
|
||||
Object aspect = ThaumcraftModule.Aspect_getAspect.invoke(null, params[0]);
|
||||
if (aspect == null) {
|
||||
width = DisplayUtil.getDisplayWidth(params[0]);
|
||||
} else width = DisplayUtil.getDisplayWidth((String) ThaumcraftModule.Aspect_getName.invoke(aspect));
|
||||
} catch (ReflectiveOperationException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
return new Dimension(width + 10, params[0].isEmpty() ? 0 : 8);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(String[] params, IWailaCommonAccessor accessor) {
|
||||
try {
|
||||
if (params[0].equals("???")) {
|
||||
drawTag(0, 0, ThaumcraftModule.unknownAspectTexture, ThaumcraftModule.unknownAspectColor, 200);
|
||||
DisplayUtil.drawString(params[0], 10, 0, OverlayConfig.fontcolor, true);
|
||||
return;
|
||||
}
|
||||
Object aspect = ThaumcraftModule.Aspect_getAspect.invoke(null, params[0]);
|
||||
if (aspect == null) return;
|
||||
drawTag(
|
||||
0,
|
||||
0,
|
||||
(ResourceLocation) ThaumcraftModule.Aspect_getImage.invoke(aspect),
|
||||
new Color((int) ThaumcraftModule.Aspect_getColor.invoke(aspect)),
|
||||
200);
|
||||
DisplayUtil.drawString(
|
||||
(String) ThaumcraftModule.Aspect_getName.invoke(aspect),
|
||||
10,
|
||||
0,
|
||||
OverlayConfig.fontcolor,
|
||||
true);
|
||||
} catch (ReflectiveOperationException e) {
|
||||
DisplayUtil.drawString(params[0], 10, 0, OverlayConfig.fontcolor, true);
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public static void drawTag(double x, double y, ResourceLocation image, Color color, double z) {
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
mc.renderEngine.bindTexture(image);
|
||||
GL11.glColor4f(
|
||||
(float) color.getRed() / 255.0F,
|
||||
(float) color.getGreen() / 255.0F,
|
||||
(float) color.getBlue() / 255.0F,
|
||||
1);
|
||||
|
||||
Tessellator var9 = Tessellator.instance;
|
||||
var9.startDrawingQuads();
|
||||
var9.setColorRGBA_F(
|
||||
(float) color.getRed() / 255.0F,
|
||||
(float) color.getGreen() / 255.0F,
|
||||
(float) color.getBlue() / 255.0F,
|
||||
1);
|
||||
|
||||
var9.addVertexWithUV(x + 0.0D, y + 8.0D, z, 0.0D, 1.0D);
|
||||
var9.addVertexWithUV(x + 8.0D, y + 8.0D, z, 1.0D, 1.0D);
|
||||
var9.addVertexWithUV(x + 8.0D, y + 0.0D, z, 1.0D, 0.0D);
|
||||
var9.addVertexWithUV(x + 0.0D, y + 0.0D, z, 0.0D, 0.0D);
|
||||
var9.draw();
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user