1
0
forked from Clones/Controlify

chat offset + rc1

This commit is contained in:
isXander
2023-03-09 21:11:40 +00:00
parent 300817e561
commit eeef512fe2
9 changed files with 124 additions and 9 deletions

View File

@ -7,10 +7,10 @@ github_release = "2.+"
machete = "1.+" machete = "1.+"
grgit = "5.0.+" grgit = "5.0.+"
minecraft = "1.19.4-pre1" minecraft = "1.19.4-rc1"
quilt_mappings = "1" quilt_mappings = "1"
fabric_loader = "0.14.16" fabric_loader = "0.14.17"
fabric_api = "0.74.1+1.19.4" fabric_api = "0.75.1+1.19.4"
mixin_extras = "0.2.0-beta.1" mixin_extras = "0.2.0-beta.1"
yet_another_config_lib = "2.3.0+beta.3+update.1.19.4-SNAPSHOT" yet_another_config_lib = "2.3.0+beta.3+update.1.19.4-SNAPSHOT"
mod_menu = "6.1.0-alpha.1" mod_menu = "6.1.0-alpha.1"

View File

@ -65,10 +65,10 @@ public class Controlify implements ControlifyApi {
var controller = Controller.createOrGet(jid, controllerHIDService.fetchType()); var controller = Controller.createOrGet(jid, controllerHIDService.fetchType());
LOGGER.info("Controller found: " + controller.name()); LOGGER.info("Controller found: " + controller.name());
config().loadOrCreateControllerData(controller);
if (config().currentControllerUid().equals(controller.uid())) if (config().currentControllerUid().equals(controller.uid()))
setCurrentController(controller); setCurrentController(controller);
config().loadOrCreateControllerData(controller);
} }
} }

View File

@ -29,6 +29,7 @@ import net.minecraft.network.chat.Component;
import java.util.Collection; import java.util.Collection;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.IntStream; import java.util.stream.IntStream;
@ -89,6 +90,8 @@ public class YACLHelper {
var config = controller.config(); var config = controller.config();
var def = controller.defaultConfig(); var def = controller.defaultConfig();
Function<Float, Component> percentFormatter = v -> Component.literal(String.format("%.0f%%", v*100));
var basicGroup = OptionGroup.createBuilder() var basicGroup = OptionGroup.createBuilder()
.name(Component.translatable("controlify.gui.group.basic")) .name(Component.translatable("controlify.gui.group.basic"))
.tooltip(Component.translatable("controlify.gui.group.basic.tooltip")) .tooltip(Component.translatable("controlify.gui.group.basic.tooltip"))
@ -96,13 +99,13 @@ public class YACLHelper {
.name(Component.translatable("controlify.gui.horizontal_look_sensitivity")) .name(Component.translatable("controlify.gui.horizontal_look_sensitivity"))
.tooltip(Component.translatable("controlify.gui.horizontal_look_sensitivity.tooltip")) .tooltip(Component.translatable("controlify.gui.horizontal_look_sensitivity.tooltip"))
.binding(def.horizontalLookSensitivity, () -> config.horizontalLookSensitivity, v -> config.horizontalLookSensitivity = v) .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()) .build())
.option(Option.createBuilder(float.class) .option(Option.createBuilder(float.class)
.name(Component.translatable("controlify.gui.vertical_look_sensitivity")) .name(Component.translatable("controlify.gui.vertical_look_sensitivity"))
.tooltip(Component.translatable("controlify.gui.vertical_look_sensitivity.tooltip")) .tooltip(Component.translatable("controlify.gui.vertical_look_sensitivity.tooltip"))
.binding(def.verticalLookSensitivity, () -> config.verticalLookSensitivity, v -> config.verticalLookSensitivity = v) .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()) .build())
.option(Option.createBuilder(boolean.class) .option(Option.createBuilder(boolean.class)
.name(Component.translatable("controlify.gui.toggle_sprint")) .name(Component.translatable("controlify.gui.toggle_sprint"))
@ -132,7 +135,13 @@ public class YACLHelper {
.name(Component.translatable("controlify.gui.vmouse_sensitivity")) .name(Component.translatable("controlify.gui.vmouse_sensitivity"))
.tooltip(Component.translatable("controlify.gui.vmouse_sensitivity.tooltip")) .tooltip(Component.translatable("controlify.gui.vmouse_sensitivity.tooltip"))
.binding(def.virtualMouseSensitivity, () -> config.virtualMouseSensitivity, v -> config.virtualMouseSensitivity = v) .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()); .build());
if (controller instanceof GamepadController gamepad) { if (controller instanceof GamepadController gamepad) {

View File

@ -18,6 +18,8 @@ public abstract class ControllerConfig {
public boolean showGuide = true; public boolean showGuide = true;
public float chatKeyboardHeight = 0f;
public boolean calibrated = false; public boolean calibrated = false;
public abstract void setDeadzone(int axis, float deadzone); public abstract void setDeadzone(int axis, float deadzone);

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -36,6 +36,6 @@ public class CreateWorldScreenMixin implements ScreenProcessorProvider {
if (newIndex < 0) newIndex = tabs.size() - 1; if (newIndex < 0) newIndex = tabs.size() - 1;
if (newIndex >= tabs.size()) newIndex = 0; if (newIndex >= tabs.size()) newIndex = 0;
tabNavigationBar.selectTab(newIndex); tabNavigationBar.selectTab(newIndex, true);
} }
} }

View File

@ -24,6 +24,8 @@
"controlify.gui.show_guide.tooltip": "Show a HUD in-game displaying actions you can do with controller buttons.", "controlify.gui.show_guide.tooltip": "Show a HUD in-game displaying actions you can do with controller buttons.",
"controlify.gui.vmouse_sensitivity": "Virtual Mouse Sensitivity", "controlify.gui.vmouse_sensitivity": "Virtual Mouse Sensitivity",
"controlify.gui.vmouse_sensitivity.tooltip": "How fast the virtual mouse moves.", "controlify.gui.vmouse_sensitivity.tooltip": "How fast the virtual mouse moves.",
"controlify.gui.chat_screen_offset": "On-screen keyboard height",
"controlify.gui.chat_screen_offset.tooltip": "How far up the system on-screen keyboard is. This shifts up the chat box so you can see the chat whilst typing.\nThis is extremely useful on the steamdeck.",
"controlify.gui.controller_theme": "Controller Theme", "controlify.gui.controller_theme": "Controller Theme",
"controlify.gui.controller_theme.tooltip": "The theme to use for rendering controller buttons.", "controlify.gui.controller_theme.tooltip": "The theme to use for rendering controller buttons.",
"controlify.gui.custom_name": "Display Name", "controlify.gui.custom_name": "Display Name",

View File

@ -23,6 +23,8 @@
"feature.accessibility.LocalPlayerMixin", "feature.accessibility.LocalPlayerMixin",
"feature.autoswitch.ToastComponentAccessor", "feature.autoswitch.ToastComponentAccessor",
"feature.bind.KeyMappingAccessor", "feature.bind.KeyMappingAccessor",
"feature.chatkbheight.ChatComponentMixin",
"feature.chatkbheight.ChatScreenMixin",
"feature.guide.ClientPacketListenerMixin", "feature.guide.ClientPacketListenerMixin",
"feature.guide.GuiMixin", "feature.guide.GuiMixin",
"feature.screenop.vanilla.AbstractButtonMixin", "feature.screenop.vanilla.AbstractButtonMixin",