Skip to content

Commit 08887a6

Browse files
committed
start working on inspector screen
1 parent 3db2370 commit 08887a6

File tree

17 files changed

+320
-91
lines changed

17 files changed

+320
-91
lines changed

src/main/java/mcp/mobius/waila/WailaClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ protected static void onClientTick() {
9494
protected static void onItemTooltip(ItemStack stack, List<Component> tooltip) {
9595
if (PluginConfig.CLIENT.getBoolean(WailaConstants.CONFIG_SHOW_ITEM_MOD_NAME)) {
9696
for (var listener : Registrar.get().eventListeners.get(Object.class)) {
97-
var name = listener.instance().getHoveredItemModName(stack, PluginConfig.CLIENT);
97+
var name = listener.instance().instance().getHoveredItemModName(stack, PluginConfig.CLIENT);
9898
if (name != null) {
9999
tooltip.add(IWailaConfig.get().getFormatter().modName(name));
100100
return;

src/main/java/mcp/mobius/waila/access/ClientAccessor.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import mcp.mobius.waila.api.ICommonAccessor;
55
import mcp.mobius.waila.api.IDataReader;
66
import mcp.mobius.waila.api.IEntityAccessor;
7+
import mcp.mobius.waila.api.IPluginInfo;
78
import net.minecraft.core.BlockPos;
89
import net.minecraft.core.Direction;
910
import net.minecraft.core.registries.BuiltInRegistries;
@@ -45,6 +46,22 @@ public enum ClientAccessor implements ICommonAccessor, IBlockAccessor, IEntityAc
4546
private double rayCastMaxDistance;
4647
private float frameTime;
4748

49+
private @Nullable IPluginInfo plugin;
50+
private @Nullable Class<?> provider;
51+
52+
public void setOrigin(@Nullable IPluginInfo plugin, @Nullable Class<?> provider) {
53+
this.plugin = plugin;
54+
this.provider = provider;
55+
}
56+
57+
public @Nullable IPluginInfo getPlugin() {
58+
return plugin;
59+
}
60+
61+
public @Nullable Class<?> getProvider() {
62+
return provider;
63+
}
64+
4865
@Override
4966
public Level getWorld() {
5067
return this.world;

src/main/java/mcp/mobius/waila/command/ClientCommand.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import mcp.mobius.waila.config.ConfigEntry;
1313
import mcp.mobius.waila.config.PluginConfig;
1414
import mcp.mobius.waila.gui.screen.HomeScreen;
15+
import mcp.mobius.waila.gui.screen.InspectorScreen;
1516
import mcp.mobius.waila.plugin.PluginInfo;
1617
import mcp.mobius.waila.plugin.PluginLoader;
1718
import net.minecraft.client.Minecraft;
@@ -158,6 +159,13 @@ protected final void register(ArgumentBuilderBuilder<S> command) {
158159
})
159160
.pop("enabled", "showFps")
160161

162+
.then(literal("inspect"))
163+
.executes(context -> {
164+
Minecraft.getInstance().schedule(InspectorScreen::open);
165+
return 1;
166+
})
167+
.pop("inspect")
168+
161169
.pop("debug");
162170
}
163171

src/main/java/mcp/mobius/waila/gui/hud/ComponentHandler.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,9 @@ private static void handleBlock(ClientAccessor accessor, Tooltip tooltip, Object
6666
var registrar = Registrar.get();
6767
var providers = registrar.blockComponent.get(position).get(obj);
6868
for (var entry : providers) {
69-
var provider = entry.instance();
69+
var pa = entry.instance();
70+
var provider = pa.instance();
71+
accessor.setOrigin(pa.origin(), provider.getClass());
7072
try {
7173
switch (position) {
7274
case HEAD -> provider.appendHead(tooltip, accessor, PluginConfig.CLIENT);
@@ -76,6 +78,7 @@ private static void handleBlock(ClientAccessor accessor, Tooltip tooltip, Object
7678
} catch (Throwable e) {
7779
ExceptionUtil.dump(e, provider.getClass().toString(), tooltip);
7880
}
81+
accessor.setOrigin(null, null);
7982
}
8083
}
8184

@@ -108,7 +111,9 @@ public static void gatherEntity(Entity entity, ClientAccessor accessor, Tooltip
108111

109112
var providers = registrar.entityComponent.get(position).get(entity);
110113
for (var entry : providers) {
111-
var provider = entry.instance();
114+
var pa = entry.instance();
115+
var provider = pa.instance();
116+
accessor.setOrigin(pa.origin(), provider.getClass());
112117
try {
113118
switch (position) {
114119
case HEAD -> provider.appendHead(tooltip, accessor, PluginConfig.CLIENT);
@@ -118,6 +123,7 @@ public static void gatherEntity(Entity entity, ClientAccessor accessor, Tooltip
118123
} catch (Throwable e) {
119124
ExceptionUtil.dump(e, provider.getClass().toString(), tooltip);
120125
}
126+
accessor.setOrigin(null, null);
121127
}
122128
}
123129

@@ -129,7 +135,8 @@ public static ITooltipComponent getIcon(HitResult target) {
129135
if (target.getType() == HitResult.Type.ENTITY) {
130136
var providers = registrar.entityIcon.get(data.getEntity());
131137
for (var provider : providers) {
132-
var icon = provider.instance().getIcon(data, config);
138+
var pa = provider.instance();
139+
var icon = pa.instance().getIcon(data, config);
133140
if (icon != null) {
134141
return icon;
135142
}
@@ -142,7 +149,8 @@ public static ITooltipComponent getIcon(HitResult target) {
142149
var priority = 0;
143150

144151
for (var provider : registrar.blockIcon.get(state.getBlock())) {
145-
var icon = provider.instance().getIcon(ClientAccessor.INSTANCE, PluginConfig.CLIENT);
152+
var pa = provider.instance();
153+
var icon = pa.instance().getIcon(ClientAccessor.INSTANCE, PluginConfig.CLIENT);
146154
if (icon != null) {
147155
result = icon;
148156
priority = provider.priority();
@@ -155,7 +163,8 @@ public static ITooltipComponent getIcon(HitResult target) {
155163
for (var provider : registrar.blockIcon.get(blockEntity)) {
156164
if (provider.priority() >= priority) break;
157165

158-
var icon = provider.instance().getIcon(ClientAccessor.INSTANCE, PluginConfig.CLIENT);
166+
var pa = provider.instance();
167+
var icon = pa.instance().getIcon(ClientAccessor.INSTANCE, PluginConfig.CLIENT);
159168
if (icon != null) {
160169
result = icon;
161170
break;
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package mcp.mobius.waila.gui.hud;
2+
3+
import java.util.Random;
4+
5+
import mcp.mobius.waila.WailaClient;
6+
import mcp.mobius.waila.api.ITooltipComponent;
7+
import mcp.mobius.waila.api.util.WRenders;
8+
import mcp.mobius.waila.util.DisplayUtil;
9+
import net.minecraft.client.DeltaTracker;
10+
import net.minecraft.client.Minecraft;
11+
import net.minecraft.client.gui.GuiGraphics;
12+
import net.minecraft.client.renderer.RenderType;
13+
import net.minecraft.util.Mth;
14+
15+
public interface ComponentRenderer {
16+
17+
Random RANDOM = new Random();
18+
19+
void render(GuiGraphics ctx, ITooltipComponent component, int x, int y, int cw, int ch, DeltaTracker delta);
20+
21+
ComponentRenderer DEFAULT = (ctx, component, x, y, cw, ch, delta) -> {
22+
component.render(ctx, x, y, delta);
23+
24+
if (WailaClient.showComponentBounds) {
25+
ctx.pose().pushPose();
26+
var scale = (float) Minecraft.getInstance().getWindow().getGuiScale();
27+
ctx.pose().scale(1 / scale, 1 / scale, 1);
28+
29+
var buf = WRenders.buffer(RenderType.gui());
30+
var bx = Mth.floor(x * scale + 0.5);
31+
var by = Mth.floor(y * scale + 0.5);
32+
var bw = Mth.floor(cw * scale + 0.5);
33+
var bh = Mth.floor(ch * scale + 0.5);
34+
var color = (0xFF << 24) + Mth.hsvToRgb(RANDOM.nextFloat(), RANDOM.nextFloat(), 1f);
35+
DisplayUtil.renderRectBorder(ctx.pose().last().pose(), buf, bx, by, bw, bh, 1, color, color);
36+
37+
ctx.pose().popPose();
38+
ctx.flush();
39+
}
40+
};
41+
42+
}

src/main/java/mcp/mobius/waila/gui/hud/Line.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import mcp.mobius.waila.api.ITooltipComponent.HorizontalGrowing;
1212
import mcp.mobius.waila.api.ITooltipLine;
1313
import mcp.mobius.waila.api.component.WrappedComponent;
14-
import mcp.mobius.waila.util.DisplayUtil;
1514
import net.minecraft.client.DeltaTracker;
1615
import net.minecraft.client.gui.GuiGraphics;
1716
import net.minecraft.network.chat.Component;
@@ -140,7 +139,7 @@ public int getHeight() {
140139
return height;
141140
}
142141

143-
public void render(GuiGraphics ctx, int x, int y, DeltaTracker delta) {
142+
public void render(ComponentRenderer renderer, GuiGraphics ctx, int x, int y, DeltaTracker delta) {
144143
Preconditions.checkState(width != -1 && height != -1);
145144

146145
var cx = x;
@@ -150,7 +149,7 @@ public void render(GuiGraphics ctx, int x, int y, DeltaTracker delta) {
150149
var h = heights.getInt(component);
151150

152151
var cy = y + (h < height ? (height - h) / 2 : 0);
153-
DisplayUtil.renderComponent(ctx, component, cx, cy, w, delta);
152+
renderer.render(ctx, component, cx, cy, w, h, delta);
154153
cx += w + 1;
155154
}
156155
}

src/main/java/mcp/mobius/waila/gui/hud/TooltipHandler.java

Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -46,30 +46,38 @@ private enum ProcessResult {
4646
}
4747

4848
public static void tick() {
49+
tick(STATE, false);
50+
}
51+
52+
public static boolean tick(TooltipRenderer.State state, boolean inspect) {
4953
try (var ignored = ProfilerUtil.profile("wthit:tick")) {
50-
_tick();
54+
return _tick(state, inspect);
5155
}
5256
}
5357

54-
private static void _tick() {
58+
private static boolean _tick(TooltipRenderer.State state, boolean inspect) {
5559
STATE.render = false;
5660

5761
var client = Minecraft.getInstance();
5862
var config = Waila.CONFIG.get().getGeneral();
5963

60-
if (client.options.hideGui) return;
61-
if (client.screen != null && !(client.screen instanceof ChatScreen)) return;
62-
if (client.level == null || !config.isDisplayTooltip()) return;
63-
if (config.getDisplayMode() == IWailaConfig.General.DisplayMode.HOLD_KEY && !WailaClient.keyShowOverlay.isDown()) return;
64-
if (config.isHideFromPlayerList() && ((PlayerTabOverlayAccess) client.gui.getTabList()).wthit_isVisible()) return;
65-
if (config.isHideFromDebug() && client.getDebugOverlay().showDebugScreen()) return;
66-
if (client.gameMode == null) return;
64+
if (client.level == null) return false;
65+
if (client.gameMode == null) return false;
66+
67+
if (!inspect) {
68+
if (client.options.hideGui) return false;
69+
if (client.screen != null && !(client.screen instanceof ChatScreen)) return false;
70+
if (!config.isDisplayTooltip()) return false;
71+
if (config.getDisplayMode() == IWailaConfig.General.DisplayMode.HOLD_KEY && !WailaClient.keyShowOverlay.isDown()) return false;
72+
if (config.isHideFromPlayerList() && ((PlayerTabOverlayAccess) client.gui.getTabList()).wthit_isVisible()) return false;
73+
if (config.isHideFromDebug() && client.getDebugOverlay().showDebugScreen()) return false;
74+
}
6775

6876
Player player = client.player;
69-
if (player == null) return;
77+
if (player == null) return false;
7078

7179
var camera = client.cameraEntity;
72-
if (camera == null) return;
80+
if (camera == null) return false;
7381

7482
var frameTime = client.getDeltaTracker().getGameTimeDeltaPartialTick(true);
7583
var pickRange = Math.max(player.blockInteractionRange(), player.entityInteractionRange());
@@ -87,14 +95,16 @@ private static void _tick() {
8795
break;
8896
}
8997

90-
if (castOrigin == null) return;
98+
if (castOrigin == null) return false;
9199

92100
for (var target : results) {
93-
if (processTarget(target, client, player, castOrigin, castDirection, pickRange, config) == ProcessResult.BREAK) break;
101+
if (processTarget(state, target, client, player, castOrigin, castDirection, pickRange, config) == ProcessResult.BREAK) break;
94102
}
103+
104+
return true;
95105
}
96106

97-
private static ProcessResult redirectTarget(HitResult target, TargetRedirector redirector, Minecraft client, Player player, Vec3 castOrigin, Vec3 castDirection, double pickRange, WailaConfig.General config) {
107+
private static ProcessResult redirectTarget(TooltipRenderer.State state, HitResult target, TargetRedirector redirector, Minecraft client, Player player, Vec3 castOrigin, Vec3 castDirection, double pickRange, WailaConfig.General config) {
98108
if (redirector.nowhere) return ProcessResult.BREAK;
99109
if (redirector.behind) return ProcessResult.CONTINUE;
100110

@@ -103,18 +113,18 @@ private static ProcessResult redirectTarget(HitResult target, TargetRedirector r
103113
if (redirect.getType() == HitResult.Type.MISS) return ProcessResult.CONTINUE;
104114

105115
return processTarget(
106-
redirect, client, player,
116+
state, redirect, client, player,
107117
castOrigin.subtract(target.getLocation().subtract(redirect.getLocation())),
108118
castDirection, pickRange, config);
109119
}
110120

111-
private static ProcessResult processTarget(HitResult target, Minecraft client, Player player, Vec3 castOrigin, Vec3 castDirection, double pickRange, WailaConfig.General config) {
121+
private static ProcessResult processTarget(TooltipRenderer.State state, HitResult target, Minecraft client, Player player, Vec3 castOrigin, Vec3 castDirection, double pickRange, WailaConfig.General config) {
112122
var accessor = ClientAccessor.INSTANCE;
113123

114124
//noinspection DataFlowIssue
115125
accessor.set(client.level, player, target, client.cameraEntity, castOrigin, castDirection, pickRange, client.getDeltaTracker().getGameTimeDeltaPartialTick(true));
116126

117-
TooltipRenderer.beginBuild(STATE);
127+
TooltipRenderer.beginBuild(state);
118128

119129
if (target.getType() == HitResult.Type.BLOCK) {
120130
var block = accessor.getBlock();
@@ -142,7 +152,7 @@ private static ProcessResult processTarget(HitResult target, Minecraft client, P
142152
}
143153

144154
if (redirectResult != null && !redirector.self) {
145-
return redirectTarget(target, redirector, client, player, castOrigin, castDirection, pickRange, config);
155+
return redirectTarget(state, target, redirector, client, player, castOrigin, castDirection, pickRange, config);
146156
}
147157

148158
if (block instanceof LiquidBlock) {
@@ -151,10 +161,10 @@ private static ProcessResult processTarget(HitResult target, Minecraft client, P
151161
return ProcessResult.CONTINUE;
152162
}
153163

154-
var state = ComponentHandler.getOverrideBlock(target);
155-
if (state == IBlockComponentProvider.EMPTY_BLOCK_STATE) return ProcessResult.CONTINUE;
164+
var blockState = ComponentHandler.getOverrideBlock(target);
165+
if (blockState == IBlockComponentProvider.EMPTY_BLOCK_STATE) return ProcessResult.CONTINUE;
156166

157-
accessor.setState(state);
167+
accessor.setState(blockState);
158168

159169
requestBlockData(accessor);
160170

@@ -187,7 +197,7 @@ private static ProcessResult processTarget(HitResult target, Minecraft client, P
187197
}
188198

189199
if (redirectResult != null && !redirector.self) {
190-
return redirectTarget(target, redirector, client, player, castOrigin, castDirection, pickRange, config);
200+
return redirectTarget(state, target, redirector, client, player, castOrigin, castDirection, pickRange, config);
191201
}
192202

193203
if (!PluginConfig.CLIENT.getBoolean(WailaConstants.CONFIG_SHOW_ENTITY)) return ProcessResult.CONTINUE;

0 commit comments

Comments
 (0)