Jump to content

Recommended Posts

Posted (edited)

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
Posted
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?

Posted (edited)
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
Posted
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.

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

Posted
4 minutes ago, V0idWa1k3r said:

You will have to find the chest in the structure manually after generating it(again, look at the igloo example) and give it the loottable you want.

Okay I'm working on it. Will tell you how it goes.

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

    • This is the last line before the crash: [ebwizardry]: Synchronising spell emitters for PixelTraveler But I have no idea what this means
    • What in particular? I barely used that mod this time around, and it's never been a problem in the past.
    • Im trying to build my mod using shade since i use the luaj library however i keep getting this error Reason: Task ':reobfJar' uses this output of task ':shadowJar' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. So i try adding reobfJar.dependsOn shadowJar  Could not get unknown property 'reobfJar' for object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler. my gradle file plugins { id 'eclipse' id 'idea' id 'maven-publish' id 'net.minecraftforge.gradle' version '[6.0,6.2)' id 'com.github.johnrengelman.shadow' version '7.1.2' id 'org.spongepowered.mixin' version '0.7.+' } apply plugin: 'net.minecraftforge.gradle' apply plugin: 'org.spongepowered.mixin' apply plugin: 'com.github.johnrengelman.shadow' version = mod_version group = mod_group_id base { archivesName = mod_id } // Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17. java.toolchain.languageVersion = JavaLanguageVersion.of(17) //jarJar.enable() println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}" minecraft { mappings channel: mapping_channel, version: mapping_version copyIdeResources = true runs { configureEach { workingDirectory project.file('run') property 'forge.logging.markers', 'REGISTRIES' property 'forge.logging.console.level', 'debug' arg "-mixin.config=derp.mixin.json" mods { "${mod_id}" { source sourceSets.main } } } client { // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. property 'forge.enabledGameTestNamespaces', mod_id } server { property 'forge.enabledGameTestNamespaces', mod_id args '--nogui' } gameTestServer { property 'forge.enabledGameTestNamespaces', mod_id } data { workingDirectory project.file('run-data') args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/') } } } sourceSets.main.resources { srcDir 'src/generated/resources' } repositories { flatDir { dirs './libs' } maven { url = "https://jitpack.io" } } configurations { shade implementation.extendsFrom shade } dependencies { minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" implementation 'org.luaj:luaj-jse-3.0.2' implementation fg.deobf("com.github.Virtuoel:Pehkui:${pehkui_version}") annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' minecraftLibrary 'luaj:luaj-jse:3.0.2' shade 'luaj:luaj-jse:3.0.2' } // Example for how to get properties into the manifest for reading at runtime. tasks.named('jar', Jar).configure { manifest { attributes([ 'Specification-Title' : mod_id, 'Specification-Vendor' : mod_authors, 'Specification-Version' : '1', // We are version 1 of ourselves 'Implementation-Title' : project.name, 'Implementation-Version' : project.jar.archiveVersion, 'Implementation-Vendor' : mod_authors, 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), "TweakClass" : "org.spongepowered.asm.launch.MixinTweaker", "TweakOrder" : 0, "MixinConfigs" : "derp.mixin.json" ]) } rename 'mixin.refmap.json', 'derp.mixin-refmap.json' } shadowJar { archiveClassifier = '' configurations = [project.configurations.shade] finalizedBy 'reobfShadowJar' } assemble.dependsOn shadowJar reobf { re shadowJar {} } publishing { publications { mavenJava(MavenPublication) { artifact jar } } repositories { maven { url "file://${project.projectDir}/mcmodsrepo" } } } my entire project:https://github.com/kevin051606/DERP-Mod/tree/Derp-1.0-1.20
    • All versions of Minecraft Forge suddenly black screen even without mods (tried reinstalling original Minecraft, Java, updating drivers doesn't work)
  • Topics

×
×
  • Create New...

Important Information

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