1010import meteordevelopment .meteorclient .events .entity .player .InteractBlockEvent ;
1111import meteordevelopment .meteorclient .events .game .ReceiveMessageEvent ;
1212import meteordevelopment .meteorclient .events .packets .InventoryEvent ;
13+ import meteordevelopment .meteorclient .events .render .Render3DEvent ;
1314import meteordevelopment .meteorclient .events .world .ServerConnectEndEvent ;
1415import meteordevelopment .meteorclient .events .world .TickEvent ;
1516import meteordevelopment .meteorclient .gui .GuiTheme ;
1617import meteordevelopment .meteorclient .gui .widgets .WWidget ;
1718import meteordevelopment .meteorclient .gui .widgets .containers .WHorizontalList ;
1819import meteordevelopment .meteorclient .gui .widgets .containers .WVerticalList ;
19- import meteordevelopment .meteorclient .gui .widgets .input .WTextBox ;
2020import meteordevelopment .meteorclient .gui .widgets .pressable .WButton ;
2121import meteordevelopment .meteorclient .pathing .BaritoneUtils ;
22- import meteordevelopment .meteorclient .settings .BoolSetting ;
23- import meteordevelopment .meteorclient .settings .IntSetting ;
24- import meteordevelopment .meteorclient .settings .Setting ;
25- import meteordevelopment .meteorclient .settings .SettingGroup ;
22+ import meteordevelopment .meteorclient .renderer .ShapeMode ;
23+ import meteordevelopment .meteorclient .settings .*;
2624import meteordevelopment .meteorclient .systems .modules .Module ;
2725import meteordevelopment .meteorclient .systems .modules .Modules ;
2826import meteordevelopment .meteorclient .systems .modules .misc .AutoReconnect ;
3129import meteordevelopment .meteorclient .utils .player .ChatUtils ;
3230import meteordevelopment .meteorclient .utils .player .InvUtils ;
3331import meteordevelopment .meteorclient .utils .player .SlotUtils ;
32+ import meteordevelopment .meteorclient .utils .render .color .SettingColor ;
3433import meteordevelopment .orbit .EventHandler ;
3534import net .minecraft .block .entity .*;
3635import net .minecraft .client .MinecraftClient ;
@@ -64,6 +63,7 @@ public BetterBaritoneBuild() {
6463 private static final Gson GSON = new GsonBuilder ().setPrettyPrinting ().create ();
6564
6665 private final SettingGroup sgGeneral = this .settings .getDefaultGroup ();
66+ private final SettingGroup sgRender = this .settings .createGroup ("Render" );
6767
6868 private final Setting <Boolean > storageLinkMode = sgGeneral .add (new BoolSetting .Builder ()
6969 .name ("storage-link-mode" )
@@ -72,6 +72,45 @@ public BetterBaritoneBuild() {
7272 .build ()
7373 );
7474
75+ private final Setting <Boolean > highlightLinkedStorages = sgRender .add (new BoolSetting .Builder ()
76+ .name ("highlight-linked-storages" )
77+ .description ("If enabled, linked storages will be highlighted with a box." )
78+ .defaultValue (true )
79+ .build ()
80+ );
81+
82+ private final Setting <Boolean > invertHighlight = sgRender .add (new BoolSetting .Builder ()
83+ .name ("invert-highlight" )
84+ .description ("If enabled, the highlight will be inverted (i.e. highlighted blocks will not be highlighted)." )
85+ .defaultValue (false )
86+ .visible (highlightLinkedStorages ::get )
87+ .build ()
88+ );
89+
90+ private final Setting <ShapeMode > shapeMode = sgRender .add (new EnumSetting .Builder <ShapeMode >()
91+ .name ("shape-mode" )
92+ .description ("How the shapes are rendered." )
93+ .defaultValue (ShapeMode .Both )
94+ .visible (this ::isActive )
95+ .build ()
96+ );
97+
98+ private final Setting <SettingColor > sideColor = sgRender .add (new ColorSetting .Builder ()
99+ .name ("side-color" )
100+ .description ("The side color of the rendering." )
101+ .defaultValue (new SettingColor (0 , 255 , 255 , 40 ))
102+ .visible (() -> shapeMode .get ().sides ())
103+ .build ()
104+ );
105+
106+ private final Setting <SettingColor > lineColor = sgRender .add (new ColorSetting .Builder ()
107+ .name ("line-color" )
108+ .description ("The line color of the rendering." )
109+ .defaultValue (new SettingColor (0 , 255 , 255 , 255 ))
110+ .visible (() -> shapeMode .get ().lines ())
111+ .build ()
112+ );
113+
75114 private final Setting <Boolean > disconnectOnDone = sgGeneral .add (new BoolSetting .Builder ()
76115 .name ("disconnect-on-done" )
77116 .description ("If enabled, the module will disconnect you from the server when it is done." )
@@ -165,6 +204,33 @@ public void onActivate() {
165204 loadLinkedStorages ();
166205 }
167206
207+ @ EventHandler
208+ private void onRender (Render3DEvent event ) {
209+ if (!isActive () || mc .world == null || !highlightLinkedStorages .get ()) return ;
210+
211+ if (!invertHighlight .get ()) {
212+ for (LinkedStorage linkedStorage : linkedStorages ) {
213+ if (linkedStorage == null || linkedStorage .blockPos == null || !mc .world .isPosLoaded (linkedStorage .blockPos ))
214+ continue ;
215+
216+ event .renderer .box (linkedStorage .blockPos , sideColor .get (), lineColor .get (), shapeMode .get (), 0 );
217+ }
218+ } else {
219+ for (BlockEntity blockEntity : Utils .blockEntities ()) {
220+ if (!(blockEntity instanceof ShulkerBoxBlockEntity || blockEntity instanceof ChestBlockEntity || blockEntity instanceof BarrelBlockEntity || blockEntity instanceof EnderChestBlockEntity ))
221+ continue ;
222+
223+ BlockPos pos = blockEntity .getPos ();
224+ if (mc .world .isPosLoaded (pos )) {
225+ boolean isLinked = linkedStorages .stream ().anyMatch (storage -> storage .blockPos .equals (pos ));
226+ if (!isLinked ) {
227+ event .renderer .box (pos , sideColor .get (), lineColor .get (), shapeMode .get (), 0 );
228+ }
229+ }
230+ }
231+ }
232+ }
233+
168234 @ Override
169235 public WWidget getWidget (GuiTheme theme ) {
170236 WVerticalList list = theme .verticalList ();
@@ -275,7 +341,7 @@ private void onMessageReceive(ReceiveMessageEvent event) {
275341 }
276342
277343 msg = msg .substring (2 ).trim (); // Remove the "> " part
278- if (msg .startsWith ("build" )) {
344+ if (msg .startsWith ("build" ) || msg . startsWith ( "litematica" ) ) {
279345 buildCommand = msg ;
280346 if (debugMode .get ()) {
281347 ChatUtils .sendMsg (OmegawareAddons .PREFIX .copy ()
0 commit comments