From 292567ff8a77dfb8bae100ab74bc77ab01f76482 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 25 Oct 2023 09:27:15 -0400 Subject: Update backpack preview background --- .../hysky/skyblocker/skyblock/item/BackpackPreview.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) (limited to 'src/main') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java b/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java index f856a255..79432bd4 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java @@ -1,7 +1,6 @@ package de.hysky.skyblocker.skyblock.item; import com.mojang.blaze3d.systems.RenderSystem; -import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.config.SkyblockerConfigManager; import de.hysky.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; @@ -24,12 +23,13 @@ import java.io.File; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; public class BackpackPreview { private static final Logger LOGGER = LoggerFactory.getLogger(BackpackPreview.class); - private static final Identifier TEXTURE = new Identifier(SkyblockerMod.NAMESPACE, "textures/gui/inventory_background.png"); + private static final Identifier TEXTURE = new Identifier("textures/gui/container/generic_54.png"); private static final Pattern ECHEST_PATTERN = Pattern.compile("Ender Chest.*\\((\\d+)/\\d+\\)"); private static final Pattern BACKPACK_PATTERN = Pattern.compile("Backpack.*\\(Slot #(\\d+)\\)"); private static final int STORAGE_SIZE = 27; @@ -56,7 +56,7 @@ public class BackpackPreview { // update save dir based on uuid and sb profile String uuid = MinecraftClient.getInstance().getSession().getUuidOrNull().toString().replaceAll("-", ""); String profile = Utils.getProfile(); - if (profile != null && !profile.isEmpty()) { + if (!profile.isEmpty()) { save_dir = FabricLoader.getInstance().getConfigDir().resolve("skyblocker/backpack-preview/" + uuid + "/" + profile); save_dir.toFile().mkdirs(); if (loaded.equals(uuid + "/" + profile)) { @@ -84,7 +84,7 @@ public class BackpackPreview { if (file.isFile()) { try { NbtCompound root = NbtIo.read(file); - storage[index] = new DummyInventory(root); + storage[index] = new DummyInventory(Objects.requireNonNull(root)); } catch (Exception e) { LOGGER.error("Failed to load backpack preview file: " + file.getName(), e); } @@ -152,11 +152,8 @@ public class BackpackPreview { matrices.translate(0f, 0f, 400f); RenderSystem.enableDepthTest(); - context.drawTexture(TEXTURE, x, y, 0, 0, 176, 7); - for (int i = 0; i < rows; ++i) { - context.drawTexture(TEXTURE, x, y + i * 18 + 7, 0, 7, 176, 18); - } - context.drawTexture(TEXTURE, x, y + rows * 18 + 7, 0, 25, 176, 7); + context.drawTexture(TEXTURE, x, y, 0, 0, 176, rows * 18 + 17); + context.drawTexture(TEXTURE, x, y + rows * 18 + 17, 0, 126, 176, 96); TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; for (int i = 9; i < storage[index].size(); ++i) { -- cgit From 7f447a6c341ce3268a6fcff89e4ef54955cdd626 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 25 Oct 2023 12:47:08 -0400 Subject: Update backpack preview background --- src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java b/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java index 79432bd4..19ef99b8 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java @@ -152,8 +152,9 @@ public class BackpackPreview { matrices.translate(0f, 0f, 400f); RenderSystem.enableDepthTest(); - context.drawTexture(TEXTURE, x, y, 0, 0, 176, rows * 18 + 17); - context.drawTexture(TEXTURE, x, y + rows * 18 + 17, 0, 126, 176, 96); + context.drawTexture(TEXTURE, x, y, 0, 0, 176, 7); + context.drawTexture(TEXTURE, x, y + 7, 0, 17, 176, rows * 18); + context.drawTexture(TEXTURE, x, y + rows * 18 + 7, 0, 215, 176, 7); TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; for (int i = 9; i < storage[index].size(); ++i) { -- cgit From 44a35dee12a033cfbaf14801d412a3359a065628 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 25 Oct 2023 19:44:22 -0400 Subject: Add storage name --- .../skyblocker/skyblock/item/BackpackPreview.java | 177 ++++++++++++--------- 1 file changed, 100 insertions(+), 77 deletions(-) (limited to 'src/main') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java b/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java index 19ef99b8..cabb72f1 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java @@ -34,8 +34,7 @@ public class BackpackPreview { private static final Pattern BACKPACK_PATTERN = Pattern.compile("Backpack.*\\(Slot #(\\d+)\\)"); private static final int STORAGE_SIZE = 27; - private static final Inventory[] storage = new Inventory[STORAGE_SIZE]; - private static final boolean[] dirty = new boolean[STORAGE_SIZE]; + private static final Storage[] storages = new Storage[STORAGE_SIZE]; private static String loaded = ""; // uuid + sb profile currently loaded private static Path save_dir = null; @@ -58,13 +57,14 @@ public class BackpackPreview { String profile = Utils.getProfile(); if (!profile.isEmpty()) { save_dir = FabricLoader.getInstance().getConfigDir().resolve("skyblocker/backpack-preview/" + uuid + "/" + profile); + //noinspection ResultOfMethodCallIgnored save_dir.toFile().mkdirs(); if (loaded.equals(uuid + "/" + profile)) { // mark currently opened storage as dirty if (MinecraftClient.getInstance().currentScreen != null) { String title = MinecraftClient.getInstance().currentScreen.getTitle().getString(); int index = getStorageIndexFromTitle(title); - if (index != -1) dirty[index] = true; + if (index != -1) storages[index].markDirty(); } } else { // load storage again because uuid/profile changed @@ -78,13 +78,12 @@ public class BackpackPreview { public static void loadStorage() { assert (save_dir != null); for (int index = 0; index < STORAGE_SIZE; ++index) { - storage[index] = null; - dirty[index] = false; + storages[index] = null; File file = save_dir.resolve(index + ".nbt").toFile(); if (file.isFile()) { try { NbtCompound root = NbtIo.read(file); - storage[index] = new DummyInventory(Objects.requireNonNull(root)); + storages[index] = new Storage(new DummyInventory(Objects.requireNonNull(root)), root.getString("name")); } catch (Exception e) { LOGGER.error("Failed to load backpack preview file: " + file.getName(), e); } @@ -95,31 +94,30 @@ public class BackpackPreview { private static void saveStorage() { assert (save_dir != null); for (int index = 0; index < STORAGE_SIZE; ++index) { - if (dirty[index]) { - if (storage[index] != null) { - try { - NbtCompound root = new NbtCompound(); - NbtList list = new NbtList(); - for (int i = 9; i < storage[index].size(); ++i) { - ItemStack stack = storage[index].getStack(i); - NbtCompound item = new NbtCompound(); - if (stack.isEmpty()) { - item.put("id", NbtString.of("minecraft:air")); - item.put("Count", NbtInt.of(1)); - } else { - item.put("id", NbtString.of(stack.getItem().toString())); - item.put("Count", NbtInt.of(stack.getCount())); - item.put("tag", stack.getNbt()); - } - list.add(item); + if (storages[index] != null && storages[index].dirty) { + try { + NbtCompound root = new NbtCompound(); + NbtList list = new NbtList(); + for (int i = 9; i < storages[index].inventory.size(); ++i) { + ItemStack stack = storages[index].inventory.getStack(i); + NbtCompound item = new NbtCompound(); + if (stack.isEmpty()) { + item.put("id", NbtString.of("minecraft:air")); + item.put("Count", NbtInt.of(1)); + } else { + item.put("id", NbtString.of(stack.getItem().toString())); + item.put("Count", NbtInt.of(stack.getCount())); + item.put("tag", stack.getNbt()); } - root.put("list", list); - root.put("size", NbtInt.of(storage[index].size() - 9)); - NbtIo.write(root, save_dir.resolve(index + ".nbt").toFile()); - dirty[index] = false; - } catch (Exception e) { - LOGGER.error("Failed to save backpack preview file: " + index + ".nbt", e); + list.add(item); } + root.put("list", list); + root.put("size", NbtInt.of(storages[index].inventory.size() - 9)); + root.putString("name", storages[index].name); + NbtIo.write(root, save_dir.resolve(index + ".nbt").toFile()); + storages[index].markClean(); + } catch (Exception e) { + LOGGER.error("Failed to save backpack preview file: " + index + ".nbt", e); } } } @@ -129,8 +127,7 @@ public class BackpackPreview { String title = screen.getTitle().getString(); int index = getStorageIndexFromTitle(title); if (index != -1) { - storage[index] = screen.getScreenHandler().slots.get(0).inventory; - dirty[index] = true; + storages[index] = new Storage(screen.getScreenHandler().slots.get(0).inventory, title, true); } } @@ -139,8 +136,8 @@ public class BackpackPreview { else if (index >= 27 && index < 45) index -= 18; else return false; - if (storage[index] == null) return false; - int rows = (storage[index].size() - 9) / 9; + if (storages[index] == null) return false; + int rows = (storages[index].inventory.size() - 9) / 9; Screen screen = MinecraftClient.getInstance().currentScreen; if (screen == null) return false; @@ -157,8 +154,10 @@ public class BackpackPreview { context.drawTexture(TEXTURE, x, y + rows * 18 + 7, 0, 215, 176, 7); TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; - for (int i = 9; i < storage[index].size(); ++i) { - ItemStack currentStack = storage[index].getStack(i); + context.drawText(textRenderer, storages[index].name, x + 8, y + 6, 0x404040, false); + + for (int i = 9; i < storages[index].inventory.size(); ++i) { + ItemStack currentStack = storages[index].inventory.getStack(i); int itemX = x + (i - 9) % 9 * 18 + 8; int itemY = y + (i - 9) / 9 * 18 + 8; @@ -185,59 +184,83 @@ public class BackpackPreview { if (backpack.find()) return Integer.parseInt(backpack.group(1)) + 8; return -1; } -} -class DummyInventory implements Inventory { - private final List stacks; + static class Storage { + private final Inventory inventory; + private final String name; + private boolean dirty; - public DummyInventory(NbtCompound root) { - stacks = new ArrayList<>(root.getInt("size") + 9); - for (int i = 0; i < 9; ++i) stacks.add(ItemStack.EMPTY); - root.getList("list", NbtCompound.COMPOUND_TYPE).forEach(item -> - stacks.add(ItemStack.fromNbt((NbtCompound) item)) - ); - } + public Storage(Inventory inventory, String name) { + this(inventory, name, false); + } - @Override - public int size() { - return stacks.size(); - } + public Storage(Inventory inventory, String name, boolean dirty) { + this.inventory = inventory; + this.name = name; + this.dirty = dirty; + } - @Override - public boolean isEmpty() { - return false; - } + public void markDirty() { + dirty = true; + } - @Override - public ItemStack getStack(int slot) { - return stacks.get(slot); + public void markClean() { + dirty = false; + } } - @Override - public ItemStack removeStack(int slot, int amount) { - return null; - } + static class DummyInventory implements Inventory { + private final List stacks; - @Override - public ItemStack removeStack(int slot) { - return null; - } + public DummyInventory(NbtCompound root) { + stacks = new ArrayList<>(root.getInt("size") + 9); + for (int i = 0; i < 9; ++i) stacks.add(ItemStack.EMPTY); + root.getList("list", NbtCompound.COMPOUND_TYPE).forEach(item -> + stacks.add(ItemStack.fromNbt((NbtCompound) item)) + ); + } - @Override - public void setStack(int slot, ItemStack stack) { - stacks.set(slot, stack); - } + @Override + public int size() { + return stacks.size(); + } - @Override - public void markDirty() { - } + @Override + public boolean isEmpty() { + return false; + } - @Override - public boolean canPlayerUse(PlayerEntity player) { - return false; - } + @Override + public ItemStack getStack(int slot) { + return stacks.get(slot); + } + + @Override + public ItemStack removeStack(int slot, int amount) { + return null; + } + + @Override + public ItemStack removeStack(int slot) { + return null; + } - @Override - public void clear() { + @Override + public void setStack(int slot, ItemStack stack) { + stacks.set(slot, stack); + } + + @Override + public void markDirty() { + } + + @Override + public boolean canPlayerUse(PlayerEntity player) { + return false; + } + + @Override + public void clear() { + } } } -- cgit From 6c8b6dfa0186c0a50f28562c718a237336b8dfb4 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 25 Oct 2023 20:28:34 -0400 Subject: Refactor Backpack Preview --- .../hysky/skyblocker/mixin/HandledScreenMixin.java | 31 ++-- .../skyblocker/skyblock/item/BackpackPreview.java | 160 ++++++++------------- 2 files changed, 72 insertions(+), 119 deletions(-) (limited to 'src/main') diff --git a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java index e65bc576..597faa3d 100644 --- a/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixin/HandledScreenMixin.java @@ -41,15 +41,15 @@ import java.util.regex.Matcher; @Mixin(HandledScreen.class) public abstract class HandledScreenMixin extends Screen { /** - * This is the slot id returned for when a click is outside of the screen's bounds + * This is the slot id returned for when a click is outside the screen's bounds */ @Unique private static final int OUT_OF_BOUNDS_SLOT = -999; - + @Shadow @Nullable protected Slot focusedSlot; - + @Shadow @Final protected T handler; @@ -78,7 +78,7 @@ public abstract class HandledScreenMixin extends Screen // Backpack Preview boolean shiftDown = SkyblockerConfigManager.get().general.backpackPreviewWithoutShift ^ Screen.hasShiftDown(); - if (shiftDown && getTitle().getString().equals("Storage") && focusedSlot.inventory != client.player.getInventory() && BackpackPreview.renderPreview(context, focusedSlot.getIndex(), x, y)) { + if (shiftDown && getTitle().getString().equals("Storage") && focusedSlot.inventory != client.player.getInventory() && BackpackPreview.renderPreview(context, this, focusedSlot.getIndex(), x, y)) { ci.cancel(); } @@ -133,21 +133,21 @@ public abstract class HandledScreenMixin extends Screen } } } - + /** * The naming of this method in yarn is half true, its mostly to handle slot/item interactions (which are mouse or keyboard clicks) * For example, using the drop key bind while hovering over an item will invoke this method to drop the players item */ @Inject(method = "onMouseClick(Lnet/minecraft/screen/slot/Slot;IILnet/minecraft/screen/slot/SlotActionType;)V", at = @At("HEAD"), cancellable = true) private void skyblocker$onSlotInteract(Slot slot, int slotId, int button, SlotActionType actionType, CallbackInfo ci) { - if (Utils.isOnSkyblock()) { + if (Utils.isOnSkyblock()) { // When you try and drop the item by picking it up then clicking outside of the screen if (slotId == OUT_OF_BOUNDS_SLOT) { ItemStack cursorStack = this.handler.getCursorStack(); if (ItemProtection.isItemProtected(cursorStack)) ci.cancel(); } - + if (slot != null) { // When you click your drop key while hovering over an item if (actionType == SlotActionType.THROW) { @@ -155,35 +155,36 @@ public abstract class HandledScreenMixin extends Screen if (ItemProtection.isItemProtected(stack)) ci.cancel(); } - + //Prevent salvaging if (this.getTitle().getString().equals("Salvage Items")) { ItemStack stack = slot.getStack(); if (ItemProtection.isItemProtected(stack)) ci.cancel(); } - + //Prevent selling to NPC shops if (this.client != null && this.handler instanceof GenericContainerScreenHandler genericContainerScreenHandler && genericContainerScreenHandler.getRows() == 6) { ItemStack sellItem = this.handler.slots.get(49).getStack(); - + if (sellItem.getName().getString().equals("Sell Item") || skyblocker$doesLoreContain(sellItem, this.client, "buyback")) { ItemStack stack = slot.getStack(); - + if (ItemProtection.isItemProtected(stack)) ci.cancel(); } } } - } + } } - + //TODO make this a util method somewhere else, eventually private static boolean skyblocker$doesLoreContain(ItemStack stack, MinecraftClient client, String searchString) { return stack.getTooltip(client.player, TooltipContext.BASIC).stream().map(Text::getString).anyMatch(line -> line.contains(searchString)); } - + @Inject(method = "drawSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;drawItem(Lnet/minecraft/item/ItemStack;III)V")) private void skyblocker$drawItemRarityBackground(DrawContext context, Slot slot, CallbackInfo ci) { - if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().general.itemInfoDisplay.itemRarityBackgrounds) ItemRarityBackgrounds.tryDraw(slot.getStack(), context, slot.x, slot.y); + if (Utils.isOnSkyblock() && SkyblockerConfigManager.get().general.itemInfoDisplay.itemRarityBackgrounds) + ItemRarityBackgrounds.tryDraw(slot.getStack(), context, slot.x, slot.y); } } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java b/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java index cabb72f1..18acbaf7 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java @@ -11,18 +11,17 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.Inventory; +import net.minecraft.inventory.SimpleInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.*; import net.minecraft.util.Identifier; +import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -51,15 +50,16 @@ public class BackpackPreview { Utils.update(); // force update isOnSkyblock to prevent crash on disconnect if (Utils.isOnSkyblock()) { // save all dirty storages - saveStorage(); + saveStorages(); // update save dir based on uuid and sb profile String uuid = MinecraftClient.getInstance().getSession().getUuidOrNull().toString().replaceAll("-", ""); - String profile = Utils.getProfile(); + String profile = Utils.getProfile(); //TODO switch to profile id if (!profile.isEmpty()) { - save_dir = FabricLoader.getInstance().getConfigDir().resolve("skyblocker/backpack-preview/" + uuid + "/" + profile); + String loading = uuid + "/" + profile; + save_dir = FabricLoader.getInstance().getConfigDir().resolve("skyblocker/backpack-preview/" + loading); //noinspection ResultOfMethodCallIgnored save_dir.toFile().mkdirs(); - if (loaded.equals(uuid + "/" + profile)) { + if (loaded.equals(loading)) { // mark currently opened storage as dirty if (MinecraftClient.getInstance().currentScreen != null) { String title = MinecraftClient.getInstance().currentScreen.getTitle().getString(); @@ -68,22 +68,20 @@ public class BackpackPreview { } } else { // load storage again because uuid/profile changed - loaded = uuid + "/" + profile; - loadStorage(); + loaded = loading; + loadStorages(); } } } } - public static void loadStorage() { + public static void loadStorages() { assert (save_dir != null); for (int index = 0; index < STORAGE_SIZE; ++index) { - storages[index] = null; File file = save_dir.resolve(index + ".nbt").toFile(); if (file.isFile()) { try { - NbtCompound root = NbtIo.read(file); - storages[index] = new Storage(new DummyInventory(Objects.requireNonNull(root)), root.getString("name")); + storages[index] = Storage.fromNbt(Objects.requireNonNull(NbtIo.read(file))); } catch (Exception e) { LOGGER.error("Failed to load backpack preview file: " + file.getName(), e); } @@ -91,38 +89,24 @@ public class BackpackPreview { } } - private static void saveStorage() { + private static void saveStorages() { assert (save_dir != null); for (int index = 0; index < STORAGE_SIZE; ++index) { if (storages[index] != null && storages[index].dirty) { - try { - NbtCompound root = new NbtCompound(); - NbtList list = new NbtList(); - for (int i = 9; i < storages[index].inventory.size(); ++i) { - ItemStack stack = storages[index].inventory.getStack(i); - NbtCompound item = new NbtCompound(); - if (stack.isEmpty()) { - item.put("id", NbtString.of("minecraft:air")); - item.put("Count", NbtInt.of(1)); - } else { - item.put("id", NbtString.of(stack.getItem().toString())); - item.put("Count", NbtInt.of(stack.getCount())); - item.put("tag", stack.getNbt()); - } - list.add(item); - } - root.put("list", list); - root.put("size", NbtInt.of(storages[index].inventory.size() - 9)); - root.putString("name", storages[index].name); - NbtIo.write(root, save_dir.resolve(index + ".nbt").toFile()); - storages[index].markClean(); - } catch (Exception e) { - LOGGER.error("Failed to save backpack preview file: " + index + ".nbt", e); - } + saveStorage(index); } } } + private static void saveStorage(int index) { + try { + NbtIo.write(storages[index].toNbt(), save_dir.resolve(index + ".nbt").toFile()); + storages[index].markClean(); + } catch (Exception e) { + LOGGER.error("Failed to save backpack preview file: " + index + ".nbt", e); + } + } + public static void updateStorage(HandledScreen screen) { String title = screen.getTitle().getString(); int index = getStorageIndexFromTitle(title); @@ -131,16 +115,14 @@ public class BackpackPreview { } } - public static boolean renderPreview(DrawContext context, int index, int mouseX, int mouseY) { + public static boolean renderPreview(DrawContext context, Screen screen, int index, int mouseX, int mouseY) { if (index >= 9 && index < 18) index -= 9; else if (index >= 27 && index < 45) index -= 18; else return false; if (storages[index] == null) return false; - int rows = (storages[index].inventory.size() - 9) / 9; + int rows = (storages[index].size() - 9) / 9; - Screen screen = MinecraftClient.getInstance().currentScreen; - if (screen == null) return false; int x = mouseX + 184 >= screen.width ? mouseX - 188 : mouseX + 8; int y = Math.max(0, mouseY - 16); @@ -149,27 +131,24 @@ public class BackpackPreview { matrices.translate(0f, 0f, 400f); RenderSystem.enableDepthTest(); - context.drawTexture(TEXTURE, x, y, 0, 0, 176, 7); - context.drawTexture(TEXTURE, x, y + 7, 0, 17, 176, rows * 18); - context.drawTexture(TEXTURE, x, y + rows * 18 + 7, 0, 215, 176, 7); + context.drawTexture(TEXTURE, x, y, 0, 0, 176, rows * 18 + 17); + context.drawTexture(TEXTURE, x, y + rows * 18 + 17, 0, 215, 176, 7); TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; context.drawText(textRenderer, storages[index].name, x + 8, y + 6, 0x404040, false); - for (int i = 9; i < storages[index].inventory.size(); ++i) { - ItemStack currentStack = storages[index].inventory.getStack(i); + matrices.translate(0f, 0f, 200f); + for (int i = 9; i < storages[index].size(); ++i) { + ItemStack currentStack = storages[index].getStack(i); int itemX = x + (i - 9) % 9 * 18 + 8; - int itemY = y + (i - 9) / 9 * 18 + 8; + int itemY = y + (i - 9) / 9 * 18 + 18; if (SkyblockerConfigManager.get().general.itemInfoDisplay.itemRarityBackgrounds) { ItemRarityBackgrounds.tryDraw(currentStack, context, itemX, itemY); } - matrices.push(); - matrices.translate(0f, 0f, 200f); context.drawItem(currentStack, itemX, itemY); context.drawItemInSlot(textRenderer, currentStack, itemX, itemY); - matrices.pop(); } matrices.pop(); @@ -190,77 +169,50 @@ public class BackpackPreview { private final String name; private boolean dirty; - public Storage(Inventory inventory, String name) { + private Storage(Inventory inventory, String name) { this(inventory, name, false); } - public Storage(Inventory inventory, String name, boolean dirty) { + private Storage(Inventory inventory, String name, boolean dirty) { this.inventory = inventory; this.name = name; this.dirty = dirty; } - public void markDirty() { - dirty = true; - } - - public void markClean() { - dirty = false; - } - } - - static class DummyInventory implements Inventory { - private final List stacks; - - public DummyInventory(NbtCompound root) { - stacks = new ArrayList<>(root.getInt("size") + 9); - for (int i = 0; i < 9; ++i) stacks.add(ItemStack.EMPTY); - root.getList("list", NbtCompound.COMPOUND_TYPE).forEach(item -> - stacks.add(ItemStack.fromNbt((NbtCompound) item)) - ); - } - - @Override - public int size() { - return stacks.size(); + private int size() { + return inventory.size(); } - @Override - public boolean isEmpty() { - return false; + private ItemStack getStack(int index) { + return inventory.getStack(index); } - @Override - public ItemStack getStack(int slot) { - return stacks.get(slot); - } - - @Override - public ItemStack removeStack(int slot, int amount) { - return null; - } - - @Override - public ItemStack removeStack(int slot) { - return null; - } - - @Override - public void setStack(int slot, ItemStack stack) { - stacks.set(slot, stack); + private void markDirty() { + dirty = true; } - @Override - public void markDirty() { + private void markClean() { + dirty = false; } - @Override - public boolean canPlayerUse(PlayerEntity player) { - return false; + @NotNull + private static Storage fromNbt(NbtCompound root) { + SimpleInventory inventory = new SimpleInventory(root.getInt("size")); + inventory.readNbtList(root.getList("list", NbtCompound.COMPOUND_TYPE)); + return new Storage(inventory, root.getString("name")); } - @Override - public void clear() { + @NotNull + private NbtCompound toNbt() { + NbtCompound root = new NbtCompound(); + NbtList list = new NbtList(); + for (int i = 0; i < size(); ++i) { + list.add(getStack(i).writeNbt(new NbtCompound())); + } + root.put("list", list); + root.put("size", NbtInt.of(size())); + root.putString("name", name); + return root; } } } -- cgit From 1a737c461c0d861028612c0a2615d3f5c0487d74 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 25 Oct 2023 21:01:06 -0400 Subject: Use profile id --- .../skyblocker/skyblock/item/BackpackPreview.java | 26 ++++++++++----------- src/main/java/de/hysky/skyblocker/utils/Utils.java | 14 ++++++++++- .../textures/gui/inventory_background.png | Bin 577 -> 0 bytes 3 files changed, 26 insertions(+), 14 deletions(-) delete mode 100644 src/main/resources/assets/skyblocker/textures/gui/inventory_background.png (limited to 'src/main') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java b/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java index 18acbaf7..d510d65a 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java @@ -14,7 +14,10 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.inventory.Inventory; import net.minecraft.inventory.SimpleInventory; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.*; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtInt; +import net.minecraft.nbt.NbtIo; +import net.minecraft.nbt.NbtList; import net.minecraft.util.Identifier; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; @@ -35,7 +38,7 @@ public class BackpackPreview { private static final Storage[] storages = new Storage[STORAGE_SIZE]; - private static String loaded = ""; // uuid + sb profile currently loaded + private static String loaded = ""; // profile id currently loaded private static Path save_dir = null; public static void init() { @@ -51,15 +54,13 @@ public class BackpackPreview { if (Utils.isOnSkyblock()) { // save all dirty storages saveStorages(); - // update save dir based on uuid and sb profile - String uuid = MinecraftClient.getInstance().getSession().getUuidOrNull().toString().replaceAll("-", ""); - String profile = Utils.getProfile(); //TODO switch to profile id - if (!profile.isEmpty()) { - String loading = uuid + "/" + profile; - save_dir = FabricLoader.getInstance().getConfigDir().resolve("skyblocker/backpack-preview/" + loading); + // update save dir based on sb profile id + String profileId = Utils.getProfileId(); + if (!profileId.isEmpty()) { + save_dir = FabricLoader.getInstance().getConfigDir().resolve("skyblocker/backpack-preview/" + profileId); //noinspection ResultOfMethodCallIgnored save_dir.toFile().mkdirs(); - if (loaded.equals(loading)) { + if (loaded.equals(profileId)) { // mark currently opened storage as dirty if (MinecraftClient.getInstance().currentScreen != null) { String title = MinecraftClient.getInstance().currentScreen.getTitle().getString(); @@ -67,8 +68,8 @@ public class BackpackPreview { if (index != -1) storages[index].markDirty(); } } else { - // load storage again because uuid/profile changed - loaded = loading; + // load storage again because profile id changed + loaded = profileId; loadStorages(); } } @@ -197,8 +198,7 @@ public class BackpackPreview { @NotNull private static Storage fromNbt(NbtCompound root) { - SimpleInventory inventory = new SimpleInventory(root.getInt("size")); - inventory.readNbtList(root.getList("list", NbtCompound.COMPOUND_TYPE)); + SimpleInventory inventory = new SimpleInventory(root.getList("list", NbtCompound.COMPOUND_TYPE).stream().map(NbtCompound.class::cast).map(ItemStack::fromNbt).toArray(ItemStack[]::new)); return new Storage(inventory, root.getString("name")); } diff --git a/src/main/java/de/hysky/skyblocker/utils/Utils.java b/src/main/java/de/hysky/skyblocker/utils/Utils.java index bbfd1101..f09d16ed 100644 --- a/src/main/java/de/hysky/skyblocker/utils/Utils.java +++ b/src/main/java/de/hysky/skyblocker/utils/Utils.java @@ -44,6 +44,8 @@ public class Utils { @NotNull private static String profile = ""; @NotNull + private static String profileId = ""; + @NotNull private static String server = ""; @NotNull private static String gameType = ""; @@ -89,6 +91,11 @@ public class Utils { return profile; } + @NotNull + public static String getProfileId() { + return profileId; + } + /** * @return the server parsed from /locraw. */ @@ -323,7 +330,7 @@ public class Utils { } /** - * Parses the /locraw reply from the server + * Parses the /locraw reply from the server and updates the player's profile id * * @return not display the message in chat is the command is sent by the mod */ @@ -349,6 +356,11 @@ public class Utils { return shouldFilter; } } + + if (isOnSkyblock && message.startsWith("Profile ID: ")) { + profileId = message.replace("Profile ID: ", ""); + } + return true; } diff --git a/src/main/resources/assets/skyblocker/textures/gui/inventory_background.png b/src/main/resources/assets/skyblocker/textures/gui/inventory_background.png deleted file mode 100644 index fb588907..00000000 Binary files a/src/main/resources/assets/skyblocker/textures/gui/inventory_background.png and /dev/null differ -- cgit From 5faf45a7f7d265b68b852516326b50be8ff64b52 Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 25 Oct 2023 21:17:26 -0400 Subject: Refactor updating storage --- .../skyblocker/skyblock/item/BackpackPreview.java | 61 ++++++++-------------- 1 file changed, 23 insertions(+), 38 deletions(-) (limited to 'src/main') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java b/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java index d510d65a..736356cc 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java @@ -38,13 +38,16 @@ public class BackpackPreview { private static final Storage[] storages = new Storage[STORAGE_SIZE]; - private static String loaded = ""; // profile id currently loaded - private static Path save_dir = null; + /** + * The profile id of the currently loaded backpack preview. + */ + private static String loaded; + private static Path saveDir; public static void init() { ScreenEvents.AFTER_INIT.register((client, screen, scaledWidth, scaledHeight) -> { if (screen instanceof HandledScreen handledScreen) { - updateStorage(handledScreen); + ScreenEvents.remove(screen).register(screen1 -> updateStorage(handledScreen)); } }); } @@ -56,42 +59,32 @@ public class BackpackPreview { saveStorages(); // update save dir based on sb profile id String profileId = Utils.getProfileId(); - if (!profileId.isEmpty()) { - save_dir = FabricLoader.getInstance().getConfigDir().resolve("skyblocker/backpack-preview/" + profileId); + if (!profileId.equals(loaded)) { + saveDir = FabricLoader.getInstance().getConfigDir().resolve("skyblocker/backpack-preview/" + profileId); //noinspection ResultOfMethodCallIgnored - save_dir.toFile().mkdirs(); - if (loaded.equals(profileId)) { - // mark currently opened storage as dirty - if (MinecraftClient.getInstance().currentScreen != null) { - String title = MinecraftClient.getInstance().currentScreen.getTitle().getString(); - int index = getStorageIndexFromTitle(title); - if (index != -1) storages[index].markDirty(); - } - } else { - // load storage again because profile id changed - loaded = profileId; - loadStorages(); - } + saveDir.toFile().mkdirs(); + // load storage again because profile id changed + loaded = profileId; + loadStorages(); } } } - public static void loadStorages() { - assert (save_dir != null); + private static void loadStorages() { for (int index = 0; index < STORAGE_SIZE; ++index) { - File file = save_dir.resolve(index + ".nbt").toFile(); - if (file.isFile()) { + storages[index] = null; + File storageFile = saveDir.resolve(index + ".nbt").toFile(); + if (storageFile.isFile()) { try { - storages[index] = Storage.fromNbt(Objects.requireNonNull(NbtIo.read(file))); + storages[index] = Storage.fromNbt(Objects.requireNonNull(NbtIo.read(storageFile))); } catch (Exception e) { - LOGGER.error("Failed to load backpack preview file: " + file.getName(), e); + LOGGER.error("Failed to load backpack preview file: " + storageFile.getName(), e); } } } } private static void saveStorages() { - assert (save_dir != null); for (int index = 0; index < STORAGE_SIZE; ++index) { if (storages[index] != null && storages[index].dirty) { saveStorage(index); @@ -101,18 +94,18 @@ public class BackpackPreview { private static void saveStorage(int index) { try { - NbtIo.write(storages[index].toNbt(), save_dir.resolve(index + ".nbt").toFile()); + NbtIo.write(storages[index].toNbt(), saveDir.resolve(index + ".nbt").toFile()); storages[index].markClean(); } catch (Exception e) { LOGGER.error("Failed to save backpack preview file: " + index + ".nbt", e); } } - public static void updateStorage(HandledScreen screen) { - String title = screen.getTitle().getString(); + private static void updateStorage(HandledScreen handledScreen) { + String title = handledScreen.getTitle().getString(); int index = getStorageIndexFromTitle(title); if (index != -1) { - storages[index] = new Storage(screen.getScreenHandler().slots.get(0).inventory, title, true); + storages[index] = new Storage(handledScreen.getScreenHandler().slots.get(0).inventory, title, true); } } @@ -170,10 +163,6 @@ public class BackpackPreview { private final String name; private boolean dirty; - private Storage(Inventory inventory, String name) { - this(inventory, name, false); - } - private Storage(Inventory inventory, String name, boolean dirty) { this.inventory = inventory; this.name = name; @@ -188,10 +177,6 @@ public class BackpackPreview { return inventory.getStack(index); } - private void markDirty() { - dirty = true; - } - private void markClean() { dirty = false; } @@ -199,7 +184,7 @@ public class BackpackPreview { @NotNull private static Storage fromNbt(NbtCompound root) { SimpleInventory inventory = new SimpleInventory(root.getList("list", NbtCompound.COMPOUND_TYPE).stream().map(NbtCompound.class::cast).map(ItemStack::fromNbt).toArray(ItemStack[]::new)); - return new Storage(inventory, root.getString("name")); + return new Storage(inventory, root.getString("name"), false); } @NotNull -- cgit From 2d506f220676ce01c590cd32d66f98c5c43d63fe Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 25 Oct 2023 23:24:01 -0400 Subject: Fix identifier --- .../java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/main') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java b/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java index 736356cc..afe134b5 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java @@ -58,13 +58,13 @@ public class BackpackPreview { // save all dirty storages saveStorages(); // update save dir based on sb profile id - String profileId = Utils.getProfileId(); - if (!profileId.equals(loaded)) { - saveDir = FabricLoader.getInstance().getConfigDir().resolve("skyblocker/backpack-preview/" + profileId); + String id = MinecraftClient.getInstance().getSession().getUuidOrNull() + "/" + Utils.getProfileId(); + if (!id.equals(loaded)) { + saveDir = FabricLoader.getInstance().getConfigDir().resolve("skyblocker/backpack-preview/" + id); //noinspection ResultOfMethodCallIgnored saveDir.toFile().mkdirs(); // load storage again because profile id changed - loaded = profileId; + loaded = id; loadStorages(); } } -- cgit From 53bfa6e90fc1a80cf701b3ae2cbc5bbfe0f31ccd Mon Sep 17 00:00:00 2001 From: Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> Date: Wed, 25 Oct 2023 23:31:24 -0400 Subject: Update Javadocs --- src/main/java/de/hysky/skyblocker/utils/Utils.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/java/de/hysky/skyblocker/utils/Utils.java b/src/main/java/de/hysky/skyblocker/utils/Utils.java index f09d16ed..1205c71b 100644 --- a/src/main/java/de/hysky/skyblocker/utils/Utils.java +++ b/src/main/java/de/hysky/skyblocker/utils/Utils.java @@ -38,13 +38,19 @@ public class Utils { private static boolean isInDungeons = false; private static boolean isInjected = false; /** - * The following fields store data returned from /locraw: {@link #profile}, {@link #server}, {@link #gameType}, {@link #locationRaw}, and {@link #map}. + * The profile name parsed from the player list. */ - @SuppressWarnings("JavadocDeclaration") @NotNull private static String profile = ""; + /** + * The profile id parsed from the chat. + */ @NotNull private static String profileId = ""; + /** + * The following fields store data returned from /locraw: {@link #server}, {@link #gameType}, {@link #locationRaw}, and {@link #map}. + */ + @SuppressWarnings("JavadocDeclaration") @NotNull private static String server = ""; @NotNull -- cgit From 1a8465eae0e1d212c8f36eacae173a12cf7ec014 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Wed, 25 Oct 2023 23:51:24 -0400 Subject: Trim Player UUIDs --- src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java b/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java index afe134b5..d621d388 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/BackpackPreview.java @@ -58,7 +58,7 @@ public class BackpackPreview { // save all dirty storages saveStorages(); // update save dir based on sb profile id - String id = MinecraftClient.getInstance().getSession().getUuidOrNull() + "/" + Utils.getProfileId(); + String id = MinecraftClient.getInstance().getSession().getUuidOrNull().toString().replaceAll("-", "") + "/" + Utils.getProfileId(); if (!id.equals(loaded)) { saveDir = FabricLoader.getInstance().getConfigDir().resolve("skyblocker/backpack-preview/" + id); //noinspection ResultOfMethodCallIgnored -- cgit