aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de
diff options
context:
space:
mode:
authorviciscat <51047087+viciscat@users.noreply.github.com>2025-06-07 21:26:55 +0200
committerGitHub <noreply@github.com>2025-06-07 15:26:55 -0400
commitbd05937dfb01a2133d06879ad79074b4bf42e603 (patch)
treef4e5aa45f77681c91ee61f19c87b9871bd22c97f /src/main/java/de
parentba82ac00e9caf1c1571b7e9f255b0dae91476ab8 (diff)
downloadSkyblocker-bd05937dfb01a2133d06879ad79074b4bf42e603.tar.gz
Skyblocker-bd05937dfb01a2133d06879ad79074b4bf42e603.tar.bz2
Skyblocker-bd05937dfb01a2133d06879ad79074b4bf42e603.zip
fix customize button not moving when recipe book is toggled + refactor (#1316)
Diffstat (limited to 'src/main/java/de')
-rw-r--r--src/main/java/de/hysky/skyblocker/injected/RecipeBookHolder.java12
-rw-r--r--src/main/java/de/hysky/skyblocker/mixins/InventoryScreenMixin.java31
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/garden/GardenPlotsWidget.java15
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/custom/screen/CustomizeArmorScreen.java8
4 files changed, 51 insertions, 15 deletions
diff --git a/src/main/java/de/hysky/skyblocker/injected/RecipeBookHolder.java b/src/main/java/de/hysky/skyblocker/injected/RecipeBookHolder.java
new file mode 100644
index 00000000..78ca1bb0
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/injected/RecipeBookHolder.java
@@ -0,0 +1,12 @@
+package de.hysky.skyblocker.injected;
+
+public interface RecipeBookHolder {
+
+ /**
+ * Register a callback that gets called when the recipe book button is toggled.
+ * The callback list is emptied after each init, so this needs to be registered everytime in {@link net.fabricmc.fabric.api.client.screen.v1.ScreenEvents.AfterInit}
+ * @implNote {@code BEFORE_INIT} may be called before the callback list is emptied.
+ * @param callback the callback
+ */
+ void registerRecipeBookToggleCallback(Runnable callback);
+}
diff --git a/src/main/java/de/hysky/skyblocker/mixins/InventoryScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/InventoryScreenMixin.java
index a96d327d..b7455c2e 100644
--- a/src/main/java/de/hysky/skyblocker/mixins/InventoryScreenMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixins/InventoryScreenMixin.java
@@ -1,6 +1,7 @@
package de.hysky.skyblocker.mixins;
import com.llamalad7.mixinextras.sugar.Local;
+import de.hysky.skyblocker.injected.RecipeBookHolder;
import net.minecraft.entity.player.PlayerEntity;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@@ -10,9 +11,7 @@ import com.llamalad7.mixinextras.injector.ModifyReturnValue;
import com.llamalad7.mixinextras.injector.v2.WrapWithCondition;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
-import de.hysky.skyblocker.skyblock.garden.GardenPlotsWidget;
import de.hysky.skyblocker.skyblock.itemlist.recipebook.SkyblockRecipeBookWidget;
-import de.hysky.skyblocker.utils.Location;
import de.hysky.skyblocker.utils.Utils;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.ingame.HandledScreen;
@@ -26,11 +25,14 @@ import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+import java.util.ArrayList;
+import java.util.List;
+
@Mixin(InventoryScreen.class)
-public abstract class InventoryScreenMixin extends HandledScreen<PlayerScreenHandler> {
+public abstract class InventoryScreenMixin extends HandledScreen<PlayerScreenHandler> implements RecipeBookHolder {
- @Unique
- private GardenPlotsWidget gardenPlotsWidget;
+ @Unique
+ private final List<Runnable> recipeBookToggleCallbacks = new ArrayList<>();
public InventoryScreenMixin(PlayerScreenHandler handler, PlayerInventory inventory, Text title) {
super(handler, inventory, title);
@@ -59,16 +61,17 @@ public abstract class InventoryScreenMixin extends HandledScreen<PlayerScreenHan
}
@Inject(method = "onRecipeBookToggled", at = @At("TAIL"))
- private void skyblocker$moveGardenPlotsWdiget(CallbackInfo ci) {
- if (gardenPlotsWidget != null) {
- gardenPlotsWidget.setPosition(x + backgroundWidth + 4, y);
- }
+ private void skyblocker$callRecipeToggleCallbacks(CallbackInfo ci) {
+ recipeBookToggleCallbacks.forEach(Runnable::run);
}
- @Inject(method = "init", at = @At("TAIL"))
- private void skyblocker$addGardenPlotsWidget(CallbackInfo ci) {
- if (Utils.getLocation().equals(Location.GARDEN) && SkyblockerConfigManager.get().farming.garden.gardenPlotsWidget) {
- addDrawableChild(gardenPlotsWidget = new GardenPlotsWidget(x + backgroundWidth + 4, y));
- }
+ @Inject(method = "init", at = @At("HEAD"))
+ private void skyblocker$clearRecipeToggleCallbacks(CallbackInfo ci) {
+ recipeBookToggleCallbacks.clear();
}
+
+ @Override
+ public void registerRecipeBookToggleCallback(Runnable runnable) {
+ recipeBookToggleCallbacks.add(runnable);
+ }
}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/garden/GardenPlotsWidget.java b/src/main/java/de/hysky/skyblocker/skyblock/garden/GardenPlotsWidget.java
index 70fe587a..7d2c22b3 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/garden/GardenPlotsWidget.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/garden/GardenPlotsWidget.java
@@ -7,18 +7,23 @@ import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.annotations.Init;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
import de.hysky.skyblocker.events.SkyblockEvents;
+import de.hysky.skyblocker.injected.RecipeBookHolder;
+import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor;
import de.hysky.skyblocker.skyblock.tabhud.util.PlayerListManager;
+import de.hysky.skyblocker.utils.Location;
import de.hysky.skyblocker.utils.Utils;
import de.hysky.skyblocker.utils.render.gui.ItemButtonWidget;
import de.hysky.skyblocker.utils.scheduler.MessageScheduler;
import it.unimi.dsi.fastutil.ints.*;
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents;
+import net.fabricmc.fabric.api.client.screen.v1.Screens;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.Element;
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
+import net.minecraft.client.gui.screen.ingame.InventoryScreen;
import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
import net.minecraft.client.gui.widget.ContainerWidget;
import net.minecraft.client.render.RenderLayer;
@@ -102,6 +107,16 @@ public class GardenPlotsWidget extends ContainerWidget {
}
});
+ } else if (screen instanceof InventoryScreen inventoryScreen && Utils.getLocation().equals(Location.GARDEN) && SkyblockerConfigManager.get().farming.garden.gardenPlotsWidget) {
+ GardenPlotsWidget widget = new GardenPlotsWidget(
+ ((HandledScreenAccessor) inventoryScreen).getX() + ((HandledScreenAccessor) inventoryScreen).getBackgroundWidth() + 4,
+ ((HandledScreenAccessor) inventoryScreen).getY());
+ Screens.getButtons(inventoryScreen).add(widget);
+
+ ((RecipeBookHolder) inventoryScreen).registerRecipeBookToggleCallback(() -> widget.setPosition(
+ ((HandledScreenAccessor) inventoryScreen).getX() + ((HandledScreenAccessor) inventoryScreen).getBackgroundWidth() + 4,
+ ((HandledScreenAccessor) inventoryScreen).getY()
+ ));
}
});
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/custom/screen/CustomizeArmorScreen.java b/src/main/java/de/hysky/skyblocker/skyblock/item/custom/screen/CustomizeArmorScreen.java
index 5450f456..0cf79919 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/custom/screen/CustomizeArmorScreen.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/custom/screen/CustomizeArmorScreen.java
@@ -5,6 +5,7 @@ import com.mojang.logging.LogUtils;
import de.hysky.skyblocker.SkyblockerMod;
import de.hysky.skyblocker.annotations.Init;
import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.injected.RecipeBookHolder;
import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor;
import de.hysky.skyblocker.skyblock.item.custom.CustomArmorAnimatedDyes;
import de.hysky.skyblocker.skyblock.item.custom.CustomArmorTrims;
@@ -71,7 +72,12 @@ public class CustomizeArmorScreen extends Screen {
));
ScreenEvents.AFTER_INIT.register((client1, screen, scaledWidth, scaledHeight) -> {
if (Utils.isOnSkyblock() && screen instanceof InventoryScreen inventoryScreen) {
- Screens.getButtons(inventoryScreen).add(new CustomizeButton(
+ CustomizeButton button = new CustomizeButton(
+ ((HandledScreenAccessor) inventoryScreen).getX() + 63,
+ ((HandledScreenAccessor) inventoryScreen).getY() + 10
+ );
+ Screens.getButtons(inventoryScreen).add(button);
+ ((RecipeBookHolder) inventoryScreen).registerRecipeBookToggleCallback(() -> button.setPosition(
((HandledScreenAccessor) inventoryScreen).getX() + 63,
((HandledScreenAccessor) inventoryScreen).getY() + 10
));