Jump to content

[1.7.10] Custom World Generated Structures not generating in World


JohnnyMccurm

Recommended Posts

Having an issue with my first generated world structure, I wanted to generate a cave for the block I've been working on over the past few days to sit inside, the problem is the structure isn't spawning in plains biomes, like I want it too, and since I've not seen one yet I'm pretty certain I have an error, somewhere.

 

I can't really see errors in my code, but here's my worldgen class.

 


public class WorldGen implements IWorldGenerator {



@Override

public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)

    {

switch(world.provider.dimensionId)

        {

case 0: //surface world

generateSurface(world, random, chunkX*16, chunkZ*16);

            case 1: //end world

generateEnd(world, random, chunkX * 16, chunkZ * 16);

            case -1: //nether world

generateNether(world, random, chunkX * 16, chunkZ * 16);

}

    }





private void generateSurface(World world, Random random, int x, int z)

    {

this.addSpawn(ModBlocks.johnnyFaceBlockRubble, world, random, x, z,16,16,4 + random.nextInt(6), 25, 38, 100);



BiomeGenBase biome = world.getWorldChunkManager().getBiomeGenAt(x, z);



        if ((biome == BiomeGenBase.plains))

        {

for(int a = 0; a < 1; a++)

            {

int i = x + random.nextInt(16);

                int j = z + random.nextInt(16);

                int k   = world.getHeightValue(i, j);

                new StructureJohnnyFaceCave().generate(world, random, i, k, j);

}

        }

    }



private void generateEnd(World world, Random random, int x, int z)

    {



    }



private void generateNether(World world, Random random, int x, int z)

    {



    }



private void addSpawn(Block block, World world, Random random, int blockXPos , int blockZPos, int maxX, int maxZ, int maxVeinSize, int chanceToSpawn, int minY, int maxY)

    {

for(int i = 0; i <chanceToSpawn; i++)

        {

int posX = blockXPos + random.nextInt(maxX);

            int posY = minY + random.nextInt(maxY - minY);

            int posZ = blockZPos + random.nextInt(maxZ);

(new WorldGenMinable(block,  maxVeinSize)).generate(world, random, posX, posY, posZ);

}

    }





}

 

I'll link the Structure file if it's actually requested, since that is a large file (Most structures are just the java required to place the blocks, so it's 3000 lines long)

 

 

 

pretty confident that if an error does exist it's in my WorldGen class and not the structure class, but I could be wrong, I have been before, and only been doing this stuff for a week :D

If anyone could help out I'd be grateful :)

Think Java is tough? try BrainFuck!

Link to comment
Share on other sites

Well. You cant just create a world generator and expect it to work. You need to tell Forge that you create one and that it should use it.

I guess MinecraftForge.TERRAIN_GEN_BUS should be what you are looking for.

But I need to say that I'm not sure. I never worked with Terrain generating. So I might be wrong. Just triing to give u some hints what to look for

Link to comment
Share on other sites

Use World.getBiomeGenForCoords to get the Biome. It takes block coordinates, not chunk coordinates.

 

Can you be more specific?

 

So I need to change my entire generateSurface method?

 

If I change:

 

"BiomeGenBase biome = world.getWorldChunkManager().getBiomeGenAt(x, z);"

 

to

 

"BiomeGenBase biome = world.getBiomeGenForCoords().getBiomeGenAt(x, z);"

 

all I get is an error.

 

I was following this guys tutorial on it, and he used the same code as I have currently, and HIS worked:

 

Think Java is tough? try BrainFuck!

Link to comment
Share on other sites

Consider the Block at 3, 4, 3.

It has coordinates x=3, y=4, z=3.

 

It is in chunk that starts at 0, 0, so the chunk coordinates are x=0, z=0.

 

To get from one to the other do an integer divide by 16 (to get from block coords to chunk coords) or multiply by 16 for the other way around.

 

BiomeGenBase biome = world.getBiomeGenForCoords(x / 16 , z / 16);?

BiomeGenBase biome = world.getBiomeGenForCoords(x * 16 , z * 16);?

 

If not, I'm completely lost.

 

 

Think Java is tough? try BrainFuck!

Link to comment
Share on other sites

Yes, that is what I said. But you did it twice.

 

Twice? I don't multiply both X and Z then? I don't multiply in this line?

 

generateSurface(world, random, chunkX*16, chunkZ*16);?

 

I'm so lost, just going to restart from scratch, at least that'll be better than talking in riddles and replacing my code with code I've never heard of before, to find individual blocks, which I have no idea why I'm even doing to spawn a structure.

 

This obviously makes some sense to you but it makes absolutely none to me.

Think Java is tough? try BrainFuck!

Link to comment
Share on other sites

Well, thing is, now that my code doesn't generate correctly I don't really have a guide to consult -- there's hardly any code guides for this on YT since everyone uses mods to do it for them, and I don't want to do that. I'm sure it was a simple problem to begin with.

 

Hopefully someone will actually explain the process, eventually.

 

Going to work on other parts of my mod while I wait, not spending another night trying to work this one out when I don't understand it.

Think Java is tough? try BrainFuck!

Link to comment
Share on other sites

  • 4 weeks later...

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.



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I have been currently having this issue where if I join my server, I get one of these 2 errors. I have tried fixing this issue by looking at the output log in both Server and Client side, from what I have seen I was not able to find anything I can understand that would have helped me. These two errors pop up randomly with no pattern when attempting to join the server when it says Encrypting... I have tried removing all mods from the Client and Server side, which did nothing and still showed the same errors (I don't remember which error showed or even if it showed both), so from what I tried to do, I do not think this is a mod Issue but rather a Forge Issue. How do I fix this? Here are the errors and all the information: Internal Exception: java.lang.NoClassDefFoundError: com/google/common/util/concurrent/TrustedListenableFutureTask Debug.log: https://www.mediafire.com/file/hbtycb1tamqt1qr/debug2.log/file (PS: Debug.log file cannot be uploaded to Pastebin due to it crashing because of the Large Amount of Spam OpenGL logs) Internal Exception: Internal Exception: java.lang.NoClassDefFoundError: com/google/common/collect/LinkedHashMultiMap$ValueSet Debug.log: https://www.mediafire.com/file/o1d48z0bjfyff1e/debug.log/file (PS: Debug.log file cannot be uploaded to Pastebin due to it crashing because of the Large Amount of Spam OpenGL logs) Client Mods: Server Mods:
    • the removing of the Material class has mess up bad mi code now have to many broken things after updating mi code to 1.20.4 this are mi pipes they conect each others but to have it right i have to made a custome BlockItem  the thing its that i need to check the block im looking at  if its some something like grass or wheat i need to ignore and replace whit mi pipe block but if its something like leaves then it must respect it and set the pipe above or at the side  in x < 1.9just check the material the target block is made of     in 1.20 cannot be done like this soo i was trying to make a list of solid blocks but is much work and also it don't have in account blocks from other mods              
    • tysm, ur a life saver,, its weird immersive portals became the issue because I play-tested the mod pack once and everything ran, it only started crashing when I tried playing it a second time.
    • could it be by making a custome block whit no hitbox  or by a falling block entity  // ########## ########## ########## public FallingBlockEntity create_FallingBlock(BlockPos cursor){ this.fallingblock = FallingBlockEntity.fall(warudo, cursor, this.getBlockState() ); this.fallingblock.setNoGravity(true); warudo.addFreshEntity(this.fallingblock); return this.fallingblock; }
    • in 1.19 i notice that an have to fix by hand  in 1.20.4 this is not a problem anymore but 1.20 has its own set of new problems   // ########## ########## ########## ########## // lista de entidades atravezadas por la linea entre vi y vh|vo public ArrayList<LivingEntity> findHitEntitys() { return findHitEntitys(0.0D); } public ArrayList<LivingEntity> findHitEntitys(double grow) { double hgrow = (grow/2) * -1; Vec3 vi = this.subject.getEyePosition(); Vec3 vo = (this.vh != null) ? this.vh : this.vo; /* Double xn = Math.min(vi.x, vo.x); Double xm = Math.max(vi.x, vo.x); Double yn = Math.min(vi.y, vo.y); Double ym = Math.max(vi.y, vo.y); Double zn = Math.min(vi.z, vo.z); Double zm = Math.max(vi.z, vo.z); Vec3 vdi = new Vec3(xn,yn,zn); Vec3 vdo = new Vec3(xm,ym,zm); */ // particle(warudo, vo); AABB bb = new AABB(vi, vo).inflate(2.0D); //System.out.println( (bb.maxX - bb.minX) + ", " + (bb.maxY - bb.minY) + ", " + (bb.maxZ - bb.minZ) ); ArrayList<LivingEntity> list = new ArrayList<LivingEntity>(); Predicate<? super Entity> cosa = target -> (target instanceof LivingEntity);// for (Entity target_entity : this.warudo.getEntities(this.subject, bb, cosa)) { //System.out.println(entity1.getBoundingBox()); // is the entity in the line //if (entity1 instanceof LivingEntity) { AABB aabb = target_entity.getBoundingBox().inflate(grow); //System.out.println( "x " + (aabb.maxX - entity1.getX()) + ", " + ( entity1.getX() - aabb.minX ) ); //System.out.println( "y " + (aabb.maxY - entity1.getY()) + ", " + ( entity1.getY() - aabb.minY ) ); //System.out.println( "z " + (aabb.maxZ - entity1.getZ()) + ", " + ( entity1.getZ() - aabb.minZ ) ); Optional<Vec3> optional = aabb.clip(vi, vo); //System.out.println(aabb); if (optional.isPresent()) { list.add((LivingEntity) target_entity); } } } list.sort((o1, o2) -> (Double.compare(o1.position().distanceTo(vi), o2.position().distanceTo(vi)))); return list; }   1.20.4 has not this problem anymore
  • Topics

×
×
  • Create New...

Important Information

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