44import CoflCore .classes .*;
55import CoflCore .CoflSkyCommand ;
66import CoflCore .commands .models .FlipData ;
7+ import CoflCore .configuration .Config ;
8+ import CoflCore .handlers .DescriptionHandler ;
79import CoflCore .handlers .EventRegistry ;
10+ import CoflCore .network .QueryServerCommands ;
11+ import CoflCore .network .WSClient ;
812import com .coflnet .gui .RenderUtils ;
913import com .coflnet .gui .cofl .CoflBinGUI ;
1014import com .coflnet .gui .tfm .TfmBinGUI ;
1721import net .fabricmc .fabric .api .client .command .v2 .ClientCommandRegistrationCallback ;
1822import net .fabricmc .fabric .api .client .event .lifecycle .v1 .ClientLifecycleEvents ;
1923import net .fabricmc .fabric .api .client .event .lifecycle .v1 .ClientTickEvents ;
24+ import net .fabricmc .fabric .api .client .item .v1 .ItemTooltipCallback ;
2025import net .fabricmc .fabric .api .client .keybinding .v1 .KeyBindingHelper ;
2126import net .fabricmc .fabric .api .client .networking .v1 .ClientPlayConnectionEvents ;
2227import net .fabricmc .fabric .api .client .rendering .v1 .HudRenderCallback ;
2328import net .fabricmc .fabric .api .client .screen .v1 .ScreenEvents ;
29+ import net .fabricmc .fabric .api .client .screen .v1 .ScreenKeyboardEvents ;
2430import net .fabricmc .loader .api .FabricLoader ;
31+ import net .minecraft .advancement .criterion .InventoryChangedCriterion ;
2532import net .minecraft .client .MinecraftClient ;
2633import net .minecraft .client .gui .screen .ChatScreen ;
34+ import net .minecraft .client .gui .screen .Screen ;
2735import net .minecraft .client .gui .screen .ingame .GenericContainerScreen ;
36+ import net .minecraft .client .gui .screen .ingame .HandledScreen ;
37+ import net .minecraft .client .gui .screen .ingame .HandledScreens ;
38+ import net .minecraft .client .gui .screen .ingame .InventoryScreen ;
39+ import net .minecraft .client .gui .tooltip .HoveredTooltipPositioner ;
40+ import net .minecraft .client .gui .tooltip .Tooltip ;
2841import net .minecraft .client .option .KeyBinding ;
2942import net .minecraft .client .util .InputUtil ;
3043import net .minecraft .entity .player .PlayerEntity ;
3144import net .minecraft .entity .player .PlayerInventory ;
3245import net .minecraft .inventory .Inventories ;
3346import net .minecraft .inventory .Inventory ;
47+ import net .minecraft .inventory .InventoryChangedListener ;
48+ import net .minecraft .item .Item ;
3449import net .minecraft .item .ItemStack ;
3550import net .minecraft .item .Items ;
51+ import net .minecraft .item .tooltip .TooltipData ;
3652import net .minecraft .nbt .NbtCompound ;
3753import net .minecraft .nbt .NbtIo ;
3854import net .minecraft .registry .Registries ;
3955import net .minecraft .registry .entry .RegistryEntry ;
56+ import net .minecraft .screen .ScreenHandler ;
57+ import net .minecraft .screen .ScreenHandlerListener ;
4058import net .minecraft .sound .SoundEvent ;
4159import net .minecraft .sound .SoundEvents ;
60+ import net .minecraft .text .HoverEvent ;
61+ import net .minecraft .text .Text ;
4262import net .minecraft .util .collection .DefaultedList ;
4363import org .lwjgl .glfw .GLFW ;
4464
@@ -53,6 +73,7 @@ public class CoflModClient implements ClientModInitializer {
5373 private static boolean keyPressed = false ;
5474 private static int counter = 0 ;
5575 public static KeyBinding bestflipsKeyBinding ;
76+ public static HashMap <String , String > itemIds = new HashMap <>();
5677
5778 private String username = "" ;
5879 @ Override
@@ -122,6 +143,61 @@ public void onInitializeClient() {
122143 }
123144 });
124145
146+ ScreenEvents .AFTER_INIT .register ((client , screen , scaledWidth , scaledHeight ) -> {
147+ if (screen instanceof HandledScreen hs ) {
148+ DefaultedList <ItemStack > itemStacks = ((HandledScreen <?>) screen ).getScreenHandler ().getStacks ();
149+
150+ if (!client .player .getInventory ().getStack (8 ).getComponents ().toString ().contains ("minecraft:custom_data=>{id:\" SKYBLOCK_MENU\" }" )) return ;
151+ DescriptionHandler .emptyTooltipData ();
152+ DescriptionHandler .loadDescriptionForInventory (
153+ getItemIdsFromInventory (itemStacks ),
154+ screen .getTitle ().getLiteralString (),
155+ inventoryToNBT (itemStacks ),
156+ MinecraftClient .getInstance ().getSession ().getUsername ()
157+ );
158+
159+ hs .getScreenHandler ().addListener (new ScreenHandlerListener () {
160+ @ Override
161+ public void onSlotUpdate (ScreenHandler handler , int slotId , ItemStack stack ) {
162+ if (DescriptionHandler .getTooltipData (CoflModClient .itemIds .get (stack .toString ())).length == 0 ){
163+ System .out .println ("NO DESC FOUND" );
164+ }
165+ }
166+ @ Override
167+ public void onPropertyUpdate (ScreenHandler handler , int property , int value ) {}
168+ });
169+ }
170+ });
171+
172+ ItemTooltipCallback .EVENT .register ((stack , tooltipContext , tooltipType , lines ) -> {
173+ if (itemIds .isEmpty ()) return ;
174+ DescriptionHandler .DescModification [] tooltips = DescriptionHandler .getTooltipData (itemIds .get (stack .toString ()));
175+ ArrayList <Text > temp = new ArrayList <>(lines );
176+ for (DescriptionHandler .DescModification tooltip : tooltips ) {
177+ switch (tooltip .type ){
178+ case "APPEND" :
179+ lines .add (Text .of (tooltip .value +" " ));
180+ break ;
181+ case "REPLACE" :
182+ lines .remove (tooltip .line );
183+ lines .add (tooltip .line , Text .of (tooltip .value ));
184+ break ;
185+ case "INSERT" :
186+ lines .add (tooltip .line , Text .of (tooltip .value ));
187+ break ;
188+ case "DELETE" :
189+ lines .remove (tooltip .line );
190+ break ;
191+ case "HIGHLIGHT" :
192+ if (MinecraftClient .getInstance ().currentScreen instanceof HandledScreen <?> hs ){
193+ //hs.getScreenHandler().getSlot(hs.getScreenHandler().getStacks().indexOf(stack));
194+ }
195+ break ;
196+ default : System .out .println ("Unknown type: " +tooltip .type );
197+ }
198+ }
199+ });
200+
125201 HudRenderCallback .EVENT .register ((drawContext , tickCounter ) -> {
126202 if (EventSubscribers .showCountdown && EventSubscribers .countdownData != null
127203 && (MinecraftClient .getInstance ().currentScreen == null
@@ -180,16 +256,29 @@ public static Flip jsonToFlip(String json){
180256 return new Flip (chatMessages , id , worth , sound , auction , render , target );
181257 }
182258
183- public static String inventoryToNBT (Inventory inventory ){
184- NbtCompound nbtCompound = new NbtCompound ();
185- ByteArrayOutputStream baos = new ByteArrayOutputStream ();
186- PlayerEntity player = MinecraftClient .getInstance ().player ;
259+ public static DefaultedList <ItemStack > inventoryToItemStacks (Inventory inventory ){
187260 DefaultedList <ItemStack > itemStacks = DefaultedList .of ();
188261
189262 for (int i = 0 ; i < inventory .size (); i ++) {
190263 itemStacks .add (inventory .getStack (i ));
191264 }
192265
266+ return itemStacks ;
267+ }
268+
269+ public static String inventoryToNBT (Inventory inventory ){
270+ return inventoryToNBT (inventoryToItemStacks (inventory ));
271+ }
272+
273+ public static String [] getItemIdsFromInventory (Inventory inventory ){
274+ return getItemIdsFromInventory (inventoryToItemStacks (inventory ));
275+ }
276+
277+ public static String inventoryToNBT (DefaultedList <ItemStack > itemStacks ){
278+ NbtCompound nbtCompound = new NbtCompound ();
279+ ByteArrayOutputStream baos = new ByteArrayOutputStream ();
280+ PlayerEntity player = MinecraftClient .getInstance ().player ;
281+
193282 try {
194283 Inventories .writeNbt (nbtCompound , itemStacks , player .getRegistryManager ());
195284 nbtCompound .put ("i" , nbtCompound .get ("Items" ));
@@ -204,15 +293,20 @@ public static String inventoryToNBT(Inventory inventory){
204293 return "" ;
205294 }
206295
207- public static String [] getItemIdsFromInventory (PlayerInventory inventory ){
296+ public static String [] getItemIdsFromInventory (DefaultedList < ItemStack > itemStacks ){
208297 ArrayList <String > res = new ArrayList <>();
298+ itemIds .clear ();
209299
210- for (int i = 0 ; i < inventory .size (); i ++) {
211- ItemStack stack = inventory .getStack (i );
212- if (stack .getItem () != Items .AIR ) res .add (Registries .ITEM .getId (stack .getItem ()).toString ());
300+ for (int i = 0 ; i < itemStacks .size (); i ++) {
301+ ItemStack stack = itemStacks .get (i );
302+ if (stack .getItem () != Items .AIR ) {
303+ itemIds .put (stack .toString (), stack .toString ());
304+ res .add (stack .toString ());
305+ }
213306 }
214307
215308 return res .toArray (String []::new );
216309 }
310+
217311}
218312
0 commit comments