From 8ad8b3d4f533802e0b16aa4071419fb11fbf33dc Mon Sep 17 00:00:00 2001 From: Arno Keesman <34793978+arnokeesman@users.noreply.github.com> Date: Wed, 25 Oct 2023 18:16:18 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9E=95=20More=20recipe=20book=20SnapPoints?= =?UTF-8?q?=20(#178)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../snapping/RecipeBookComponentAccessor.java | 4 ++++ .../snapping/RecipeBookPageAccessor.java | 7 ++++++ .../controlify/virtualmouse/SnapUtils.java | 22 +++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/src/main/java/dev/isxander/controlify/mixins/feature/virtualmouse/snapping/RecipeBookComponentAccessor.java b/src/main/java/dev/isxander/controlify/mixins/feature/virtualmouse/snapping/RecipeBookComponentAccessor.java index c147f52..2d52d5e 100644 --- a/src/main/java/dev/isxander/controlify/mixins/feature/virtualmouse/snapping/RecipeBookComponentAccessor.java +++ b/src/main/java/dev/isxander/controlify/mixins/feature/virtualmouse/snapping/RecipeBookComponentAccessor.java @@ -1,5 +1,6 @@ package dev.isxander.controlify.mixins.feature.virtualmouse.snapping; +import net.minecraft.client.gui.components.StateSwitchingButton; import net.minecraft.client.gui.screens.recipebook.RecipeBookComponent; import net.minecraft.client.gui.screens.recipebook.RecipeBookPage; import net.minecraft.client.gui.screens.recipebook.RecipeBookTabButton; @@ -15,4 +16,7 @@ public interface RecipeBookComponentAccessor { @Accessor List getTabButtons(); + + @Accessor + StateSwitchingButton getFilterButton(); } diff --git a/src/main/java/dev/isxander/controlify/mixins/feature/virtualmouse/snapping/RecipeBookPageAccessor.java b/src/main/java/dev/isxander/controlify/mixins/feature/virtualmouse/snapping/RecipeBookPageAccessor.java index 4dd3555..d3e55ad 100644 --- a/src/main/java/dev/isxander/controlify/mixins/feature/virtualmouse/snapping/RecipeBookPageAccessor.java +++ b/src/main/java/dev/isxander/controlify/mixins/feature/virtualmouse/snapping/RecipeBookPageAccessor.java @@ -1,5 +1,6 @@ package dev.isxander.controlify.mixins.feature.virtualmouse.snapping; +import net.minecraft.client.gui.components.StateSwitchingButton; import net.minecraft.client.gui.screens.recipebook.RecipeBookPage; import net.minecraft.client.gui.screens.recipebook.RecipeButton; import org.spongepowered.asm.mixin.Mixin; @@ -11,4 +12,10 @@ import java.util.List; public interface RecipeBookPageAccessor { @Accessor List getButtons(); + + @Accessor + StateSwitchingButton getForwardButton(); + + @Accessor + StateSwitchingButton getBackButton(); } diff --git a/src/main/java/dev/isxander/controlify/virtualmouse/SnapUtils.java b/src/main/java/dev/isxander/controlify/virtualmouse/SnapUtils.java index ccd957a..7e50888 100644 --- a/src/main/java/dev/isxander/controlify/virtualmouse/SnapUtils.java +++ b/src/main/java/dev/isxander/controlify/virtualmouse/SnapUtils.java @@ -3,6 +3,7 @@ package dev.isxander.controlify.virtualmouse; import dev.isxander.controlify.api.vmousesnapping.SnapPoint; import dev.isxander.controlify.mixins.feature.virtualmouse.snapping.RecipeBookComponentAccessor; import dev.isxander.controlify.mixins.feature.virtualmouse.snapping.RecipeBookPageAccessor; +import net.minecraft.client.gui.components.StateSwitchingButton; import net.minecraft.client.gui.screens.recipebook.RecipeBookComponent; import org.joml.Vector2i; @@ -21,12 +22,33 @@ public final class SnapUtils { points.add(new SnapPoint(new Vector2i(x, y), 20)); }); + StateSwitchingButton filterButton = componentAccessor.getFilterButton(); + if (filterButton.visible) { + int x = filterButton.getX() + filterButton.getWidth() / 2; + int y = filterButton.getY() + filterButton.getHeight() / 2; + points.add(new SnapPoint(new Vector2i(x, y), 14)); + } + RecipeBookPageAccessor pageAccessor = (RecipeBookPageAccessor) componentAccessor.getRecipeBookPage(); pageAccessor.getButtons().forEach(button -> { int x = button.getX() + button.getWidth() / 2; int y = button.getY() + button.getHeight() / 2; points.add(new SnapPoint(new Vector2i(x, y), 21)); }); + + StateSwitchingButton forwardButton = pageAccessor.getForwardButton(); + if (forwardButton.visible) { + int x = forwardButton.getX() + forwardButton.getWidth() / 2 - 2; + int y = forwardButton.getY() + forwardButton.getHeight() / 2; + points.add(new SnapPoint(new Vector2i(x, y), 10)); + } + + StateSwitchingButton backButton = pageAccessor.getBackButton(); + if (backButton.visible) { + int x = backButton.getX() + backButton.getWidth() / 2 + 2; + int y = backButton.getY() + backButton.getHeight() / 2; + points.add(new SnapPoint(new Vector2i(x, y), 10)); + } } } }