1
0
forked from Clones/Controlify

fix errors being suppressed on initialise

This commit is contained in:
isXander
2023-04-14 13:36:00 +01:00
parent 95e1ce2385
commit 6092c896fe
2 changed files with 23 additions and 17 deletions

View File

@ -84,24 +84,20 @@ public class Controlify implements ControlifyApi {
// find already connected controllers // find already connected controllers
for (int jid = 0; jid <= GLFW.GLFW_JOYSTICK_LAST; jid++) { for (int jid = 0; jid <= GLFW.GLFW_JOYSTICK_LAST; jid++) {
if (GLFW.glfwJoystickPresent(jid)) { if (GLFW.glfwJoystickPresent(jid)) {
try { var controllerOpt = Controller.createOrGet(jid, controllerHIDService.fetchType());
var controllerOpt = Controller.createOrGet(jid, controllerHIDService.fetchType()); if (controllerOpt.isEmpty()) continue;
if (controllerOpt.isEmpty()) continue; var controller = controllerOpt.get();
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())) if (config().currentControllerUid().equals(controller.uid()))
setCurrentController(controller); setCurrentController(controller);
if (controller.config().allowVibrations && !config().globalSettings().loadVibrationNatives) { if (controller.config().allowVibrations && !config().globalSettings().loadVibrationNatives) {
controller.config().allowVibrations = false; controller.config().allowVibrations = false;
config().setDirty(); config().setDirty();
}
} catch (Exception e) {
LOGGER.error("Failed to initialize controller with jid " + jid, e);
} }
} }
} }

View File

@ -13,6 +13,7 @@ import net.minecraft.server.packs.resources.ReloadInstance;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; 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.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@ -20,18 +21,27 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(Minecraft.class) @Mixin(Minecraft.class)
public abstract class MinecraftMixin { public abstract class MinecraftMixin {
@Shadow public abstract void setScreen(@Nullable Screen screen); @Shadow public abstract void setScreen(@Nullable Screen screen);
@Shadow public abstract float getDeltaFrameTime(); @Shadow public abstract float getDeltaFrameTime();
@Shadow public abstract ToastComponent getToasts(); @Shadow public abstract ToastComponent getToasts();
@Unique private boolean initNextTick = false;
@ModifyExpressionValue(method = "<init>", 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;")) @ModifyExpressionValue(method = "<init>", 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) { private ReloadInstance onInputInitialized(ReloadInstance resourceReload) {
// Controllers need to be initialized extremely late due to the data-driven nature of controllers. // 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; 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 = "<init>", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/KeyboardHandler;setup(J)V", shift = At.Shift.AFTER)) @Inject(method = "<init>", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/KeyboardHandler;setup(J)V", shift = At.Shift.AFTER))
private void onInputInitialized(CallbackInfo ci) { private void onInputInitialized(CallbackInfo ci) {
Controlify.instance().preInitialiseControlify(); Controlify.instance().preInitialiseControlify();