Jump to content

multiple biomes in own dimension?


Odai

Recommended Posts

Hello there,

I'm using my own WorldChunkManager for my Dimension that looks like this:

 

 

package net.minecraft.src;

import net.minecraft.src.*;

import java.util.*;

public class A_WorldChunkManager extends WorldChunkManager
{
    private List biomesToSpawnIn;
    private BiomeCache biomeCache;
    
     public A_WorldChunkManager()
     {
        biomeCache = new BiomeCache(this);
        biomesToSpawnIn = new ArrayList();
        biomesToSpawnIn.add(A_Ardenia.Wasteland);
     }

     public A_WorldChunkManager(World world)
     {
        this();
     }

     public List getBiomesToSpawnIn()
     {
        return biomesToSpawnIn;
     }


     public BiomeGenBase getBiomeGenAt(int i, int j)
     {
         return this.biomeCache.getBiomeGenAt(i, j);
     }

     //rainfall
     public float[] getRainfall(float par1ArrayOfFloat[], int par2, int par3, int par4, int par5)
     {
        if (par1ArrayOfFloat == null || par1ArrayOfFloat.length < par4 * par5)
        {
            par1ArrayOfFloat = new float[par4 * par5];
        }
        Arrays.fill(par1ArrayOfFloat, 0, par4 * par5, 0.0F);
        return par1ArrayOfFloat;
     }

     //temp
     public float[] getTemperatures(float par1ArrayOfFloat[], int par2, int par3, int par4, int par5)
     {
        if (par1ArrayOfFloat == null || par1ArrayOfFloat.length < par4 * par5)
        {
            par1ArrayOfFloat = new float[par4 * par5];
        }
        Arrays.fill(par1ArrayOfFloat, 0, par4 * par5, 0.0F);
        return par1ArrayOfFloat;
     }

     // Returns an array of biomes for the location input.
     // Everywhere is plains...
     public BiomeGenBase[] getBiomesForGeneration(BiomeGenBase[] par1ArrayOfBiomeGenBase, int par2, int par3, int par4, int par5)
     {
        IntCache.resetIntCache();

        if (par1ArrayOfBiomeGenBase == null || par1ArrayOfBiomeGenBase.length < par4 * par5)
        {
            par1ArrayOfBiomeGenBase = new BiomeGenBase[par4 * par5];
        }
        Arrays.fill(par1ArrayOfBiomeGenBase, 0, par4 * par5, A_Ardenia.Wasteland);
        return par1ArrayOfBiomeGenBase;
     }

     // Returns biomes to use for the blocks and loads the other data like temperature and humidity onto the WorldChunkManager Args: oldBiomeList, x, z, width, depth
     // Everywhere is STILL plains...
     public BiomeGenBase[] loadBlockGeneratorData(BiomeGenBase par1ArrayOfBiomeGenBase[], int par2, int par3, int par4, int par5) {
        if (par1ArrayOfBiomeGenBase == null || par1ArrayOfBiomeGenBase.length < par4 * par5) {
         par1ArrayOfBiomeGenBase = new BiomeGenBase[par4 * par5];
        }
        Arrays.fill(par1ArrayOfBiomeGenBase, 0, par4 * par5, A_Ardenia.Wasteland);
        return par1ArrayOfBiomeGenBase;
}

// checks given Chunk's Biomes against List of allowed ones
public boolean areBiomesViable(int i, int j, int k, List list) {
        return true; // Since we only used plains, yep they are allowed.
}

// Return a list of biomes for the specified blocks. Args: listToReuse, x, y, width, length, cacheFlag (if false, don't check biomeCache to avoid infinite loop in BiomeCacheBlock)
public BiomeGenBase[] getBiomeGenAt(BiomeGenBase par1ArrayOfBiomeGenBase[], int par2, int par3, int par4, int par5, boolean par6) {
        return loadBlockGeneratorData(par1ArrayOfBiomeGenBase, par2, par3, par4, par5);
}

// Finds a valid position within a range, that is once of the listed biomes.
public ChunkPosition findBiomePosition(int i, int j, int k, List list, Random random) {
        return new ChunkPosition(0, 0, 0); // Y position ignored, uses sea level for y spawn.
        // This will set your spawn X amd Z location.
}
}

 

 

How can i add more then one Biome? I tried several things, but I'm getting to blind to find the solution, would be nice if someone could help me.

Link to comment
Share on other sites

have you looked at wuppy's tutorials there are some on custom dimensions that might help you.

http://wuppy29.blogspot.nl/2012/08/forge-modding-132.html

they are for 1.3.2 but they should still work fine for 1.4.2. also if you can look at some of the minecraft source to see how they have done it. with forge look in the gameregistry package and if i remember correctly there was something on biomes. anyways should be enough to get you started any problems let me know.

Link to comment
Share on other sites

You're going to want to look at the WorldChunkManager for the overworld (WorldChunkManagerGenerate or something like that) and ChunkProviderGenerate to see how the normal game does this.

 

The GenLayer files will be important for this. You may end up having to do a full re-implementation of GenLayer and its subclasses like I did at first to get things working.

GenLayer is important because its subclasses do things like setting biomeIDs for coordinates and changing biomeIDs are locations into other biomes (i.e. desert to desertHills). GenLayer also does some terrain manipulation that creates things like rivers and mushroom islands.

 

 

I'll warn you now that custom biomes can be a PITA. Make sure your reference to the WorldChunkManager and ChunkProvider for your dimension are always the correct ones during world generation, otherwise you could end up with frustrating NullPointerExceptions. Also, make sure that whatever array of Biomes/biomeIDs you end up using (you'll understand where this applies later) is never given a null value or an invalid biomeID (say, for a biome that doesn't exist).

 

 

I've gone through a lot of pain getting my dimension project to work, but currently it generates properly with caves, ravines, biomes, etc. It's all possible, just not for the faint of heart.

I accidentally the everything then NullPointerException.

Link to comment
Share on other sites

  • 2 months later...

Ok, so I have been working on this as well, I only have 5 Biomes needed for my Dimension.

 

Problem is I have looked into GenLayer and its subclasses, WorldChunkManagerGenerate and ChunkProviderGenerate.

 

But each file seems to lead to More and More of them...

 

In this last try i ended up basically Building EVERY file used to create the Overworld.... this in turn had one of two effects....

 

1. My dimension Ignored its Biomes or 2 It Borked the Loading of the Overworld.

 

Could someone with Knowledge of this maybe give a List of the Files that need to be made?

and Possibly some pointers of exactly what Has to be different between the original and the custom files?

 

If only one of the Dimension Mods that has done this would be open source I would have a Guide to work from.

But so far I cannot find any that are.

 

I understand making a tutorial would be a PITA. SO asking or hoping for one would be a mute point.

 

Link to comment
Share on other sites

  • 4 weeks later...

I too want to know this.

 

I could sit here and type out an explanation for how you could achieve this, but I decided that I'd just google for an example/tutorial. From my search I found an open source mod that added a new dimension called "Inverted World" and I think you should study what the developer of it did and experiment yourself with it possibly. Here is the link https://github.com/tuyapin/InvertedWorld . Now I'm not saying to take the mod and call it your own, but take advantage of it being open source and study it.

Link to comment
Share on other sites

  • 2 months later...

Also some thing i've noticed with my biome for my dimension, is you dont need to use

GameRegistry.addBiome..

for your dimension to see it as a actual biome. What that addBiome method does is bring it in so the overworld can see it, and create the overworld with your biome.

As for achieving a multiple biome, I would look inside the generation files for the overworld. I'm assuming it would be pretty easy to add multiple if you know how to read code.

If I helped, please click the 'Thank you'!

 

 

 

 

.

Link to comment
Share on other sites

You could try reading the actual method in GameRegistry and finding out how it adds the biomes. Then you could try to recreate it

I am Mew. The Legendary Psychic. I behave oddly and am always playing practical jokes.

 

I have also found that I really love making extremely long and extremely but sometimes not so descriptive variables. Sort of like what I just did there xD

Link to comment
Share on other sites

You could try reading the actual method in GameRegistry and finding out how it adds the biomes. Then you could try to recreate it

 

No thats not true, as the addBiome and removeBiome add the biome to the overworld and not to your custom dimension, so if you would want to make your custom biomelists etc etc you would have to do a hell lot. I have also been working on this issue a lot and havent gotten this to work yet.

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.