Jump to content

[1.7.10][SOLVED] java.lang.NoClassDefFoundError: net/minecraft/world/World$2


Recommended Posts

Posted

SOLVED: The issue was that a Block in my mod ended up causing a infinite loop of notifyBlockOfNeighborChange, which seems to cause it to fall back to the original call(Thus not showing a correct stacktrace) with a "java.lang.NoClassDefFoundError: net/minecraft/world/World$2" exception.

 

Hello,

 

I have been working on my mod for quite a while now, and decided to do the first test run outside the Development environment.

We are all able to start up a new world and run around using the mod, but at some point we all get a crash due to

java.lang.NoClassDefFoundError: net/minecraft/world/World$2

 

The Setup:

New install of Forge 1.7.10 - 10.13.0.1180

No other mods installed except mine

 

I have two crash logs, the first one we hit happens randomly when we open a Chest:

http://pastebin.com/Vv0Z5pHa

 

The second one happens for me every time I open a specific world(Which did not crash on first open, and was closed normally)

http://pastebin.com/12keR5dx

 

Both crashes happen at:

java.lang.NoClassDefFoundError: net/minecraft/world/World$2
at net.minecraft.world.World.func_147460_e(World.java:690)

Where func_147460_e is notifyBlockOfNeighborChange.

I have really no idea why this crash happens. Nothing in my mod changes base files in any way!

 

The code from my mod that is called in the second crash log is simply this:

	public void entryUpdated() {
215		redstoneManager.update();
216		inventoryManager.update();
217		//TODO: Call onNeighborUpdate(tile)
218		worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord, getBlockType());
219		worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
}

 

This only happens in the Release build, and not when I'm running from Eclipse, so I have no way to debug this.

I'd really appreciate it if anyone could help me with this. :)

Posted

i would suggest checking all your filenames, treat them as case sensitive , check registering of blocks, items, and tile entities 

the error is caused by something being missing ,

could even be trying to access a client only class, server side

 

Posted

You are using ServerTickEvent to update a TileEntity ? Why ?

I'd say a TileEntity was partially unloaded, but your WarpedNetwork tried to tick it anyways.

That would crash Minecraft for sure.

Posted

Hi

 

Perhaps your build environment has been corrupted or has a (de)obfuscation problem.  That error shows up when a class is present during compile time but not during run time, and since it's a vanilla class, I'm struggling to think of any way your mod might cause that.  Unless GotoLink is right and you are doing something wrong with the world Object.  Where does worldObj come from?

 

Interestingly, my World.java:690 is not in that function at all, even though I have 1.7.10 - 10.13.0.1180 installed same as you.  Maybe that means something, maybe not.

 

    /**
     * The block type change and need to notify other systems  Args: x, y, z, blockID
     */
    public void notifyBlockChange(int p_147444_1_, int p_147444_2_, int p_147444_3_, Block p_147444_4_)
    {
        this.notifyBlocksOfNeighborChange(p_147444_1_, p_147444_2_, p_147444_3_, p_147444_4_);
    }

    /**
     * marks a vertical line of blocks as dirty
     */
    public void markBlocksDirtyVertical(int p_72975_1_, int p_72975_2_, int p_72975_3_, int p_72975_4_)
    {
        int i1;

        if (p_72975_3_ > p_72975_4_)
        {                                                          // line 690 here
            i1 = p_72975_4_;

 

-TGG

Posted

Thank you all for taking the time to answer =)

 

@Ewe Loon

It all works in the development environment, and all of those you mention would give a different error at a different time. I'm able to start up and use my mod normally, until a random point where it just crashes.

 

@GotoLink

I'm using ServerTickEvent to do a single shot initialization of certain Tile Entities after they are first loaded. When they are loaded they register themself to do a pre-tick which requires access to the chunk they are on(Which is not available just as they are loaded most of the time). Essentially a onTileEntityLoaded.

And again, if that was the cause, it would give a totally different crash message!

 

@TheGreyGhost

That was my thought too, but I have tried cleaning, starting from scratch an copying over my sources and everything, nothing seems to work =/

The second crash happens in a TileEntity, which has worldObj set when it's loaded/placed.

Also, my World.java:690 doesn't point to notifyBlockOfNeighborChange either, but that's what the crash log say it's currently inside. I'm assuming that Forge does some kind of binary patching that moves the lines?

 

 

Had it simply been that my code did something weird with the World, it should just crash on Null pointer or some illegal operation, not throw a NoClassDefFoundError, that is what is confusing me.

 

It might be that I somehow screw something up so it throws inside the try block in notifyBlockOfNeighborChange. Could something inside the Catch not be (de)obfuscated correctly?

Posted

~4days ago, I accidentally cause an infinite notifyBlockOfNeighborChange loop.

The error I was getting was exactly the same as you posted.

 

My block was receiving a neighbor change event doing some logic, updating and telling neighbors it changed.

When I placed two beside each other and the conditions where right the one would update and tell the other, who would then update and tell the first one, who would update again and this continued forever.

Posted

Whoa, I didn't even think of that.

If that was the case the stack trace should show that, but just to test I made my entryUpdated(The one who calls notifyBlockOfNeighborChange) print out a string before and after.

It starts to call notifyBlockOfNeighborChange 34 times in a row(Without calling end) before it crashes, so it does indeed seem to be an infinite loop.

 

Thank you so much for pointing out the problem =D

I will have to rethink my logic a bit.

Still strange that it would give out a NoClassDefFoundError error in this case tho.

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
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
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.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • https://mclo.gs/46Xf7Sq thanks
    • That seems to have fixed it, thank you!
    • I am having some issues starting an RLCraft server on a minimal install of Debian 12. I have Java installed and I'm able to start the vanilla Minecraft server jar no problem and people can join and play without any issues, as soon as I try to create a new directory with the Forge jar the initial install with the INSTALLER jar works when I use the java command with the --installServer flag, but as soon as I try to start the server using the forge jar that is NOT labelled with installer I get the following error: A problem occurred running the Server launcher.java.lang.reflect.InvocationTargetException         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)         at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)         at java.base/java.lang.reflect.Method.invoke(Method.java:569)         at net.minecraftforge.fml.relauncher.ServerLaunchWrapper.run(ServerLaunchWrapper.java:70)         at net.minecraftforge.fml.relauncher.ServerLaunchWrapper.main(ServerLaunchWrapper.java:34) Caused by: java.lang.ClassCastException: class jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to class java.net.URLClassLoader (jdk.internal.loader.ClassLoaders$AppClassLoader and java.net.URLClassLoader are in module java.base of loader 'bootstrap')         at net.minecraft.launchwrapper.Launch.<init>(Launch.java:34)         at net.minecraft.launchwrapper.Launch.main(Launch.java:28)         ... 6 more   I have tried using newer versions of Java directly from Oracle as well. Has anybody been successful in starting and running a RLCraft server from the terminal on a Linux machine? I cannot figure out why it doesn't want to work but the vanilla jar works without issue. Thank you in advance!
    • This is my latest attempt :  public class ManaScreen extends Screen { Mana mana = new Mana(); boolean removeManaBar = false; ResourceLocation manaBar = ResourceLocation.fromNamespaceAndPath(RSGArmoury.MOD_ID, "/textures/block/spawnable_arena_wall.png"); public ManaScreen() { super(Component.literal("Mana")); } @Override protected void init() { super.init(); Minecraft.getInstance().setScreen(this); } @Override public boolean isPauseScreen() { return false; } @Override public void render(GuiGraphics pGuiGraphics, int pMouseX, int pMouseY, float pPartialTick) { pGuiGraphics.blit(manaBar, 10, -10, 0, 0, mana.getMana(), 10, mana.getMana(), 10); if (removeManaBar) { this.onClose(); return; } super.render(pGuiGraphics, pMouseX, pMouseY, pPartialTick); } public void addManaBar() { removeManaBar = false; Minecraft.getInstance().setScreen(new ManaScreen()); } public boolean removeManaBar() { return removeManaBar = true; } }
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.