From 6092c896fe33e6e5f49762f5836ba4b4a83c546d Mon Sep 17 00:00:00 2001 From: isXander Date: Fri, 14 Apr 2023 13:36:00 +0100 Subject: [PATCH] fix errors being suppressed on initialise --- .../dev/isxander/controlify/Controlify.java | 24 ++++++++----------- .../mixins/core/MinecraftMixin.java | 16 ++++++++++--- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/main/java/dev/isxander/controlify/Controlify.java b/src/main/java/dev/isxander/controlify/Controlify.java index 41f85d4..838696f 100644 --- a/src/main/java/dev/isxander/controlify/Controlify.java +++ b/src/main/java/dev/isxander/controlify/Controlify.java @@ -84,24 +84,20 @@ public class Controlify implements ControlifyApi { // find already connected controllers for (int jid = 0; jid <= GLFW.GLFW_JOYSTICK_LAST; jid++) { if (GLFW.glfwJoystickPresent(jid)) { - try { - var controllerOpt = Controller.createOrGet(jid, controllerHIDService.fetchType()); - if (controllerOpt.isEmpty()) continue; - var controller = controllerOpt.get(); + var controllerOpt = Controller.createOrGet(jid, controllerHIDService.fetchType()); + if (controllerOpt.isEmpty()) continue; + var controller = controllerOpt.get(); - LOGGER.info("Controller found: " + controller.name()); + LOGGER.info("Controller found: " + controller.name()); - config().loadOrCreateControllerData(controller); + config().loadOrCreateControllerData(controller); - if (config().currentControllerUid().equals(controller.uid())) - setCurrentController(controller); + if (config().currentControllerUid().equals(controller.uid())) + setCurrentController(controller); - if (controller.config().allowVibrations && !config().globalSettings().loadVibrationNatives) { - controller.config().allowVibrations = false; - config().setDirty(); - } - } catch (Exception e) { - LOGGER.error("Failed to initialize controller with jid " + jid, e); + if (controller.config().allowVibrations && !config().globalSettings().loadVibrationNatives) { + controller.config().allowVibrations = false; + config().setDirty(); } } } diff --git a/src/main/java/dev/isxander/controlify/mixins/core/MinecraftMixin.java b/src/main/java/dev/isxander/controlify/mixins/core/MinecraftMixin.java index 2cd6b58..489fb88 100644 --- a/src/main/java/dev/isxander/controlify/mixins/core/MinecraftMixin.java +++ b/src/main/java/dev/isxander/controlify/mixins/core/MinecraftMixin.java @@ -13,6 +13,7 @@ import net.minecraft.server.packs.resources.ReloadInstance; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -20,18 +21,27 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(Minecraft.class) public abstract class MinecraftMixin { @Shadow public abstract void setScreen(@Nullable Screen screen); - @Shadow public abstract float getDeltaFrameTime(); - @Shadow public abstract ToastComponent getToasts(); + @Unique private boolean initNextTick = false; + @ModifyExpressionValue(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/packs/resources/ReloadableResourceManager;createReload(Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;Ljava/util/concurrent/CompletableFuture;Ljava/util/List;)Lnet/minecraft/server/packs/resources/ReloadInstance;")) private ReloadInstance onInputInitialized(ReloadInstance resourceReload) { // Controllers need to be initialized extremely late due to the data-driven nature of controllers. - resourceReload.done().thenRun(() -> Controlify.instance().initializeControlify()); + // We need to bypass thenRun because any runnable is ran inside of a `minecraft.execute()`, which suppresses exceptions + resourceReload.done().thenRun(() -> initNextTick = true); return resourceReload; } + @Inject(method = "runTick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;runAllTasks()V")) + private void initControlifyNow(boolean tick, CallbackInfo ci) { + if (initNextTick) { + Controlify.instance().initializeControlify(); + initNextTick = false; + } + } + @Inject(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/KeyboardHandler;setup(J)V", shift = At.Shift.AFTER)) private void onInputInitialized(CallbackInfo ci) { Controlify.instance().preInitialiseControlify();