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,7 +84,6 @@ 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();
@ -100,9 +99,6 @@ public class Controlify implements ControlifyApi {
controller.config().allowVibrations = false;
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.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 = "<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) {
// 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 = "<init>", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/KeyboardHandler;setup(J)V", shift = At.Shift.AFTER))
private void onInputInitialized(CallbackInfo ci) {
Controlify.instance().preInitialiseControlify();