Quark Oddities

Quark Oddities

22M Downloads

Custom emotes not detected (file not found)

Gorialis opened this issue · 0 comments

commented

I have a custom emote inside the config of a modpack. It's in particular this one from Reddit. I have the file downloaded as config/quark_emotes/geddan.emote, where config/quark-common.toml is the quark config for the modpack.

Here is what my [tweaks.emotes] in quark-common.toml looks like (click to expand)
	[tweaks.emotes]
		#The enabled default emotes. Remove from this list to disable them. You can also re-order them, if you feel like it.
		"Enabled Emotes" = ["no", "yes", "wave", "salute", "cheer", "clap", "think", "point", "shrug", "headbang", "weep", "facepalm"]
		#Enable this to make custom emotes read the file every time they're triggered so you can edit on the fly.
		#DO NOT ship enabled this in a modpack, please.
		"Custom Emote Debug" = true
		#The list of Custom Emotes to be loaded.
		#Watch the tutorial on Custom Emotes to learn how to make your own: https://youtu.be/ourHUkan6aQ
		"Custom Emotes" = ["geddan"]

In game, the emote appears within the emote list but has no texture (not even the default custom texture):
image

Clicking the emote has no visible effect in game. However, this turns up in the log file:

Relevant snippet from logs/latest.log (click to expand)
[13:09:10] [Render thread/WARN]: Failed to load emote geddan
java.io.FileNotFoundException: geddan.emote (指定されたファイルがつかりません。)
	at java.io.FileInputStream.open0(Native Method) ~[?:1.8.0_51]
	at java.io.FileInputStream.open(FileInputStream.java:195) ~[?:1.8.0_51]
	at java.io.FileInputStream.<init>(FileInputStream.java:138) ~[?:1.8.0_51]
	at java.io.FileReader.<init>(FileReader.java:72) ~[?:1.8.0_51]
	at vazkii.quark.content.tweaks.client.emote.CustomEmoteTemplate.createReader(CustomEmoteTemplate.java:26) ~[?:r2.4-283]
	at vazkii.quark.content.tweaks.client.emote.EmoteTemplate.readAndMakeTimeline(EmoteTemplate.java:135) [?:r2.4-283]
	at vazkii.quark.content.tweaks.client.emote.TemplateSourcedEmote.<init>(TemplateSourcedEmote.java:22) [?:r2.4-283]
	at vazkii.quark.content.tweaks.client.emote.CustomEmote.<init>(CustomEmote.java:13) [?:r2.4-283]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_51]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [?:1.8.0_51]
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [?:1.8.0_51]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:422) [?:1.8.0_51]
	at vazkii.quark.content.tweaks.client.emote.EmoteDescriptor.instantiate(EmoteDescriptor.java:84) [?:r2.4-283]
	at vazkii.quark.content.tweaks.client.emote.EmoteHandler.putEmote(EmoteHandler.java:89) [?:r2.4-283]
	at vazkii.quark.content.tweaks.client.emote.EmoteHandler.putEmote(EmoteHandler.java:70) [?:r2.4-283]
	at vazkii.quark.base.network.message.DoEmoteMessage.lambda$receive$0(DoEmoteMessage.java:36) [?:r2.4-283]
	at vazkii.quark.base.network.message.DoEmoteMessage$$Lambda$12074/815260862.run(Unknown Source) [?:r2.4-283]
	at net.minecraftforge.fml.network.NetworkEvent$Context.enqueueWork(NetworkEvent.java:215) [?:?]
	at vazkii.quark.base.network.message.DoEmoteMessage.receive(DoEmoteMessage.java:33) [?:r2.4-283]
	at vazkii.arl.network.NetworkHandler.lambda$register$2(NetworkHandler.java:64) [?:1.6-47]
	at vazkii.arl.network.NetworkHandler$$Lambda$7894/1570774165.accept(Unknown Source) [?:1.6-47]
	at net.minecraftforge.fml.network.simple.IndexedMessageCodec.lambda$tryDecode$3(IndexedMessageCodec.java:128) [?:?]
	at net.minecraftforge.fml.network.simple.IndexedMessageCodec$$Lambda$11305/2039015045.accept(Unknown Source) [?:?]
	at java.util.Optional.ifPresent(Optional.java:159) [?:1.8.0_51]
	at net.minecraftforge.fml.network.simple.IndexedMessageCodec.tryDecode(IndexedMessageCodec.java:128) [?:?]
	at net.minecraftforge.fml.network.simple.IndexedMessageCodec.consume(IndexedMessageCodec.java:162) [?:?]
	at net.minecraftforge.fml.network.simple.SimpleChannel.networkEventListener(SimpleChannel.java:80) [?:?]
	at net.minecraftforge.fml.network.simple.SimpleChannel$$Lambda$2942/1903728000.accept(Unknown Source) [?:?]
	at net.minecraftforge.eventbus.EventBus.doCastFilter(EventBus.java:247) [eventbus-3.0.5-service.jar:?]
	at net.minecraftforge.eventbus.EventBus.lambda$addListener$11(EventBus.java:239) [eventbus-3.0.5-service.jar:?]
	at net.minecraftforge.eventbus.EventBus$$Lambda$2944/953150707.invoke(Unknown Source) [eventbus-3.0.5-service.jar:?]
	at net.minecraftforge.eventbus.EventBus.post(EventBus.java:297) [eventbus-3.0.5-service.jar:?]
	at net.minecraftforge.fml.network.NetworkInstance.dispatch(NetworkInstance.java:84) [?:?]
	at net.minecraftforge.fml.network.NetworkHooks.lambda$onCustomPayload$1(NetworkHooks.java:88) [?:?]
	at net.minecraftforge.fml.network.NetworkHooks$$Lambda$11293/1578394154.apply(Unknown Source) [?:?]
	at java.util.Optional.map(Optional.java:215) [?:1.8.0_51]
	at net.minecraftforge.fml.network.NetworkHooks.onCustomPayload(NetworkHooks.java:88) [?:?]
	at net.minecraft.client.network.play.ClientPlayNetHandler.func_147240_a(ClientPlayNetHandler.java:1904) [?:?]
	at net.minecraft.network.play.server.SCustomPayloadPlayPacket.func_148833_a(SCustomPayloadPlayPacket.java:59) [?:?]
	at net.minecraft.network.play.server.SCustomPayloadPlayPacket.func_148833_a(SCustomPayloadPlayPacket.java:11) [?:?]
	at net.minecraft.network.PacketThreadUtil.func_225383_a(SourceFile:21) [?:?]
	at net.minecraft.network.PacketThreadUtil$$Lambda$11422/1724858736.run(Unknown Source) [?:?]
	at net.minecraft.util.concurrent.ThreadTaskExecutor.func_213166_h(SourceFile:144) [?:?]
	at net.minecraft.util.concurrent.RecursiveEventLoop.func_213166_h(SourceFile:23) [?:?]
	at net.minecraft.util.concurrent.ThreadTaskExecutor.func_213168_p(SourceFile:118) [?:?]
	at net.minecraft.util.concurrent.ThreadTaskExecutor.func_213160_bf(SourceFile:103) [?:?]
	at net.minecraft.client.Minecraft.func_195542_b(Minecraft.java:947) [?:?]
	at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:607) [?:?]
	at net.minecraft.client.main.Main.main(Main.java:184) [?:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_51]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_51]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_51]
	at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_51]
	at net.minecraftforge.fml.loading.FMLClientLaunchProvider.lambda$launchService$0(FMLClientLaunchProvider.java:51) [forge-1.16.4-35.1.9.jar:35.1]
	at net.minecraftforge.fml.loading.FMLClientLaunchProvider$$Lambda$472/1287401019.call(Unknown Source) [forge-1.16.4-35.1.9.jar:35.1]
	at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:37) [modlauncher-8.0.6.jar:?]
	at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54) [modlauncher-8.0.6.jar:?]
	at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:72) [modlauncher-8.0.6.jar:?]
	at cpw.mods.modlauncher.Launcher.run(Launcher.java:82) [modlauncher-8.0.6.jar:?]
	at cpw.mods.modlauncher.Launcher.main(Launcher.java:66) [modlauncher-8.0.6.jar:?]
[13:09:10] [Render thread/INFO]: [vazkii.quark.content.tweaks.client.emote.TemplateSourcedEmote:getTimeline:32]: net.minecraft.client.renderer.entity.model.PlayerModel@41f05e5
[13:09:10] [Render thread/INFO]: [vazkii.quark.content.tweaks.client.emote.TemplateSourcedEmote:getTimeline:32]: net.minecraft.client.renderer.entity.model.BipedModel@265e9582
[13:09:10] [Render thread/INFO]: [vazkii.quark.content.tweaks.client.emote.TemplateSourcedEmote:getTimeline:32]: net.minecraft.client.renderer.entity.model.BipedModel@3c7d20

The file is definitely present in the config/quark_emotes folder as described. I'm using Quark r2.4-283 on Minecraft 1.16.4 with Forge 35.1.9.

I originally tried using the natively bundled Java executable, which gave the Forge Secure mod features disabled, update JDK warning, but I also tried with a separately installed updated Java version which doesn't experience this warning, and the issue with Quark persists on both.

Looking at the code from the top of the callstack:
https://github.com/Vazkii/Quark/blob/a482db66f2dcc68e1036460e3d7e61ad6304bf66/src/main/java/vazkii/quark/content/tweaks/client/emote/CustomEmoteTemplate.java#L26

It seems likely that the filepath isn't resolving to where the emote is actually defined. I can't tell where EmoteModule.emotesDir actually leads to based on logs alone, so I'm not exactly sure why.

I use the CurseForge/Overwolf launcher, migrated from the previous Twitch launcher, so my modpack resides in C:\Users\<username>\Twitch\Minecraft\Instances\<modpack>, bootstrapped by the official native launcher (such that the emote file is in C:\Users\<username>\Twitch\Minecraft\Instances\<modpack>\config\quark_emotes\geddan.emote). There aren't any non-NTFS or non-ASCII characters in the entire filepath, and there are also no spaces.

I use Windows 10 Pro (version 2004, build 19041.685) on the Japanese (cp932) locale. The codepage is ASCII-compatible, so it shouldn't cause any filepath issues given the conditions above.