1
0
forked from Clones/Controlify

pre1 and less sodium stuff cuz i got a pr merged

This commit is contained in:
isXander
2023-02-22 20:19:48 +00:00
parent a40cd9a2e2
commit f17685535a
19 changed files with 51 additions and 259 deletions

View File

@ -1,24 +0,0 @@
package dev.isxander.controlify.mixins.compat.sodium;
import me.jellysquid.mods.sodium.client.gui.widgets.AbstractWidget;
import net.minecraft.client.gui.ComponentPath;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.navigation.FocusNavigationEvent;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
@Mixin(AbstractWidget.class)
public abstract class AbstractWidgetMixin implements GuiEventListener {
@Shadow protected abstract void drawRect(double x1, double y1, double x2, double y2, int color);
@Shadow protected abstract void playClickSound();
@Shadow public abstract boolean isFocused();
@Nullable
@Override
public ComponentPath nextFocusPath(FocusNavigationEvent focusNavigationEvent) {
return !this.isFocused() ? ComponentPath.leaf(this) : null;
}
}

View File

@ -1,58 +0,0 @@
package dev.isxander.controlify.mixins.compat.sodium;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.mojang.blaze3d.vertex.PoseStack;
import me.jellysquid.mods.sodium.client.gui.options.Option;
import me.jellysquid.mods.sodium.client.gui.options.control.ControlElement;
import me.jellysquid.mods.sodium.client.util.Dim2i;
import net.minecraft.client.gui.ComponentPath;
import net.minecraft.client.gui.navigation.FocusNavigationEvent;
import net.minecraft.client.gui.navigation.ScreenRectangle;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(ControlElement.class)
public abstract class ControlElementMixin<T> extends AbstractWidgetMixin {
@Shadow @Final protected Option<T> option;
@Shadow @Final protected Dim2i dim;
@Inject(method = "render", at = @At("TAIL"))
private void renderFocusRect(PoseStack matrixStack, int mouseX, int mouseY, float delta, CallbackInfo ci) {
if (this.isFocused()) {
int x1 = this.dim.x();
int y1 = this.dim.y();
int x2 = this.dim.getLimitX();
int y2 = this.dim.getLimitY();
this.drawRect(x1, y1, x2, y1 + 1, -1);
this.drawRect(x1, y2 - 1, x2, y2, -1);
this.drawRect(x1, y1, x1 + 1, y2, -1);
this.drawRect(x2 - 1, y1, x2, y2, -1);;
}
}
@ModifyExpressionValue(method = "render", at = @At(value = "FIELD", target = "Lme/jellysquid/mods/sodium/client/gui/options/control/ControlElement;hovered:Z", opcode = Opcodes.GETFIELD, ordinal = 0))
private boolean shouldShortenName(boolean hovered) {
return hovered || this.isFocused();
}
@Override
public @Nullable ComponentPath nextFocusPath(FocusNavigationEvent focusNavigationEvent) {
if (!this.option.isAvailable())
return null;
return super.nextFocusPath(focusNavigationEvent);
}
@Override
public @NotNull ScreenRectangle getRectangle() {
return new ScreenRectangle(this.dim.x(), this.dim.y(), this.dim.width(), this.dim.height());
}
}

View File

@ -6,26 +6,15 @@ import dev.isxander.controlify.screenop.ComponentProcessorProvider;
import org.spongepowered.asm.mixin.*;
@Pseudo
@Mixin(targets = "me.jellysquid.mods.sodium.client.gui.options.control.CyclingControl$CyclingControlElement")
public abstract class CycleControlElementMixin<T extends Enum<T>> extends ControlElementMixin<T> implements ComponentProcessorProvider {
@Shadow private int currentIndex;
@Final @Shadow private T[] allowedValues;
@Mixin(targets = "me.jellysquid.mods.sodium.client.gui.options.control.CyclingControl$CyclingControlElement", remap = false)
public abstract class CycleControlElementMixin implements ComponentProcessorProvider {
@Shadow public abstract void cycleControl(boolean reverse);
@Unique private final ComponentProcessor controlify$componentProcessor
= new CycleControlProcessor(this::cycle);
= new CycleControlProcessor(this::cycleControl);
@Override
public ComponentProcessor componentProcessor() {
return controlify$componentProcessor;
}
private void cycle(boolean backwards) {
if (backwards) {
this.currentIndex = (this.currentIndex - 1 + this.allowedValues.length) % this.allowedValues.length;
} else {
this.currentIndex = (this.option.getValue().ordinal() + 1) % this.allowedValues.length;
}
this.option.setValue(this.allowedValues[this.currentIndex]);
this.playClickSound();
}
}

View File

@ -1,63 +0,0 @@
package dev.isxander.controlify.mixins.compat.sodium;
import com.mojang.blaze3d.vertex.PoseStack;
import dev.isxander.controlify.compatibility.sodium.ButtonProcessor;
import dev.isxander.controlify.screenop.ComponentProcessor;
import dev.isxander.controlify.screenop.ComponentProcessorProvider;
import me.jellysquid.mods.sodium.client.gui.widgets.FlatButtonWidget;
import me.jellysquid.mods.sodium.client.util.Dim2i;
import net.minecraft.client.gui.ComponentPath;
import net.minecraft.client.gui.navigation.FocusNavigationEvent;
import net.minecraft.client.gui.navigation.ScreenRectangle;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(FlatButtonWidget.class)
public abstract class FlatButtonWidgetMixin extends AbstractWidgetMixin implements ComponentProcessorProvider {
@Shadow @Final private Dim2i dim;
@Shadow private boolean visible;
@Shadow private boolean enabled;
@Shadow @Final private Runnable action;
@Unique private final ComponentProcessor controlify$componentProcessor
= new ButtonProcessor(() -> action.run());
@Inject(method = "render", at = @At("TAIL"))
private void renderFocusRect(PoseStack matrixStack, int mouseX, int mouseY, float delta, CallbackInfo ci) {
if (this.enabled && this.isFocused()) {
int x1 = this.dim.x();
int y1 = this.dim.y();
int x2 = this.dim.getLimitX();
int y2 = this.dim.getLimitY();
this.drawRect(x1, y1, x2, y1 + 1, -1);
this.drawRect(x1, y2 - 1, x2, y2, -1);
this.drawRect(x1, y1, x1 + 1, y2, -1);
this.drawRect(x2 - 1, y1, x2, y2, -1);;
}
}
@Override
public @Nullable ComponentPath nextFocusPath(FocusNavigationEvent focusNavigationEvent) {
if (!visible || !enabled)
return null;
return super.nextFocusPath(focusNavigationEvent);
}
@Override
public @NotNull ScreenRectangle getRectangle() {
return new ScreenRectangle(this.dim.x(), this.dim.y(), this.dim.width(), this.dim.height());
}
@Override
public ComponentProcessor componentProcessor() {
return controlify$componentProcessor;
}
}

View File

@ -4,26 +4,26 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import dev.isxander.controlify.compatibility.sodium.SliderControlProcessor;
import dev.isxander.controlify.screenop.ComponentProcessor;
import dev.isxander.controlify.screenop.ComponentProcessorProvider;
import me.jellysquid.mods.sodium.client.gui.options.Option;
import me.jellysquid.mods.sodium.client.gui.options.control.ControlElement;
import me.jellysquid.mods.sodium.client.util.Dim2i;
import net.minecraft.util.Mth;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.*;
import org.spongepowered.asm.mixin.injection.At;
@Mixin(targets = "me.jellysquid.mods.sodium.client.gui.options.control.SliderControl$Button")
public abstract class SliderControlElementMixin extends ControlElementMixin<Integer> implements ComponentProcessorProvider {
@Shadow public abstract int getIntValue();
@Pseudo
@Mixin(targets = "me.jellysquid.mods.sodium.client.gui.options.control.SliderControl$Button", remap = false)
public abstract class SliderControlElementMixin extends ControlElement<Integer> implements ComponentProcessorProvider {
@Shadow @Final private int interval;
@Shadow protected abstract void setValue(double d);
@Shadow public abstract double getThumbPositionForValue(int value);
@Shadow @Final private int min;
@Shadow @Final private int max;
@Unique private final ComponentProcessor controlify$componentProcessor
= new SliderControlProcessor(this::incrementSlider);
@ModifyExpressionValue(method = "render", at = @At(value = "FIELD", target = "Lme/jellysquid/mods/sodium/client/gui/options/control/SliderControl$Button;hovered:Z", opcode = Opcodes.GETFIELD))
private boolean shouldRenderSlider(boolean hovered) {
return hovered || this.isFocused();
public SliderControlElementMixin(Option<Integer> option, Dim2i dim) {
super(option, dim);
}
@Override
@ -32,7 +32,6 @@ public abstract class SliderControlElementMixin extends ControlElementMixin<Inte
}
private void incrementSlider(boolean reverse) {
int inc = reverse ? -1 : 1;
this.setValue(this.getThumbPositionForValue(this.getIntValue() + inc * this.interval));
this.option.setValue(Mth.clamp(this.option.getValue() + (reverse ? -this.interval : this.interval), this.min, this.max));
}
}

View File

@ -3,11 +3,13 @@ package dev.isxander.controlify.mixins.compat.sodium;
import me.jellysquid.mods.sodium.client.gui.SodiumOptionsGUI;
import me.jellysquid.mods.sodium.client.gui.options.OptionPage;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.gen.Accessor;
import java.util.List;
@Mixin(SodiumOptionsGUI.class)
@Pseudo
@Mixin(value = SodiumOptionsGUI.class, remap = false)
public interface SodiumOptionsGUIAccessor {
@Accessor
List<OptionPage> getPages();

View File

@ -7,16 +7,14 @@ import me.jellysquid.mods.sodium.client.gui.SodiumOptionsGUI;
import me.jellysquid.mods.sodium.client.gui.options.control.ControlElement;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.network.chat.Component;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.*;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.List;
@Pseudo
@Mixin(value = SodiumOptionsGUI.class, remap = false)
public abstract class SodiumOptionsGUIMixin extends Screen implements ScreenProcessorProvider {
@Shadow @Final private List<ControlElement<?>> controls;

View File

@ -5,21 +5,19 @@ import dev.isxander.controlify.screenop.ComponentProcessor;
import dev.isxander.controlify.screenop.ComponentProcessorProvider;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
@Pseudo
@Mixin(targets = "me.jellysquid.mods.sodium.client.gui.options.control.TickBoxControl$TickBoxControlElement")
public abstract class TickBoxControlElementMixin extends ControlElementMixin<Boolean> implements ComponentProcessorProvider {
@Mixin(targets = "me.jellysquid.mods.sodium.client.gui.options.control.TickBoxControl$TickBoxControlElement", remap = false)
public abstract class TickBoxControlElementMixin implements ComponentProcessorProvider {
@Shadow public abstract void toggleControl();
@Unique private final ComponentProcessor controlify$componentProcessor
= new TickBoxControlProcessor(this::toggle);
= new TickBoxControlProcessor(this::toggleControl);
@Override
public ComponentProcessor componentProcessor() {
return controlify$componentProcessor;
}
private void toggle() {
this.option.setValue(!this.option.getValue());
this.playClickSound();
}
}