99import com .simibubi .create .content .logistics .stockTicker .*;
1010import com .simibubi .create .foundation .gui .menu .AbstractSimiContainerScreen ;
1111import net .createmod .catnip .animation .LerpedFloat ;
12+ import net .createmod .catnip .data .Couple ;
1213import net .createmod .catnip .data .Pair ;
1314import net .createmod .catnip .gui .element .GuiGameElement ;
1415import net .createmod .catnip .platform .services .NetworkHelper ;
1516import net .minecraft .client .gui .Font ;
1617import net .minecraft .client .gui .GuiGraphics ;
1718import net .minecraft .client .gui .components .EditBox ;
19+ import net .minecraft .client .renderer .Rect2i ;
1820import net .minecraft .network .chat .Component ;
1921import net .minecraft .network .protocol .common .custom .CustomPacketPayload ;
2022import net .minecraft .world .entity .player .Inventory ;
2426import net .minecraft .world .item .TooltipFlag ;
2527import net .minecraft .world .level .Level ;
2628import net .minecraft .world .level .block .Blocks ;
27- import org .spongepowered .asm .mixin .Mixin ;
28- import org .spongepowered .asm .mixin .Overwrite ;
29- import org .spongepowered .asm .mixin .Shadow ;
30- import org .spongepowered .asm .mixin .Unique ;
29+ import org .spongepowered .asm .mixin .*;
3130import org .spongepowered .asm .mixin .injection .At ;
3231import org .spongepowered .asm .mixin .injection .Redirect ;
3332import ru .zznty .create_factory_abstractions .api .generic .crafting .OrderProvider ;
3433import ru .zznty .create_factory_abstractions .api .generic .crafting .RecipeRequestHelper ;
34+ import ru .zznty .create_factory_abstractions .api .generic .key .GenericKey ;
3535import ru .zznty .create_factory_abstractions .api .generic .search .CategoriesProvider ;
3636import ru .zznty .create_factory_abstractions .api .generic .search .GenericSearch ;
3737import ru .zznty .create_factory_abstractions .api .generic .stack .GenericStack ;
4040import ru .zznty .create_factory_abstractions .generic .support .CraftableGenericStack ;
4141import ru .zznty .create_factory_abstractions .generic .support .GenericInventorySummary ;
4242import ru .zznty .create_factory_abstractions .generic .support .GenericOrder ;
43+ import ru .zznty .create_factory_logistics .logistics .ingredient .ClickableIngredientProvider ;
4344import ru .zznty .create_factory_logistics .mixin .accessor .CategoryEntryAccessor ;
4445import ru .zznty .create_factory_logistics .mixin .accessor .StockTickerBlockEntityAccessor ;
4546
4647import java .util .*;
4748import java .util .function .Function ;
4849
4950@ Mixin (StockKeeperRequestScreen .class )
50- public abstract class StockKeeperRequestScreenMixin extends AbstractSimiContainerScreen <StockKeeperRequestMenu > implements OrderProvider , CategoriesProvider {
51+ public abstract class StockKeeperRequestScreenMixin extends AbstractSimiContainerScreen <StockKeeperRequestMenu > implements OrderProvider , CategoriesProvider , ClickableIngredientProvider {
5152 public StockKeeperRequestScreenMixin (StockKeeperRequestMenu container , Inventory inv , Component title ) {
5253 super (container , inv , title );
5354 }
@@ -82,12 +83,15 @@ public StockKeeperRequestScreenMixin(StockKeeperRequestMenu container, Inventory
8283 @ Shadow
8384 public EditBox searchBox ;
8485
86+ @ Final
8587 @ Shadow
86- final int cols = 9 ;
88+ int cols , orderY ;
8789
90+ @ Final
8891 @ Shadow
89- final int rowHeight = 20 ;
92+ int rowHeight , colWidth ;
9093
94+ @ Final
9195 @ Shadow
9296 private Set <Integer > hiddenCategories ;
9397
@@ -114,6 +118,21 @@ public void requestSchematicList() {
114118 @ Shadow
115119 public List <StockKeeperRequestScreen .CategoryEntry > categories ;
116120
121+ @ Final
122+ @ Shadow (remap = false )
123+ Couple <Integer > noneHovered ;
124+
125+ @ Shadow (remap = false )
126+ int itemsX , itemsY ;
127+
128+ @ Shadow (remap = false )
129+ int windowWidth ;
130+
131+ @ Shadow (remap = false )
132+ private Couple <Integer > getHoveredSlot (int x , int y ) {
133+ return noneHovered ;
134+ }
135+
117136 @ Redirect (
118137 method = "containerTick" ,
119138 at = @ At (
@@ -509,4 +528,49 @@ public Set<Integer> hiddenCategories() {
509528 public List <List <BigGenericStack >> currentItemSource () {
510529 return currentItemSource ;
511530 }
531+
532+ @ Override
533+ public Pair <GenericKey , Rect2i > getHoveredKey (int mouseX , int mouseY ) {
534+ Couple <Integer > hoveredSlot = getHoveredSlot (mouseX , mouseY );
535+
536+ if (hoveredSlot != noneHovered ) {
537+ int index = hoveredSlot .getSecond ();
538+ boolean recipeHovered = hoveredSlot .getFirst () == -2 ;
539+ boolean orderHovered = hoveredSlot .getFirst () == -1 ;
540+
541+ int x , y ;
542+ BigGenericStack entry ;
543+ if (recipeHovered ) {
544+ int jeiX = getGuiLeft () + (windowWidth - colWidth * recipesToOrder .size ()) / 2 + 1 ;
545+ int jeiY = orderY - 31 ;
546+
547+ x = jeiX + (index * colWidth );
548+ y = jeiY ;
549+
550+ entry = recipesToOrder .get (index );
551+ } else {
552+ if (orderHovered ) {
553+ x = itemsX + index * colWidth ;
554+ y = orderY ;
555+
556+ entry = itemsToOrder .get (index );
557+ } else {
558+ int categoryIndex = hoveredSlot .getFirst ();
559+ int categoryY = categories .isEmpty () ?
560+ 0 :
561+ ((CategoryEntryAccessor ) categories .get (categoryIndex )).getY ();
562+
563+ x = itemsX + (index % cols ) * colWidth ;
564+ y = itemsY + categoryY + (categories .isEmpty () ? 4 : rowHeight ) + (index / cols ) * rowHeight ;
565+
566+ entry = displayedItems .get (categoryIndex ).get (index );
567+ }
568+ }
569+
570+ Rect2i bounds = new Rect2i (x , y , x + 18 , y + 18 );
571+ return Pair .of (entry .get ().key (), bounds );
572+ }
573+
574+ return Pair .of (GenericKey .EMPTY , new Rect2i (0 , 0 , 0 , 0 ));
575+ }
512576}
0 commit comments