Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

1.14.4 Interacting with chests from Client


SamMan
 Share

Recommended Posts

Hello y'all! :)

 

I've been working on a mod that aims to automatically complete some operations with chests (from the client side). However this needs two fundamental features: Reading chest contents, and placing items into the chest (from the players inventory)

 

Is there a way with Forge to do this?

 

Thank you for reading! :)

Link to comment
Share on other sites

Chest contents aren't sent to the player unless the chest is opened. Otherwise, yes, you can do that.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

28 minutes ago, Draco18s said:

Chest contents aren't sent to the player unless the chest is opened. Otherwise, yes, you can do that.

Thank you for your reply!

 

Ah I see. I did some digging in the ClientPlayerEntity class and found an openContainer property, nice! However is there a way to force the player to open the chest?

 

I did an openContainer method on ClientPlayerEntity but its parameter name or type isn't too helpful...

 image.png.c12722d73e0c67fda81e619b692d9e00.png

Edited by SamMan
Link to comment
Share on other sites

Looking further down in the player class and how accessing an inventory is implemented in the interactOn() method, I believe you can pass the result from the getContainer() function that the ChestBlock class inherits from ContainerBlock. So just once you have a Block object, verifying that it's a ContainerBlock, it'd just be block.getContainer() with appropriate world and position parameters.

Oh, and of course, don't forget to not do this if it's a remote world.

Edited by ArixZajicek
Link to comment
Share on other sites

Note: mods do not use ContainerBlock, so do not count on that when interacting with arbitrary block inventories.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

10 hours ago, ArixZajicek said:

Looking further down in the player class and how accessing an inventory is implemented in the interactOn() method, I believe you can pass the result from the getContainer() function that the ChestBlock class inherits from ContainerBlock. So just once you have a Block object, verifying that it's a ContainerBlock, it'd just be block.getContainer() with appropriate world and position parameters.

Thanks for looking into this a bit deeper! :)

 

So I tried to implement those methods, and I feel like I'm really close (only one letter is bad!). Though yeah I wasn't quite sure what to set ContainerBlock to, as getContainer isn't static. It feels weird to me that this block object is used to get other blocks?

 

I also wasn't quite sure what to make of the 'state' parameter. I'm not overly bothered what state the chest is in so I left it as null, but is that bad?

 

Here's my code so far:

image.png.682f3c96984eee0ddda652ec00ce814d.png

 

 

 

10 hours ago, ArixZajicek said:

Oh, and of course, don't forget to not do this if it's a remote world.

aaa these sides always confuse me. I'm running this on a client connected to a vanilla server, and I check the side like this upon doing anything:

image.png.7e79999cc89c0f3d292a6852a946901c.png

So am I fine?

 

 

10 hours ago, Draco18s said:

Note: mods do not use ContainerBlock, so do not count on that when interacting with arbitrary block inventories.

Thanks for the heads up :) Thankfully this is a vanilla server so I shouldn't have to ever worry about those kinds of shenanigans

Link to comment
Share on other sites

7 hours ago, SamMan said:

I also wasn't quite sure what to make of the 'state' parameter.

world.getBlockState(pos)

https://minecraft.gamepedia.com/Block_states

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

...the state of the block at that position...

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

1 hour ago, Draco18s said:

...the state of the block at that position...

Ah sorry, I mean on the second line of code:

image.png.b447defa0becb29fa0845bba87e2f50d.png

 

What should I set the containerBlock variable to? It can't be null or else I can't get a property from it. I can't set it to a BlockState since they're incompatible types.

Link to comment
Share on other sites

You can't do any of this. Because you are on the client you need to actually fake the right-click on the block. The server will then open the GUI for you, you need to wait until Minecraft#player.openContainer becomes the container you want. Then you can interact with it, again faking it by calling the same methods that would be called if the users did these inputs.

Link to comment
Share on other sites

33 minutes ago, diesieben07 said:

You can't do any of this. Because you are on the client you need to actually fake the right-click on the block. The server will then open the GUI for you, you need to wait until Minecraft#player.openContainer becomes the container you want. Then you can interact with it, again faking it by calling the same methods that would be called if the users did these inputs.

I see, thanks for the info :)

Do you know which classes contain the relevant stuff for sending a fake click? I'd guess it'd be somewhere in the packet classes I'm not quite sure how to send those..

Link to comment
Share on other sites

16 hours ago, diesieben07 said:

Look at where the right-click methods in Item are called from. Work your way upwards ;)

A challenge eh? Well consider it accepted.

 

So I did some digging for a good while, around in the item code. and eventually I found myself all the way up in Minecraft.java looking at the right click code. (Minecraft#rightClickMouse)

Inside it I found the case for clicking a block:

image.png.2b05f49ae4deacefc47ea10be2b7bc58.pngWhich made a called to the handily titled 'func_217292_a'. A quick check in it showed that this was likely what I was looking for.

 

So, by fudging a call to 'func_217292_a', it worked! The chest opened on the client. This made the necessary code:

Minecraft mc = Minecraft.getInstance();
ClientPlayerEntity player = mc.player;
BlockPos pos = new BlockPos(146, 68, -77);

mc.playerController.func_217292_a(
        player,
        mc.world,
        Hand.MAIN_HAND,
        new BlockRayTraceResult(
                new Vec3d(0,0,0),
                Direction.NORTH,
                pos,
                true
        )
);

I wasn't quite sure what to put for the BlockRayTraceResult, but these values seemed to work fine.

 

Thanks for the help! :) I'll look into placing items into the chest next...

Link to comment
Share on other sites

1 hour ago, SamMan said:

Which made a called to the handily titled 'func_217292_a'.

 

Yep. That's a SRG name.

 

Quote

 

An aside about obfuscated names

Minecraft has 3 levels of naming:

  1. Notch Names - these are the names of methods and fields that Minecraft uses when distributed. Often things like a.aa and b.cf2. This is the fully obfuscated state
  2. SRG Names - these are the names given to methods and fields by the runtime deobfuscation process that Forge performs when you run the game. Compiled mods use these names, as they are consistent across minor versions
  3. MCP Names - these are the human readable names you see inside Eclipse. These names are supplied by hand when someone figures out what a field or method does via the MCP Bot on IRC. Installing the Forge development environment with the MDK grabs the "current" mappings when you run gradlew setup
  • Like 1

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • https://github.com/ImpactDevelopment/ImpactIssues/issues/new?assignees=&labels=Bug&template=bug_report.md&title=Minecraft+crash+when+clicking+on+alts+button Here - make an issue on Impact Client's issue form. That area is where the developers of impact can see your post
    • ---- Minecraft Crash Report ---- // Hi. I'm Minecraft, and I'm a crashaholic. Time: 5/23/22 7:22 AM Description: mouseClicked event handler java.lang.NullPointerException: mouseClicked event handler     at net.impactclient.34V.2(34V.java:15)     at net.impactclient.34P.b(34P.java:24)     at dot.b(SourceFile:325)     at djz.a(SourceFile:922)     at net.impactclient.2T.8(2T.java:46)     at net.impactclient.2T$$Lambda$3632/1642244192.onPress(Unknown Source)     at dlj.b(SourceFile:33)     at dld.a(SourceFile:16)     at dlh.a(SourceFile:149)     at dmh.a(SourceFile:27)     at dka.b(SourceFile:92)     at dka$$Lambda$3621/25741263.run(Unknown Source)     at dot.a(SourceFile:435)     at dka.a(SourceFile:92)     at dka.c(SourceFile:162)     at dka$$Lambda$3620/764692091.run(Unknown Source)     at aob.execute(ThreadTaskExecutor.java:104)     at dka.b(SourceFile:162)     at dka$$Lambda$2354/1214025054.invoke(Unknown Source)     at org.lwjgl.glfw.GLFWMouseButtonCallbackI.callback(GLFWMouseButtonCallbackI.java:36)     at org.lwjgl.system.JNI.invokeV(Native Method)     at org.lwjgl.glfw.GLFW.glfwWaitEventsTimeout(GLFW.java:3174)     at com.mojang.blaze3d.systems.RenderSystem.limitDisplayFPS(SourceFile:127)     at djz.e(SourceFile:1071)     at djz.e(SourceFile:681)     at net.minecraft.client.main.Main.main(SourceFile:215)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     at java.lang.reflect.Method.invoke(Method.java:497)     at net.minecraft.launchwrapper.Launch.launch(Launch.java:159)     at net.minecraft.launchwrapper.Launch.main(Launch.java:30) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Render thread Stacktrace:     at net.impactclient.34V.2(34V.java:15)     at net.impactclient.34P.b(34P.java:24)     at dot.b(SourceFile:325)     at djz.a(SourceFile:922)     at net.impactclient.2T.8(2T.java:46)     at net.impactclient.2T$$Lambda$3632/1642244192.onPress(Unknown Source)     at dlj.b(SourceFile:33)     at dld.a(SourceFile:16)     at dlh.a(SourceFile:149)     at dmh.a(SourceFile:27)     at dka.b(SourceFile:92)     at dka$$Lambda$3621/25741263.run(Unknown Source) -- Affected screen -- Details:     Screen name: net.impactclient.2T Stacktrace:     at dot.a(SourceFile:435)     at dka.a(SourceFile:92)     at dka.c(SourceFile:162)     at dka$$Lambda$3620/764692091.run(Unknown Source)     at aob.execute(ThreadTaskExecutor.java:104)     at dka.b(SourceFile:162)     at dka$$Lambda$2354/1214025054.invoke(Unknown Source)     at org.lwjgl.glfw.GLFWMouseButtonCallbackI.callback(GLFWMouseButtonCallbackI.java:36)     at org.lwjgl.system.JNI.invokeV(Native Method)     at org.lwjgl.glfw.GLFW.glfwWaitEventsTimeout(GLFW.java:3174)     at com.mojang.blaze3d.systems.RenderSystem.limitDisplayFPS(SourceFile:127)     at djz.e(SourceFile:1071)     at djz.e(SourceFile:681)     at net.minecraft.client.main.Main.main(SourceFile:215)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     at java.lang.reflect.Method.invoke(Method.java:497)     at net.minecraft.launchwrapper.Launch.launch(Launch.java:159)     at net.minecraft.launchwrapper.Launch.main(Launch.java:30) -- System Details -- Details:     Minecraft Version: 1.16.5     Minecraft Version ID: 1.16.5     Operating System: Windows 8 (amd64) version 6.2     Java Version: 1.8.0_51, Oracle Corporation     Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation     Memory: 2105089736 bytes (2007 MB) / 3892314112 bytes (3712 MB) up to 4294967296 bytes (4096 MB)     CPUs: 4     JVM Flags: 9 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xss1M -Xmx4G -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M     Launched Version: 1.16.5-Impact_4.9.1-OptiFine_HD_U_G6     Backend library: LWJGL version 3.2.2 build 10     Backend API: Intel(R) HD Graphics 2000 GL version 3.1.0 - Build 9.17.10.4459, Intel     GL Caps: Using framebuffer using OpenGL 3.0     Using VBOs: Yes     Is Modded: Very likely; Jar signature invalidated     Type: Client (map_client.txt)     Graphics mode: fancy     Resource Packs:      Current Language: English (US)     CPU: 4x Intel(R) Core(TM) i5-2400 CPU @ 3.10GHz     OptiFine Version: OptiFine_1.16.5_HD_U_G6     OptiFine Build: 20210117-013236     Render Distance Chunks: 16     Mipmaps: 4     Anisotropic Filtering: 1     Antialiasing: 0     Multitexture: false     Shaders: null     OpenGlVersion: 3.1.0 - Build 9.17.10.4459     OpenGlRenderer: Intel(R) HD Graphics 2000     OpenGlVendor: Intel     CpuCount: 4     The exit code i got: The game crashed whilst mouseclicked event handler Error: java.lang.NullPointerException: mouseClicked event handler Exit Code: -1  
    • i cant run forge on my computer it crashes every time...i have contacted Minecraft themselves and they haven't helped forge the website doesn't seem to have contact info and i have indulged in watching a large number of videos and read many articles on what to do to fix these problems and none whatsoever have done anything at all...i would really appreaciate a call so i can give a better rundown  my phone number is 8102800545
    • ---- Minecraft Crash Report ---- // Shall we play a game? Time: 5/22/22 7:23 PM Description: Unexpected error org.spongepowered.asm.mixin.transformer.throwables.MixinTransformerError: An unexpected critical error was encountered     at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:392) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4] {}     at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:250) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4] {}     at org.spongepowered.asm.service.modlauncher.MixinTransformationHandler.processClass(MixinTransformationHandler.java:131) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4] {}     at org.spongepowered.asm.launch.MixinLaunchPluginLegacy.processClass(MixinLaunchPluginLegacy.java:131) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4] {}     at cpw.mods.modlauncher.serviceapi.ILaunchPluginService.processClassWithFlags(ILaunchPluginService.java:154) ~[modlauncher-8.1.3.jar:8.1.3+8.1.3+main-8.1.x.c94d18ec] {}     at cpw.mods.modlauncher.LaunchPluginHandler.offerClassNodeToPlugins(LaunchPluginHandler.java:85) ~[modlauncher-8.1.3.jar:?] {}     at cpw.mods.modlauncher.ClassTransformer.transform(ClassTransformer.java:120) ~[modlauncher-8.1.3.jar:?] {}     at cpw.mods.modlauncher.TransformingClassLoader$DelegatedClassLoader.findClass(TransformingClassLoader.java:265) ~[modlauncher-8.1.3.jar:?] {}     at cpw.mods.modlauncher.TransformingClassLoader.loadClass(TransformingClassLoader.java:136) ~[modlauncher-8.1.3.jar:?] {re:classloading}     at cpw.mods.modlauncher.TransformingClassLoader.loadClass(TransformingClassLoader.java:98) ~[modlauncher-8.1.3.jar:?] {re:classloading}     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_51] {}     at me.jellysquid.mods.sodium.client.render.chunk.ChunkRenderManager.<init>(ChunkRenderManager.java:102) ~[?:?] {re:mixin,re:classloading,pl:mixin:APP:mixins.oculus.compat.sodium.json:options.MixinChunkRenderManager,pl:mixin:APP:mixins.oculus.compat.sodium.json:shader_overrides.MixinChunkRenderManager,pl:mixin:APP:mixins.oculus.compat.sodium.json:shadow_map.MixinChunkRenderManager,pl:mixin:A}     at me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer.initRenderer(SodiumWorldRenderer.java:272) ~[?:?] {re:mixin,re:classloading,pl:mixin:APP:mixins.oculus.compat.sodium.json:shadow_map.MixinSodiumWorldRenderer,pl:mixin:APP:mixins.oculus.compat.sodium.json:vertex_format.MixinSodiumWorldRenderer,pl:mixin:A}     at me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer.loadWorld(SodiumWorldRenderer.java:114) ~[?:?] {re:mixin,re:classloading,pl:mixin:APP:mixins.oculus.compat.sodium.json:shadow_map.MixinSodiumWorldRenderer,pl:mixin:APP:mixins.oculus.compat.sodium.json:vertex_format.MixinSodiumWorldRenderer,pl:mixin:A}     at me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer.setWorld(SodiumWorldRenderer.java:105) ~[?:?] {re:mixin,re:classloading,pl:mixin:APP:mixins.oculus.compat.sodium.json:shadow_map.MixinSodiumWorldRenderer,pl:mixin:APP:mixins.oculus.compat.sodium.json:vertex_format.MixinSodiumWorldRenderer,pl:mixin:A}     at net.minecraft.client.renderer.WorldRenderer.handler$zbo000$onWorldChanged(WorldRenderer.java:5710) ~[?:?] {re:mixin,pl:accesstransformer:B,xf:fml:twilightforest:render,xf:fml:journeymap:WorldRenderer.setSectionDirty,xf:fml:sereneseasons:temperature_transformer,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,xf:fml:twilightforest:render,xf:fml:journeymap:WorldRenderer.setSectionDirty,xf:fml:sereneseasons:temperature_transformer,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.renderer.WorldRenderer.func_72732_a(WorldRenderer.java:661) ~[?:?] {re:mixin,pl:accesstransformer:B,xf:fml:twilightforest:render,xf:fml:journeymap:WorldRenderer.setSectionDirty,xf:fml:sereneseasons:temperature_transformer,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,xf:fml:twilightforest:render,xf:fml:journeymap:WorldRenderer.setSectionDirty,xf:fml:sereneseasons:temperature_transformer,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.func_213257_b(Minecraft.java:1955) ~[?:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:dynamiclightsreforged.mixins.json:MinecraftClientMixin,pl:mixin:APP:rubidium.mixins.json:features.gui.fast_fps_pie.MixinMinecraftClient,pl:mixin:APP:rubidium.mixins.json:features.options.MixinMinecraftClient,pl:mixin:APP:magnesium.mixins.json:features.gui.MixinMinecraftAccessor,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.func_71403_a(Minecraft.java:1881) ~[?:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:dynamiclightsreforged.mixins.json:MinecraftClientMixin,pl:mixin:APP:rubidium.mixins.json:features.gui.fast_fps_pie.MixinMinecraftClient,pl:mixin:APP:rubidium.mixins.json:features.options.MixinMinecraftClient,pl:mixin:APP:magnesium.mixins.json:features.gui.MixinMinecraftAccessor,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.network.play.ClientPlayNetHandler.func_147282_a(ClientPlayNetHandler.java:376) ~[?:?] {re:mixin,pl:runtimedistcleaner:A,re:classloading,pl:mixin:APP:betternether.mixins.json:ClientPlayNetHandlerMixin,pl:mixin:APP:journeymap.mixins.json:client.ClientPacketListenerMixin,pl:mixin:APP:starlight.mixins.json:client.multiplayer.ClientPlayNetHandlerMixin,pl:mixin:APP:betterendforge.mixins.json:ClientPlayNetHandlerMixin,pl:mixin:APP:cavesandcliffs.mixins.json:core.ClientPlayNetHandlerMixin,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.network.play.server.SJoinGamePacket.func_148833_a(SourceFile:110) ~[?:?] {re:classloading,re:mixin}     at net.minecraft.network.play.server.SJoinGamePacket.func_148833_a(SourceFile:18) ~[?:?] {re:classloading,re:mixin}     at net.minecraft.network.PacketThreadUtil.func_225383_a(SourceFile:21) ~[?:?] {re:mixin,re:classloading}     at net.minecraft.network.PacketThreadUtil$$Lambda$14805/382736892.run(Unknown Source) ~[?:?] {}     at net.minecraft.util.concurrent.ThreadTaskExecutor.func_213166_h(SourceFile:144) ~[?:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}     at net.minecraft.util.concurrent.RecursiveEventLoop.func_213166_h(SourceFile:23) ~[?:?] {re:mixin,re:computing_frames,re:classloading}     at net.minecraft.util.concurrent.ThreadTaskExecutor.func_213168_p(SourceFile:118) ~[?:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}     at net.minecraft.util.concurrent.ThreadTaskExecutor.func_213160_bf(SourceFile:103) ~[?:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}     at net.minecraft.client.Minecraft.func_195542_b(Minecraft.java:948) [?:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:dynamiclightsreforged.mixins.json:MinecraftClientMixin,pl:mixin:APP:rubidium.mixins.json:features.gui.fast_fps_pie.MixinMinecraftClient,pl:mixin:APP:rubidium.mixins.json:features.options.MixinMinecraftClient,pl:mixin:APP:magnesium.mixins.json:features.gui.MixinMinecraftAccessor,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:607) [?:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:dynamiclightsreforged.mixins.json:MinecraftClientMixin,pl:mixin:APP:rubidium.mixins.json:features.gui.fast_fps_pie.MixinMinecraftClient,pl:mixin:APP:rubidium.mixins.json:features.options.MixinMinecraftClient,pl:mixin:APP:magnesium.mixins.json:features.gui.MixinMinecraftAccessor,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.main.Main.main(Main.java:184) [?:?] {re:classloading,pl:runtimedistcleaner:A}     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:37) [forge-1.16.5-36.2.35.jar:36.2] {}     at net.minecraftforge.fml.loading.FMLClientLaunchProvider$$Lambda$502/886343183.call(Unknown Source) [forge-1.16.5-36.2.35.jar:36.2] {}     at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:37) [modlauncher-8.1.3.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54) [modlauncher-8.1.3.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:72) [modlauncher-8.1.3.jar:?] {}     at cpw.mods.modlauncher.Launcher.run(Launcher.java:82) [modlauncher-8.1.3.jar:?] {}     at cpw.mods.modlauncher.Launcher.main(Launcher.java:66) [modlauncher-8.1.3.jar:?] {} Caused by: org.spongepowered.asm.mixin.injection.throwables.InjectionError: Critical injection failure: Redirector iris$wrapGetFluidLayer(Lnet/minecraft/fluid/FluidState;Lme/jellysquid/mods/sodium/client/render/pipeline/context/ChunkRenderCacheLocal;Lme/jellysquid/mods/sodium/client/render/chunk/compile/ChunkBuildBuffers;Lme/jellysquid/mods/sodium/client/util/task/CancellationSource;)Lnet/minecraft/client/renderer/RenderType; in mixins.oculus.compat.sodium.json:block_id.MixinChunkRenderRebuildTask failed injection check, (0/1) succeeded. Scanned 1 target(s). Using refmap oculus-refmap.json     at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.postInject(InjectionInfo.java:468) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4] {}     at org.spongepowered.asm.mixin.transformer.MixinTargetContext.applyInjections(MixinTargetContext.java:1362) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4] {}     at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.applyInjections(MixinApplicatorStandard.java:1051) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4] {}     at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.applyMixin(MixinApplicatorStandard.java:400) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4] {}     at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.apply(MixinApplicatorStandard.java:325) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4] {}     at org.spongepowered.asm.mixin.transformer.TargetClassContext.apply(TargetClassContext.java:383) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4] {}     at org.spongepowered.asm.mixin.transformer.TargetClassContext.applyMixins(TargetClassContext.java:365) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4] {}     at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:363) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4] {}     ... 41 more A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Render thread Stacktrace:     at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:392) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4] {}     at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:250) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4] {}     at org.spongepowered.asm.service.modlauncher.MixinTransformationHandler.processClass(MixinTransformationHandler.java:131) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4] {}     at org.spongepowered.asm.launch.MixinLaunchPluginLegacy.processClass(MixinLaunchPluginLegacy.java:131) ~[mixin-0.8.4.jar:0.8.4+Jenkins-b308.git-2accda5000f7602229606b39437565542cc6fba4] {}     at cpw.mods.modlauncher.serviceapi.ILaunchPluginService.processClassWithFlags(ILaunchPluginService.java:154) ~[modlauncher-8.1.3.jar:8.1.3+8.1.3+main-8.1.x.c94d18ec] {}     at cpw.mods.modlauncher.LaunchPluginHandler.offerClassNodeToPlugins(LaunchPluginHandler.java:85) ~[modlauncher-8.1.3.jar:?] {}     at cpw.mods.modlauncher.ClassTransformer.transform(ClassTransformer.java:120) ~[modlauncher-8.1.3.jar:?] {}     at cpw.mods.modlauncher.TransformingClassLoader$DelegatedClassLoader.findClass(TransformingClassLoader.java:265) ~[modlauncher-8.1.3.jar:?] {}     at cpw.mods.modlauncher.TransformingClassLoader.loadClass(TransformingClassLoader.java:136) ~[modlauncher-8.1.3.jar:?] {re:classloading}     at cpw.mods.modlauncher.TransformingClassLoader.loadClass(TransformingClassLoader.java:98) ~[modlauncher-8.1.3.jar:?] {re:classloading}     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_51] {}     at me.jellysquid.mods.sodium.client.render.chunk.ChunkRenderManager.<init>(ChunkRenderManager.java:102) ~[?:?] {re:mixin,re:classloading,pl:mixin:APP:mixins.oculus.compat.sodium.json:options.MixinChunkRenderManager,pl:mixin:APP:mixins.oculus.compat.sodium.json:shader_overrides.MixinChunkRenderManager,pl:mixin:APP:mixins.oculus.compat.sodium.json:shadow_map.MixinChunkRenderManager,pl:mixin:A}     at me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer.initRenderer(SodiumWorldRenderer.java:272) ~[?:?] {re:mixin,re:classloading,pl:mixin:APP:mixins.oculus.compat.sodium.json:shadow_map.MixinSodiumWorldRenderer,pl:mixin:APP:mixins.oculus.compat.sodium.json:vertex_format.MixinSodiumWorldRenderer,pl:mixin:A}     at me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer.loadWorld(SodiumWorldRenderer.java:114) ~[?:?] {re:mixin,re:classloading,pl:mixin:APP:mixins.oculus.compat.sodium.json:shadow_map.MixinSodiumWorldRenderer,pl:mixin:APP:mixins.oculus.compat.sodium.json:vertex_format.MixinSodiumWorldRenderer,pl:mixin:A}     at me.jellysquid.mods.sodium.client.render.SodiumWorldRenderer.setWorld(SodiumWorldRenderer.java:105) ~[?:?] {re:mixin,re:classloading,pl:mixin:APP:mixins.oculus.compat.sodium.json:shadow_map.MixinSodiumWorldRenderer,pl:mixin:APP:mixins.oculus.compat.sodium.json:vertex_format.MixinSodiumWorldRenderer,pl:mixin:A}     at net.minecraft.client.renderer.WorldRenderer.handler$zbo000$onWorldChanged(WorldRenderer.java:5710) ~[?:?] {re:mixin,pl:accesstransformer:B,xf:fml:twilightforest:render,xf:fml:journeymap:WorldRenderer.setSectionDirty,xf:fml:sereneseasons:temperature_transformer,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,xf:fml:twilightforest:render,xf:fml:journeymap:WorldRenderer.setSectionDirty,xf:fml:sereneseasons:temperature_transformer,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.renderer.WorldRenderer.func_72732_a(WorldRenderer.java:661) ~[?:?] {re:mixin,pl:accesstransformer:B,xf:fml:twilightforest:render,xf:fml:journeymap:WorldRenderer.setSectionDirty,xf:fml:sereneseasons:temperature_transformer,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,xf:fml:twilightforest:render,xf:fml:journeymap:WorldRenderer.setSectionDirty,xf:fml:sereneseasons:temperature_transformer,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.func_213257_b(Minecraft.java:1955) ~[?:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:dynamiclightsreforged.mixins.json:MinecraftClientMixin,pl:mixin:APP:rubidium.mixins.json:features.gui.fast_fps_pie.MixinMinecraftClient,pl:mixin:APP:rubidium.mixins.json:features.options.MixinMinecraftClient,pl:mixin:APP:magnesium.mixins.json:features.gui.MixinMinecraftAccessor,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.func_71403_a(Minecraft.java:1881) ~[?:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:dynamiclightsreforged.mixins.json:MinecraftClientMixin,pl:mixin:APP:rubidium.mixins.json:features.gui.fast_fps_pie.MixinMinecraftClient,pl:mixin:APP:rubidium.mixins.json:features.options.MixinMinecraftClient,pl:mixin:APP:magnesium.mixins.json:features.gui.MixinMinecraftAccessor,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.network.play.ClientPlayNetHandler.func_147282_a(ClientPlayNetHandler.java:376) ~[?:?] {re:mixin,pl:runtimedistcleaner:A,re:classloading,pl:mixin:APP:betternether.mixins.json:ClientPlayNetHandlerMixin,pl:mixin:APP:journeymap.mixins.json:client.ClientPacketListenerMixin,pl:mixin:APP:starlight.mixins.json:client.multiplayer.ClientPlayNetHandlerMixin,pl:mixin:APP:betterendforge.mixins.json:ClientPlayNetHandlerMixin,pl:mixin:APP:cavesandcliffs.mixins.json:core.ClientPlayNetHandlerMixin,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.network.play.server.SJoinGamePacket.func_148833_a(SourceFile:110) ~[?:?] {re:classloading,re:mixin}     at net.minecraft.network.play.server.SJoinGamePacket.func_148833_a(SourceFile:18) ~[?:?] {re:classloading,re:mixin}     at net.minecraft.network.PacketThreadUtil.func_225383_a(SourceFile:21) ~[?:?] {re:mixin,re:classloading}     at net.minecraft.network.PacketThreadUtil$$Lambda$14805/382736892.run(Unknown Source) ~[?:?] {}     at net.minecraft.util.concurrent.ThreadTaskExecutor.func_213166_h(SourceFile:144) ~[?:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}     at net.minecraft.util.concurrent.RecursiveEventLoop.func_213166_h(SourceFile:23) ~[?:?] {re:mixin,re:computing_frames,re:classloading}     at net.minecraft.util.concurrent.ThreadTaskExecutor.func_213168_p(SourceFile:118) ~[?:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B} -- Affected level -- Details:     All players: 0 total; []     Chunk stats: Client Chunk Cache: 1024, 0     Level dimension: minecraft:overworld     Level spawn location: World: (8,64,8), Chunk: (at 8,4,8 in 0,0; contains blocks 0,0,0 to 15,255,15), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)     Level time: 0 game time, 0 day time     Server brand: ~~ERROR~~ NullPointerException: null     Server type: Integrated singleplayer server Stacktrace:     at net.minecraft.client.world.ClientWorld.func_72914_a(ClientWorld.java:447) ~[?:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:dynamiclightsreforged.mixins.json:ClientWorldMixin,pl:mixin:APP:rubidium.mixins.json:features.chunk_rendering.MixinClientWorld,pl:mixin:APP:rubidium.mixins.json:features.world_ticking.MixinClientWorld,pl:mixin:APP:starlight.mixins.json:client.world.ClientWorldMixin,pl:mixin:APP:mixins.sndctrl.json:MixinClientWorld,pl:mixin:APP:mixins.oculus.vertexformat.json:block_rendering.MixinClientLevel,pl:mixin:APP:architectury.mixins.json:MixinClientLevel,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.func_71396_d(Minecraft.java:2031) [?:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:dynamiclightsreforged.mixins.json:MinecraftClientMixin,pl:mixin:APP:rubidium.mixins.json:features.gui.fast_fps_pie.MixinMinecraftClient,pl:mixin:APP:rubidium.mixins.json:features.options.MixinMinecraftClient,pl:mixin:APP:magnesium.mixins.json:features.gui.MixinMinecraftAccessor,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:628) [?:?] {re:mixin,pl:accesstransformer:B,pl:runtimedistcleaner:A,re:classloading,pl:accesstransformer:B,pl:mixin:APP:dynamiclightsreforged.mixins.json:MinecraftClientMixin,pl:mixin:APP:rubidium.mixins.json:features.gui.fast_fps_pie.MixinMinecraftClient,pl:mixin:APP:rubidium.mixins.json:features.options.MixinMinecraftClient,pl:mixin:APP:magnesium.mixins.json:features.gui.MixinMinecraftAccessor,pl:mixin:A,pl:runtimedistcleaner:A}     at net.minecraft.client.main.Main.main(Main.java:184) [?:?] {re:classloading,pl:runtimedistcleaner:A}     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:37) [forge-1.16.5-36.2.35.jar:36.2] {}     at net.minecraftforge.fml.loading.FMLClientLaunchProvider$$Lambda$502/886343183.call(Unknown Source) [forge-1.16.5-36.2.35.jar:36.2] {}     at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:37) [modlauncher-8.1.3.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54) [modlauncher-8.1.3.jar:?] {}     at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:72) [modlauncher-8.1.3.jar:?] {}     at cpw.mods.modlauncher.Launcher.run(Launcher.java:82) [modlauncher-8.1.3.jar:?] {}     at cpw.mods.modlauncher.Launcher.main(Launcher.java:66) [modlauncher-8.1.3.jar:?] {} -- System Details -- Details:     Minecraft Version: 1.16.5     Minecraft Version ID: 1.16.5     Operating System: Windows 10 (amd64) version 10.0     Java Version: 1.8.0_51, Oracle Corporation     Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation     Memory: 303463320 bytes (289 MB) / 2414870528 bytes (2303 MB) up to 3817865216 bytes (3641 MB)     CPUs: 8     JVM Flags: 4 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xss1M -Xmx4096m -Xms256m     ModLauncher: 8.1.3+8.1.3+main-8.1.x.c94d18ec     ModLauncher launch target: fmlclient     ModLauncher naming: srg     ModLauncher services:          /mixin-0.8.4.jar mixin PLUGINSERVICE          /eventbus-4.0.0.jar eventbus PLUGINSERVICE          /forge-1.16.5-36.2.35.jar object_holder_definalize PLUGINSERVICE          /forge-1.16.5-36.2.35.jar runtime_enum_extender PLUGINSERVICE          /accesstransformers-3.0.1.jar accesstransformer PLUGINSERVICE          /forge-1.16.5-36.2.35.jar capability_inject_definalize PLUGINSERVICE          /forge-1.16.5-36.2.35.jar runtimedistcleaner PLUGINSERVICE          /mixin-0.8.4.jar mixin TRANSFORMATIONSERVICE          /forge-1.16.5-36.2.35.jar fml TRANSFORMATIONSERVICE      FML: 36.2     Forge: net.minecraftforge:36.2.35     FML Language Providers:          javafml@36.2         minecraft@1         kotlinforforge@1.17.0     Mod List:          dynamiclightsreforged-mc1.16.5_v1.0.1.jar         |Dynamic Lights Reforged       |dynamiclightsreforged         |mc1.16.5_v1.0.1     |DONE      |Manifest: NOSIGNATURE         mowziesmobs-1.5.25.jar                            |Mowzie's Mobs                 |mowziesmobs                   |1.5.25              |DONE      |Manifest: NOSIGNATURE         BetterDungeons-1.16.4-1.2.1.jar                   |YUNG's Better Dungeons        |betterdungeons                |1.16.4-1.2.1        |DONE      |Manifest: NOSIGNATURE         TrashSlot_1.16.3-12.2.1.jar                       |TrashSlot                     |trashslot                     |12.2.1              |DONE      |Manifest: NOSIGNATURE         platforms-1.16-1.7.15.jar                         |Platforms                     |platforms                     |1.7.15              |DONE      |Manifest: NOSIGNATURE         jei-1.16.5-7.7.1.152.jar                          |Just Enough Items             |jei                           |7.7.1.152           |DONE      |Manifest: NOSIGNATURE         AttributeFix-1.16.5-10.1.4.jar                    |AttributeFix                  |attributefix                  |10.1.4              |DONE      |Manifest: eb:c4:b1:67:8b:f9:0c:db:dc:4f:01:b1:8e:61:64:39:4c:10:85:0b:a6:c4:c7:48:f0:fa:95:f2:cb:08:3a:e5         betternether_reforged-1.2.jar                     |Better Nether Reforged        |betternether                  |1.2                 |DONE      |Manifest: NOSIGNATURE         rubidium-0.2.6.jar                                |Rubidium                      |rubidium                      |0.2.6               |DONE      |Manifest: NOSIGNATURE         BetterCaves-Forge-1.16.4-1.1.2.jar                |YUNG's Better Caves           |bettercaves                   |1.16.4-1.1.2        |DONE      |Manifest: NOSIGNATURE         Waystones_1.16.5-7.6.4.jar                        |Waystones                     |waystones                     |7.6.4               |DONE      |Manifest: NOSIGNATURE         Clumps-6.0.0.28.jar                               |Clumps                        |clumps                        |6.0.0.28            |DONE      |Manifest: NOSIGNATURE         journeymap-1.16.5-5.8.5.jar                       |Journeymap                    |journeymap                    |5.8.5               |DONE      |Manifest: NOSIGNATURE         citadel-1.8.1-1.16.5.jar                          |Citadel                       |citadel                       |1.8.1               |DONE      |Manifest: NOSIGNATURE         alexsmobs-1.12.1.jar                              |Alex's Mobs                   |alexsmobs                     |1.12.1              |DONE      |Manifest: NOSIGNATURE         NaturesCompass-1.16.5-1.9.1-forge.jar             |Nature's Compass              |naturescompass                |1.16.5-1.9.1-forge  |DONE      |Manifest: NOSIGNATURE         SereneSeasons-1.16.5-4.0.1.125-universal.jar      |Serene Seasons                |sereneseasons                 |1.16.5-4.0.1.125    |DONE      |Manifest: NOSIGNATURE         YungsApi-1.16.4-Forge-13.jar                      |YUNG's API                    |yungsapi                      |1.16.4-Forge-13     |DONE      |Manifest: NOSIGNATURE         decorative_blocks-1.16.4-1.7.2.jar                |Decorative Blocks             |decorative_blocks             |1.7.2               |DONE      |Manifest: NOSIGNATURE         deepdark_4.2.jar                                  |Dead Guy's Untitled Deep Dark |dead_guys_untitled_deep_dark_ |Frist Version!      |DONE      |Manifest: NOSIGNATURE         magnesium-1.5.jar                                 |Magnesium                     |magnesium                     |1.5                 |DONE      |Manifest: NOSIGNATURE         starlight-1.2.jar                                 |Starlight                     |starlight                     |1.0.0-RC2           |DONE      |Manifest: NOSIGNATURE         ForgivingVoid_1.16.5-5.2.1.jar                    |Forgiving Void                |forgivingvoid                 |5.2.1               |DONE      |Manifest: NOSIGNATURE         Morpheus-1.16.5-4.2.70.jar                        |Morpheus                      |morpheus                      |4.2.70              |DONE      |Manifest: NOSIGNATURE         3dSkinLayers-forge-1.1.0.jar                      |3dSkinLayers                  |skinlayers3d                  |1.1.0               |DONE      |Manifest: NOSIGNATURE         forge-1.16.5-36.2.35-universal.jar                |Forge                         |forge                         |36.2.35             |DONE      |Manifest: 22:af:21:d8:19:82:7f:93:94:fe:2b:ac:b7:e4:41:57:68:39:87:b1:a7:5c:c6:44:f9:25:74:21:14:f5:0d:90         shetiphiancore-1.16-3.8.14.jar                    |ShetiPhian-Core               |shetiphiancore                |3.8.14              |DONE      |Manifest: NOSIGNATURE         twilightforest-1.16.5-4.0.870-universal.jar       |The Twilight Forest           |twilightforest                |NONE                |DONE      |Manifest: NOSIGNATURE         konkrete_forge_1.3.3_MC_1.16.2-1.16.5.jar         |Konkrete                      |konkrete                      |1.3.3               |DONE      |Manifest: NOSIGNATURE         betterendforge-1.16.5-2.5.jar                     |BetterEnd Forge               |betterendforge                |1.16.5-2.5          |DONE      |Manifest: NOSIGNATURE         DynamicSurroundings-1.16.5-4.0.5.0.jar            |§3Dynamic Surroundings        |dsurround                     |4.0.5.0             |DONE      |Manifest: NOSIGNATURE         DungeonsArise-1.16.5-2.1.49-beta.jar              |When Dungeons Arise           |dungeons_arise                |2.1.49              |DONE      |Manifest: NOSIGNATURE         forge-1.16.5-36.2.35-client.jar                   |Minecraft                     |minecraft                     |1.16.5              |DONE      |Manifest: NOSIGNATURE         TConstruct-1.16.5-3.3.4.335.jar                   |Tinkers' Construct            |tconstruct                    |3.3.4.335           |DONE      |Manifest: NOSIGNATURE         Jade-1.16.4-2.8.1.jar                             |Jade                          |jade                          |2.8.1               |DONE      |Manifest: NOSIGNATURE         cavesandcliffs-1.16.5-7.2.0.jar                   |Caves and Cliffs Backport     |cavesandcliffs                |1.16.5-7.2.0        |DONE      |Manifest: NOSIGNATURE         CavesCliffsBackportAdditions_3.0.jar              |CavesandCliffsbackportaddition|cavesandcliffsbackportaddition|2.59                |DONE      |Manifest: NOSIGNATURE         curios-forge-1.16.5-4.0.8.2.jar                   |Curios API                    |curios                        |1.16.5-4.0.8.2      |DONE      |Manifest: NOSIGNATURE         Atum-1.16.5-2.2.11.jar                            |Atum 2                        |atum                          |1.16.5-2.2.11       |DONE      |Manifest: NOSIGNATURE         relics-1.16.5-0.3.4.3.jar                         |Relics                        |relics                        |0.3.4.3             |DONE      |Manifest: NOSIGNATURE         Mantle-1.16.5-1.6.157.jar                         |Mantle                        |mantle                        |1.6.157             |DONE      |Manifest: NOSIGNATURE         oculus-1.16.5-1.2.2.jar                           |Oculus                        |oculus                        |1.2.2               |DONE      |Manifest: NOSIGNATURE         AutoRegLib-1.6-49.jar                             |AutoRegLib                    |autoreglib                    |1.6-49              |DONE      |Manifest: NOSIGNATURE         Quark-r2.4-322.jar                                |Quark                         |quark                         |r2.4-322            |DONE      |Manifest: NOSIGNATURE         OreExcavation-1.8.157.jar                         |Ore Excavation                |oreexcavation                 |1.8.157             |DONE      |Manifest: e7:68:1c:0d:b9:7e:cf:f8:f3:40:9c:84:c5:39:d7:a4:59:78:b0:6b:c3:fd:b7:4f:69:18:a3:88:e3:76:8c:3f         BetterThirdPerson-Forge-1.16.4-1.7.2.jar          |Better Third Person           |betterthirdperson             |1.7.2               |DONE      |Manifest: NOSIGNATURE         BetterStrongholds-1.16.4-1.2.1.jar                |YUNG's Better Strongholds     |betterstrongholds             |1.16.4-1.2.1        |DONE      |Manifest: NOSIGNATURE         fancymenu_forge_2.7.2_MC_1.16.2-1.16.5.jar        |FancyMenu                     |fancymenu                     |2.7.2               |DONE      |Manifest: NOSIGNATURE         cavebiomeapi-1.16.5-1.4.2.jar                     |CaveBiomeAPI                  |cavebiomeapi                  |1.16.5-1.4.2        |DONE      |Manifest: NOSIGNATURE         architectury-1.32.63.jar                          |Architectury                  |architectury                  |1.32.63             |DONE      |Manifest: NOSIGNATURE         ftb-library-forge-1605.3.4-build.90.jar           |FTB Library                   |ftblibrary                    |1605.3.4-build.90   |DONE      |Manifest: NOSIGNATURE         item-filters-forge-1605.2.5-build.9.jar           |Item Filters                  |itemfilters                   |1605.2.5-build.9    |DONE      |Manifest: NOSIGNATURE         ftb-teams-forge-1605.2.3-build.40.jar             |FTB Teams                     |ftbteams                      |1605.2.3-build.40   |DONE      |Manifest: NOSIGNATURE         ftb-quests-forge-1605.3.6-build.98.jar            |FTB Quests                    |ftbquests                     |1605.3.6-build.98   |DONE      |Manifest: NOSIGNATURE         ferritecore-2.1.0-forge.jar                       |Ferrite Core                  |ferritecore                   |2.1.0               |DONE      |Manifest: 41:ce:50:66:d1:a0:05:ce:a1:0e:02:85:9b:46:64:e0:bf:2e:cf:60:30:9a:fe:0c:27:e0:63:66:9a:84:ce:8a         Adorn-1.14.3+1.16.5-forge.jar                     |Adorn                         |adorn                         |1.14.3+1.16.5-forge |DONE      |Manifest: NOSIGNATURE         charm-forge-1.16.5-2.3.2.jar                      |Charm                         |charm                         |2.3.2               |DONE      |Manifest: NOSIGNATURE         FastLeafDecay-v25.2.jar                           |FastLeafDecay                 |fastleafdecay                 |v25.2               |DONE      |Manifest: NOSIGNATURE         BetterMineshafts-Forge-1.16.4-2.0.4.jar           |YUNG's Better Mineshafts      |bettermineshafts              |1.16.4-2.0.4        |DONE      |Manifest: NOSIGNATURE         geckolib-forge-1.16.5-3.0.71.jar                  |GeckoLib                      |geckolib3                     |3.0.71              |DONE      |Manifest: NOSIGNATURE     Crash Report UUID: ab78d46d-92da-4d9a-8ae3-c0deb5893c7e     Launched Version: forge-36.2.35     Backend library: LWJGL version 3.2.2 build 10     Backend API: NVIDIA GeForce GTX 1650 Ti/PCIe/SSE2 GL version 4.6.0 NVIDIA 497.29, NVIDIA Corporation     GL Caps: Using framebuffer using OpenGL 3.0     Using VBOs: Yes     Is Modded: Definitely; Client brand changed to 'forge'     Type: Client (map_client.txt)     Graphics mode: fancy     Resource Packs:      Current Language: English (US)     CPU: 8x Intel(R) Core(TM) i5-10300H CPU @ 2.50GHz
    • ok, there is no elegant way to do that. and i/we can't give you a detailed recommendation because i/we don't know details (for example is the list of these stages fixed and known at runtime, etc.). but it's very important to review the idea of having objects in config file. difficulty level? super-easy. serialize our object into a string, deserialize from it, no problem. "StringOption" = "{ 'field1': 'value1', 'field2': [listt], 'field3': {object inside the big object} }" when should you do it? never. ever. user will load the game with a newer version of your mod than last time (they are expected to, occasionally) and if the class you store is different, deserialization will crash the game (or you will catch that but you don't know how to load data). and sometimes, user will load the game with an older version of your mod than last time (they're not supposed to, but it can happen) - and crash - you don't know how to load data. also - and this is just as important - configs exist for the sake of users/players. but whey they see a bunch of serialized objects (which to many look like some programming), they'll say "umm, nope!" and close the editor. anyway, just hardcode your structure and don't feel bad. and if you can't fit your config structure into the usual system (too dynamic?), just write it into a file yourself. that is okay too, if you need to. but see that editable parts are all simple data types.  
  • Topics

  • Who's Online (See full list)

    • There are no registered users currently online
×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.