2323import meteordevelopment .meteorclient .utils .render .color .Color ;
2424import meteordevelopment .meteorclient .utils .tooltip .*;
2525import meteordevelopment .orbit .EventHandler ;
26- import net .minecraft .component .DataComponentTypes ;
2726
27+ import net .minecraft .client .gui .screen .ingame .BookScreen ;
28+ import net .minecraft .client .gui .screen .ingame .HandledScreen ;
29+ import net .minecraft .component .DataComponentTypes ;
2830import net .minecraft .component .type .*;
2931import net .minecraft .component .type .SuspiciousStewEffectsComponent .StewEffect ;
3032import net .minecraft .entity .Bucketable ;
@@ -77,10 +79,19 @@ public class BetterTooltips extends Module {
7779 .build ()
7880 );
7981
80- private final Setting <Keybind > openInventoryKey = sgGeneral .add (new KeybindSetting .Builder ()
81- .name ("open-inventory" )
82- .description ("Key to open full container inventory screen." )
82+ private final Setting <Boolean > viewContent = sgGeneral .add (new BoolSetting .Builder ()
83+ .name ("view-content" )
84+ .description ("Enable view content functionality." )
85+ .defaultValue (true )
86+ .onChanged (value -> updateTooltips = true )
87+ .build ()
88+ );
89+
90+ private final Setting <Keybind > viewContentKey = sgGeneral .add (new KeybindSetting .Builder ()
91+ .name ("view-content-key" )
92+ .description ("Key to view contents (containers, books, etc.)." )
8393 .defaultValue (Keybind .fromKey (GLFW_KEY_LEFT_CONTROL ))
94+ .visible (() -> viewContent .get ())
8495 .build ()
8596 );
8697
@@ -302,8 +313,16 @@ private void appendTooltip(ItemStackTooltipEvent event) {
302313 }
303314 }
304315
305- if (openInventoryKey .get ().isPressed () && (Utils .hasItems (event .itemStack ()) || event .itemStack ().getItem () instanceof BundleItem )) {
306- mc .setScreen (new ContainerInventoryScreen (event .itemStack ()));
316+ if (viewContent .get () && viewContentKey .get ().isPressed ()) {
317+ if (Utils .hasItems (event .itemStack ()) || event .itemStack ().getItem () instanceof BundleItem ) {
318+ if (mc .currentScreen instanceof HandledScreen )
319+ mc .currentScreen .close ();
320+ mc .setScreen (new ContainerInventoryScreen (event .itemStack ()));
321+ } else if (event .itemStack ().getItem () == Items .WRITABLE_BOOK || event .itemStack ().getItem () == Items .WRITTEN_BOOK ) {
322+ if (mc .currentScreen instanceof HandledScreen )
323+ mc .currentScreen .close ();
324+ mc .setScreen (new BookScreen (BookScreen .Contents .create (event .itemStack ())));
325+ }
307326 }
308327
309328 // Hold to preview tooltip
@@ -334,7 +353,11 @@ else if (event.itemStack.getItem() == Items.FILLED_MAP && previewMaps()) {
334353 // Book preview
335354 else if ((event .itemStack .getItem () == Items .WRITABLE_BOOK || event .itemStack .getItem () == Items .WRITTEN_BOOK ) && previewBooks ()) {
336355 Text page = getFirstPage (event .itemStack );
337- if (page != null ) event .tooltipData = new BookTooltipComponent (page );
356+ if (page != null ) {
357+ int pageCount = getBookPageCount (event .itemStack );
358+ Text pageWithCount = page .copy ().append (Text .literal (String .format (" (%d pages)" , pageCount )).formatted (Formatting .GRAY ));
359+ event .tooltipData = new BookTooltipComponent (pageWithCount );
360+ }
338361 }
339362
340363 // Banner preview
@@ -417,8 +440,9 @@ private void appendPreviewTooltipText(ItemStackTooltipEvent event, boolean space
417440 || (event .itemStack ().getItem () == Items .SHIELD && banners .get ())
418441 );
419442
420- boolean showInventoryText = ! openInventoryKey .get ().isPressed () && (
443+ boolean showFullPreviewText = viewContent . get () && ! viewContentKey .get ().isPressed () && (
421444 Utils .hasItems (event .itemStack ()) || event .itemStack ().getItem () instanceof BundleItem
445+ || event .itemStack ().getItem () == Items .WRITABLE_BOOK || event .itemStack ().getItem () == Items .WRITTEN_BOOK
422446 );
423447
424448 if (showPreviewText ) {
@@ -427,9 +451,9 @@ private void appendPreviewTooltipText(ItemStackTooltipEvent event, boolean space
427451 event .appendEnd (Text .literal ("Hold " + Formatting .YELLOW + keybind + Formatting .RESET + " to preview" ));
428452 }
429453
430- if (showInventoryText ) {
454+ if (showFullPreviewText ) {
431455 if (spacer && !showPreviewText ) event .appendEnd (Text .literal ("" ));
432- event .appendEnd (Text .literal ("Hold " + Formatting .YELLOW + openInventoryKey .get () + Formatting .RESET + " to open inventory " ));
456+ event .appendEnd (Text .literal ("Hold " + Formatting .YELLOW + viewContentKey .get () + Formatting .RESET + " to open preview " ));
433457 }
434458 }
435459
@@ -462,6 +486,16 @@ private Text getFirstPage(ItemStack bookItem) {
462486 return null ;
463487 }
464488
489+ private int getBookPageCount (ItemStack bookItem ) {
490+ if (bookItem .get (DataComponentTypes .WRITABLE_BOOK_CONTENT ) != null ) {
491+ return bookItem .get (DataComponentTypes .WRITABLE_BOOK_CONTENT ).pages ().size ();
492+ } else if (bookItem .get (DataComponentTypes .WRITTEN_BOOK_CONTENT ) != null ) {
493+ return bookItem .get (DataComponentTypes .WRITTEN_BOOK_CONTENT ).pages ().size ();
494+ }
495+ return 0 ;
496+ }
497+
498+
465499 private BannerTooltipComponent createBannerFromBannerPatternItem (ItemStack item ) {
466500 // I can't imagine getting the banner pattern from a banner pattern item would fail without some serious messing around
467501 BannerPatternsComponent component = new BannerPatternsComponent .Builder ().add (mc .player .getRegistryManager ().getOrThrow (RegistryKeys .BANNER_PATTERN ).getOrThrow (item .get (DataComponentTypes .PROVIDES_BANNER_PATTERNS )).get (0 ), DyeColor .WHITE ).build ();
0 commit comments