Controlify

Controlify

609k Downloads

[Bug] Controller config resets every time I restart Minecraft

leo-210 opened this issue ยท 5 comments

commented

Current Behaviour

I use the T.Flight Hotas 4 joystick. Everything works perfectly (controller detection, mapping the controller and using it), except for saving the controller config.

Every time I restart Minecraft, the controller config cannot be loaded and therefore are reset, so I have to re-map everything, as if I used the mod for the first time.

In the logs, I get this error : Failed to load controller SDL-1 config!

Expected Behaviour

I expect the mod to load the config.

Screenshots

No response

Reproduction Steps

  1. Launch a new Minecraft instance with only necessary mods,
  2. Setup the controller (map it, and change the settings),
  3. Test it in a Minecraft world (it works perfectly),
  4. Close Minecraft in a normal way (with the "Quit Game" button),
  5. Re-launch Minecraft,
  6. Get an error in the logs, and config resets.

Logs

[12:06:25] [main/INFO]: Loading Minecraft 1.21 with Fabric Loader 0.15.11
[12:06:26] [ForkJoinPool-1-worker-10/WARN]: Mod dev_isxander_libsdl4j uses the version 3.6896c4c-38 which isn't compatible with Loader's extended semantic version format (Could not parse version number component '6896c4c'!), SemVer is recommended for reliably evaluating dependencies and prioritizing newer version
[12:06:26] [main/INFO]: Loading 65 mods:
	- controlify 2.0.0-beta.14+1.21-fabric
	   |-- dev_isxander_libsdl4j 3.6896c4c-38
	   |-- org_hid4java_hid4java 0.7.0
	   |-- org_quiltmc_parsers_gson 0.3.0
	   \-- org_quiltmc_parsers_json 0.3.0
	- fabric-api 0.100.7+1.21
	   |-- fabric-api-base 0.4.42+6573ed8cd1
	   |-- fabric-api-lookup-api-v1 1.6.67+b5597344d1
	   |-- fabric-biome-api-v1 13.0.29+5bd9f1bcd1
	   |-- fabric-block-api-v1 1.0.22+0af3f5a7d1
	   |-- fabric-block-view-api-v2 1.0.10+6573ed8cd1
	   |-- fabric-blockrenderlayer-v1 1.1.52+0af3f5a7d1
	   |-- fabric-client-tags-api-v1 1.1.15+6573ed8cd1
	   |-- fabric-command-api-v1 1.2.49+f71b366fd1
	   |-- fabric-command-api-v2 2.2.28+6ced4dd9d1
	   |-- fabric-commands-v0 0.2.66+df3654b3d1
	   |-- fabric-content-registries-v0 8.0.15+b5597344d1
	   |-- fabric-convention-tags-v1 2.0.18+7f945d5bd1
	   |-- fabric-convention-tags-v2 2.4.2+c111832ad1
	   |-- fabric-crash-report-info-v1 0.2.29+0af3f5a7d1
	   |-- fabric-data-attachment-api-v1 1.1.25+6a6dfa19d1
	   |-- fabric-data-generation-api-v1 20.2.12+16c4ae25d1
	   |-- fabric-dimensions-v1 4.0.0+6fc22b99d1
	   |-- fabric-entity-events-v1 1.6.12+6fc22b99d1
	   |-- fabric-events-interaction-v0 0.7.10+e633f883d1
	   |-- fabric-game-rule-api-v1 1.0.53+6ced4dd9d1
	   |-- fabric-item-api-v1 11.0.0+afdfc921d1
	   |-- fabric-item-group-api-v1 4.1.3+78017270d1
	   |-- fabric-key-binding-api-v1 1.0.47+0af3f5a7d1
	   |-- fabric-keybindings-v0 0.2.45+df3654b3d1
	   |-- fabric-lifecycle-events-v1 2.3.11+8f3583aed1
	   |-- fabric-loot-api-v2 3.0.13+3f89f5a5d1
	   |-- fabric-loot-api-v3 1.0.1+3f89f5a5d1
	   |-- fabric-message-api-v1 6.0.13+6573ed8cd1
	   |-- fabric-model-loading-api-v1 2.0.0+fe474d6bd1
	   |-- fabric-networking-api-v1 4.2.0+ab7edbacd1
	   |-- fabric-object-builder-api-v1 15.1.13+d1321076d1
	   |-- fabric-particles-v1 4.0.2+6573ed8cd1
	   |-- fabric-recipe-api-v1 5.0.10+65089712d1
	   |-- fabric-registry-sync-v0 5.0.25+5bd9f1bcd1
	   |-- fabric-renderer-api-v1 3.3.0+0ae0b97dd1
	   |-- fabric-renderer-indigo 1.6.5+48fb1586d1
	   |-- fabric-renderer-registries-v1 3.2.68+df3654b3d1
	   |-- fabric-rendering-data-attachment-v1 0.3.48+73761d2ed1
	   |-- fabric-rendering-fluids-v1 3.1.6+b5597344d1
	   |-- fabric-rendering-v0 1.1.71+df3654b3d1
	   |-- fabric-rendering-v1 5.0.5+df16efd0d1
	   |-- fabric-resource-conditions-api-v1 4.2.1+d153f344d1
	   |-- fabric-resource-loader-v0 1.2.0+7e687b32d1
	   |-- fabric-screen-api-v1 2.0.24+b5597344d1
	   |-- fabric-screen-handler-api-v1 1.3.82+b5597344d1
	   |-- fabric-sound-api-v1 1.0.23+6573ed8cd1
	   |-- fabric-transfer-api-v1 5.1.15+3dccd343d1
	   \-- fabric-transitive-access-wideners-v1 6.0.12+6573ed8cd1
	- fabricloader 0.15.11
	   \-- mixinextras 0.3.5
	- java 21
	- minecraft 1.21
	- yet_another_config_lib_v3 3.5.0+1.21-fabric
	   |-- com_twelvemonkeys_common_common-image 3.10.0
	   |-- com_twelvemonkeys_common_common-io 3.10.0
	   |-- com_twelvemonkeys_common_common-lang 3.10.0
	   |-- com_twelvemonkeys_imageio_imageio-core 3.10.0
	   |-- com_twelvemonkeys_imageio_imageio-metadata 3.10.0
	   \-- com_twelvemonkeys_imageio_imageio-webp 3.10.0
[12:06:26] [main/INFO]: SpongePowered MIXIN Subsystem Version=0.8.5 Source=file:/C:/Users/leoko/AppData/Roaming/PrismLauncher/libraries/net/fabricmc/sponge-mixin/0.13.3+mixin.0.8.5/sponge-mixin-0.13.3+mixin.0.8.5.jar Service=Knot/Fabric Env=CLIENT
[12:06:29] [main/INFO]: Compatibility level set to JAVA_17
[12:06:29] [main/WARN]: Error loading class: org/jetbrains/annotations/ApiStatus$Internal (java.lang.ClassNotFoundException: org/jetbrains/annotations/ApiStatus$Internal)
[12:06:30] [main/INFO]: Initializing MixinExtras via com.llamalad7.mixinextras.service.MixinExtrasServiceImpl(version=0.3.5).
[12:06:31] [Datafixer Bootstrap/INFO]: 226 Datafixer optimizations took 452 milliseconds
[12:06:32] [main/WARN]: Failed to add PDH Counter: \Paging File(_Total)\% Usage, Error code: 0xC0000BB8
[12:06:32] [main/WARN]: Failed to add counter for PDH counter: \Paging File(_Total)\% Usage
[12:06:32] [main/WARN]: Disabling further attempts to query Paging File.
[12:06:33] [main/WARN]: COM exception: Invalid Query: SELECT PERCENTUSAGE FROM Win32_PerfRawData_PerfOS_PagingFile
[12:06:38] [Render thread/INFO]: Environment: Environment[sessionHost=https://sessionserver.mojang.com, servicesHost=https://api.minecraftservices.com, name=PROD]
[12:06:38] [Render thread/INFO]: Setting user: Leo_21_
[12:06:39] [Render thread/INFO]: Pre-initializing Controlify...
[12:06:39] [Render thread/INFO]: [Indigo] Registering Indigo renderer!
[12:06:39] [Render thread/INFO]: Deserializing YACLConfig from 'C:\Users\leoko\AppData\Roaming\PrismLauncher\instances\Test  1.21\.minecraft\config\yacl.json5'
[12:06:39] [Render thread/INFO]: Backend library: LWJGL version 3.3.3-snapshot
[12:06:41] [Render thread/INFO]: Reloading ResourceManager: vanilla, fabric, controlify, fabric-api, fabric-api-base, fabric-api-lookup-api-v1, fabric-biome-api-v1, fabric-block-api-v1, fabric-block-view-api-v2, fabric-blockrenderlayer-v1, fabric-client-tags-api-v1, fabric-command-api-v1, fabric-command-api-v2, fabric-commands-v0, fabric-content-registries-v0, fabric-convention-tags-v1, fabric-convention-tags-v2, fabric-crash-report-info-v1, fabric-data-attachment-api-v1, fabric-data-generation-api-v1, fabric-dimensions-v1, fabric-entity-events-v1, fabric-events-interaction-v0, fabric-game-rule-api-v1, fabric-item-api-v1, fabric-item-group-api-v1, fabric-key-binding-api-v1, fabric-keybindings-v0, fabric-lifecycle-events-v1, fabric-loot-api-v2, fabric-loot-api-v3, fabric-message-api-v1, fabric-model-loading-api-v1, fabric-networking-api-v1, fabric-object-builder-api-v1, fabric-particles-v1, fabric-recipe-api-v1, fabric-registry-sync-v0, fabric-renderer-api-v1, fabric-renderer-indigo, fabric-renderer-registries-v1, fabric-rendering-data-attachment-v1, fabric-rendering-fluids-v1, fabric-rendering-v0, fabric-rendering-v1, fabric-resource-conditions-api-v1, fabric-resource-loader-v0, fabric-screen-api-v1, fabric-screen-handler-api-v1, fabric-sound-api-v1, fabric-transfer-api-v1, fabric-transitive-access-wideners-v1, fabricloader, yet_another_config_lib_v3
[12:06:41] [Worker-Main-8/INFO]: Found unifont_all_no_pua-15.1.05.hex, loading
[12:06:41] [Worker-Main-9/INFO]: Found unifont_jp_patch-15.1.05.hex, loading
[12:06:43] [Render thread/WARN]: Missing sound for event: minecraft:item.goat_horn.play
[12:06:43] [Render thread/WARN]: Missing sound for event: minecraft:entity.goat.screaming.horn_break
[12:06:43] [Render thread/INFO]: OpenAL initialized on device OpenAL Soft on Casque (4- Arctis Nova 3)
[12:06:43] [Render thread/INFO]: Sound engine started
[12:06:43] [Render thread/INFO]: Created: 1024x512x4 minecraft:textures/atlas/blocks.png-atlas
[12:06:43] [Render thread/INFO]: Created: 256x256x4 minecraft:textures/atlas/signs.png-atlas
[12:06:43] [Render thread/INFO]: Created: 512x512x4 minecraft:textures/atlas/shield_patterns.png-atlas
[12:06:43] [Render thread/INFO]: Created: 512x512x4 minecraft:textures/atlas/banner_patterns.png-atlas
[12:06:43] [Render thread/INFO]: Created: 1024x1024x4 minecraft:textures/atlas/armor_trims.png-atlas
[12:06:43] [Render thread/INFO]: Created: 128x64x4 minecraft:textures/atlas/decorated_pot.png-atlas
[12:06:43] [Render thread/INFO]: Created: 256x256x4 minecraft:textures/atlas/chest.png-atlas
[12:06:43] [Render thread/INFO]: Created: 512x256x4 minecraft:textures/atlas/shulker_boxes.png-atlas
[12:06:43] [Render thread/INFO]: Created: 512x256x4 minecraft:textures/atlas/beds.png-atlas
[12:06:43] [Render thread/INFO]: Created: 512x256x0 minecraft:textures/atlas/particles.png-atlas
[12:06:43] [Render thread/INFO]: Created: 512x256x0 minecraft:textures/atlas/paintings.png-atlas
[12:06:43] [Render thread/INFO]: Created: 256x128x0 minecraft:textures/atlas/mob_effects.png-atlas
[12:06:43] [Render thread/INFO]: Created: 64x64x0 minecraft:textures/atlas/map_decorations.png-atlas
[12:06:43] [Render thread/INFO]: Created: 1024x512x0 minecraft:textures/atlas/gui.png-atlas
[12:06:43] [Render thread/WARN]: Shader rendertype_entity_translucent_emissive could not find sampler named Sampler2 in the specified shader program.
[12:06:43] [Render thread/INFO]: Successfully loaded image 'controlify:textures/screenshots/reach-around-placement.webp'
[12:06:43] [Render thread/INFO]: Successfully loaded image 'controlify:textures/screenshots/reduce-aim-sensitivity.webp'
[12:06:43] [Render thread/INFO]: Successfully loaded image 'controlify:textures/screenshots/screen-button-guide.webp'
[12:06:43] [Render thread/INFO]: Initializing Controlify...
[12:06:43] [Render thread/INFO]: Loading Controlify config...
[12:06:44] [Render thread/INFO]: Initialised SDL4j 3.6896c4c
[12:06:44] [Render thread/INFO]: Finishing Controlify init...
[12:06:44] [Render thread/INFO]: Successfully loaded 519 gamepad mapping entries!
[12:06:44] [Render thread/INFO]: Using SDL to identify controller type.
[12:06:44] [Render thread/ERROR]: Failed to load controller SDL-1 config!
org.apache.commons.lang3.SerializationException: Failed to deserialize type dev.isxander.controlify.controller.input.InputComponent$Config. Resetting to default.
	at dev.isxander.controlify.controller.impl.ConfigImpl.deserialize(ConfigImpl.java:70) ~[Controlify-2.0.0-beta.14+1.21-fabric.jar:?]
	at dev.isxander.controlify.controller.ControllerEntity.deserializeFromObject(ControllerEntity.java:137) ~[Controlify-2.0.0-beta.14+1.21-fabric.jar:?]
	at dev.isxander.controlify.config.ControlifyConfig.loadControllerConfig(ControlifyConfig.java:200) ~[Controlify-2.0.0-beta.14+1.21-fabric.jar:?]
	at dev.isxander.controlify.controllermanager.AbstractControllerManager.onControllerConnected(AbstractControllerManager.java:82) ~[Controlify-2.0.0-beta.14+1.21-fabric.jar:?]
	at dev.isxander.controlify.controllermanager.SDLControllerManager.lambda$discoverControllers$3(SDLControllerManager.java:112) ~[Controlify-2.0.0-beta.14+1.21-fabric.jar:?]
	at java.base/java.util.Optional.ifPresent(Optional.java:178) ~[?:?]
	at dev.isxander.controlify.controllermanager.SDLControllerManager.discoverControllers(SDLControllerManager.java:112) ~[Controlify-2.0.0-beta.14+1.21-fabric.jar:?]
	at dev.isxander.controlify.Controlify.discoverControllers(Controlify.java:236) ~[Controlify-2.0.0-beta.14+1.21-fabric.jar:?]
	at dev.isxander.controlify.Controlify.lambda$finishControlifyInit$22(Controlify.java:316) ~[Controlify-2.0.0-beta.14+1.21-fabric.jar:?]
	at dev.isxander.controlify.utils.UnhandledCompletableFutures.lambda$run$0(UnhandledCompletableFutures.java:15) ~[Controlify-2.0.0-beta.14+1.21-fabric.jar:?]
	at dev.isxander.controlify.utils.UnhandledCompletableFutures.lambda$supply$1(UnhandledCompletableFutures.java:24) ~[Controlify-2.0.0-beta.14+1.21-fabric.jar:?]
	at net.minecraft.class_1255.method_18859(class_1255.java:162) [client-intermediary.jar:?]
	at net.minecraft.class_4093.method_18859(class_4093.java:23) [client-intermediary.jar:?]
	at net.minecraft.class_1255.method_16075(class_1255.java:136) [client-intermediary.jar:?]
	at net.minecraft.class_1255.method_5383(class_1255.java:121) [client-intermediary.jar:?]
	at net.minecraft.class_310.method_1523(class_310.java:1240) [client-intermediary.jar:?]
	at net.minecraft.class_310.method_1514(class_310.java:882) [client-intermediary.jar:?]
	at net.minecraft.client.main.Main.main(Main.java:256) [client-intermediary.jar:?]
	at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:470) [fabric-loader-0.15.11.jar:?]
	at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74) [fabric-loader-0.15.11.jar:?]
	at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23) [fabric-loader-0.15.11.jar:?]
	at org.prismlauncher.launcher.impl.StandardLauncher.launch(StandardLauncher.java:100) [NewLaunch.jar:?]
	at org.prismlauncher.EntryPoint.listen(EntryPoint.java:129) [NewLaunch.jar:?]
	at org.prismlauncher.EntryPoint.main(EntryPoint.java:70) [NewLaunch.jar:?]
Caused by: java.lang.NullPointerException: Cannot invoke "dev.isxander.controlify.controller.input.mapping.MapType.ordinal()" because the return value of "dev.isxander.controlify.controller.input.mapping.MappingEntryTypeAdapter$InOutRecord.inputType()" is null
	at dev.isxander.controlify.controller.input.mapping.MappingEntryTypeAdapter.deserialize(MappingEntryTypeAdapter.java:15) ~[Controlify-2.0.0-beta.14+1.21-fabric.jar:?]
	at dev.isxander.controlify.controller.input.mapping.MappingEntryTypeAdapter.deserialize(MappingEntryTypeAdapter.java:10) ~[Controlify-2.0.0-beta.14+1.21-fabric.jar:?]
	at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:76) ~[gson-2.10.1.jar:?]
	at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40) ~[gson-2.10.1.jar:?]
	at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:82) ~[gson-2.10.1.jar:?]
	at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61) ~[gson-2.10.1.jar:?]
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.readIntoArray(ReflectiveTypeAdapterFactory.java:201) ~[gson-2.10.1.jar:?]
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$RecordAdapter.readField(ReflectiveTypeAdapterFactory.java:509) ~[gson-2.10.1.jar:?]
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$RecordAdapter.readField(ReflectiveTypeAdapterFactory.java:442) ~[gson-2.10.1.jar:?]
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:393) ~[gson-2.10.1.jar:?]
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.readIntoField(ReflectiveTypeAdapterFactory.java:212) ~[gson-2.10.1.jar:?]
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$FieldReflectionAdapter.readField(ReflectiveTypeAdapterFactory.java:433) ~[gson-2.10.1.jar:?]
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:393) ~[gson-2.10.1.jar:?]
	at com.google.gson.Gson.fromJson(Gson.java:1227) ~[gson-2.10.1.jar:?]
	at com.google.gson.Gson.fromJson(Gson.java:1329) ~[gson-2.10.1.jar:?]
	at com.google.gson.Gson.fromJson(Gson.java:1271) ~[gson-2.10.1.jar:?]
	at dev.isxander.controlify.controller.impl.ConfigImpl.deserialize(ConfigImpl.java:62) ~[Controlify-2.0.0-beta.14+1.21-fabric.jar:?]
	... 23 more
[12:06:44] [Render thread/INFO]: Controller connected: 'T.Flight Hotas 4'#SDL-1-HID[VID=0x044f, PID=0xb67c] (null)
[12:06:44] [Render thread/INFO]: Saving Controlify config...
[12:06:44] [Render thread/INFO]: Using SDL to identify controller type.
[12:06:44] [Render thread/WARN]: Tried to create controller that already is initialised: SDL-1
[12:06:51] [Render thread/INFO]: Successfully sent controller information to 'https://api-controlify.isxander.dev/api/v1/submit'
[12:06:51] [Render thread/INFO]: Saving Controlify config...
[12:08:11] [Render thread/WARN]: Controlify detected current controller to be constantly giving input and has been disabled.
[12:08:11] [Render thread/INFO]: Saving Controlify config...
[12:08:13] [Render thread/INFO]: Stopping!

Note : This is after restarting Minecraft.

Mod Version

2.0.0-beta.14+1.21

Controller

https://shop.thrustmaster.com/fr_fr/t-flight-hotas-4.html

Bluetooth

  • Yes

Operating System

Windows

ARM

  • Yes

Additional Information

I only used these three mods :

  • Controlify 2.0.0-beta.14+1.21
  • Fabric API 0.100.7+1.21
  • YetAnotherConfigLib 3.5.0+1.21

Could be related to #316, but for me it happens at every restart, not just when the game crashes.

Just to make sure...

  • I have made sure I am using the latest version of Controlify for the latest version of Minecraft.
  • I have made sure there are no other issues describing the same problem on the issue tracker.
commented

Ok thanks a lot ! And your mod is awesome !

commented

Just tested it, and it is indeed the issue.

commented

Yes, multiple times.

commented

I assume you used 'I don't have this input' at least once in your mapping?

commented

That seems to be the issue, I haven't tested it well. I will fix this in the next beta!