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

[1.7] Overwrite Vanilla Items


mrkirby153
 Share

Recommended Posts

I am working on aliasing.

 

It will be possible to force the "minecraft:milk" name to point at a different block/item, as an example. The original block/item won't be replaced, so much as any requests for it will become diverted. This is not in FML yet.

Link to comment
Share on other sites

You can rename items and blocks through the language files.

But what Railcraft probably do is replacing the recipe.

Write your recipe like the original one, then put your item for the result.

 

I suppose I could do that however whenever rail craft loads up "[fml.itemtracker] A mod "Railcraft" is overwriting item rail" or something similar to that comes up. And you can't find the original rails in the creative menu or nei

Link to comment
Share on other sites

  • 4 weeks later...

I belive RailCraft overwrote the vanilla rails with the itemList[] that existed in 1.6.4. But since that registered items/itemblocks using ID's it was removed in the update. Therefor that wouldn't work in 1.7.4. So we have to wait for cpw's amazing wonders of awesomeness  :D

Link to comment
Share on other sites

My only suggestion is to get into class transformation with core modding. It does require an enormous amount of effort to properly get into, but I find it to be extremely valuable for certain tasks, and it opens up vast amounts of possibilities. This is the tutorial that got me into it: http://www.minecraftforum.net/topic/1854988-/

 

In my mod, I replace both bedrock and coal ore with blocks of a new class to add new behaviour to them. Yes, they aren't items, but it's very much the same process with the same result. To do so, I edit the very code in net.minecraft.block.Block as it is loaded by the JVM. If you follow this method, you will be editing the code in net.minecraft.item.Item, which is very similar. The method you need to modify is the registerItems() method.

 

Iterating through the bytecode instructions, you will be looking for the LDC instruction that loads a string equal to whatever the name of the item you are looking for is. The string name should be equal to the name that is used in net.minecraft.init.Items. You will use this string as an anchor to locate and modify the respective instructions. You should make sure that the string should only be found once, because it is not unusual to see the string two times while the item is being constructed.

 

Say you wish to replace the vanilla feather by replacing the vanilla feather item with your custom ItemFeather item. You will be looking for the LDC instructions that loads the highlighed string below:

itemRegistry.addObject(288, "feather", (new Item()).setUnlocalizedName("feather").setCreativeTab(CreativeTabs.tabMaterials).setTextureName("feather"));

 

After your class transformation, it would programmatically be changed to this:

itemRegistry.addObject(288, "feather", (new ItemFeather()).setUnlocalizedName("feather").setCreativeTab(CreativeTabs.tabMaterials).setTextureName("feather"));

 

The instruction after the LDC would be a NEW instruction of type "net/minecraft/item/Item". You would have to change that to "package/package/etc/ItemFeather". The instruction after that would be a DUP instruction. Instructions after this one will vary. It depends on the amount of constructor parameters, but it usually takes only one instruction to load each parameter. The feather uses no constructor parameters, meaning the instruction after the DUP instruction will be INVOKESPECIAL, which is the constructor call. The owner of this would have to be changed to "package/package/etc/ItemFeather".

 

To apply this example to other cases, here are some tips: If you want to override an item with a new class, make sure your new class extends the original class. The constructor of your new class should have the same parameters as well.

 

This is how I replaced the two blocks in my mod:

public byte[] patchClassBlock(byte[] data, boolean obfuscated)
{
String classBlock = obfuscated ? c.get("Block") : "net/minecraft/block/Block";

String methodRegisterBlocks = obfuscated ? "p" : "registerBlocks";
String methodSetHardness = obfuscated ? "c" : "setHardness";

ClassNode classNode = new ClassNode();
ClassReader classReader = new ClassReader(data);
classReader.accept(classNode, 0);

boolean bedrockFound = false;
boolean coal_oreFound = false;

for(int i = 0; i < classNode.methods.size(); i++)
{
	MethodNode method = classNode.methods.get(i);
	if(method.name.equals(methodRegisterBlocks) && method.desc.equals("()V"))
	{
		for(int j = 0; j < method.instructions.size(); j++)
		{
			AbstractInsnNode instruction = method.instructions.get(j);
			if(instruction.getOpcode() == LDC)
			{
				LdcInsnNode ldcInstruction = (LdcInsnNode)instruction;
				if(ldcInstruction.cst.equals("bedrock"))
				{
					if(!bedrockFound)
					{
						((TypeInsnNode)method.instructions.get(j + 1)).desc = "glenn/gases/BlockBedrock";
						((MethodInsnNode)method.instructions.get(j + 4)).owner = "glenn/gases/BlockBedrock";
					}
					bedrockFound = true;
				}
				else if(ldcInstruction.cst.equals("coal_ore"))
				{
					if(!coal_oreFound)
					{
						((TypeInsnNode)method.instructions.get(j + 1)).desc = "glenn/gases/BlockCoalOre";
						((MethodInsnNode)method.instructions.get(j + 3)).owner = "glenn/gases/BlockCoalOre";
					}
					coal_oreFound = true;
				}
			}
		}
	}
}

ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS);
classNode.accept(writer);
return writer.toByteArray();
}

 

Have fun!

Link to comment
Share on other sites

  • 11 months later...

This is how I replaced the two blocks in my mod:

public byte[] patchClassBlock(byte[] data, boolean obfuscated)
{
String classBlock = obfuscated ? c.get("Block") : "net/minecraft/block/Block";

String methodRegisterBlocks = obfuscated ? "p" : "registerBlocks";
String methodSetHardness = obfuscated ? "c" : "setHardness";

ClassNode classNode = new ClassNode();
ClassReader classReader = new ClassReader(data);
classReader.accept(classNode, 0);

boolean bedrockFound = false;
boolean coal_oreFound = false;

for(int i = 0; i < classNode.methods.size(); i++)
{
	MethodNode method = classNode.methods.get(i);
	if(method.name.equals(methodRegisterBlocks) && method.desc.equals("()V"))
	{
		for(int j = 0; j < method.instructions.size(); j++)
		{
			AbstractInsnNode instruction = method.instructions.get(j);
			if(instruction.getOpcode() == LDC)
			{
				LdcInsnNode ldcInstruction = (LdcInsnNode)instruction;
				if(ldcInstruction.cst.equals("bedrock"))
				{
					if(!bedrockFound)
					{
						((TypeInsnNode)method.instructions.get(j + 1)).desc = "glenn/gases/BlockBedrock";
						((MethodInsnNode)method.instructions.get(j + 4)).owner = "glenn/gases/BlockBedrock";
					}
					bedrockFound = true;
				}
				else if(ldcInstruction.cst.equals("coal_ore"))
				{
					if(!coal_oreFound)
					{
						((TypeInsnNode)method.instructions.get(j + 1)).desc = "glenn/gases/BlockCoalOre";
						((MethodInsnNode)method.instructions.get(j + 3)).owner = "glenn/gases/BlockCoalOre";
					}
					coal_oreFound = true;
				}
			}
		}
	}
}

ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS);
classNode.accept(writer);
return writer.toByteArray();
}

 

Have fun!

 

When I try to use the "c.get("Block")" function in my code, I get the error: "c cannot be resolved." Have you defined the variable c offscreen, or is my eclipse debug profiler just buggy?

Link to comment
Share on other sites

I actually tried to figure out the same thing just yesterday, and I managed to do it without a Core Mod. I'm using 1.8, so I'm not sure if my code will work in 1.7.

 

First add those to attributes to your mod class:

private FMLControlledNamespacedRegistry<Item> iItemRegistry;
private Method addObjectRaw;

 

Second add this to your preInit:

try {
    Method getMain = GameData.class.getDeclaredMethod("getMain");
    getMain.setAccessible(true);
    GameData gameData = (GameData) getMain.invoke(null);

    Field f = GameData.class.getDeclaredField("iItemRegistry");
    f.setAccessible(true);
    iItemRegistry = (FMLControlledNamespacedRegistry<Item>) f.get(gameData);

    addObjectRaw = FMLControlledNamespacedRegistry.class.getDeclaredMethod("addObjectRaw", Integer.TYPE, Object.class, Object.class);
    addObjectRaw.setAccessible(true);

} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

 

The last thing you have to do is call addObjectRaw.invoke in your init:

addObjectRaw.invoke(iItemRegistry, <item it to overwrite>, new ResourceLocation(<resource name>), <item to overwrite with>);

 

 

NOTE: You have to manually replace the Method and Field names with their obfuscated names before releasing the mod or do something like this:

Method getMain;
try {
    try {
        getMain = GameData.class.getDeclaredMethod("getMain");
    } catch(NoSuchMethodException e) {
        getMain = GameData.class.getDeclaredMethod("<Obfuscated name>");
    }
} catch(Exception e) {
}

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

×
×
  • Create New...

Important Information

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