forked from Clones/Controlify
chat offset + rc1
This commit is contained in:
@ -65,10 +65,10 @@ public class Controlify implements ControlifyApi {
|
||||
var controller = Controller.createOrGet(jid, controllerHIDService.fetchType());
|
||||
LOGGER.info("Controller found: " + controller.name());
|
||||
|
||||
config().loadOrCreateControllerData(controller);
|
||||
|
||||
if (config().currentControllerUid().equals(controller.uid()))
|
||||
setCurrentController(controller);
|
||||
|
||||
config().loadOrCreateControllerData(controller);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -29,6 +29,7 @@ import net.minecraft.network.chat.Component;
|
||||
import java.util.Collection;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
@ -89,6 +90,8 @@ public class YACLHelper {
|
||||
var config = controller.config();
|
||||
var def = controller.defaultConfig();
|
||||
|
||||
Function<Float, Component> percentFormatter = v -> Component.literal(String.format("%.0f%%", v*100));
|
||||
|
||||
var basicGroup = OptionGroup.createBuilder()
|
||||
.name(Component.translatable("controlify.gui.group.basic"))
|
||||
.tooltip(Component.translatable("controlify.gui.group.basic.tooltip"))
|
||||
@ -96,13 +99,13 @@ public class YACLHelper {
|
||||
.name(Component.translatable("controlify.gui.horizontal_look_sensitivity"))
|
||||
.tooltip(Component.translatable("controlify.gui.horizontal_look_sensitivity.tooltip"))
|
||||
.binding(def.horizontalLookSensitivity, () -> config.horizontalLookSensitivity, v -> config.horizontalLookSensitivity = v)
|
||||
.controller(opt -> new FloatSliderController(opt, 0.1f, 2f, 0.05f, v -> Component.literal(String.format("%.0f%%", v*100))))
|
||||
.controller(opt -> new FloatSliderController(opt, 0.1f, 2f, 0.05f, percentFormatter))
|
||||
.build())
|
||||
.option(Option.createBuilder(float.class)
|
||||
.name(Component.translatable("controlify.gui.vertical_look_sensitivity"))
|
||||
.tooltip(Component.translatable("controlify.gui.vertical_look_sensitivity.tooltip"))
|
||||
.binding(def.verticalLookSensitivity, () -> config.verticalLookSensitivity, v -> config.verticalLookSensitivity = v)
|
||||
.controller(opt -> new FloatSliderController(opt, 0.1f, 2f, 0.05f, v -> Component.literal(String.format("%.0f%%", v*100))))
|
||||
.controller(opt -> new FloatSliderController(opt, 0.1f, 2f, 0.05f, percentFormatter))
|
||||
.build())
|
||||
.option(Option.createBuilder(boolean.class)
|
||||
.name(Component.translatable("controlify.gui.toggle_sprint"))
|
||||
@ -132,7 +135,13 @@ public class YACLHelper {
|
||||
.name(Component.translatable("controlify.gui.vmouse_sensitivity"))
|
||||
.tooltip(Component.translatable("controlify.gui.vmouse_sensitivity.tooltip"))
|
||||
.binding(def.virtualMouseSensitivity, () -> config.virtualMouseSensitivity, v -> config.virtualMouseSensitivity = v)
|
||||
.controller(opt -> new FloatSliderController(opt, 0.1f, 2f, 0.05f, v -> Component.literal(String.format("%.0f%%", v*100))))
|
||||
.controller(opt -> new FloatSliderController(opt, 0.1f, 2f, 0.05f, percentFormatter))
|
||||
.build())
|
||||
.option(Option.createBuilder(float.class)
|
||||
.name(Component.translatable("controlify.gui.chat_screen_offset"))
|
||||
.tooltip(Component.translatable("controlify.gui.chat_screen_offset.tooltip"))
|
||||
.binding(def.chatKeyboardHeight, () -> config.chatKeyboardHeight, v -> config.chatKeyboardHeight = v)
|
||||
.controller(opt -> new FloatSliderController(opt, 0f, 0.8f, 0.1f, percentFormatter))
|
||||
.build());
|
||||
|
||||
if (controller instanceof GamepadController gamepad) {
|
||||
|
@ -18,6 +18,8 @@ public abstract class ControllerConfig {
|
||||
|
||||
public boolean showGuide = true;
|
||||
|
||||
public float chatKeyboardHeight = 0f;
|
||||
|
||||
public boolean calibrated = false;
|
||||
|
||||
public abstract void setDeadzone(int axis, float deadzone);
|
||||
|
@ -0,0 +1,61 @@
|
||||
package dev.isxander.controlify.mixins.feature.chatkbheight;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import dev.isxander.controlify.Controlify;
|
||||
import dev.isxander.controlify.controller.Controller;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.components.ChatComponent;
|
||||
import net.minecraft.client.gui.screens.ChatScreen;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.*;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(ChatComponent.class)
|
||||
public class ChatComponentMixin {
|
||||
@Shadow @Final private Minecraft minecraft;
|
||||
|
||||
@Inject(method = "render", at = @At("HEAD"))
|
||||
private void translateRender(PoseStack matrices, int tickDelta, int i, int j, CallbackInfo ci) {
|
||||
if (!(minecraft.screen instanceof ChatScreen))
|
||||
return;
|
||||
|
||||
Controller<?, ?> controller = Controlify.instance().currentController();
|
||||
matrices.pushPose();
|
||||
if (controller.config().chatKeyboardHeight == 0) return;
|
||||
matrices.translate(0, -controller.config().chatKeyboardHeight * minecraft.getWindow().getGuiScaledHeight(), 0);
|
||||
}
|
||||
|
||||
@Inject(method = "render", at = @At("TAIL"))
|
||||
private void finishTranslateRender(PoseStack matrices, int tickDelta, int i, int j, CallbackInfo ci) {
|
||||
if (!(minecraft.screen instanceof ChatScreen))
|
||||
return;
|
||||
|
||||
matrices.popPose();
|
||||
}
|
||||
|
||||
@ModifyConstant(method = "render", constant = @Constant(intValue = 40))
|
||||
private int modifyChatOffset(int original) {
|
||||
if (!(minecraft.screen instanceof ChatScreen))
|
||||
return original;
|
||||
|
||||
Controller<?, ?> controller = Controlify.instance().currentController();
|
||||
if (controller.config().chatKeyboardHeight == 0) return original;
|
||||
return 16;
|
||||
}
|
||||
|
||||
@ModifyVariable(method = "screenToChatY", at = @At("HEAD"), ordinal = 0, argsOnly = true)
|
||||
private double modifyScreenY(double original) {
|
||||
if (!(minecraft.screen instanceof ChatScreen))
|
||||
return original;
|
||||
|
||||
Controller<?, ?> controller = Controlify.instance().currentController();
|
||||
if (controller.config().chatKeyboardHeight == 0) return original;
|
||||
|
||||
return original
|
||||
- controller.config().chatKeyboardHeight * minecraft.getWindow().getGuiScaledHeight()
|
||||
+ 24;
|
||||
}
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package dev.isxander.controlify.mixins.feature.chatkbheight;
|
||||
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import dev.isxander.controlify.Controlify;
|
||||
import dev.isxander.controlify.controller.Controller;
|
||||
import net.minecraft.client.gui.screens.ChatScreen;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.ModifyVariable;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(ChatScreen.class)
|
||||
public abstract class ChatScreenMixin extends Screen {
|
||||
protected ChatScreenMixin(Component title) {
|
||||
super(title);
|
||||
}
|
||||
|
||||
@Inject(method = "render", at = @At("HEAD"))
|
||||
private void translateRender(PoseStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) {
|
||||
matrices.pushPose();
|
||||
|
||||
Controller<?, ?> controller = Controlify.instance().currentController();
|
||||
matrices.translate(0, -controller.config().chatKeyboardHeight * this.height, 0);
|
||||
}
|
||||
|
||||
@Inject(method = "render", at = @At("TAIL"))
|
||||
private void finishTranslateRender(PoseStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) {
|
||||
matrices.popPose();
|
||||
}
|
||||
|
||||
@ModifyVariable(method = "mouseClicked", at = @At("HEAD"), ordinal = 1, argsOnly = true)
|
||||
private double modifyClickY(double original) {
|
||||
Controller<?, ?> controller = Controlify.instance().currentController();
|
||||
return original + controller.config().chatKeyboardHeight * this.height;
|
||||
}
|
||||
}
|
@ -36,6 +36,6 @@ public class CreateWorldScreenMixin implements ScreenProcessorProvider {
|
||||
if (newIndex < 0) newIndex = tabs.size() - 1;
|
||||
if (newIndex >= tabs.size()) newIndex = 0;
|
||||
|
||||
tabNavigationBar.selectTab(newIndex);
|
||||
tabNavigationBar.selectTab(newIndex, true);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user