1414import java .util .Map ;
1515import java .util .Set ;
1616
17+ import org .joml .Vector3d ;
18+
1719import cqb13 .NumbyHack .NumbyHack ;
1820import meteordevelopment .meteorclient .events .game .GameLeftEvent ;
1921import meteordevelopment .meteorclient .events .meteor .MouseClickEvent ;
22+ import meteordevelopment .meteorclient .events .render .Render2DEvent ;
2023import meteordevelopment .meteorclient .events .render .Render3DEvent ;
2124import meteordevelopment .meteorclient .gui .GuiTheme ;
2225import meteordevelopment .meteorclient .gui .widgets .WWidget ;
2326import meteordevelopment .meteorclient .gui .widgets .containers .WHorizontalList ;
2427import meteordevelopment .meteorclient .gui .widgets .containers .WVerticalList ;
2528import meteordevelopment .meteorclient .gui .widgets .pressable .WButton ;
2629import meteordevelopment .meteorclient .renderer .ShapeMode ;
30+ import meteordevelopment .meteorclient .renderer .text .TextRenderer ;
2731import meteordevelopment .meteorclient .settings .BoolSetting ;
2832import meteordevelopment .meteorclient .settings .ColorSetting ;
33+ import meteordevelopment .meteorclient .settings .DoubleSetting ;
2934import meteordevelopment .meteorclient .settings .EnumSetting ;
3035import meteordevelopment .meteorclient .settings .Setting ;
3136import meteordevelopment .meteorclient .settings .SettingGroup ;
3237import meteordevelopment .meteorclient .systems .modules .Module ;
3338import meteordevelopment .meteorclient .utils .misc .input .KeyAction ;
39+ import meteordevelopment .meteorclient .utils .render .NametagUtils ;
3440import meteordevelopment .meteorclient .utils .render .RenderUtils ;
3541import meteordevelopment .meteorclient .utils .render .color .Color ;
3642import meteordevelopment .meteorclient .utils .render .color .SettingColor ;
@@ -59,6 +65,28 @@ public class MapArtTracker extends Module {
5965 .defaultValue (true )
6066 .build ());
6167
68+ private final Setting <Boolean > nametags = sgGeneral .add (new BoolSetting .Builder ()
69+ .name ("nametags" )
70+ .description ("Render nametags over maps." )
71+ .defaultValue (true )
72+ .build ());
73+
74+ private final Setting <SettingColor > nametagColor = sgGeneral .add (new ColorSetting .Builder ()
75+ .name ("nametag-color" )
76+ .description ("The color of the nametag text." )
77+ .defaultValue (new SettingColor (255 , 255 , 255 ))
78+ .visible (nametags ::get )
79+ .build ());
80+
81+ private final Setting <Double > nametagTextScale = sgGeneral .add (new DoubleSetting .Builder ()
82+ .name ("nametag-scale" )
83+ .description ("How big the nametag text should be." )
84+ .defaultValue (1.25 )
85+ .min (1 )
86+ .sliderMax (4 )
87+ .visible (nametags ::get )
88+ .build ());
89+
6290 private final Setting <Boolean > tracers = sgGeneral .add (new BoolSetting .Builder ()
6391 .name ("tracers" )
6492 .description ("Render tracer lines to maps." )
@@ -148,7 +176,6 @@ private void onGameLeft(GameLeftEvent event) {
148176 saveMaps ();
149177 }
150178
151- // TODO: map name rendering option
152179 @ EventHandler
153180 private void onRender (Render3DEvent event ) {
154181 if (mc .world == null || mc .player == null ) {
@@ -192,7 +219,6 @@ private void onRender(Render3DEvent event) {
192219 }
193220
194221 Box box = frame .getBoundingBox ();
195- float pitch = frame .getPitch ();
196222
197223 Color fill = new Color (sideColor .get ());
198224 Color outline = new Color (lineColor .get ());
@@ -211,6 +237,39 @@ private void onRender(Render3DEvent event) {
211237 }
212238 }
213239
240+ @ EventHandler
241+ private void onRender2D (Render2DEvent event ) {
242+ if (!nametags .get ()) {
243+ return ;
244+ }
245+
246+ for (Entity entity : mc .world .getEntities ()) {
247+ if (!(entity instanceof ItemFrameEntity frame )) {
248+ continue ;
249+ }
250+
251+ ItemStack stack = frame .getHeldItemStack ();
252+ if (stack .isEmpty () || stack .getItem () != Items .FILLED_MAP ) {
253+ continue ;
254+ }
255+
256+ String name = stack .getName ().getString ();
257+
258+ Vector3d vec3 = new Vector3d (entity .getX (), entity .getY (), entity .getZ ());
259+
260+ if (NametagUtils .to2D (vec3 , nametagTextScale .get ())) {
261+ NametagUtils .begin (vec3 );
262+ TextRenderer .get ().begin (1 , false , true );
263+
264+ double w = TextRenderer .get ().getWidth (name ) / 2 ;
265+ TextRenderer .get ().render (name , -w , 0 , nametagColor .get (), true );
266+
267+ TextRenderer .get ().end ();
268+ NametagUtils .end ();
269+ }
270+ }
271+ }
272+
214273 @ EventHandler
215274 private void onMouseClick (MouseClickEvent event ) {
216275 if (event .action != KeyAction .Press || event .button () != GLFW_MOUSE_BUTTON_MIDDLE || mc .currentScreen != null ) {
0 commit comments