diff options
author | vicisacat <victor.branchu@gmail.com> | 2023-09-14 15:54:08 +0200 |
---|---|---|
committer | vicisacat <victor.branchu@gmail.com> | 2023-09-14 15:54:08 +0200 |
commit | df96aa7bb5bb79a78988ba6701e65a5de3a9ecf2 (patch) | |
tree | 46ac7bb637d57db31b2b2209ff6d124b572d8218 /src/main/java/me/xmrvizzy/skyblocker/skyblock/item | |
parent | 992178bef293e0b31a2230ff4193d2ed99997bf0 (diff) | |
download | Skyblocker-df96aa7bb5bb79a78988ba6701e65a5de3a9ecf2.tar.gz Skyblocker-df96aa7bb5bb79a78988ba6701e65a5de3a9ecf2.tar.bz2 Skyblocker-df96aa7bb5bb79a78988ba6701e65a5de3a9ecf2.zip |
"Refactor CompactorDeletorPreview logic for better structure"
Split the logic for CompactorDeletorPreview to reduce the complexity within the HandledScreenMixin.java file. This change helps to make the code simpler and easier to maintain.
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/skyblock/item')
-rw-r--r-- | src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CompactorDeletorPreview.java | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CompactorDeletorPreview.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CompactorDeletorPreview.java new file mode 100644 index 00000000..70a37b8a --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/item/CompactorDeletorPreview.java @@ -0,0 +1,122 @@ +package me.xmrvizzy.skyblocker.skyblock.item; + +import me.xmrvizzy.skyblocker.mixin.accessor.DrawContextInvoker; +import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.tooltip.HoveredTooltipPositioner; +import net.minecraft.client.gui.tooltip.TooltipComponent; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.text.MutableText; +import net.minecraft.text.Style; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class CompactorDeletorPreview { + + private static final MinecraftClient mcClient = MinecraftClient.getInstance(); + private static final Map<String, int[]> personalCompactorTypeToSlot = new HashMap<>(); + // Lines, and slots per lines + static { + personalCompactorTypeToSlot.put("4000", new int[]{1,1}); + personalCompactorTypeToSlot.put("5000", new int[]{1,3}); + personalCompactorTypeToSlot.put("6000", new int[]{1,7}); + personalCompactorTypeToSlot.put("7000", new int[]{2,6}); + personalCompactorTypeToSlot.put("default", new int[]{1,6}); + } + + public static boolean displayCompactorDeletorPreview(DrawContextInvoker context, int x, int y, ItemStack stack) { + String internalName = ItemRegistry.getInternalName(stack); + + String prefix; + String itemSlotPrefix; + if (internalName.contains("PERSONAL_COMPACTOR_")) { + prefix = "PERSONAL_COMPACTOR_"; + itemSlotPrefix = "personal_compact_"; + } else { + prefix = "PERSONAL_DELETOR_"; + itemSlotPrefix = "personal_deletor_"; + } + + // Find the line to insert component + int targetIndex = -1; + int lineCount = 0; + + List<Text> tooltips = Screen.getTooltipFromItem(mcClient, stack); + for (int i = 0; i < tooltips.size(); i++) { + if (tooltips.get(i).getString().isEmpty()) { + lineCount += 1; + } + if (lineCount == 2) { + targetIndex = i; + break; + } + } + if (targetIndex == -1) return false; + List<TooltipComponent> components = new java.util.ArrayList<>(tooltips.stream().map(Text::asOrderedText).map(TooltipComponent::of).toList()); + + // STUFF + String internalID = ItemRegistry.getInternalName(stack); + String compactorType = internalID.replaceFirst(prefix, ""); + int[] dimensions = personalCompactorTypeToSlot.containsKey(compactorType) ? personalCompactorTypeToSlot.get(compactorType) : personalCompactorTypeToSlot.get("default"); + + NbtCompound nbt = stack.getNbt(); + if (nbt == null || !nbt.contains("ExtraAttributes", 10)) { + return false; + } + NbtCompound extraAttributes = nbt.getCompound("ExtraAttributes"); + Set<String> attributesKeys = extraAttributes.getKeys(); + List<String> compactorItems = attributesKeys.stream().filter(s -> s.contains(itemSlotPrefix)).toList(); + Map<Integer, ItemStack> slotAndItem = new HashMap<>(); + + if (compactorItems.isEmpty()) { + int slotsCount = (dimensions[0] * dimensions[1]); + components.add(targetIndex, TooltipComponent.of(Text.literal( + slotsCount + (slotsCount == 1 ? " slot": " slots")) + .fillStyle(Style.EMPTY.withColor(Formatting.DARK_GRAY)).asOrderedText())); + + context.invokeDrawTooltip(mcClient.textRenderer, components, x, y, HoveredTooltipPositioner.INSTANCE); + return true; + } + + compactorItems.forEach(s -> slotAndItem.put(getNumberAtEnd(s, itemSlotPrefix), ItemRegistry.getItemStack(extraAttributes.getString(s)))); + + + components.add(targetIndex, new CompactorPreviewTooltipComponent(slotAndItem, dimensions)); + components.add(targetIndex, TooltipComponent.of(Text.literal(" ").append( + Text.literal("Contents:").fillStyle(Style.EMPTY + .withItalic(true))) + .asOrderedText())); + if (attributesKeys.stream().anyMatch(s -> s.contains("PERSONAL_DELETOR_ACTIVE"))) { + MutableText isActiveText = Text.literal("Active: "); + if (extraAttributes.getBoolean("PERSONAL_DELETOR_ACTIVE")) { + components.add(targetIndex, TooltipComponent.of(isActiveText.append( + Text.literal("YES").fillStyle(Style.EMPTY.withBold(true).withColor(Formatting.GREEN)) + ).asOrderedText() + )); + } else { + components.add(targetIndex, TooltipComponent.of(isActiveText.append( + Text.literal("NO").fillStyle(Style.EMPTY.withBold(true).withColor(Formatting.RED)) + ).asOrderedText() + )); + } + } + context.invokeDrawTooltip(mcClient.textRenderer, components, x, y, HoveredTooltipPositioner.INSTANCE); + return true; + } + + private static Integer getNumberAtEnd(String str, String attributesKey) { + try { + String numberPartOfTheString = str.replace(attributesKey, ""); + return Integer.parseInt(numberPartOfTheString); + } catch (NumberFormatException e) { + return 0; + } + } +} |