forked from Clones/Controlify
chat offset + rc1
This commit is contained in:
@ -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"
|
||||||
|
@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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) {
|
||||||
|
@ -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);
|
||||||
|
@ -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 < 0) newIndex = tabs.size() - 1;
|
||||||
if (newIndex >= tabs.size()) newIndex = 0;
|
if (newIndex >= tabs.size()) newIndex = 0;
|
||||||
|
|
||||||
tabNavigationBar.selectTab(newIndex);
|
tabNavigationBar.selectTab(newIndex, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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",
|
||||||
|
@ -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",
|
||||||
|
Reference in New Issue
Block a user