Skip to content

Commit c216d03

Browse files
committed
Additional Descriptions load when new Screen is opened
1 parent 06bfeb6 commit c216d03

File tree

1 file changed

+102
-8
lines changed

1 file changed

+102
-8
lines changed

src/client/java/com/coflnet/CoflModClient.java

Lines changed: 102 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44
import CoflCore.classes.*;
55
import CoflCore.CoflSkyCommand;
66
import CoflCore.commands.models.FlipData;
7+
import CoflCore.configuration.Config;
8+
import CoflCore.handlers.DescriptionHandler;
79
import CoflCore.handlers.EventRegistry;
10+
import CoflCore.network.QueryServerCommands;
11+
import CoflCore.network.WSClient;
812
import com.coflnet.gui.RenderUtils;
913
import com.coflnet.gui.cofl.CoflBinGUI;
1014
import com.coflnet.gui.tfm.TfmBinGUI;
@@ -17,28 +21,44 @@
1721
import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
1822
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
1923
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
24+
import net.fabricmc.fabric.api.client.item.v1.ItemTooltipCallback;
2025
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
2126
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
2227
import net.fabricmc.fabric.api.client.rendering.v1.HudRenderCallback;
2328
import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
29+
import net.fabricmc.fabric.api.client.screen.v1.ScreenKeyboardEvents;
2430
import net.fabricmc.loader.api.FabricLoader;
31+
import net.minecraft.advancement.criterion.InventoryChangedCriterion;
2532
import net.minecraft.client.MinecraftClient;
2633
import net.minecraft.client.gui.screen.ChatScreen;
34+
import net.minecraft.client.gui.screen.Screen;
2735
import 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;
2841
import net.minecraft.client.option.KeyBinding;
2942
import net.minecraft.client.util.InputUtil;
3043
import net.minecraft.entity.player.PlayerEntity;
3144
import net.minecraft.entity.player.PlayerInventory;
3245
import net.minecraft.inventory.Inventories;
3346
import net.minecraft.inventory.Inventory;
47+
import net.minecraft.inventory.InventoryChangedListener;
48+
import net.minecraft.item.Item;
3449
import net.minecraft.item.ItemStack;
3550
import net.minecraft.item.Items;
51+
import net.minecraft.item.tooltip.TooltipData;
3652
import net.minecraft.nbt.NbtCompound;
3753
import net.minecraft.nbt.NbtIo;
3854
import net.minecraft.registry.Registries;
3955
import net.minecraft.registry.entry.RegistryEntry;
56+
import net.minecraft.screen.ScreenHandler;
57+
import net.minecraft.screen.ScreenHandlerListener;
4058
import net.minecraft.sound.SoundEvent;
4159
import net.minecraft.sound.SoundEvents;
60+
import net.minecraft.text.HoverEvent;
61+
import net.minecraft.text.Text;
4262
import net.minecraft.util.collection.DefaultedList;
4363
import 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

Comments
 (0)