forked from Clones/Controlify
recipe book snapping
This commit is contained in:
@ -0,0 +1,30 @@
|
||||
package dev.isxander.controlify.mixins.feature.virtualmouse.snapping;
|
||||
|
||||
import dev.isxander.controlify.api.vmousesnapping.SnapPoint;
|
||||
import dev.isxander.controlify.virtualmouse.SnapUtils;
|
||||
import net.minecraft.client.gui.screens.inventory.AbstractFurnaceScreen;
|
||||
import net.minecraft.client.gui.screens.recipebook.AbstractFurnaceRecipeBookComponent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.world.inventory.AbstractFurnaceMenu;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
@Mixin(AbstractFurnaceScreen.class)
|
||||
public abstract class AbstractFurnaceScreenMixin<T extends AbstractFurnaceMenu> extends AbstractContainerScreenMixin<T> {
|
||||
@Shadow @Final public AbstractFurnaceRecipeBookComponent recipeBookComponent;
|
||||
|
||||
protected AbstractFurnaceScreenMixin(Component title) {
|
||||
super(title);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<SnapPoint> getSnapPoints() {
|
||||
Set<SnapPoint> points = new HashSet<>(super.getSnapPoints());
|
||||
SnapUtils.addRecipeSnapPoints(recipeBookComponent, points);
|
||||
return points;
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package dev.isxander.controlify.mixins.feature.virtualmouse.snapping;
|
||||
|
||||
import dev.isxander.controlify.api.vmousesnapping.SnapPoint;
|
||||
import dev.isxander.controlify.virtualmouse.SnapUtils;
|
||||
import net.minecraft.client.gui.screens.inventory.CraftingScreen;
|
||||
import net.minecraft.client.gui.screens.recipebook.RecipeBookComponent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.world.inventory.CraftingMenu;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
@Mixin(CraftingScreen.class)
|
||||
public abstract class CraftingScreenMixin extends AbstractContainerScreenMixin<CraftingMenu> {
|
||||
@Shadow @Final private RecipeBookComponent recipeBookComponent;
|
||||
|
||||
protected CraftingScreenMixin(Component title) {
|
||||
super(title);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<SnapPoint> getSnapPoints() {
|
||||
Set<SnapPoint> points = new HashSet<>(super.getSnapPoints());
|
||||
SnapUtils.addRecipeSnapPoints(recipeBookComponent, points);
|
||||
return points;
|
||||
}
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package dev.isxander.controlify.mixins.feature.virtualmouse.snapping;
|
||||
|
||||
import dev.isxander.controlify.api.vmousesnapping.ISnapBehaviour;
|
||||
import dev.isxander.controlify.api.vmousesnapping.SnapPoint;
|
||||
import dev.isxander.controlify.virtualmouse.SnapUtils;
|
||||
import net.minecraft.client.gui.screens.inventory.InventoryScreen;
|
||||
import net.minecraft.client.gui.screens.recipebook.RecipeBookComponent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.world.inventory.InventoryMenu;
|
||||
import org.joml.Vector2i;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
@Mixin(InventoryScreen.class)
|
||||
public abstract class InventoryScreenMixin extends AbstractContainerScreenMixin<InventoryMenu> implements ISnapBehaviour {
|
||||
@Shadow @Final private RecipeBookComponent recipeBookComponent;
|
||||
|
||||
protected InventoryScreenMixin(Component title) {
|
||||
super(title);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<SnapPoint> getSnapPoints() {
|
||||
Set<SnapPoint> points = new HashSet<>(super.getSnapPoints());
|
||||
SnapUtils.addRecipeSnapPoints(recipeBookComponent, points);
|
||||
return points;
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package dev.isxander.controlify.mixins.feature.virtualmouse.snapping;
|
||||
|
||||
import net.minecraft.client.gui.screens.recipebook.RecipeBookComponent;
|
||||
import net.minecraft.client.gui.screens.recipebook.RecipeBookPage;
|
||||
import net.minecraft.client.gui.screens.recipebook.RecipeBookTabButton;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mixin(RecipeBookComponent.class)
|
||||
public interface RecipeBookComponentAccessor {
|
||||
@Accessor
|
||||
RecipeBookPage getRecipeBookPage();
|
||||
|
||||
@Accessor
|
||||
List<RecipeBookTabButton> getTabButtons();
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
package dev.isxander.controlify.mixins.feature.virtualmouse.snapping;
|
||||
|
||||
import net.minecraft.client.gui.screens.recipebook.RecipeBookPage;
|
||||
import net.minecraft.client.gui.screens.recipebook.RecipeButton;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Mixin(RecipeBookPage.class)
|
||||
public interface RecipeBookPageAccessor {
|
||||
@Accessor
|
||||
List<RecipeButton> getButtons();
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
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.screens.recipebook.RecipeBookComponent;
|
||||
import org.joml.Vector2i;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public final class SnapUtils {
|
||||
private SnapUtils() {
|
||||
}
|
||||
|
||||
public static void addRecipeSnapPoints(RecipeBookComponent recipeBookComponent, Collection<SnapPoint> points) {
|
||||
if (recipeBookComponent.isVisible()) {
|
||||
RecipeBookComponentAccessor componentAccessor = (RecipeBookComponentAccessor) recipeBookComponent;
|
||||
componentAccessor.getTabButtons().forEach(button -> {
|
||||
int x = button.getX() + button.getWidth() / 2;
|
||||
int y = button.getY() + button.getHeight() / 2;
|
||||
points.add(new SnapPoint(new Vector2i(x, y), 20));
|
||||
});
|
||||
|
||||
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));
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
@ -72,7 +72,12 @@
|
||||
"feature.virtualmouse.MouseHandlerAccessor",
|
||||
"feature.virtualmouse.MouseHandlerMixin",
|
||||
"feature.virtualmouse.snapping.AbstractContainerScreenMixin",
|
||||
"feature.virtualmouse.snapping.AbstractFurnaceScreenMixin",
|
||||
"feature.virtualmouse.snapping.CraftingScreenMixin",
|
||||
"feature.virtualmouse.snapping.CreativeModeInventoryScreenMixin",
|
||||
"feature.virtualmouse.snapping.InventoryScreenMixin",
|
||||
"feature.virtualmouse.snapping.RecipeBookComponentAccessor",
|
||||
"feature.virtualmouse.snapping.RecipeBookPageAccessor",
|
||||
"feature.virtualmouse.snapping.ScreenMixin"
|
||||
]
|
||||
}
|
||||
|
Reference in New Issue
Block a user