1
0
forked from Clones/Controlify

vmouse snapping

This commit is contained in:
isXander
2023-02-10 21:00:39 +00:00
parent 773aebe04e
commit 9e0440a7f4
41 changed files with 274 additions and 80 deletions

View File

@ -1,7 +1,7 @@
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
package dev.isxander.controlify.mixins.feature.screenop.vanilla;
import dev.isxander.controlify.screenop.component.ComponentProcessor;
import dev.isxander.controlify.screenop.component.ComponentProcessorProvider;
import dev.isxander.controlify.screenop.ComponentProcessor;
import dev.isxander.controlify.screenop.ComponentProcessorProvider;
import dev.isxander.controlify.screenop.compat.vanilla.AbstractButtonComponentProcessor;
import net.minecraft.client.gui.components.AbstractButton;
import org.spongepowered.asm.mixin.Mixin;

View File

@ -1,6 +1,6 @@
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
package dev.isxander.controlify.mixins.feature.screenop.vanilla;
import dev.isxander.controlify.screenop.component.CustomFocus;
import dev.isxander.controlify.screenop.CustomFocus;
import net.minecraft.client.gui.components.events.AbstractContainerEventHandler;
import net.minecraft.client.gui.components.events.GuiEventListener;
import org.jetbrains.annotations.Nullable;

View File

@ -1,4 +1,4 @@
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
package dev.isxander.controlify.mixins.feature.screenop.vanilla;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import dev.isxander.controlify.Controlify;

View File

@ -1,10 +1,10 @@
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
package dev.isxander.controlify.mixins.feature.screenop.vanilla;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import dev.isxander.controlify.Controlify;
import dev.isxander.controlify.InputMode;
import dev.isxander.controlify.screenop.component.ComponentProcessor;
import dev.isxander.controlify.screenop.component.ComponentProcessorProvider;
import dev.isxander.controlify.screenop.ComponentProcessor;
import dev.isxander.controlify.screenop.ComponentProcessorProvider;
import dev.isxander.controlify.screenop.compat.vanilla.SliderComponentProcessor;
import net.minecraft.client.InputType;
import net.minecraft.client.gui.components.AbstractSliderButton;

View File

@ -1,6 +1,6 @@
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
package dev.isxander.controlify.mixins.feature.screenop.vanilla;
import dev.isxander.controlify.screenop.component.CustomFocus;
import dev.isxander.controlify.screenop.CustomFocus;
import net.minecraft.client.gui.components.ContainerObjectSelectionList;
import net.minecraft.client.gui.components.events.GuiEventListener;
import org.jetbrains.annotations.Nullable;

View File

@ -1,4 +1,4 @@
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
package dev.isxander.controlify.mixins.feature.screenop.vanilla;
import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen;
import net.minecraft.world.item.CreativeModeTab;

View File

@ -1,4 +1,4 @@
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
package dev.isxander.controlify.mixins.feature.screenop.vanilla;
import dev.isxander.controlify.screenop.ScreenProcessor;
import dev.isxander.controlify.screenop.ScreenProcessorProvider;

View File

@ -1,4 +1,4 @@
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
package dev.isxander.controlify.mixins.feature.screenop.vanilla;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.multiplayer.JoinMultiplayerScreen;

View File

@ -1,4 +1,4 @@
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
package dev.isxander.controlify.mixins.feature.screenop.vanilla;
import dev.isxander.controlify.screenop.ScreenProcessor;
import dev.isxander.controlify.screenop.ScreenProcessorProvider;

View File

@ -1,7 +1,7 @@
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
package dev.isxander.controlify.mixins.feature.screenop.vanilla;
import dev.isxander.controlify.screenop.component.ComponentProcessor;
import dev.isxander.controlify.screenop.component.ComponentProcessorProvider;
import dev.isxander.controlify.screenop.ComponentProcessor;
import dev.isxander.controlify.screenop.ComponentProcessorProvider;
import dev.isxander.controlify.screenop.compat.vanilla.LanguageSelectionListComponentProcessor;
import net.minecraft.client.gui.screens.LanguageSelectScreen;
import org.spongepowered.asm.mixin.Final;

View File

@ -1,4 +1,4 @@
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
package dev.isxander.controlify.mixins.feature.screenop.vanilla;
import net.minecraft.client.gui.screens.OptionsSubScreen;
import net.minecraft.client.gui.screens.Screen;

View File

@ -1,4 +1,4 @@
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
package dev.isxander.controlify.mixins.feature.screenop.vanilla;
import net.minecraft.client.gui.ComponentPath;
import net.minecraft.client.gui.navigation.FocusNavigationEvent;

View File

@ -1,4 +1,4 @@
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
package dev.isxander.controlify.mixins.feature.screenop.vanilla;
import dev.isxander.controlify.screenop.ScreenProcessorProvider;
import dev.isxander.controlify.screenop.ScreenProcessor;

View File

@ -1,4 +1,4 @@
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
package dev.isxander.controlify.mixins.feature.screenop.vanilla;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.screens.worldselection.SelectWorldScreen;

View File

@ -1,4 +1,4 @@
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
package dev.isxander.controlify.mixins.feature.screenop.vanilla;
import dev.isxander.controlify.screenop.ScreenProcessor;
import dev.isxander.controlify.screenop.ScreenProcessorProvider;

View File

@ -1,7 +1,7 @@
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
package dev.isxander.controlify.mixins.feature.screenop.vanilla;
import dev.isxander.controlify.screenop.component.ComponentProcessor;
import dev.isxander.controlify.screenop.component.ComponentProcessorProvider;
import dev.isxander.controlify.screenop.ComponentProcessor;
import dev.isxander.controlify.screenop.ComponentProcessorProvider;
import dev.isxander.controlify.screenop.compat.vanilla.ServerSelectionListEntryComponentProcessor;
import net.minecraft.client.gui.screens.multiplayer.ServerSelectionList;
import org.spongepowered.asm.mixin.Mixin;

View File

@ -1,7 +1,7 @@
package dev.isxander.controlify.mixins.compat.screenop.vanilla;
package dev.isxander.controlify.mixins.feature.screenop.vanilla;
import dev.isxander.controlify.screenop.component.ComponentProcessor;
import dev.isxander.controlify.screenop.component.ComponentProcessorProvider;
import dev.isxander.controlify.screenop.ComponentProcessor;
import dev.isxander.controlify.screenop.ComponentProcessorProvider;
import dev.isxander.controlify.screenop.compat.vanilla.WorldListEntryComponentProcessor;
import net.minecraft.client.gui.screens.worldselection.WorldSelectionList;
import org.spongepowered.asm.mixin.Mixin;

View File

@ -1,7 +1,7 @@
package dev.isxander.controlify.mixins.compat.screenop.yacl;
package dev.isxander.controlify.mixins.feature.screenop.yacl;
import dev.isxander.controlify.screenop.component.ComponentProcessor;
import dev.isxander.controlify.screenop.component.ComponentProcessorProvider;
import dev.isxander.controlify.screenop.ComponentProcessor;
import dev.isxander.controlify.screenop.ComponentProcessorProvider;
import dev.isxander.controlify.screenop.compat.yacl.CyclingControllerElementComponentProcessor;
import dev.isxander.yacl.gui.controllers.cycling.CyclingControllerElement;
import org.spongepowered.asm.mixin.Mixin;

View File

@ -1,7 +1,7 @@
package dev.isxander.controlify.mixins.compat.screenop.yacl;
package dev.isxander.controlify.mixins.feature.screenop.yacl;
import dev.isxander.controlify.screenop.component.ComponentProcessor;
import dev.isxander.controlify.screenop.component.ComponentProcessorProvider;
import dev.isxander.controlify.screenop.ComponentProcessor;
import dev.isxander.controlify.screenop.ComponentProcessorProvider;
import dev.isxander.controlify.screenop.compat.yacl.SliderControllerElementComponentProcessor;
import dev.isxander.yacl.gui.controllers.slider.SliderControllerElement;
import org.spongepowered.asm.mixin.Mixin;

View File

@ -1,4 +1,4 @@
package dev.isxander.controlify.mixins.compat.screenop.yacl;
package dev.isxander.controlify.mixins.feature.screenop.yacl;
import dev.isxander.controlify.screenop.ScreenProcessor;
import dev.isxander.controlify.screenop.ScreenProcessorProvider;

View File

@ -0,0 +1,37 @@
package dev.isxander.controlify.mixins.feature.virtualmouse.snapping;
import dev.isxander.controlify.virtualmouse.ISnapBehaviour;
import dev.isxander.controlify.virtualmouse.SnapPoint;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
import net.minecraft.network.chat.Component;
import net.minecraft.world.inventory.AbstractContainerMenu;
import org.joml.Vector2i;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import java.util.Set;
import java.util.stream.Collectors;
@Mixin(AbstractContainerScreen.class)
public abstract class AbstractContainerScreenMixin<T extends AbstractContainerMenu> extends Screen implements ISnapBehaviour {
protected AbstractContainerScreenMixin(Component title) {
super(title);
}
@Shadow public abstract T getMenu();
@Shadow protected int leftPos;
@Shadow protected int topPos;
@Shadow protected int imageHeight;
@Override
public Set<SnapPoint> getSnapPoints() {
return getMenu().slots.stream()
.map(slot -> new SnapPoint(new Vector2i(leftPos + slot.x + 8, topPos + slot.y + 8), 24))
.collect(Collectors.toSet());
}
}

View File

@ -0,0 +1,48 @@
package dev.isxander.controlify.mixins.feature.virtualmouse.snapping;
import dev.isxander.controlify.virtualmouse.SnapPoint;
import net.minecraft.client.gui.components.EditBox;
import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.CreativeModeTabs;
import org.joml.Vector2i;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import java.util.Set;
@Mixin(CreativeModeInventoryScreen.class)
public abstract class CreativeModeInventoryScreenMixin extends AbstractContainerScreenMixin<CreativeModeInventoryScreen.ItemPickerMenu> {
@Shadow protected abstract int getTabX(CreativeModeTab group);
@Shadow private float scrollOffs;
@Shadow private EditBox searchBox;
@Shadow protected abstract boolean canScroll();
protected CreativeModeInventoryScreenMixin(Component title) {
super(title);
}
@Override
public Set<SnapPoint> getSnapPoints() {
Set<SnapPoint> points = super.getSnapPoints();
for (var tab : CreativeModeTabs.tabs()) {
boolean topRow = tab.row() == CreativeModeTab.Row.TOP;
int x = leftPos + getTabX(tab);
int y = topPos + (topRow ? -28 : imageHeight - 4);
points.add(new SnapPoint(new Vector2i(x + 13, y + 16), 38));
}
if (canScroll()) {
int scrollTop = topPos + 18;
int scrollBottom = scrollTop + 112;
points.add(new SnapPoint(new Vector2i(leftPos + 175 + 6, scrollTop + (int)((float)(scrollBottom - scrollTop - 17) * scrollOffs) + 7), 15));
}
if (searchBox.isVisible())
points.add(new SnapPoint(new Vector2i(searchBox.getX() + searchBox.getWidth() / 2, searchBox.getY() + searchBox.getHeight() / 2), searchBox.getHeight() + 2));
return points;
}
}

View File

@ -0,0 +1,31 @@
package dev.isxander.controlify.mixins.feature.virtualmouse.snapping;
import dev.isxander.controlify.virtualmouse.ISnapBehaviour;
import dev.isxander.controlify.virtualmouse.SnapPoint;
import net.minecraft.client.gui.components.AbstractWidget;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.screens.Screen;
import org.joml.Vector2i;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Mixin(Screen.class)
public abstract class ScreenMixin implements ISnapBehaviour {
@Shadow public abstract List<? extends GuiEventListener> children();
@Override
public Set<SnapPoint> getSnapPoints() {
return children().stream()
.filter(child -> child instanceof AbstractWidget)
.map(AbstractWidget.class::cast)
.map(widget -> new SnapPoint(
new Vector2i(widget.getX() + widget.getWidth() / 2, widget.getY() + widget.getHeight() / 2),
Math.min(widget.getWidth(), widget.getHeight()) + 5
))
.collect(Collectors.toSet());
}
}