Skip to content

[Bug] Modded radial icons get missing fabric texture instead of neoforge #700

@EchoEllet

Description

@EchoEllet

Current Behaviour

This used to be a Fabric-only mod, but it was recently ported to NeoForge. However, this line tries to access a Fabric-only asset, which could potentially cause runtime issues — as shown in the image and the runtime exception.

Expected Behaviour

No runtime exception or broken icon occurs. Since the runtime exception could prevent other parts of the mod from loading.

Screenshots

Image

Image

Reproduction Steps

  1. Create a new NeoForge instance — the Minecraft and mod loader versions are irrelevant.
  2. Install Controlify v2.4.2 using the branch from PR Fix crash in neoforge <1.21.9 with AbstractWidgetMixin #689 (otherwise, the game will fail to load).
  3. Either register a custom input bind that does not have an existing radial icon, or install a mod that registers custom vanilla Minecraft key binds, which will cause Controlify to fall back to the Fabric icon.
  4. Add the action from the previous step to the radial menu in the mod controller configuration.
  5. Open the radial menu — a runtime crash will occur, and the icon will appear broken.

Logs

Runtime exception

[13:22:38] [Render thread/WARN] [minecraft/TextureManager]: Failed to load texture: fabric-resource-loader-v0:icon.png
java.io.FileNotFoundException: fabric-resource-loader-v0:icon.png
	at TRANSFORMER/[email protected]/net.minecraft.server.packs.resources.ResourceProvider.lambda$getResourceOrThrow$1(ResourceProvider.java:18) ~[neoforge-21.1.197.jar%23177!/:?] {re:classloading}
	at java.base/java.util.Optional.orElseThrow(Optional.java:403) ~[?:?] {re:mixin}
	at TRANSFORMER/[email protected]/net.minecraft.server.packs.resources.ResourceProvider.getResourceOrThrow(ResourceProvider.java:18) ~[neoforge-21.1.197.jar%23177!/:?] {re:classloading}
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.texture.SimpleTexture$TextureImage.load(SimpleTexture.java:83) ~[neoforge-21.1.197.jar%23177!/:?] {re:classloading,pl:runtimedistcleaner:A}
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.texture.SimpleTexture.getTextureImage(SimpleTexture.java:57) ~[neoforge-21.1.197.jar%23177!/:?] {re:classloading,pl:runtimedistcleaner:A}
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.texture.SimpleTexture.load(SimpleTexture.java:30) ~[neoforge-21.1.197.jar%23177!/:?] {re:classloading,pl:runtimedistcleaner:A}
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.texture.TextureManager.loadTexture(TextureManager.java:92) ~[neoforge-21.1.197.jar%23177!/:?] {re:classloading,pl:runtimedistcleaner:A,re:mixin,pl:runtimedistcleaner:A}
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.texture.TextureManager.register(TextureManager.java:63) ~[neoforge-21.1.197.jar%23177!/:?] {re:classloading,pl:runtimedistcleaner:A,re:mixin,pl:runtimedistcleaner:A}
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.texture.TextureManager.getTexture(TextureManager.java:113) ~[neoforge-21.1.197.jar%23177!/:?] {re:classloading,pl:runtimedistcleaner:A,re:mixin,pl:runtimedistcleaner:A}
	at TRANSFORMER/[email protected]/com.mojang.blaze3d.systems.RenderSystem._setShaderTexture(RenderSystem.java:725) ~[neoforge-21.1.197.jar%23177!/:?] {re:classloading,pl:runtimedistcleaner:A}
	at TRANSFORMER/[email protected]/com.mojang.blaze3d.systems.RenderSystem.setShaderTexture(RenderSystem.java:718) ~[neoforge-21.1.197.jar%23177!/:?] {re:classloading,pl:runtimedistcleaner:A}
	at TRANSFORMER/[email protected]/net.minecraft.client.gui.GuiGraphics.innerBlit(GuiGraphics.java:965) ~[neoforge-21.1.197.jar%23177!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:A,pl:runtimedistcleaner:A}
	at TRANSFORMER/[email protected]/net.minecraft.client.gui.GuiGraphics.blit(GuiGraphics.java:923) ~[neoforge-21.1.197.jar%23177!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:A,pl:runtimedistcleaner:A}
	at TRANSFORMER/[email protected]/net.minecraft.client.gui.GuiGraphics.blit(GuiGraphics.java:865) ~[neoforge-21.1.197.jar%23177!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:A,pl:runtimedistcleaner:A}
	at TRANSFORMER/[email protected]/net.minecraft.client.gui.GuiGraphics.blit(GuiGraphics.java:888) ~[neoforge-21.1.197.jar%23177!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:A,pl:runtimedistcleaner:A}
	at TRANSFORMER/[email protected]+1.21.1-neoforge/dev.isxander.controlify.utils.render.Blit.tex(Blit.java:60) ~[controlify-2.4.2-1.21.1-neoforge.jar%23181!/:?] {re:classloading}
	at TRANSFORMER/[email protected]+1.21.1-neoforge/dev.isxander.controlify.bindings.RadialIcons.lambda$registerIcons$1(RadialIcons.java:110) ~[controlify-2.4.2-1.21.1-neoforge.jar%23181!/:?] {re:classloading}
	at TRANSFORMER/[email protected]+1.21.1-neoforge/dev.isxander.controlify.gui.screen.RadialMenuScreen$RadialButton.render(RadialMenuScreen.java:291) ~[controlify-2.4.2-1.21.1-neoforge.jar%23181!/:?] {re:classloading}
	at TRANSFORMER/[email protected]/net.minecraft.client.gui.screens.Screen.render(Screen.java:136) ~[neoforge-21.1.197.jar%23177!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:computing_frames,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:controlify.mixins.json:feature.screenop.ScreenAccessor from mod controlify,pl:mixin:APP:controlify.mixins.json:feature.screenop.ScreenMixin from mod controlify,pl:mixin:APP:controlify.mixins.json:feature.virtualmouse.snapping.ScreenMixin from mod controlify,pl:mixin:A,pl:runtimedistcleaner:A}
	at TRANSFORMER/[email protected]+1.21.1-neoforge/dev.isxander.controlify.gui.screen.RadialMenuScreen.render(RadialMenuScreen.java:191) ~[controlify-2.4.2-1.21.1-neoforge.jar%23181!/:?] {re:classloading}
	at TRANSFORMER/[email protected]/net.minecraft.client.gui.screens.Screen.renderWithTooltip(Screen.java:112) ~[neoforge-21.1.197.jar%23177!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:computing_frames,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:controlify.mixins.json:feature.screenop.ScreenAccessor from mod controlify,pl:mixin:APP:controlify.mixins.json:feature.screenop.ScreenMixin from mod controlify,pl:mixin:APP:controlify.mixins.json:feature.virtualmouse.snapping.ScreenMixin from mod controlify,pl:mixin:A,pl:runtimedistcleaner:A}
	at TRANSFORMER/[email protected]/net.neoforged.neoforge.client.ClientHooks.drawScreenInternal(ClientHooks.java:429) ~[neoforge-21.1.197.jar%23178!/:?] {re:classloading}
	at TRANSFORMER/[email protected]/net.neoforged.neoforge.client.ClientHooks.drawScreen(ClientHooks.java:423) ~[neoforge-21.1.197.jar%23178!/:?] {re:classloading}
	at TRANSFORMER/[email protected]/net.minecraft.client.renderer.GameRenderer.render(GameRenderer.java:1098) ~[neoforge-21.1.197.jar%23177!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:controlify.mixins.json:feature.oofinput.GameRendererMixin from mod controlify,pl:mixin:APP:controlify.mixins.json:feature.reacharound.GameRendererMixin from mod controlify,pl:mixin:A,pl:runtimedistcleaner:A}
	at TRANSFORMER/[email protected]/net.minecraft.client.Minecraft.runTick(Minecraft.java:1201) ~[neoforge-21.1.197.jar%23177!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:A,pl:runtimedistcleaner:A}
	at TRANSFORMER/[email protected]/net.minecraft.client.Minecraft.run(Minecraft.java:813) ~[neoforge-21.1.197.jar%23177!/:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:A,pl:runtimedistcleaner:A}
	at TRANSFORMER/[email protected]/net.minecraft.client.main.Main.main(Main.java:230) ~[neoforge-21.1.197.jar%23177!/:?] {re:classloading,pl:runtimedistcleaner:A}
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?] {}
	at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[?:?] {}
	at MC-BOOTSTRAP/[email protected]/net.neoforged.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:136) ~[loader-4.0.41.jar%23134!/:4.0] {}
	at MC-BOOTSTRAP/[email protected]/net.neoforged.fml.loading.targets.CommonLaunchHandler.clientService(CommonLaunchHandler.java:124) ~[loader-4.0.41.jar%23134!/:4.0] {}
	at MC-BOOTSTRAP/[email protected]/net.neoforged.fml.loading.targets.NeoForgeClientDevLaunchHandler.runService(NeoForgeClientDevLaunchHandler.java:23) ~[loader-4.0.41.jar%23134!/:4.0] {}
	at MC-BOOTSTRAP/[email protected]/net.neoforged.fml.loading.targets.CommonLaunchHandler.lambda$launchService$4(CommonLaunchHandler.java:118) ~[loader-4.0.41.jar%23134!/:4.0] {}
	at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:30) [modlauncher-11.0.5.jar%23114!/:?] {}
	at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) [modlauncher-11.0.5.jar%23114!/:?] {}
	at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) [modlauncher-11.0.5.jar%23114!/:?] {}
	at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.Launcher.run(Launcher.java:103) [modlauncher-11.0.5.jar%23114!/:?] {}
	at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.Launcher.main(Launcher.java:74) [modlauncher-11.0.5.jar%23114!/:?] {}
	at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) [modlauncher-11.0.5.jar%23114!/:?] {}
	at MC-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) [modlauncher-11.0.5.jar%23114!/:?] {}
	at [email protected]/cpw.mods.bootstraplauncher.BootstrapLauncher.run(BootstrapLauncher.java:210) [bootstraplauncher-2.0.2.jar:?] {}
	at [email protected]/cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:69) [bootstraplauncher-2.0.2.jar:?] {}
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?] {}
	at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[?:?] {}
	at net.neoforged.devlaunch.Main.main(Main.java:55) [DevLaunch-1.0.1.jar:?] {}

Mod Version

2.4.2+1.21.1

Controller

PS5 dualsense

Bluetooth

  • Yes

Operating System

Linux/SteamOS

ARM

  • Yes

Additional Information

My suggestion is to either use a vanilla icon or include a NeoForge icon as well.
The current workaround is to add any PNG file at assets/fabric-resource-loader-v0/icon.png.

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.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions