diff options
author | viciscat <51047087+viciscat@users.noreply.github.com> | 2024-07-05 23:45:05 +0200 |
---|---|---|
committer | viciscat <51047087+viciscat@users.noreply.github.com> | 2024-07-05 23:45:05 +0200 |
commit | dad74c6c9d169ed6fb550ac2998e3799fdf0076c (patch) | |
tree | d7896176a8eb026c71ce84c74912a28b866a3455 /src/main | |
parent | 6c097f1a2272dc10fdb859d023b495d64b0e917c (diff) | |
download | Skyblocker-dad74c6c9d169ed6fb550ac2998e3799fdf0076c.tar.gz Skyblocker-dad74c6c9d169ed6fb550ac2998e3799fdf0076c.tar.bz2 Skyblocker-dad74c6c9d169ed6fb550ac2998e3799fdf0076c.zip |
rift and more async idk
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/de/hysky/skyblocker/mixins/GenericContainerScreenHandlerMixin.java | 6 | ||||
-rw-r--r-- | src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockInventoryScreen.java | 21 |
2 files changed, 19 insertions, 8 deletions
diff --git a/src/main/java/de/hysky/skyblocker/mixins/GenericContainerScreenHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixins/GenericContainerScreenHandlerMixin.java index bd066fc9..3c3dbd52 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/GenericContainerScreenHandlerMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/GenericContainerScreenHandlerMixin.java @@ -3,6 +3,7 @@ package de.hysky.skyblocker.mixins; import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.skyblock.dungeon.partyfinder.PartyFinderScreen; import de.hysky.skyblocker.skyblock.item.SkyblockInventoryScreen; +import de.hysky.skyblocker.utils.Utils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; @@ -33,7 +34,10 @@ public abstract class GenericContainerScreenHandlerMixin extends ScreenHandler { int line = slot/9; if (line > 0 && line < 5 && slot % 9 == 1) { boolean empty = stack.getName().getString().trim().toLowerCase().startsWith("empty"); - SkyblockInventoryScreen.equipment[line - 1] = empty ? ItemStack.EMPTY : stack; + if (Utils.isInTheRift()) + SkyblockInventoryScreen.equipment_rift[line - 1] = empty ? ItemStack.EMPTY : stack; + else + SkyblockInventoryScreen.equipment[line - 1] = empty ? ItemStack.EMPTY : stack; } } case null, default -> {} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockInventoryScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockInventoryScreen.java index 665b090c..42a52a85 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockInventoryScreen.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockInventoryScreen.java @@ -20,6 +20,7 @@ import net.minecraft.nbt.StringNbtReader; import net.minecraft.nbt.visitor.StringNbtWriter; import net.minecraft.screen.slot.Slot; import net.minecraft.util.Identifier; +import org.apache.commons.lang3.ArrayUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -43,7 +44,8 @@ public class SkyblockInventoryScreen extends InventoryScreen { private static final Logger LOGGER = LoggerFactory.getLogger("Equipment"); private static final Supplier<ItemStack[]> EMPTY_EQUIPMENT = () -> new ItemStack[]{ItemStack.EMPTY, ItemStack.EMPTY, ItemStack.EMPTY, ItemStack.EMPTY}; public static final ItemStack[] equipment = EMPTY_EQUIPMENT.get(); - private static final Codec<ItemStack[]> CODEC = ItemUtils.EMPTY_ALLOWING_ITEMSTACK_CODEC.listOf(4, 4) + public static final ItemStack[] equipment_rift = EMPTY_EQUIPMENT.get(); + private static final Codec<ItemStack[]> CODEC = ItemUtils.EMPTY_ALLOWING_ITEMSTACK_CODEC.listOf(4, 8) // min size at 4 for backwards compat .xmap(itemStacks -> itemStacks.toArray(ItemStack[]::new), List::of).fieldOf("items").codec(); private static final Identifier SLOT_TEXTURE = Identifier.ofVanilla("container/slot"); @@ -61,7 +63,8 @@ public class SkyblockInventoryScreen extends InventoryScreen { Path resolve = FOLDER.resolve(profileId + ".nbt"); try (BufferedWriter writer = Files.newBufferedWriter(resolve)) { - writer.write(new StringNbtWriter().apply(CODEC.encodeStart(NbtOps.INSTANCE, equipment).getOrThrow())); + + writer.write(new StringNbtWriter().apply(CODEC.encodeStart(NbtOps.INSTANCE, ArrayUtils.addAll(equipment, equipment_rift)).getOrThrow())); } catch (Exception e) { LOGGER.error("[Skyblocker] Failed to save Equipment data", e); } @@ -78,27 +81,31 @@ public class SkyblockInventoryScreen extends InventoryScreen { } return EMPTY_EQUIPMENT.get(); // Schedule on main thread to avoid any async weirdness - }).thenAccept(itemStacks -> MinecraftClient.getInstance().execute(() -> System.arraycopy(itemStacks, 0, equipment, 0, Math.min(itemStacks.length, 4)))); + }).thenAccept(itemStacks -> MinecraftClient.getInstance().execute(() -> { + System.arraycopy(itemStacks, 0, equipment, 0, Math.min(itemStacks.length, 4)); + if (itemStacks.length <= 4) return; + System.arraycopy(itemStacks, 4, equipment_rift, 0, Math.clamp(itemStacks.length - 4, 0, 4)); + })); } public static void initEquipment() { SkyblockEvents.PROFILE_CHANGE.register(((prevProfileId, profileId) -> { - if (!prevProfileId.isEmpty()) save(prevProfileId); - load(profileId); + if (!prevProfileId.isEmpty()) CompletableFuture.runAsync(() -> save(prevProfileId)).thenRun(() -> load(profileId)); + else load(profileId); })); ClientLifecycleEvents.CLIENT_STOPPING.register(client1 -> { String profileId = Utils.getProfileId(); if (!profileId.isBlank()) { - save(profileId); + CompletableFuture.runAsync(() -> save(profileId)); } }); } public SkyblockInventoryScreen(PlayerEntity player) { super(player); - SimpleInventory inventory = new SimpleInventory(equipment); + SimpleInventory inventory = new SimpleInventory(Utils.isInTheRift() ? equipment_rift: equipment); Slot slot = handler.slots.get(45); ((SlotAccessor) slot).setX(slot.x + 21); |