isXander / Controlify

Another controller mod - for fabric!
https://www.isxander.dev/mods/controlify
GNU Lesser General Public License v3.0
119 stars 22 forks source link

[Bug] Crash: YACL OptionListWidget cannot be cast to Minecraft EntryListWidget.Entry #348

Open JetbladeDevsStuff opened 2 weeks ago

JetbladeDevsStuff commented 2 weeks ago

Current Behaviour

NOT reproducible on Minecraft 1.20.6, Controlify 2.0.0-beta.12+1.20.6-fabric, YACL 3.5.0+1.20.6-fabric. IS reproducibile on Minecraft 1.21, Controlify 2.0.0-beta.12+1.21-fabric, YACL 3.5.0+1.21-fabric.

Environment (shouldn't matter): macOS aarch64, OpenJDK 21.0.3, Prism Launcher 8.3, DualSense Controller.

Expected Behaviour

The game correctly selects the next tab. Note that the game works as expected if clicking on the tab. This crash also occurs with any YACL EntryListWidgetExt(?), such as the Controlify Global Settings, even though it does not have any tabs. The crash does NOT occur with Vanilla EntryListWidgets, such as the world generation menu.

Screenshots

No response

Reproduction Steps

Steps to reproduce from fresh install (Prism Launcher instance):

  1. Download libSDL
  2. Complete calibration
  3. Done
  4. Continue at Narrator prompt
  5. With mouse or controller: Options > Controls... > Controller Settings... > (any controller) Settings
  6. With controller: press either bumper to select next / prev tab
  7. Crash

Logs

---- Minecraft Crash Report ----
// I let you down. Sorry :(

Time: 2024-06-14 17:56:35
Description: Ticking current controller

java.lang.ClassCastException: class dev.isxander.yacl3.gui.OptionListWidget cannot be cast to class net.minecraft.client.gui.widget.EntryListWidget$Entry (dev.isxander.yacl3.gui.OptionListWidget and net.minecraft.client.gui.widget.EntryListWidget$Entry are in unnamed module of loader net.fabricmc.loader.impl.launch.knot.KnotClassLoader @2096442d)
    at MC//net.minecraft.client.gui.widget.EntryListWidget.getFocused(EntryListWidget.java:86)
    at MC//net.minecraft.client.gui.widget.ElementListWidget.setFocused(ElementListWidget.java:78)
    at dev.isxander.controlify.compatibility.yacl.screenop.YACLScreenProcessor.onTabChanged(YACLScreenProcessor.java:44)
    at dev.isxander.controlify.screenop.ScreenProcessor.lambda$handleTabNavigation$3(ScreenProcessor.java:229)
    at java.base@21.0.3/java.util.Optional.ifPresent(Optional.java:178)
    at dev.isxander.controlify.screenop.ScreenProcessor.handleTabNavigation(ScreenProcessor.java:219)
    at dev.isxander.controlify.screenop.ScreenProcessor.onControllerUpdate(ScreenProcessor.java:57)
    at dev.isxander.controlify.Controlify.tickController(Controlify.java:564)
    at dev.isxander.controlify.Controlify.lambda$tick$41(Controlify.java:513)
    at dev.isxander.controlify.utils.ControllerUtils.wrapControllerError(ControllerUtils.java:28)
    at dev.isxander.controlify.Controlify.lambda$tick$42(Controlify.java:512)
    at java.base@21.0.3/java.util.Optional.ifPresent(Optional.java:178)
    at dev.isxander.controlify.Controlify.tick(Controlify.java:511)
    at net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents.lambda$static$0(ClientTickEvents.java:34)
    at MC//net.minecraft.client.MinecraftClient.handler$zik000$fabric-lifecycle-events-v1$onStartTick(MinecraftClient.java:7178)
    at MC//net.minecraft.client.MinecraftClient.tick(MinecraftClient.java)
    at MC//net.minecraft.client.MinecraftClient.render(MinecraftClient.java:1246)
    at MC//net.minecraft.client.MinecraftClient.run(MinecraftClient.java:882)
    at net.minecraft.client.main.Main.main(Main.java:256)
    at app//net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:470)
    at app//net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74)
    at app//net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
    at app//org.prismlauncher.launcher.impl.StandardLauncher.launch(StandardLauncher.java:100)
    at app//org.prismlauncher.EntryPoint.listen(EntryPoint.java:129)
    at app//org.prismlauncher.EntryPoint.main(EntryPoint.java:70)

A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Thread: Render thread
Stacktrace:
    at MC//net.minecraft.client.gui.widget.EntryListWidget.getFocused(EntryListWidget.java:86)
    at MC//net.minecraft.client.gui.widget.ElementListWidget.setFocused(ElementListWidget.java:78)
    at dev.isxander.controlify.compatibility.yacl.screenop.YACLScreenProcessor.onTabChanged(YACLScreenProcessor.java:44)
    at dev.isxander.controlify.screenop.ScreenProcessor.lambda$handleTabNavigation$3(ScreenProcessor.java:229)
    at java.base@21.0.3/java.util.Optional.ifPresent(Optional.java:178)
    at dev.isxander.controlify.screenop.ScreenProcessor.handleTabNavigation(ScreenProcessor.java:219)
    at dev.isxander.controlify.screenop.ScreenProcessor.onControllerUpdate(ScreenProcessor.java:57)
    at dev.isxander.controlify.Controlify.tickController(Controlify.java:564)
    at dev.isxander.controlify.Controlify.lambda$tick$41(Controlify.java:513)
    at dev.isxander.controlify.utils.ControllerUtils.wrapControllerError(ControllerUtils.java:28)
    at dev.isxander.controlify.Controlify.lambda$tick$42(Controlify.java:512)
    at java.base@21.0.3/java.util.Optional.ifPresent(Optional.java:178)
    at dev.isxander.controlify.Controlify.tick(Controlify.java:511)
    at net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents.lambda$static$0(ClientTickEvents.java:34)
    at MC//net.minecraft.client.MinecraftClient.handler$zik000$fabric-lifecycle-events-v1$onStartTick(MinecraftClient.java:7178)

-- Affected controller --
Details:
    Controller name: DualSense Controller
    Controller identification: DualSense Controller
    Controller type: dev.isxander.controlify.controller.ControllerEntity
Stacktrace:
    at dev.isxander.controlify.utils.ControllerUtils.wrapControllerError(ControllerUtils.java:28)
    at dev.isxander.controlify.Controlify.lambda$tick$42(Controlify.java:512)
    at java.base@21.0.3/java.util.Optional.ifPresent(Optional.java:178)
    at dev.isxander.controlify.Controlify.tick(Controlify.java:511)
    at net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents.lambda$static$0(ClientTickEvents.java:34)
    at MC//net.minecraft.client.MinecraftClient.handler$zik000$fabric-lifecycle-events-v1$onStartTick(MinecraftClient.java:7178)
    at MC//net.minecraft.client.MinecraftClient.tick(MinecraftClient.java)
    at MC//net.minecraft.client.MinecraftClient.render(MinecraftClient.java:1246)
    at MC//net.minecraft.client.MinecraftClient.run(MinecraftClient.java:882)
    at net.minecraft.client.main.Main.main(Main.java:256)
    at app//net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:470)
    at app//net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74)
    at app//net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
    at app//org.prismlauncher.launcher.impl.StandardLauncher.launch(StandardLauncher.java:100)
    at app//org.prismlauncher.EntryPoint.listen(EntryPoint.java:129)
    at app//org.prismlauncher.EntryPoint.main(EntryPoint.java:70)

-- Uptime --
Details:
    JVM uptime: 44.172s
    Wall uptime: 38.204s
    High-res time: 37.581s
    Client ticks: 720 ticks / 36.000s
Stacktrace:
    at MC//net.minecraft.client.MinecraftClient.addDetailsToCrashReport(MinecraftClient.java:2501)
    at MC//net.minecraft.client.MinecraftClient.printCrashReport(MinecraftClient.java:949)
    at MC//net.minecraft.client.MinecraftClient.run(MinecraftClient.java:902)
    at net.minecraft.client.main.Main.main(Main.java:256)
    at app//net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:470)
    at app//net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:74)
    at app//net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23)
    at app//org.prismlauncher.launcher.impl.StandardLauncher.launch(StandardLauncher.java:100)
    at app//org.prismlauncher.EntryPoint.listen(EntryPoint.java:129)
    at app//org.prismlauncher.EntryPoint.main(EntryPoint.java:70)

-- Last reload --
Details:
    Reload number: 1
    Reload reason: initial
    Finished: Yes
    Packs: 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-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, stackdeobfuscator, yet_another_config_lib_v3

-- System Details --
Details:
    Minecraft Version: 1.21
    Minecraft Version ID: 1.21
    Operating System: Mac OS X (aarch64) version 14.0
    Java Version: 21.0.3, Homebrew
    Java VM Version: OpenJDK 64-Bit Server VM (mixed mode, sharing), Homebrew
    Memory: 277590576 bytes (264 MiB) / 922746880 bytes (880 MiB) up to 4294967296 bytes (4096 MiB)
    CPUs: 8
    Processor Vendor: Apple Inc.
    Processor Name: Apple M2
    Identifier: Apple Inc. Family 0xda33d83d Model 0 Stepping 0
    Microarchitecture: ARM64 SoC: Avalanche + Blizzard
    Frequency (GHz): 3.50
    Number of physical packages: 1
    Number of physical CPUs: 8
    Number of logical CPUs: 8
    Graphics card #0 name: Apple M2
    Graphics card #0 vendor: Apple (0x106b)
    Graphics card #0 VRAM (MiB): 0.00
    Graphics card #0 deviceId: unknown
    Graphics card #0 versionInfo: unknown
    Memory slot #0 capacity (MiB): 0.00
    Memory slot #0 clockSpeed (GHz): 0.00
    Memory slot #0 type: unknown
    Virtual memory max (MiB): 20480.00
    Virtual memory used (MiB): 16267.47
    Swap memory total (MiB): 4096.00
    Swap memory used (MiB): 3601.13
    Space in storage for jna.tmpdir (MiB): <path not set>
    Space in storage for org.lwjgl.system.SharedLibraryExtractPath (MiB): <path not set>
    Space in storage for io.netty.native.workdir (MiB): <path not set>
    Space in storage for java.io.tmpdir (MiB): available: 19539.98, total: 471482.09
    Space in storage for workdir (MiB): available: 19539.98, total: 471482.09
    JVM Flags: 2 total; -Xms512m -Xmx4096m
    Fabric Mods: 
        controlify: Controlify 2.0.0-beta.12+1.21-fabric
            dev_isxander_libsdl4j: libsdl4j 3.6896c4c-37
            org_hid4java_hid4java: hid4java 0.7.0
            org_quiltmc_parsers_gson: gson 0.3.0
            org_quiltmc_parsers_json: json 0.3.0
        fabric-api: Fabric API 0.100.1+1.21
            fabric-api-base: Fabric API Base 0.4.42+6573ed8c90
            fabric-api-lookup-api-v1: Fabric API Lookup API (v1) 1.6.65+b559734490
            fabric-biome-api-v1: Fabric Biome API (v1) 13.0.28+6fc22b9990
            fabric-block-api-v1: Fabric Block API (v1) 1.0.22+0af3f5a790
            fabric-block-view-api-v2: Fabric BlockView API (v2) 1.0.10+6573ed8c90
            fabric-blockrenderlayer-v1: Fabric BlockRenderLayer Registration (v1) 1.1.52+0af3f5a790
            fabric-client-tags-api-v1: Fabric Client Tags 1.1.15+6573ed8c90
            fabric-command-api-v1: Fabric Command API (v1) 1.2.48+f71b366f90
            fabric-command-api-v2: Fabric Command API (v2) 2.2.27+6a6dfa1990
            fabric-commands-v0: Fabric Commands (v0) 0.2.65+df3654b390
            fabric-content-registries-v0: Fabric Content Registries (v0) 8.0.11+b559734490
            fabric-convention-tags-v1: Fabric Convention Tags 2.0.12+7f945d5b90
            fabric-convention-tags-v2: Fabric Convention Tags (v2) 2.2.1+d153f34490
            fabric-crash-report-info-v1: Fabric Crash Report Info (v1) 0.2.29+0af3f5a790
            fabric-data-attachment-api-v1: Fabric Data Attachment API (v1) 1.1.22+6a6dfa1990
            fabric-data-generation-api-v1: Fabric Data Generation API (v1) 20.2.6+16c4ae2590
            fabric-dimensions-v1: Fabric Dimensions API (v1) 4.0.0+6fc22b9990
            fabric-entity-events-v1: Fabric Entity Events (v1) 1.6.12+6fc22b9990
            fabric-events-interaction-v0: Fabric Events Interaction (v0) 0.7.10+e633f88390
            fabric-game-rule-api-v1: Fabric Game Rule API (v1) 1.0.52+6573ed8c90
            fabric-item-api-v1: Fabric Item API (v1) 11.0.0+afdfc92190
            fabric-item-group-api-v1: Fabric Item Group API (v1) 4.1.0+00ab0a6390
            fabric-key-binding-api-v1: Fabric Key Binding API (v1) 1.0.47+0af3f5a790
            fabric-keybindings-v0: Fabric Key Bindings (v0) 0.2.45+df3654b390
            fabric-lifecycle-events-v1: Fabric Lifecycle Events (v1) 2.3.9+98a7dbbb90
            fabric-loot-api-v2: Fabric Loot API (v2) 3.0.9+6573ed8c90
            fabric-message-api-v1: Fabric Message API (v1) 6.0.13+6573ed8c90
            fabric-model-loading-api-v1: Fabric Model Loading API (v1) 2.0.0+fe474d6b90
            fabric-networking-api-v1: Fabric Networking API (v1) 4.1.0+686dcdce90
            fabric-object-builder-api-v1: Fabric Object Builder API (v1) 15.1.10+d132107690
            fabric-particles-v1: Fabric Particles (v1) 4.0.2+6573ed8c90
            fabric-recipe-api-v1: Fabric Recipe API (v1) 5.0.8+6573ed8c90
            fabric-registry-sync-v0: Fabric Registry Sync (v0) 5.0.21+b9828ba390
            fabric-renderer-api-v1: Fabric Renderer API (v1) 3.2.16+fe474d6b90
            fabric-renderer-indigo: Fabric Renderer - Indigo 1.6.3+cc9f121a90
            fabric-renderer-registries-v1: Fabric Renderer Registries (v1) 3.2.66+df3654b390
            fabric-rendering-data-attachment-v1: Fabric Rendering Data Attachment (v1) 0.3.48+73761d2e90
            fabric-rendering-fluids-v1: Fabric Rendering Fluids (v1) 3.1.6+b559734490
            fabric-rendering-v0: Fabric Rendering (v0) 1.1.69+df3654b390
            fabric-rendering-v1: Fabric Rendering (v1) 5.0.3+d132107690
            fabric-resource-conditions-api-v1: Fabric Resource Conditions API (v1) 4.2.1+d153f34490
            fabric-resource-loader-v0: Fabric Resource Loader (v0) 1.1.3+b559734490
            fabric-screen-api-v1: Fabric Screen API (v1) 2.0.24+b559734490
            fabric-screen-handler-api-v1: Fabric Screen Handler API (v1) 1.3.78+b559734490
            fabric-sound-api-v1: Fabric Sound API (v1) 1.0.23+6573ed8c90
            fabric-transfer-api-v1: Fabric Transfer API (v1) 5.1.12+b559734490
            fabric-transitive-access-wideners-v1: Fabric Transitive Access Wideners (v1) 6.0.12+6573ed8c90
        fabricloader: Fabric Loader 0.15.11
            mixinextras: MixinExtras 0.3.5
        java: OpenJDK 64-Bit Server VM 21
        minecraft: Minecraft 1.21
        stackdeobfuscator: StackDeobfuscator 1.4.2+bf1fc22
            dev_booky_common_: common 1.4.2+bf1fc22
            net_fabricmc_mapping-io: mapping-io 0.3.0
        yet_another_config_lib_v3: YetAnotherConfigLib 3.5.0+1.21-fabric
            com_twelvemonkeys_common_common-image: common-image 3.10.0
            com_twelvemonkeys_common_common-io: common-io 3.10.0
            com_twelvemonkeys_common_common-lang: common-lang 3.10.0
            com_twelvemonkeys_imageio_imageio-core: imageio-core 3.10.0
            com_twelvemonkeys_imageio_imageio-metadata: imageio-metadata 3.10.0
            com_twelvemonkeys_imageio_imageio-webp: imageio-webp 3.10.0
    Launched Version: 1.21
    Launcher name: PrismLauncher
    Backend library: LWJGL version 3.3.3-snapshot
    Backend API: Apple M2 GL version 4.1 Metal - 86, Apple
    Window size: 1708x960
    GFLW Platform: cocoa
    GL Caps: Using framebuffer using OpenGL 3.2
    GL debug messages: <disabled>
    Is Modded: Definitely; Client brand changed to 'fabric'
    Universe: 400921fb54442d18
    Type: Client (map_client.txt)
    GPU Warnings: version: Metal
    Graphics mode: fancy
    Render Distance: 12/12 chunks
    Resource Packs: 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-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, stackdeobfuscator, yet_another_config_lib_v3 (incompatible)
    Current Language: en_us
    Locale: en_US
    System encoding: UTF-8
    File encoding: UTF-8
    CPU: 8x Apple M2

Mod Version

2.0.0-beta.12+1.21-fabric

Controller

DualSense Wireless Controller

Bluetooth

Operating System

macOS

ARM

Additional Information

I will attempt to reproduce later on Linux later. While the crash occurs due to a YACL class, I suspect the crash is ultimately the result of how Controlify changes tabs here.

Just to make sure...

31j commented 1 week ago

I will attempt to reproduce later on Linux later. While the crash occurs due to a YACL class, I suspect the crash is ultimately the result of how Controlify changes tabs here.

I've faced the same issue as well on Linux and Windows, it seems that this issue has been reproduced a number of times in the issue tracker but you've likely found the exact culprit. This would explain why the issue extends to other modded menus and not just the controlify one in my experience