1- //package red.jackf.chesttracker.impl.compat.mods.searchables;
2- //
3- //import com.blamejared.searchables.api.SearchableComponent;
4- //import com.blamejared.searchables.api.SearchableType;
5- //import com.blamejared.searchables.api.autcomplete.AutoCompletingEditBox;
6- //import net.minecraft.client.gui.Font;
7- //import net.minecraft.client.gui.components.AbstractWidget;
8- //import net.minecraft.client.gui.components.EditBox;
9- //import net.minecraft.core.component.DataComponents;
10- //import net.minecraft.core.registries.BuiltInRegistries;
11- //import net.minecraft.resources.Identifier;
12- //import net.minecraft.world.item.ItemStack;
13- //import red.jackf.chesttracker.impl.config.ChestTrackerConfig;
14- //import red.jackf.chesttracker.impl.gui.widget.CustomEditBox;
15- //import red.jackf.chesttracker.impl.gui.widget.WidgetZOffsetWrapper;
16- //import red.jackf.chesttracker.impl.util.ItemStacks;
17- //
18- //import java.util.List;
19- //import java.util.Optional;
20- //import java.util.function.Consumer;
21- //import java.util.function.Predicate;
22- //import java.util.function.Supplier;
23- //
24- //public class SearchablesUtil {
25- // public static final SearchableType<ItemStack> ITEM_STACK = buildType();
26- //
27- // private static SearchableType<ItemStack> buildType() {
28- // return new SearchableType.Builder<ItemStack>()
29- // .defaultComponent(SearchableComponent.create("text", ItemStacks::defaultPredicate))
30- // .component(SearchableComponent.create("name", SearchablesUtil::stackNameSuggestions, ItemStacks::namePredicate))
31- // .component(SearchableComponent.create("tooltip", ItemStacks::tooltipPredicate))
32- // .component(SearchableComponent.create("id", stack -> Optional.of(BuiltInRegistries.ITEM.getKey(stack.getItem())
33- // .getPath())))
34- // .component(SearchableComponent.create("tag", ItemStacks::tagPredicate))
35- // .component(SearchableComponent.create("mod", stack -> Optional.of(BuiltInRegistries.ITEM.getKey(stack.getItem()))
36- // .map(Identifier::getNamespace)))
37- // .component(SearchableComponent.create("enchantment", ItemStacks::enchantmentPredicate))
38- // .component(SearchableComponent.create("potion", ItemStacks::potionOrEffectPredicate))
39- // .build();
40- // }
41- //
42- // private static Optional<String> stackNameSuggestions(ItemStack stack) {
43- // if (stack.has(DataComponents.CUSTOM_NAME) || ChestTrackerConfig.INSTANCE.instance().gui.autocompleteShowsRegularNames)
44- // return Optional.of(stack.getHoverName().getString());
45- // return Optional.empty();
46- // }
47- //
48- // public static EditBox getEditBox(
49- // Font font,
50- // int x,
51- // int y,
52- // int width,
53- // int height,
54- // EditBox previous,
55- // Supplier<List<ItemStack>> itemSupplier,
56- // Consumer<String> callback) {
57- // AutoCompletingEditBox<ItemStack> box = new AutoCompletingEditBox<>(
58- // font,
59- // x,
60- // y,
61- // width,
62- // height,
63- // previous,
64- // CustomEditBox.SEARCH_MESSAGE,
65- // ITEM_STACK,
66- // itemSupplier
67- // );
68- //
69- // var formatter = SearchablesUtil.getFormatter();
70- // box.addResponder(formatter);
71- // box.addFormatter(formatter::apply);
72- //
73- // box.addResponder(callback);
74- //
75- // return box;
76- // }
77- //
78- // public static CustomSearchablesFormatter getFormatter() {
79- // return new CustomSearchablesFormatter(ITEM_STACK);
80- // }
81- //
82- // public static boolean ifSearchables(EditBox box, Predicate<AbstractWidget> ifSearchablesBox) {
83- // if (box instanceof AutoCompletingEditBox<?> autoCompletingEditBox) {
84- // return ifSearchablesBox.test(autoCompletingEditBox.autoComplete());
85- // } else {
86- // return false;
87- // }
88- // }
89- //
90- // public static AbstractWidget getWrappedAutocomplete(EditBox search) {
91- // //noinspection unchecked
92- // return new WidgetZOffsetWrapper<>(((AutoCompletingEditBox<ItemStack>) search).autoComplete(), 250);
93- // }
94- //}
95- //temp remove searchabless
961package red .jackf .chesttracker .impl .compat .mods .searchables ;
972
3+ import com .blamejared .searchables .api .SearchableComponent ;
4+ import com .blamejared .searchables .api .SearchableType ;
5+ import com .blamejared .searchables .api .autcomplete .AutoCompletingEditBox ;
986import net .minecraft .client .gui .Font ;
997import net .minecraft .client .gui .components .AbstractWidget ;
1008import net .minecraft .client .gui .components .EditBox ;
9+ import net .minecraft .core .component .DataComponents ;
10+ import net .minecraft .core .registries .BuiltInRegistries ;
11+ import net .minecraft .resources .Identifier ;
10112import net .minecraft .world .item .ItemStack ;
13+ import red .jackf .chesttracker .impl .config .ChestTrackerConfig ;
10214import red .jackf .chesttracker .impl .gui .widget .CustomEditBox ;
15+ import red .jackf .chesttracker .impl .gui .widget .WidgetZOffsetWrapper ;
10316import red .jackf .chesttracker .impl .util .ItemStacks ;
10417
10518import java .util .List ;
19+ import java .util .Optional ;
10620import java .util .function .Consumer ;
10721import java .util .function .Predicate ;
10822import java .util .function .Supplier ;
10923
11024public class SearchablesUtil {
111- public static final DummySearchableType ITEM_STACK = new DummySearchableType ();
25+ public static final SearchableType <ItemStack > ITEM_STACK = buildType ();
26+
27+ private static SearchableType <ItemStack > buildType () {
28+ return new SearchableType .Builder <ItemStack >()
29+ .defaultComponent (SearchableComponent .create ("text" , ItemStacks ::defaultPredicate ))
30+ .component (SearchableComponent .create ("name" , SearchablesUtil ::stackNameSuggestions , ItemStacks ::namePredicate ))
31+ .component (SearchableComponent .create ("tooltip" , ItemStacks ::tooltipPredicate ))
32+ .component (SearchableComponent .create ("id" , stack -> Optional .of (BuiltInRegistries .ITEM .getKey (stack .getItem ())
33+ .getPath ())))
34+ .component (SearchableComponent .create ("tag" , ItemStacks ::tagPredicate ))
35+ .component (SearchableComponent .create ("mod" , stack -> Optional .of (BuiltInRegistries .ITEM .getKey (stack .getItem ()))
36+ .map (Identifier ::getNamespace )))
37+ .component (SearchableComponent .create ("enchantment" , ItemStacks ::enchantmentPredicate ))
38+ .component (SearchableComponent .create ("potion" , ItemStacks ::potionOrEffectPredicate ))
39+ .build ();
40+ }
41+
42+ private static Optional <String > stackNameSuggestions (ItemStack stack ) {
43+ if (stack .has (DataComponents .CUSTOM_NAME ) || ChestTrackerConfig .INSTANCE .instance ().gui .autocompleteShowsRegularNames )
44+ return Optional .of (stack .getHoverName ().getString ());
45+ return Optional .empty ();
46+ }
11247
11348 public static EditBox getEditBox (
11449 Font font ,
@@ -118,42 +53,42 @@ public static EditBox getEditBox(
11853 int height ,
11954 EditBox previous ,
12055 Supplier <List <ItemStack >> itemSupplier ,
121- Consumer <String > callback
122- ) {
123- CustomEditBox box = new CustomEditBox (
56+ Consumer <String > callback ) {
57+ AutoCompletingEditBox <ItemStack > box = new AutoCompletingEditBox <>(
12458 font ,
12559 x ,
12660 y ,
12761 width ,
12862 height ,
12963 previous ,
130- CustomEditBox .SEARCH_MESSAGE
64+ CustomEditBox .SEARCH_MESSAGE ,
65+ ITEM_STACK ,
66+ itemSupplier
13167 );
13268
133- box .setHint (CustomEditBox .SEARCH_MESSAGE );
134- box .setResponder (callback );
69+ var formatter = SearchablesUtil .getFormatter ();
70+ box .addResponder (formatter );
71+ box .addFormatter (formatter ::apply );
72+
73+ box .addResponder (callback );
74+
13575 return box ;
13676 }
13777
13878 public static CustomSearchablesFormatter getFormatter () {
139- return new CustomSearchablesFormatter (null );
79+ return new CustomSearchablesFormatter (ITEM_STACK );
14080 }
14181
14282 public static boolean ifSearchables (EditBox box , Predicate <AbstractWidget > ifSearchablesBox ) {
143- return false ;
83+ if (box instanceof AutoCompletingEditBox <?> autoCompletingEditBox ) {
84+ return ifSearchablesBox .test (autoCompletingEditBox .autoComplete ());
85+ } else {
86+ return false ;
87+ }
14488 }
14589
14690 public static AbstractWidget getWrappedAutocomplete (EditBox search ) {
147- return (AbstractWidget ) search ;
148- }
149-
150- public static class DummySearchableType {
151- public List <ItemStack > filterEntries (List <ItemStack > items , String filter ) {
152- String lowered = filter == null ? "" : filter .toLowerCase ();
153-
154- return items .stream ()
155- .filter (stack -> ItemStacks .defaultPredicate (stack , lowered ))
156- .toList ();
157- }
91+ //noinspection unchecked
92+ return new WidgetZOffsetWrapper <>(((AutoCompletingEditBox <ItemStack >) search ).autoComplete (), 250 );
15893 }
15994}
0 commit comments