Jump to content

Structures from Ported Mod do not Generate


daedleus12

Recommended Posts

I'm fairly new to Minecraft modding in general, but I do have a fair amount of experience coding in C++ and a touch of Java knowledge as well. That being said, I've been trying to port one of my favorite dungeon mods (DungeonPack) back in the day from 1.8 to 1.12. Its been going pretty smooth overall, probably because the mod only generates structures and adds no mobs/items etc., and Forge recognizes it and loads it without a hiccup. Problem is, none of the structures seem to generate. The way I believe this mod generates structures is by placing each block individually, specifically through a function called addBlock(), which goes like this:

public void addBlock(int par1, int par2, int par3, int par4) {
	this.world.setBlockState(new BlockPos(par1, par2, par3), Block.getStateById(par4));
}

 

Each structure's class calls this function hundreds of times, using different parameters which I'm guessing is for position and type of block. There is also a less used function called addBlockAndMetadata():

public void addBlockAndMetadata(int par1, int par2, int par3, int par4, int par5) {
	this.world.setBlockState(new BlockPos(par1, par2, par3), Block.getBlockById(par4).getStateFromMeta(par5));
}

 

Finally, there's addBlockSecond(), which appears only twice and is identical to the first function. This one is only used when the first function is overridden by a class, which I assume is to add additional prerequisites? I'm entirely blind to what any of these variables actually mean:

public void addBlock(int par1, int par2, int par3, int par4) {
    if (par4 < 0) {
     	par4 = 53;
    }
    
	 addBlockSecond(par1, par2, par3, par4);
}

 

I don't know how helpful these are, but they're good to have in order to understand the context of this problem. What I think the source of the problem is are the things I had to change between versions. Eclipse instructed me to change the object world (used above) from the class World to WorldServer (which I believe inherits from World). Also,

MinecraftServer.getServer().worldServerForDimension();

wasn't valid, and I had to change it to 

FMLCommonHandler.instance().getMinecraftServerInstance().getWorld(0);

Which was recommended herehttp://www.minecraftforge.net/forum/topic/60383-how-is-worldserverfordimension-called-in-the-newest-version-of-forge/

 

These changes may have a hand in the structures not generating, as the addBlock() function relies on the world object, and thus by extension the return value of the function above as well as the class type (as far as I know) do as well. So perhaps the functionality didn't quite carry over from previous versions? The source code is available here: https://github.com/ie04/dungeonpackreloaded. Thanks in advance.

 

 

 

 

 

 

 

Edited by daedleus12
Link to comment
Share on other sites

1 hour ago, daedleus12 said:

this.world.setBlockState(new BlockPos(par1, par2, par3), Block.getStateById(par4));

 

1 hour ago, daedleus12 said:

this.world.setBlockState(new BlockPos(par1, par2, par3), Block.getBlockById(par4).getStateFromMeta(par5));

Just... no. Don't interact with raw numerical IDs ever. They can and will change. What means "block of lava" in one world may mean "block of singularity matter infused with neutronium" in another and you would have no way to know beforehand. Just ditch the entire system and make a new one. Probably the one that would utilize structure blocks and structure files.

 

Why did you upload files here? Create a git repository and link it here. People are not going to download random archives from the internet. What's with the java files anyway? Why do they have a comment before some lines indicating the line's number?

Link to comment
Share on other sites

20 minutes ago, V0idWa1k3r said:

 

Just... no. Don't interact with raw numerical IDs ever. They can and will change. What means "block of lava" in one world may mean "block of singularity matter infused with neutronium" in another and you would have no way to know beforehand. Just ditch the entire system and make a new one. Probably the one that would utilize structure blocks and structure files.

 

Why did you upload files here? Create a git repository and link it here. People are not going to download random archives from the internet. What's with the java files anyway? Why do they have a comment before some lines indicating the line's number?

The comment lines were either the decompiler or the author's doing. Also yes I will upload them to Github (which was probably a better idea retrospectively). How do you suppose I use structure and/or block files? Each structure is made of hundreds of individual block placements, so I have no idea what the big picture should be.

Edited by daedleus12
Link to comment
Share on other sites

6 minutes ago, daedleus12 said:

How do you suppose I implement structure and/or block files? Each structure is made of hundreds of individual block placements, so I have no idea what the big picture should be.

You can use the structure blocks to save the structure into a format the game would recognize and then use built-in structure generation system to generate them from the resulting files. You can see an example in vanilla at ComponentScatteredFeaturePieces.Igloo.

Link to comment
Share on other sites

27 minutes ago, V0idWa1k3r said:

You can use the structure blocks to save the structure into a format the game would recognize and then use built-in structure generation system to generate them from the resulting files. You can see an example in vanilla at ComponentScatteredFeaturePieces.Igloo.

Okay so I've come up with a very hacky method: I generate the structures in a superflat world in 1.8, move the world to 1.12 and use structure blocks to save them in files, then basically create a new mod to generate these structures based on specifications in a config file (rarity, etc.). If theoretically this goes as planned, how will I use other things like loot tables? will I have to generate chests separately? Thanks for helping out btw.

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
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.



×
×
  • Create New...

Important Information

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