diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java index d0d9344..19957d3 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsClient.java @@ -42,7 +42,6 @@ import org.lwjgl.glfw.GLFW; import java.io.File; import java.util.Objects; -import java.util.Optional; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.atomic.AtomicReference; diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java index 4bd8524..0e468b6 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/MidnightControlsConfig.java @@ -116,6 +116,7 @@ public class MidnightControlsConfig extends MidnightConfig { @Entry(category = CONTROLLER, name = "Max analog value: Right X", isSlider = true, min = .25f, max = 1.f) public static double maxAnalogValueRightX = maxAnalogValues[2]; @Entry(category = CONTROLLER, name = "Max analog value: Right Y", isSlider = true, min = .25f, max = 1.f) public static double maxAnalogValueRightY = maxAnalogValues[3]; @Entry(category = CONTROLLER, name = "Trigger button fix") public static boolean triggerFix = true; + @Entry(category = CONTROLLER, name = "Excluded Controllers (Name Regex)") public static List excludedControllers = Lists.newArrayList(".*(Keyboard)$", ".*(Touchpad)$", ".*(Pen)$", ".*(Finger)$"); @Entry(category = MISC, name = "Excluded Keybindings") public static List excludedKeybindings = Lists.newArrayList("key.forward", "key.left", "key.back", "key.right", "key.jump", "key.sneak", "key.sprint", "key.inventory", "key.swapOffhand", "key.drop", "key.use", "key.attack", "key.chat", "key.playerlist", "key.screenshot", "key.togglePerspective", "key.smoothCamera", "key.fullscreen", "key.saveToolbarActivator", "key.loadToolbarActivator", "key.pickItem", "key.hotbar.1", "key.hotbar.2", "key.hotbar.3", "key.hotbar.4", "key.hotbar.5", "key.hotbar.6", "key.hotbar.7", "key.hotbar.8", "key.hotbar.9"); diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MappingsStringInputWidget.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MappingsStringInputWidget.java index 12ffadc..cf0c4af 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MappingsStringInputWidget.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MappingsStringInputWidget.java @@ -10,10 +10,13 @@ package eu.midnightdust.midnightcontrols.client.gui; import eu.midnightdust.midnightcontrols.client.MidnightControlsClient; +import eu.midnightdust.midnightcontrols.client.MidnightControlsConfig; import eu.midnightdust.midnightcontrols.client.controller.Controller; +import net.minecraft.client.gui.DrawContext; import net.minecraft.client.util.math.MatrixStack; import org.thinkingstudio.obsidianui.Position; import org.thinkingstudio.obsidianui.option.SpruceOption; +import org.thinkingstudio.obsidianui.option.SpruceSimpleActionOption; import org.thinkingstudio.obsidianui.widget.container.SpruceContainerWidget; import org.thinkingstudio.obsidianui.widget.text.SpruceTextAreaWidget; import net.minecraft.client.toast.SystemToast; @@ -31,6 +34,7 @@ import java.nio.file.Files; * @since 1.4.3 */ public class MappingsStringInputWidget extends SpruceContainerWidget { + private final SpruceOption copyGuidOption; private final SpruceOption reloadMappingsOption; private String mappings; private SpruceTextAreaWidget textArea; @@ -42,6 +46,7 @@ public class MappingsStringInputWidget extends SpruceContainerWidget { this.reloadMappingsOption = ReloadControllerMappingsOption.newOption(btn -> { this.writeMappings(); }); + this.copyGuidOption = SpruceSimpleActionOption.of("midnightcontrols.menu.copy_controller_guid", button -> client.keyboard.setClipboard(MidnightControlsConfig.getController().getGuid())); this.init(); } @@ -96,10 +101,13 @@ public class MappingsStringInputWidget extends SpruceContainerWidget { this.textArea.setDisplayedLines(this.textArea.getInnerHeight() / this.client.textRenderer.fontHeight); this.addChild(this.textArea); - this.addChild(this.reloadMappingsOption.createWidget(Position.of(this.width / 2 - 155, this.height - 29), 310)); + this.addChild(this.reloadMappingsOption.createWidget(Position.of(this.width / 2 - 155, this.height - 29), 257)); + this.addChild(this.copyGuidOption.createWidget(Position.of(this.width / 2 + 105, this.height - 29), 65)); } - //public void renderTitle(MatrixStack matrices, int mouseX, int mouseY, float delta) { - //this.drawCenteredText(matrices, this.textRenderer, this.title, this.width / 2, 8, 16777215); - //} + @Override + public void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) { + super.renderWidget(context, mouseX, mouseY, delta); + context.drawCenteredTextWithShadow(this.client.textRenderer, Text.translatable("midnightcontrols.menu.current_controller_guid", MidnightControlsConfig.getController().getGuid()), this.textArea.getX() + this.textArea.getWidth() / 2, this.height - 21, 0xFFFFFF); + } } diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java index 6ed6a9e..d817ada 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/gui/MidnightControlsSettingsScreen.java @@ -161,7 +161,9 @@ public class MidnightControlsSettingsScreen extends SpruceScreen { private static int searchNextAvailableController(int newId, boolean allowNone) { if ((allowNone && newId == -1) || newId == 0) return newId; - boolean connected = Controller.byId(newId).isConnected(); + Controller candidate = Controller.byId(newId); + boolean connected = candidate.isConnected(); + if (MidnightControlsConfig.excludedControllers.stream().anyMatch(exclusion -> candidate.getName().matches(exclusion))) connected = false; if (!connected) { newId++; } diff --git a/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/gui/TouchscreenOverlay.java b/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/gui/TouchscreenOverlay.java index 7224bf1..2d04031 100644 --- a/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/gui/TouchscreenOverlay.java +++ b/common/src/main/java/eu/midnightdust/midnightcontrols/client/touch/gui/TouchscreenOverlay.java @@ -11,6 +11,14 @@ package eu.midnightdust.midnightcontrols.client.touch.gui; import eu.midnightdust.midnightcontrols.client.touch.TouchInput; import eu.midnightdust.midnightcontrols.client.util.storage.AxisStorage; +import net.minecraft.client.gui.screen.ChatScreen; +import net.minecraft.client.gui.screen.GameMenuScreen; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.item.ArmorItem; +import net.minecraft.util.Arm; +import net.minecraft.util.Hand; +import net.minecraft.util.Identifier; +import net.minecraft.util.UseAction; import org.thinkingstudio.obsidianui.Position; import org.thinkingstudio.obsidianui.widget.SpruceButtonWidget; import eu.midnightdust.lib.util.PlatformFunctions; @@ -24,17 +32,14 @@ import eu.midnightdust.midnightcontrols.client.controller.InputManager; import eu.midnightdust.midnightcontrols.client.touch.TouchUtils; import eu.midnightdust.midnightcontrols.client.util.KeyBindingAccessor; import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.*; import net.minecraft.client.gui.screen.ingame.InventoryScreen; import net.minecraft.client.gui.widget.TextIconButtonWidget; import net.minecraft.client.option.KeyBinding; import net.minecraft.client.texture.MissingSprite; import net.minecraft.client.texture.Sprite; import net.minecraft.client.util.InputUtil; -import net.minecraft.item.*; import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket; import net.minecraft.text.Text; -import net.minecraft.util.*; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import org.lwjgl.glfw.GLFW; diff --git a/common/src/main/resources/assets/midnightcontrols/lang/en_us.json b/common/src/main/resources/assets/midnightcontrols/lang/en_us.json index d1fb7d6..091b58a 100644 --- a/common/src/main/resources/assets/midnightcontrols/lang/en_us.json +++ b/common/src/main/resources/assets/midnightcontrols/lang/en_us.json @@ -145,6 +145,8 @@ "midnightcontrols.menu.controller_type.tooltip": "The controller type you're using (needed to display the correct buttons)", "midnightcontrols.menu.controls_mode": "Mode", "midnightcontrols.menu.controls_mode.tooltip": "The controls mode.", + "midnightcontrols.menu.copy_controller_guid": "Copy GUID", + "midnightcontrols.menu.current_controller_guid": "Current controller's GUID: %s", "midnightcontrols.menu.double_tap_to_sprint": "Double-Tap to Sprint", "midnightcontrols.menu.double_tap_to_sprint.tooltip": "Toggles whether the Walk Forwards key makes the player sprint when double-tapped quickly", "midnightcontrols.menu.fast_block_placing": "Fast Block Placing",