aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky
diff options
context:
space:
mode:
authorviciscat <51047087+viciscat@users.noreply.github.com>2024-07-05 23:45:05 +0200
committerviciscat <51047087+viciscat@users.noreply.github.com>2024-07-05 23:45:05 +0200
commitdad74c6c9d169ed6fb550ac2998e3799fdf0076c (patch)
treed7896176a8eb026c71ce84c74912a28b866a3455 /src/main/java/de/hysky
parent6c097f1a2272dc10fdb859d023b495d64b0e917c (diff)
downloadSkyblocker-dad74c6c9d169ed6fb550ac2998e3799fdf0076c.tar.gz
Skyblocker-dad74c6c9d169ed6fb550ac2998e3799fdf0076c.tar.bz2
Skyblocker-dad74c6c9d169ed6fb550ac2998e3799fdf0076c.zip
rift and more async idk
Diffstat (limited to 'src/main/java/de/hysky')
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/GenericContainerScreenHandlerMixin.java6
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/SkyblockInventoryScreen.java21
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);