forked from Clones/Controlify
fix errors being suppressed on initialise
This commit is contained in:
@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
|
Reference in New Issue
Block a user