Easy copying of controller GUID

- Added a button to copy the current controller GUID (helps with GUID mismatches between MC and mapping programs)
- Added an advanced option to exclude controllers from the GUI by regular expressions (defaults to Touchpad, Keyboard, Pen and Finger)
This commit is contained in:
Martin Prokoph
2024-07-21 17:23:14 +02:00
parent 202ff888be
commit 9bcc63fcef
6 changed files with 26 additions and 9 deletions

View File

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

View File

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