Max Energy stat fails to load in datapack modifiers
Closed this issue ยท 6 comments
Minecraft Version
1.20.1
Modloader
Forge
Modloader Version
47.3.0
Mantle Version
1.11.55
Tinkers' Construct Version
3.10.0.67
Describe your issue
Max Energy stat will cause JsonSyntaxException: Unknown stat type tconstruct:max_energy exception when making datapack-loaded modifiers.
Steps to reproduce
1.Write a modifier with StatBoostModule that make changes on Max Energy stat. Code:
{ "level_display": "tconstruct:default", "modules": [ { "type": "tconstruct:stat_boost", "each_level": 0.2, "operation": "percent", "stat": "tconstruct:max_energy" } ], "tooltip_display": "always" }
2.Start the game and join in a world.
3.The modifier can't be found using modifier command. A JsonSyntaxException was found in log, Stack Track:
[slimeknights.tconstruct.library.modifiers.ModifierManager/]: Failed to load modifier kubejs:extra_capacity
com.google.gson.JsonSyntaxException: Unknown stat type tconstruct:max_energy
at slimeknights.tconstruct.library.tools.stat.ToolStats.lambda$static$0(ToolStats.java:27) ~[TConstruct-1.20.1-3.10.0.67.jar%23171!/:1.20.1-3.10.0.67]
at slimeknights.mantle.data.loadable.mapping.MappedLoadable.convert(MappedLoadable.java:46) ~[Mantle-1.20.1-1.11.55.jar%23168!/:1.20.1-1.11.55]
at slimeknights.mantle.data.loadable.mapping.MappedLoadable.convert(MappedLoadable.java:46) ~[Mantle-1.20.1-1.11.55.jar%23168!/:1.20.1-1.11.55]
at slimeknights.mantle.data.loadable.Loadable.getIfPresent(Loadable.java:95) ~[Mantle-1.20.1-1.11.55.jar%23168!/:1.20.1-1.11.55]
at slimeknights.mantle.data.loadable.field.RequiredField.get(RequiredField.java:19) ~[Mantle-1.20.1-1.11.55.jar%23168!/:1.20.1-1.11.55]
at slimeknights.mantle.data.loadable.field.LoadableField.get(LoadableField.java:32) ~[Mantle-1.20.1-1.11.55.jar%23168!/:1.20.1-1.11.55]
at slimeknights.mantle.data.loadable.record.RecordLoadable4.deserialize(RecordLoadable4.java:20) ~[Mantle-1.20.1-1.11.55.jar%23168!/:1.20.1-1.11.55]
at slimeknights.mantle.data.registry.GenericLoaderRegistry.deserialize(GenericLoaderRegistry.java:73) ~[Mantle-1.20.1-1.11.55.jar%23168!/:1.20.1-1.11.55]
at slimeknights.mantle.data.registry.GenericLoaderRegistry.deserialize(GenericLoaderRegistry.java:25) ~[Mantle-1.20.1-1.11.55.jar%23168!/:1.20.1-1.11.55]
at slimeknights.mantle.data.loadable.field.DirectField.get(DirectField.java:18) ~[Mantle-1.20.1-1.11.55.jar%23168!/:1.20.1-1.11.55]
at slimeknights.mantle.data.loadable.record.RecordLoadable2.deserialize(RecordLoadable2.java:19) ~[Mantle-1.20.1-1.11.55.jar%23168!/:1.20.1-1.11.55]
at slimeknights.mantle.data.loadable.record.RecordLoadable.convert(RecordLoadable.java:57) ~[Mantle-1.20.1-1.11.55.jar%23168!/:1.20.1-1.11.55]
at slimeknights.mantle.data.loadable.mapping.CollectionLoadable.convertArray(CollectionLoadable.java:63) ~[Mantle-1.20.1-1.11.55.jar%23168!/:1.20.1-1.11.55]
at slimeknights.mantle.data.loadable.mapping.CollectionLoadable.convertArray(CollectionLoadable.java:17) ~[Mantle-1.20.1-1.11.55.jar%23168!/:1.20.1-1.11.55]
at slimeknights.mantle.data.loadable.array.ArrayLoadable.convert(ArrayLoadable.java:54) ~[Mantle-1.20.1-1.11.55.jar%23168!/:1.20.1-1.11.55]
at slimeknights.mantle.data.loadable.Loadable.getOrDefault(Loadable.java:123) ~[Mantle-1.20.1-1.11.55.jar%23168!/:1.20.1-1.11.55]
at slimeknights.mantle.data.loadable.field.DefaultingField.get(DefaultingField.java:32) ~[Mantle-1.20.1-1.11.55.jar%23168!/:1.20.1-1.11.55]
at slimeknights.mantle.data.loadable.field.LoadableField.get(LoadableField.java:32) ~[Mantle-1.20.1-1.11.55.jar%23168!/:1.20.1-1.11.55]
at slimeknights.mantle.data.loadable.record.RecordLoadable5.deserialize(RecordLoadable5.java:24) ~[Mantle-1.20.1-1.11.55.jar%23168!/:1.20.1-1.11.55]
at slimeknights.tconstruct.library.modifiers.ModifierManager.loadModifier(ModifierManager.java:296) ~[TConstruct-1.20.1-3.10.0.67.jar%23171!/:1.20.1-3.10.0.67]
at slimeknights.tconstruct.library.modifiers.ModifierManager.lambda$apply$3(ModifierManager.java:152) ~[TConstruct-1.20.1-3.10.0.67.jar%23171!/:1.20.1-3.10.0.67]
at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197) ~[?:?]
at java.util.HashMap$EntrySpliterator.forEachRemaining(HashMap.java:1850) ~[?:?]
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[?:?]
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[?:?]
at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921) ~[?:?]
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?]
at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682) ~[?:?]
at slimeknights.tconstruct.library.modifiers.ModifierManager.apply(ModifierManager.java:154) ~[TConstruct-1.20.1-3.10.0.67.jar%23171!/:1.20.1-3.10.0.67]
at slimeknights.tconstruct.library.modifiers.ModifierManager.m_5787_(ModifierManager.java:68) ~[TConstruct-1.20.1-3.10.0.67.jar%23171!/:1.20.1-3.10.0.67]
at net.minecraft.server.packs.resources.SimplePreparableReloadListener.m_10789_(SimplePreparableReloadListener.java:13) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:718) ~[?:?]
at java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:482) ~[?:?]
at net.minecraft.server.packs.resources.SimpleReloadInstance.m_143940_(SimpleReloadInstance.java:69) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.util.thread.BlockableEventLoop.m_6367_(BlockableEventLoop.java:156) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.util.thread.ReentrantBlockableEventLoop.m_6367_(ReentrantBlockableEventLoop.java:23) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.util.thread.BlockableEventLoop.m_7245_(BlockableEventLoop.java:130) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.util.thread.BlockableEventLoop.m_18701_(BlockableEventLoop.java:139) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.client.gui.screens.worldselection.WorldOpenFlows.m_246486_(WorldOpenFlows.java:163) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.client.gui.screens.worldselection.WorldOpenFlows.m_233122_(WorldOpenFlows.java:113) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.client.gui.screens.worldselection.WorldOpenFlows.doLoadLevel(WorldOpenFlows.java:181) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.client.gui.screens.worldselection.WorldOpenFlows.m_233145_(WorldOpenFlows.java:169) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.client.gui.screens.worldselection.WorldOpenFlows.m_233133_(WorldOpenFlows.java:65) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.client.gui.screens.worldselection.WorldSelectionList$WorldListEntry.m_101744_(WorldSelectionList.java:575) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.client.gui.screens.worldselection.WorldSelectionList$WorldListEntry.m_101704_(WorldSelectionList.java:474) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.client.gui.screens.worldselection.WorldSelectionList$WorldListEntry.m_6375_(WorldSelectionList.java:413) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.client.gui.components.AbstractSelectionList.m_6375_(AbstractSelectionList.java:298) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.client.gui.components.events.ContainerEventHandler.m_6375_(ContainerEventHandler.java:38) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.client.MouseHandler.m_168084_(MouseHandler.java:92) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.client.gui.screens.Screen.m_96579_(Screen.java:437) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.client.MouseHandler.m_91530_(MouseHandler.java:89) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.client.MouseHandler.m_168091_(MouseHandler.java:189) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.util.thread.BlockableEventLoop.execute(BlockableEventLoop.java:102) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.client.MouseHandler.m_91565_(MouseHandler.java:188) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at org.lwjgl.glfw.GLFWMouseButtonCallbackI.callback(GLFWMouseButtonCallbackI.java:43) ~[lwjgl-glfw-3.3.1.jar%23141!/:build 7]
at org.lwjgl.system.JNI.invokeV(Native Method) ~[lwjgl-3.3.1.jar%23153!/:build 7]
at org.lwjgl.glfw.GLFW.glfwWaitEventsTimeout(GLFW.java:3474) ~[lwjgl-glfw-3.3.1.jar%23141!/:build 7]
at com.mojang.blaze3d.systems.RenderSystem.limitDisplayFPS(RenderSystem.java:237) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.client.Minecraft.m_91383_(Minecraft.java:1173) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.client.Minecraft.m_91374_(Minecraft.java:718) ~[client-1.20.1-20230612.114412-srg.jar%23172!/:?]
at net.minecraft.client.main.Main.main(Main.java:218) ~[1.20.1-Forge47.3.0.jar:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:111) ~[fmlloader-1.20.1-47.3.0.jar:?]
at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.clientService(CommonLaunchHandler.java:99) ~[fmlloader-1.20.1-47.3.0.jar:?]
at net.minecraftforge.fml.loading.targets.CommonClientLaunchHandler.lambda$makeService$0(CommonClientLaunchHandler.java:25) ~[fmlloader-1.20.1-47.3.0.jar:?]
at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:30) ~[modlauncher-10.0.9.jar:?]
at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) ~[modlauncher-10.0.9.jar:?]
at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) ~[modlauncher-10.0.9.jar:?]
at cpw.mods.modlauncher.Launcher.run(Launcher.java:108) ~[modlauncher-10.0.9.jar:?]
at cpw.mods.modlauncher.Launcher.main(Launcher.java:78) ~[modlauncher-10.0.9.jar:?]
at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) ~[modlauncher-10.0.9.jar:?]
at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) ~[modlauncher-10.0.9.jar:?]
at cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:141) ~[bootstraplauncher-1.1.2.jar:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
at oolloo.jlw.Wrapper.invokeMain(Wrapper.java:112) ~[?:?]
at oolloo.jlw.Wrapper.main(Wrapper.java:105) ~[?:?]
Additional Information:
- Kubejs was used to load the data file (Since I'm only familiar with this), only datapack loading function is used.
- This issue was first found when I was developping my tcon addon, besides max energy, the tool stats I added in my addon also can't work in datapack (Including ToolDefinitionData file, Max Energy and my additional stats can't be load with same exception), I'm wondering what causes this issue.
Crash Report
No response
Can you reproduce with just Tinkers?
I have not tried
Performance Enchancers
None of the above
Other mods
1.Kubejs, Architectury API and rhino ;
2.JEI and TconJEI .
Searched for known issues?
Searched open issues
There might be a class loading issue. That said, you need the energy handler modifier if you are going to get anything functioning. Use the modifier trait module to add it. See the tank module for an example
There might be a class loading issue. That said, you need the energy handler modifier if you are going to get anything functioning. Use the modifier trait module to add it. See the tank module for an example
I'll try that, thanks!
Btw does that mean I need to implement my own modifier module to get my custom tool stat working in datapack ?
I don't understand the question.
The energy handler modifier trait is used to make the stat perform function; it does nothing without it.
You cannot add custom tool stats purely in datapacks. But its also useless to do so as they won't do anything.
I don't understand the question.
The energy handler modifier trait is used to make the stat perform function; it does nothing without it.
You cannot add custom tool stats purely in datapacks. But its also useless to do so as they won't do anything.
What I want to say is that, I made a new Tool that uses a completely new toolstat defined in my mod and this stat can't be loaded in datapack (Just Behaved like the Max Energy stat) .
(Apologize for my poor English, I'm not a native speaker and might had implied something wrong.)
And I've just noticed that an even has been added to register extra ToolStat, I think this would solve my issue. I will try It when it is available, Thanks again !
You need to ensure your stat is registered before datapacks are loaded. If you registered it statically, it may never be class loaded until after datapack load.
Take a look at the recent commit I pushed for how I fixed max energy being registered too late.