From bc712f138bcc91abd50e78775d7728b22431fd00 Mon Sep 17 00:00:00 2001 From: LambdAurora Date: Wed, 15 Jan 2020 23:57:02 +0100 Subject: [PATCH] :sparkles: Add new unfocused input option, improve front block placing. --- .../client/LambdaControlsClient.java | 2 +- .../client/LambdaControlsConfig.java | 25 +++++++++++++++++++ .../gui/LambdaControlsSettingsScreen.java | 16 +++++++----- .../client/mixin/MinecraftClientMixin.java | 10 +++----- .../assets/lambdacontrols/lang/en_us.json | 4 ++- .../assets/lambdacontrols/lang/fr_ca.json | 4 ++- .../assets/lambdacontrols/lang/fr_fr.json | 4 ++- fabric/src/main/resources/config.toml | 2 ++ fabric/src/main/resources/fabric.mod.json | 2 +- gradle.properties | 2 +- 10 files changed, 52 insertions(+), 19 deletions(-) diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaControlsClient.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaControlsClient.java index 47840ea..742c86f 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaControlsClient.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaControlsClient.java @@ -105,7 +105,7 @@ public class LambdaControlsClient extends LambdaControls implements ClientModIni public void on_tick(@NotNull MinecraftClient client) { this.input.on_tick(client); - if (this.config.get_controls_mode() == ControlsMode.CONTROLLER) + if (this.config.get_controls_mode() == ControlsMode.CONTROLLER && (client.isWindowFocused() || this.config.has_unfocused_input())) this.input.on_controller_tick(client); } diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaControlsConfig.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaControlsConfig.java index bc8532e..4ab97d7 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaControlsConfig.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/LambdaControlsConfig.java @@ -46,6 +46,7 @@ public class LambdaControlsConfig private static final double DEFAULT_DEAD_ZONE = 0.25; private static final double DEFAULT_ROTATION_SPEED = 40.0; private static final double DEFAULT_MOUSE_SPEED = 25.0; + private static final boolean DEFAULT_UNFOCUSED_INPUT = false; private static final Pattern BUTTON_BINDING_PATTERN = Pattern.compile("(-?\\d+)\\+?"); @@ -60,6 +61,7 @@ public class LambdaControlsConfig private double dead_zone; private double rotation_speed; private double mouse_speed; + private boolean unfocused_input; public LambdaControlsConfig(@NotNull LambdaControlsClient mod) { @@ -83,6 +85,7 @@ public class LambdaControlsConfig this.dead_zone = this.config.getOrElse("controller.dead_zone", DEFAULT_DEAD_ZONE); this.rotation_speed = this.config.getOrElse("controller.rotation_speed", DEFAULT_ROTATION_SPEED); this.mouse_speed = this.config.getOrElse("controller.mouse_speed", DEFAULT_MOUSE_SPEED); + this.unfocused_input = this.config.getOrElse("controller.unfocused_input", DEFAULT_UNFOCUSED_INPUT); // Controller controls. InputManager.load_button_bindings(this); } @@ -95,6 +98,7 @@ public class LambdaControlsConfig this.config.set("controller.dead_zone", this.dead_zone); this.config.set("controller.rotation_speed", this.rotation_speed); this.config.set("controller.mouse_speed", this.mouse_speed); + this.config.set("controller.unfocused_input", this.unfocused_input); this.config.save(); this.mod.log("Configuration saved."); } @@ -130,6 +134,7 @@ public class LambdaControlsConfig this.set_dead_zone(DEFAULT_DEAD_ZONE); this.set_rotation_speed(DEFAULT_ROTATION_SPEED); this.set_mouse_speed(DEFAULT_MOUSE_SPEED); + this.set_unfocused_input(DEFAULT_UNFOCUSED_INPUT); // Collect prevents concurrent modification. InputManager.stream_bindings().collect(Collectors.toList()).forEach(binding -> this.set_button_binding(binding, binding.get_default_button())); @@ -445,6 +450,26 @@ public class LambdaControlsConfig this.config.set("controller.invert_right_y_axis", invert); } + /** + * Returns whether unfocused controller input is allowed or not. + * + * @return True if unfocused controller input is allowed, else false. + */ + public boolean has_unfocused_input() + { + return this.unfocused_input; + } + + /** + * Sets whether unfocused controller input is allowed or not. + * + * @param unfocused_input True if unfocused controller input is allowed, else false. + */ + public void set_unfocused_input(boolean unfocused_input) + { + this.unfocused_input = unfocused_input; + } + /** * Gets the right X axis sign. * diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/LambdaControlsSettingsScreen.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/LambdaControlsSettingsScreen.java index 9eb19b3..dd909f0 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/LambdaControlsSettingsScreen.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/gui/LambdaControlsSettingsScreen.java @@ -55,6 +55,7 @@ public class LambdaControlsSettingsScreen extends Screen private final Option dead_zone_option; private final Option inverts_right_x_axis; private final Option inverts_right_y_axis; + private final Option unfocused_input_option; // Hud options private final Option hud_enable_option; private final Option hud_side_option; @@ -70,7 +71,7 @@ public class LambdaControlsSettingsScreen extends Screen this.hide_controls = hide_controls; // General options this.auto_switch_mode_option = new SpruceBooleanOption("lambdacontrols.menu.auto_switch_mode", game_options -> this.mod.config.has_auto_switch_mode(), - (game_options, new_value) -> this.mod.config.set_auto_switch_mode(new_value), new TranslatableText("lambdacontrols.tooltip.auto_switch_mode")); + (game_options, new_value) -> this.mod.config.set_auto_switch_mode(new_value), new TranslatableText("lambdacontrols.tooltip.auto_switch_mode"), true); this.rotation_speed_option = new SpruceDoubleOption("lambdacontrols.menu.rotation_speed", 0.0, 150.0, 0.5F, game_options -> this.mod.config.get_rotation_speed(), (game_options, new_value) -> { synchronized (this.mod.config) { @@ -92,9 +93,9 @@ public class LambdaControlsSettingsScreen extends Screen }); // Gameplay options this.front_block_placing_option = new SpruceBooleanOption("lambdacontrols.menu.front_block_placing", game_options -> this.mod.config.has_front_block_placing(), - (game_options, new_value) -> this.mod.config.set_front_block_placing(new_value), new TranslatableText("lambdacontrols.tooltip.front_block_placing")); + (game_options, new_value) -> this.mod.config.set_front_block_placing(new_value), new TranslatableText("lambdacontrols.tooltip.front_block_placing"), true); this.fly_drifting_option = new SpruceBooleanOption("lambdacontrols.menu.fly_drifting", game_options -> this.mod.config.has_fly_drifting(), - (game_options, new_value) -> this.mod.config.set_fly_drifting(new_value), new TranslatableText("lambdacontrols.tooltip.fly_drifting")); + (game_options, new_value) -> this.mod.config.set_fly_drifting(new_value), new TranslatableText("lambdacontrols.tooltip.fly_drifting"), true); // Controller options this.controller_option = new CyclingOption("lambdacontrols.menu.controller", (game_options, amount) -> { int current_id = this.mod.config.get_controller().get_id(); @@ -146,16 +147,18 @@ public class LambdaControlsSettingsScreen extends Screen synchronized (this.mod.config) { this.mod.config.set_invert_right_x_axis(new_value); } - }, null); + }, null, true); this.inverts_right_y_axis = new SpruceBooleanOption("lambdacontrols.menu.invert_right_y_axis", game_options -> this.mod.config.does_invert_right_y_axis(), (game_options, new_value) -> { synchronized (this.mod.config) { this.mod.config.set_invert_right_y_axis(new_value); } - }, null); + }, null, true); + this.unfocused_input_option = new SpruceBooleanOption("lambdacontrols.menu.unfocused_input", (game_options) -> this.mod.config.has_unfocused_input(), + (game_options, new_value) -> this.mod.config.set_unfocused_input(new_value), new TranslatableText("lambdacontrols.tooltip.unfocused_input"), true); // HUD options this.hud_enable_option = new SpruceBooleanOption("lambdacontrols.menu.hud_enable", (game_options) -> this.mod.config.is_hud_enabled(), - (game_options, new_value) -> this.mod.config.set_hud_enabled(new_value), new TranslatableText("lambdacontrols.tooltip.hud_enable")); + (game_options, new_value) -> this.mod.config.set_hud_enabled(new_value), new TranslatableText("lambdacontrols.tooltip.hud_enable"), true); this.hud_side_option = new SpruceCyclingOption("lambdacontrols.menu.hud_side", (game_options, amount) -> this.mod.config.set_hud_side(this.mod.config.get_hud_side().next()), (game_options, option) -> option.getDisplayPrefix() + this.mod.config.get_hud_side().get_translated_name(), @@ -220,6 +223,7 @@ public class LambdaControlsSettingsScreen extends Screen this.list.addSingleOptionEntry(this.second_controller_option); this.list.addOptionEntry(this.controller_type_option, this.dead_zone_option); this.list.addOptionEntry(this.inverts_right_x_axis, this.inverts_right_y_axis); + this.list.addSingleOptionEntry(this.unfocused_input_option); this.list.addSingleOptionEntry(new ReloadControllerMappingsOption()); // HUD options this.list.addSingleOptionEntry(new SpruceSeparatorOption("lambdacontrols.menu.title.hud", true, null)); diff --git a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/MinecraftClientMixin.java b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/MinecraftClientMixin.java index e6f5605..05ce2a2 100644 --- a/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/MinecraftClientMixin.java +++ b/fabric/src/main/java/me/lambdaurora/lambdacontrols/client/mixin/MinecraftClientMixin.java @@ -108,7 +108,7 @@ public abstract class MinecraftClientMixin private void lambdacontrols_on_item_use(CallbackInfo ci, Hand[] hands, int hand_count, int hand_index, Hand hand, ItemStack stack_in_hand) { LambdaControlsClient mod = LambdaControlsClient.get(); - if (!stack_in_hand.isEmpty() && this.player.pitch > 0.0F && mod.config.has_front_block_placing()) { + if (!stack_in_hand.isEmpty() && this.player.pitch > 35.0F && mod.config.has_front_block_placing()) { if (this.crosshairTarget != null && this.crosshairTarget.getType() == HitResult.Type.MISS && this.player.onGround) { if (!stack_in_hand.isEmpty() && stack_in_hand.getItem() instanceof BlockItem) { BlockPos player_pos = this.player.getBlockPos().down(); @@ -119,12 +119,8 @@ public abstract class MinecraftClientMixin Direction direction = player.getHorizontalFacing(); BlockState adjacent_block_state = this.world.getBlockState(block_pos.offset(direction.getOpposite())); - if (adjacent_block_state.isAir() || adjacent_block_state.getBlock() instanceof FluidBlock) { - adjacent_block_state = this.world.getBlockState(player_pos.offset(direction.getOpposite())); - if (adjacent_block_state.isAir() || adjacent_block_state.getBlock() instanceof FluidBlock) - return; - else - block_pos = player_pos; + if (adjacent_block_state.isAir() || adjacent_block_state.getBlock() instanceof FluidBlock || (vector.getX() == 0 && vector.getZ() == 0)) { + return; } BlockHitResult hit_result = new BlockHitResult(this.crosshairTarget.getPos(), direction.getOpposite(), block_pos, false); diff --git a/fabric/src/main/resources/assets/lambdacontrols/lang/en_us.json b/fabric/src/main/resources/assets/lambdacontrols/lang/en_us.json index ccfb1b8..05cea50 100644 --- a/fabric/src/main/resources/assets/lambdacontrols/lang/en_us.json +++ b/fabric/src/main/resources/assets/lambdacontrols/lang/en_us.json @@ -96,6 +96,7 @@ "lambdacontrols.menu.title.general": "General Options", "lambdacontrols.menu.title.hud": "HUD Options", "lambdacontrols.menu.unbound": "Unbound", + "lambdacontrols.menu.unfocused_input": "Unfocused Input", "lambdacontrols.narrator.unbound": "Unbound %s", "lambdacontrols.not_bound": "Not bound", "lambdacontrols.tooltip.auto_switch_mode": "If the controls mode should be switched to Controller automatically if one is connected.", @@ -109,5 +110,6 @@ "lambdacontrols.tooltip.hud_side": "The position of the HUD.", "lambdacontrols.tooltip.mouse_speed": "The controller's emulated mouse speed.", "lambdacontrols.tooltip.rotation_speed": "The camera rotation speed in controller mode.", - "lambdacontrols.tooltip.reload_controller_mappings": "Reloads the controller mappings file." + "lambdacontrols.tooltip.reload_controller_mappings": "Reloads the controller mappings file.", + "lambdacontrols.tooltip.unfocused_input": "Allow controller input when the window is not focused." } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/lambdacontrols/lang/fr_ca.json b/fabric/src/main/resources/assets/lambdacontrols/lang/fr_ca.json index ef08a14..f21e0b2 100644 --- a/fabric/src/main/resources/assets/lambdacontrols/lang/fr_ca.json +++ b/fabric/src/main/resources/assets/lambdacontrols/lang/fr_ca.json @@ -96,6 +96,7 @@ "lambdacontrols.menu.title.general": "Options générales", "lambdacontrols.menu.title.hud": "Options du HUD", "lambdacontrols.menu.unbound": "Délier", + "lambdacontrols.menu.unfocused_input": "Entrée en fond", "lambdacontrols.narrator.unbound": "Délier %s", "lambdacontrols.not_bound": "Non défini", "lambdacontrols.tooltip.auto_switch_mode": "Détermine si le mode de contrôle doit automatiquement changer sur Manette si une manette est connectée et inversement.", @@ -109,5 +110,6 @@ "lambdacontrols.tooltip.hud_side": "Change la position du HUD.", "lambdacontrols.tooltip.mouse_speed": "Change la vitesse de la souris émulée par la manette.", "lambdacontrols.tooltip.rotation_speed": "Change la vitesse de rotation de la caméra.", - "lambdacontrols.tooltip.reload_controller_mappings": "Recharge le fichier de configuration des manettes." + "lambdacontrols.tooltip.reload_controller_mappings": "Recharge le fichier de configuration des manettes.", + "lambdacontrols.tooltip.unfocused_input": "Autorise les entrées manette quand la fenêtre n'est pas sélectionnée." } \ No newline at end of file diff --git a/fabric/src/main/resources/assets/lambdacontrols/lang/fr_fr.json b/fabric/src/main/resources/assets/lambdacontrols/lang/fr_fr.json index ef08a14..f21e0b2 100644 --- a/fabric/src/main/resources/assets/lambdacontrols/lang/fr_fr.json +++ b/fabric/src/main/resources/assets/lambdacontrols/lang/fr_fr.json @@ -96,6 +96,7 @@ "lambdacontrols.menu.title.general": "Options générales", "lambdacontrols.menu.title.hud": "Options du HUD", "lambdacontrols.menu.unbound": "Délier", + "lambdacontrols.menu.unfocused_input": "Entrée en fond", "lambdacontrols.narrator.unbound": "Délier %s", "lambdacontrols.not_bound": "Non défini", "lambdacontrols.tooltip.auto_switch_mode": "Détermine si le mode de contrôle doit automatiquement changer sur Manette si une manette est connectée et inversement.", @@ -109,5 +110,6 @@ "lambdacontrols.tooltip.hud_side": "Change la position du HUD.", "lambdacontrols.tooltip.mouse_speed": "Change la vitesse de la souris émulée par la manette.", "lambdacontrols.tooltip.rotation_speed": "Change la vitesse de rotation de la caméra.", - "lambdacontrols.tooltip.reload_controller_mappings": "Recharge le fichier de configuration des manettes." + "lambdacontrols.tooltip.reload_controller_mappings": "Recharge le fichier de configuration des manettes.", + "lambdacontrols.tooltip.unfocused_input": "Autorise les entrées manette quand la fenêtre n'est pas sélectionnée." } \ No newline at end of file diff --git a/fabric/src/main/resources/config.toml b/fabric/src/main/resources/config.toml index 215f8e1..686ab3b 100644 --- a/fabric/src/main/resources/config.toml +++ b/fabric/src/main/resources/config.toml @@ -36,6 +36,8 @@ auto_switch_mode = false invert_right_x_axis = false # Inverts the right Y axis. invert_right_y_axis = false + # Allow unfocused input. + unfocused_input = false # Controller controls. [controller.controls] # Attack control. diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index af8fb27..4bee1c5 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -33,7 +33,7 @@ "fabricloader": ">=0.4.0", "fabric": "*", "minecraft": "1.15.x", - "spruceui": ">=1.0.3" + "spruceui": ">=1.1.0" }, "recommends": { "modmenu": ">=1.8.0+build.16", diff --git a/gradle.properties b/gradle.properties index eca8b9b..ecb0ef7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,5 +15,5 @@ org.gradle.jvmargs=-Xmx1G # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api fabric_version=0.4.27+build.286-1.15 - spruceui_version=1.0.3 + spruceui_version=1.1.0