Jump to content

[UNSOLVED][1.7.10] custom topBlock/fillerBlock in custom biome


Recommended Posts

Posted

Hello.

I'm having a problem with my custom underwater biomes in my Atlantis dimension. They used to work in 1.6, but now that I've upgraded it to 1.7, my biome topBlock and fillerBlock won't generate and are instead replaced by gravel. I've had this problem for months now and I have tried many things to fix it. Any help would be greatly appreciated. All of my code is on GitHub.

 

http://www.github.com/codecademyminecraftmods/atlantis-mod/

Posted

When you make a class that extends BiomeGenBase, you can just do this.topBlock =  and this.fillerBlock =.  I'm not sure why you don't want to make a custom BiomeGenBase, but it's extremely simple:

 

BiomeGenBase

 

And instantiated/set up here:

 

Main

Posted

When you make a class that extends BiomeGenBase, you can just do this.topBlock =  and this.fillerBlock =.  I'm not sure why you don't want to make a custom BiomeGenBase, but it's extremely simple:

 

BiomeGenBase

 

And instantiated/set up here:

 

Main

 

if you had actually read my code you would understand my question. extending BiomeGenBase, like you did, is different than making your own BiomeGenBase, which requires a coremod i believe. anyways, my biomes do use this.topBlock = and this.fillerBlock = and they both extend BiomeGenBase. they are instantiated at the right times as well. however, the custom top and fillers are still not working.

Posted

Then I don't know, my underwater biome's topBlock and fillerBlock worked just fine.

 

PS, why are you making the topBlock water?  The topBlock is the top block of the terrain, putting the average height below sea level is how you fill a biome with water.

Posted

Then I don't know, my underwater biome's topBlock and fillerBlock worked just fine.

 

PS, why are you making the topBlock water?  The topBlock is the top block of the terrain, putting the average height below sea level is how you fill a biome with water.

 

i didnt make the topBlock water, you still havent read my code apparently. thanks anyways tho.

 

i sure wish a forum mod could take a look at this *ahem*

Posted

Are both your biomes doing this, or have you only seen one of them? Also a quick note, your like to your repository is broken, so you may want to get that fixed.

Posted

Have you looked at how Deep Ocean generates? It most likely is a mutated Ocean with a custom set of properties, you may have to override those properties to get rid of the stone and gravel.

Posted

Have you looked at how Deep Ocean generates? It most likely is a mutated Ocean with a custom set of properties, you may have to override those properties to get rid of the stone and gravel.

 

hm it appears that it isnt, the only difference it the height...

plus, im not extending deepOcean, im extending BiomeGenDeepOcean.

Posted

I was just saying the biome name, not the name of the class when I said Deep Ocean, but looking at BiomeGenBase, it looks like you will want to override generateBiomeTerrain, this is making it so that is the top block is less than 56 it is set to gravel. overriding this method will allow you to generate your top block the way you want it.

Posted

I was just saying the biome name, not the name of the class when I said Deep Ocean, but looking at BiomeGenBase, it looks like you will want to override generateBiomeTerrain, this is making it so that is the top block is less than 56 it is set to gravel. overriding this method will allow you to generate your top block the way you want it.

 

ok thanks for pointing out that you can override that function, i thought it was final, like genTerrainBlocks().

could you show me how to override this? my forge version isnt giving very descriptive variable names, im not sure exactly what to pass it instead.

Posted

My bad, didn't realize it was final. It looks like you can use your own version of it, the BiomeGenOcean class has

public void genTerrainBlocks(World p_150573_1_, Random p_150573_2_, Block[] p_150573_3_, byte[] p_150573_4_, int p_150573_5_, int p_150573_6_, double p_150573_7_)
    {
        super.genTerrainBlocks(p_150573_1_, p_150573_2_, p_150573_3_, p_150573_4_, p_150573_5_, p_150573_6_, p_150573_7_);
    }

You may be able to use that and make your own genBiomeTerrain method. How it is working in the BiomeGenOcean class it it is sending the variables to genTerrainBlocks in the BiomeGenBase class, which is then sending the variables to genBiomeTerrain. I cannot say for sure if that would work, but it's worth a shot.

Posted

My bad, didn't realize it was final. It looks like you can use your own version of it, the BiomeGenOcean class has

public void genTerrainBlocks(World p_150573_1_, Random p_150573_2_, Block[] p_150573_3_, byte[] p_150573_4_, int p_150573_5_, int p_150573_6_, double p_150573_7_)
    {
        super.genTerrainBlocks(p_150573_1_, p_150573_2_, p_150573_3_, p_150573_4_, p_150573_5_, p_150573_6_, p_150573_7_);
    }

You may be able to use that and make your own genBiomeTerrain method. How it is working in the BiomeGenOcean class it it is sending the variables to genTerrainBlocks in the BiomeGenBase class, which is then sending the variables to genBiomeTerrain. I cannot say for sure if that would work, but it's worth a shot.

 

thats not working either. thanks for trying tho :(

Posted

well here's the code for the ChunkProvider:

 

 

package io.github.codecademyminecraftmods.atlantismod.dimension;

 

import static net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.CAVE;

import static net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.MINESHAFT;

import static net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.RAVINE;

import static net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.SCATTERED_FEATURE;

import static net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.STRONGHOLD;

import static net.minecraftforge.event.terraingen.InitMapGenEvent.EventType.VILLAGE;

import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.DUNGEON;

import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.ICE;

import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.LAKE;

import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.LAVA;

 

import java.util.List;

import java.util.Random;

 

import net.minecraft.block.Block;

import net.minecraft.block.BlockFalling;

import net.minecraft.entity.EnumCreatureType;

import net.minecraft.init.Blocks;

import net.minecraft.util.IProgressUpdate;

import net.minecraft.util.MathHelper;

import net.minecraft.world.ChunkPosition;

import net.minecraft.world.SpawnerAnimals;

import net.minecraft.world.World;

import net.minecraft.world.WorldType;

import net.minecraft.world.biome.BiomeGenBase;

import net.minecraft.world.chunk.Chunk;

import net.minecraft.world.chunk.IChunkProvider;

import net.minecraft.world.gen.MapGenBase;

import net.minecraft.world.gen.MapGenCaves;

import net.minecraft.world.gen.MapGenRavine;

import net.minecraft.world.gen.NoiseGenerator;

import net.minecraft.world.gen.NoiseGeneratorOctaves;

import net.minecraft.world.gen.NoiseGeneratorPerlin;

import net.minecraft.world.gen.feature.WorldGenDungeons;

import net.minecraft.world.gen.feature.WorldGenLakes;

import net.minecraft.world.gen.structure.MapGenMineshaft;

import net.minecraft.world.gen.structure.MapGenScatteredFeature;

import net.minecraft.world.gen.structure.MapGenStronghold;

import net.minecraft.world.gen.structure.MapGenVillage;

import net.minecraftforge.common.MinecraftForge;

import net.minecraftforge.event.terraingen.ChunkProviderEvent;

import net.minecraftforge.event.terraingen.PopulateChunkEvent;

import net.minecraftforge.event.terraingen.TerrainGen;

import cpw.mods.fml.common.eventhandler.Event.Result;

 

public class ChunkProviderAtlantis implements IChunkProvider

{

    /**

    * RNG.

    */

    private Random rand;

    private NoiseGeneratorOctaves field_147431_j;

    private NoiseGeneratorOctaves field_147432_k;

    private NoiseGeneratorOctaves field_147429_l;

    private NoiseGeneratorPerlin field_147430_m;

    /**

    * A NoiseGeneratorOctaves used in generating terrain

    */

    public NoiseGeneratorOctaves noiseGen5;

    /**

    * A NoiseGeneratorOctaves used in generating terrain

    */

    public NoiseGeneratorOctaves noiseGen6;

    public NoiseGeneratorOctaves mobSpawnerNoise;

    /**

    * Reference to the World object.

    */

    private World worldObj;

    /**

    * are map structures going to be generated (e.g. strongholds)

    */

    private final boolean mapFeaturesEnabled;

    private WorldType field_147435_p;

    private final double[] field_147434_q;

    private final float[] parabolicField;

    private double[] stoneNoise = new double[256];

    private MapGenBase caveGenerator = new MapGenCaves();

    /**

    * Holds Stronghold Generator

    */

    private MapGenStronghold strongholdGenerator = new MapGenStronghold();

    /**

    * Holds Village Generator

    */

    private MapGenVillage villageGenerator = new MapGenVillage();

    /**

    * Holds Mineshaft Generator

    */

    private MapGenMineshaft mineshaftGenerator = new MapGenMineshaft();

    private MapGenScatteredFeature scatteredFeatureGenerator = new MapGenScatteredFeature();

    /**

    * Holds ravine generator

    */

    private MapGenBase ravineGenerator = new MapGenRavine();

    /**

    * The biomes that are used to generate the chunk

    */

    private BiomeGenBase[] biomesForGeneration;

    double[] field_147427_d;

    double[] field_147428_e;

    double[] field_147425_f;

    double[] field_147426_g;

    int[][] field_73219_j = new int[32][32];

    private static final String __OBFID = "CL_00000396";

 

    {

        caveGenerator = TerrainGen.getModdedMapGen(caveGenerator, CAVE);

        strongholdGenerator = (MapGenStronghold) TerrainGen.getModdedMapGen(strongholdGenerator, STRONGHOLD);

        villageGenerator = (MapGenVillage) TerrainGen.getModdedMapGen(villageGenerator, VILLAGE);

        mineshaftGenerator = (MapGenMineshaft) TerrainGen.getModdedMapGen(mineshaftGenerator, MINESHAFT);

        scatteredFeatureGenerator = (MapGenScatteredFeature) TerrainGen.getModdedMapGen(scatteredFeatureGenerator, SCATTERED_FEATURE);

        ravineGenerator = TerrainGen.getModdedMapGen(ravineGenerator, RAVINE);

    }   

 

    public ChunkProviderAtlantis(World par1World, long par2, boolean par4)

    {

        this.worldObj = par1World;

        this.mapFeaturesEnabled = par4;

        this.field_147435_p = par1World.getWorldInfo().getTerrainType();

        this.rand = new Random(par2);

        this.field_147431_j = new NoiseGeneratorOctaves(this.rand, 16);

        this.field_147432_k = new NoiseGeneratorOctaves(this.rand, 16);

        this.field_147429_l = new NoiseGeneratorOctaves(this.rand, 8);

        this.field_147430_m = new NoiseGeneratorPerlin(this.rand, 4);

        this.noiseGen5 = new NoiseGeneratorOctaves(this.rand, 10);

        this.noiseGen6 = new NoiseGeneratorOctaves(this.rand, 16);

        this.mobSpawnerNoise = new NoiseGeneratorOctaves(this.rand, 8);

        this.field_147434_q = new double[825];

        this.parabolicField = new float[25];

 

        for (int j = -2; j <= 2; ++j)

        {

            for (int k = -2; k <= 2; ++k)

            {

                float f = 10.0F / MathHelper.sqrt_float((float)(j * j + k * k) + 0.2F);

                this.parabolicField[j + 2 + (k + 2) * 5] = f;

            }

        }

 

        NoiseGenerator[] noiseGens = {field_147431_j, field_147432_k, field_147429_l, field_147430_m, noiseGen5, noiseGen6, mobSpawnerNoise};

        noiseGens = TerrainGen.getModdedNoiseGenerators(par1World, this.rand, noiseGens);

        this.field_147431_j = (NoiseGeneratorOctaves)noiseGens[0];

        this.field_147432_k = (NoiseGeneratorOctaves)noiseGens[1];

        this.field_147429_l = (NoiseGeneratorOctaves)noiseGens[2];

        this.field_147430_m = (NoiseGeneratorPerlin)noiseGens[3];

        this.noiseGen5 = (NoiseGeneratorOctaves)noiseGens[4];

        this.noiseGen6 = (NoiseGeneratorOctaves)noiseGens[5];

        this.mobSpawnerNoise = (NoiseGeneratorOctaves)noiseGens[6];

    }

 

    public void func_147424_a(int p_147424_1_, int p_147424_2_, Block[] p_147424_3_)

    {

        byte b0 = 63;

        this.biomesForGeneration = this.worldObj.getWorldChunkManager().getBiomesForGeneration(this.biomesForGeneration, p_147424_1_ * 4 - 2, p_147424_2_ * 4 - 2, 10, 10);

        this.func_147423_a(p_147424_1_ * 4, 0, p_147424_2_ * 4);

 

        for (int k = 0; k < 4; ++k)

        {

            int l = k * 5;

            int i1 = (k + 1) * 5;

 

            for (int j1 = 0; j1 < 4; ++j1)

            {

                int k1 = (l + j1) * 33;

                int l1 = (l + j1 + 1) * 33;

                int i2 = (i1 + j1) * 33;

                int j2 = (i1 + j1 + 1) * 33;

 

                for (int k2 = 0; k2 < 32; ++k2)

                {

                    double d0 = 0.125D;

                    double d1 = this.field_147434_q[k1 + k2];

                    double d2 = this.field_147434_q[l1 + k2];

                    double d3 = this.field_147434_q[i2 + k2];

                    double d4 = this.field_147434_q[j2 + k2];

                    double d5 = (this.field_147434_q[k1 + k2 + 1] - d1) * d0;

                    double d6 = (this.field_147434_q[l1 + k2 + 1] - d2) * d0;

                    double d7 = (this.field_147434_q[i2 + k2 + 1] - d3) * d0;

                    double d8 = (this.field_147434_q[j2 + k2 + 1] - d4) * d0;

 

                    for (int l2 = 0; l2 < 8; ++l2)

                    {

                        double d9 = 0.25D;

                        double d10 = d1;

                        double d11 = d2;

                        double d12 = (d3 - d1) * d9;

                        double d13 = (d4 - d2) * d9;

 

                        for (int i3 = 0; i3 < 4; ++i3)

                        {

                            int j3 = i3 + k * 4 << 12 | 0 + j1 * 4 << 8 | k2 * 8 + l2;

                            short short1 = 256;

                            j3 -= short1;

                            double d14 = 0.25D;

                            double d16 = (d11 - d10) * d14;

                            double d15 = d10 - d16;

 

                            for (int k3 = 0; k3 < 4; ++k3)

                            {

                                if ((d15 += d16) > 0.0D)

                                {

                                    p_147424_3_[j3 += short1] = Blocks.stone;

                                }

                                else if (k2 * 8 + l2 < b0)

                                {

                                    p_147424_3_[j3 += short1] = Blocks.water;

                                }

                                else

                                {

                                    p_147424_3_[j3 += short1] = null;

                                }

                            }

 

                            d10 += d12;

                            d11 += d13;

                        }

 

                        d1 += d5;

                        d2 += d6;

                        d3 += d7;

                        d4 += d8;

                    }

                }

            }

        }

    }

 

    public void replaceBlocksForBiome(int p_147422_1_, int p_147422_2_, Block[] p_147422_3_, byte[] p_147422_4_, BiomeGenBase[] p_147422_5_)

    {

        ChunkProviderEvent.ReplaceBiomeBlocks event = new ChunkProviderEvent.ReplaceBiomeBlocks(this, p_147422_1_, p_147422_2_, p_147422_3_, p_147422_5_);

        MinecraftForge.EVENT_BUS.post(event);

        if (event.getResult() == Result.DENY) return;

 

        double d0 = 0.03125D;

        this.stoneNoise = this.field_147430_m.func_151599_a(this.stoneNoise, (double)(p_147422_1_ * 16), (double)(p_147422_2_ * 16), 16, 16, d0 * 2.0D, d0 * 2.0D, 1.0D);

 

        for (int k = 0; k < 16; ++k)

        {

            for (int l = 0; l < 16; ++l)

            {

                BiomeGenBase biomegenbase = p_147422_5_[l + k * 16];

                biomegenbase.genTerrainBlocks(this.worldObj, this.rand, p_147422_3_, p_147422_4_, p_147422_1_ * 16 + k, p_147422_2_ * 16 + l, this.stoneNoise[l + k * 16]);

            }

        }

    }

 

    /**

    * loads or generates the chunk at the chunk location specified

    */

    public Chunk loadChunk(int par1, int par2)

    {

        return this.provideChunk(par1, par2);

    }

 

    /**

    * Will return back a chunk, if it doesn't exist and its not a MP client it will generates all the blocks for the

    * specified chunk from the map seed and chunk seed

    */

    public Chunk provideChunk(int par1, int par2)

    {

        this.rand.setSeed((long)par1 * 341873128712L + (long)par2 * 132897987541L);

        Block[] ablock = new Block[65536];

        byte[] abyte = new byte[65536];

        this.func_147424_a(par1, par2, ablock);

        this.biomesForGeneration = this.worldObj.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, par1 * 16, par2 * 16, 16, 16);

        this.replaceBlocksForBiome(par1, par2, ablock, abyte, this.biomesForGeneration);

        this.caveGenerator.func_151539_a(this, this.worldObj, par1, par2, ablock);

        this.ravineGenerator.func_151539_a(this, this.worldObj, par1, par2, ablock);

 

        if (this.mapFeaturesEnabled)

        {

            this.mineshaftGenerator.func_151539_a(this, this.worldObj, par1, par2, ablock);

            this.villageGenerator.func_151539_a(this, this.worldObj, par1, par2, ablock);

            this.strongholdGenerator.func_151539_a(this, this.worldObj, par1, par2, ablock);

            this.scatteredFeatureGenerator.func_151539_a(this, this.worldObj, par1, par2, ablock);

        }

 

        Chunk chunk = new Chunk(this.worldObj, ablock, abyte, par1, par2);

        byte[] abyte1 = chunk.getBiomeArray();

 

        for (int k = 0; k < abyte1.length; ++k)

        {

            abyte1[k] = (byte)this.biomesForGeneration[k].biomeID;

        }

 

        chunk.generateSkylightMap();

        return chunk;

    }

 

    private void func_147423_a(int p_147423_1_, int p_147423_2_, int p_147423_3_)

    {

        double d0 = 684.412D;

        double d1 = 684.412D;

        double d2 = 512.0D;

        double d3 = 512.0D;

        this.field_147426_g = this.noiseGen6.generateNoiseOctaves(this.field_147426_g, p_147423_1_, p_147423_3_, 5, 5, 200.0D, 200.0D, 0.5D);

        this.field_147427_d = this.field_147429_l.generateNoiseOctaves(this.field_147427_d, p_147423_1_, p_147423_2_, p_147423_3_, 5, 33, 5, 8.555150000000001D, 4.277575000000001D, 8.555150000000001D);

        this.field_147428_e = this.field_147431_j.generateNoiseOctaves(this.field_147428_e, p_147423_1_, p_147423_2_, p_147423_3_, 5, 33, 5, 684.412D, 684.412D, 684.412D);

        this.field_147425_f = this.field_147432_k.generateNoiseOctaves(this.field_147425_f, p_147423_1_, p_147423_2_, p_147423_3_, 5, 33, 5, 684.412D, 684.412D, 684.412D);

        boolean flag1 = false;

        boolean flag = false;

        int l = 0;

        int i1 = 0;

        double d4 = 8.5D;

 

        for (int j1 = 0; j1 < 5; ++j1)

        {

            for (int k1 = 0; k1 < 5; ++k1)

            {

                float f = 0.0F;

                float f1 = 0.0F;

                float f2 = 0.0F;

                byte b0 = 2;

                BiomeGenBase biomegenbase = this.biomesForGeneration[j1 + 2 + (k1 + 2) * 10];

 

                for (int l1 = -b0; l1 <= b0; ++l1)

                {

                    for (int i2 = -b0; i2 <= b0; ++i2)

                    {

                        BiomeGenBase biomegenbase1 = this.biomesForGeneration[j1 + l1 + 2 + (k1 + i2 + 2) * 10];

                        float f3 = biomegenbase1.rootHeight;

                        float f4 = biomegenbase1.heightVariation;

 

                        if (this.field_147435_p == WorldType.AMPLIFIED && f3 > 0.0F)

                        {

                            f3 = 1.0F + f3 * 2.0F;

                            f4 = 1.0F + f4 * 4.0F;

                        }

 

                        float f5 = this.parabolicField[l1 + 2 + (i2 + 2) * 5] / (f3 + 2.0F);

 

                        if (biomegenbase1.rootHeight > biomegenbase.rootHeight)

                        {

                            f5 /= 2.0F;

                        }

 

                        f += f4 * f5;

                        f1 += f3 * f5;

                        f2 += f5;

                    }

                }

 

                f /= f2;

                f1 /= f2;

                f = f * 0.9F + 0.1F;

                f1 = (f1 * 4.0F - 1.0F) / 8.0F;

                double d13 = this.field_147426_g[i1] / 8000.0D;

 

                if (d13 < 0.0D)

                {

                    d13 = -d13 * 0.3D;

                }

 

                d13 = d13 * 3.0D - 2.0D;

 

                if (d13 < 0.0D)

                {

                    d13 /= 2.0D;

 

                    if (d13 < -1.0D)

                    {

                        d13 = -1.0D;

                    }

 

                    d13 /= 1.4D;

                    d13 /= 2.0D;

                }

                else

                {

                    if (d13 > 1.0D)

                    {

                        d13 = 1.0D;

                    }

 

                    d13 /= 8.0D;

                }

 

                ++i1;

                double d12 = (double)f1;

                double d14 = (double)f;

                d12 += d13 * 0.2D;

                d12 = d12 * 8.5D / 8.0D;

                double d5 = 8.5D + d12 * 4.0D;

 

                for (int j2 = 0; j2 < 33; ++j2)

                {

                    double d6 = ((double)j2 - d5) * 12.0D * 128.0D / 256.0D / d14;

 

                    if (d6 < 0.0D)

                    {

                        d6 *= 4.0D;

                    }

 

                    double d7 = this.field_147428_e[l] / 512.0D;

                    double d8 = this.field_147425_f[l] / 512.0D;

                    double d9 = (this.field_147427_d[l] / 10.0D + 1.0D) / 2.0D;

                    double d10 = MathHelper.denormalizeClamp(d7, d8, d9) - d6;

 

                    if (j2 > 29)

                    {

                        double d11 = (double)((float)(j2 - 29) / 3.0F);

                        d10 = d10 * (1.0D - d11) + -10.0D * d11;

                    }

 

                    this.field_147434_q[l] = d10;

                    ++l;

                }

            }

        }

    }

 

    /**

    * Checks to see if a chunk exists at x, y

    */

    public boolean chunkExists(int par1, int par2)

    {

        return true;

    }

 

    /**

    * Populates chunk with ores etc etc

    */

    public void populate(IChunkProvider par1IChunkProvider, int par2, int par3)

    {

        BlockFalling.fallInstantly = true;

        int k = par2 * 16;

        int l = par3 * 16;

        BiomeGenBase biomegenbase = this.worldObj.getBiomeGenForCoords(k + 16, l + 16);

        this.rand.setSeed(this.worldObj.getSeed());

        long i1 = this.rand.nextLong() / 2L * 2L + 1L;

        long j1 = this.rand.nextLong() / 2L * 2L + 1L;

        this.rand.setSeed((long)par2 * i1 + (long)par3 * j1 ^ this.worldObj.getSeed());

        boolean flag = false;

 

        MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Pre(par1IChunkProvider, worldObj, rand, par2, par3, flag));

 

        if (this.mapFeaturesEnabled)

        {

            this.mineshaftGenerator.generateStructuresInChunk(this.worldObj, this.rand, par2, par3);

            flag = this.villageGenerator.generateStructuresInChunk(this.worldObj, this.rand, par2, par3);

            this.strongholdGenerator.generateStructuresInChunk(this.worldObj, this.rand, par2, par3);

            this.scatteredFeatureGenerator.generateStructuresInChunk(this.worldObj, this.rand, par2, par3);

        }

 

        int k1;

        int l1;

        int i2;

 

        if (biomegenbase != BiomeGenBase.desert && biomegenbase != BiomeGenBase.desertHills && !flag && this.rand.nextInt(4) == 0

            && TerrainGen.populate(par1IChunkProvider, worldObj, rand, par2, par3, flag, LAKE))

        {

            k1 = k + this.rand.nextInt(16) + 8;

            l1 = this.rand.nextInt(256);

            i2 = l + this.rand.nextInt(16) + 8;

            (new WorldGenLakes(Blocks.water)).generate(this.worldObj, this.rand, k1, l1, i2);

        }

 

        if (TerrainGen.populate(par1IChunkProvider, worldObj, rand, par2, par3, flag, LAVA) && !flag && this.rand.nextInt(8) == 0)

        {

            k1 = k + this.rand.nextInt(16) + 8;

            l1 = this.rand.nextInt(this.rand.nextInt(248) + 8);

            i2 = l + this.rand.nextInt(16) + 8;

 

            if (l1 < 63 || this.rand.nextInt(10) == 0)

            {

                (new WorldGenLakes(Blocks.lava)).generate(this.worldObj, this.rand, k1, l1, i2);

            }

        }

 

        boolean doGen = TerrainGen.populate(par1IChunkProvider, worldObj, rand, par2, par3, flag, DUNGEON);

        for (k1 = 0; doGen && k1 < 8; ++k1)

        {

            l1 = k + this.rand.nextInt(16) + 8;

            i2 = this.rand.nextInt(256);

            int j2 = l + this.rand.nextInt(16) + 8;

            (new WorldGenDungeons()).generate(this.worldObj, this.rand, l1, i2, j2);

        }

 

        biomegenbase.decorate(this.worldObj, this.rand, k, l);

        SpawnerAnimals.performWorldGenSpawning(this.worldObj, biomegenbase, k + 8, l + 8, 16, 16, this.rand);

        k += 8;

        l += 8;

 

        doGen = TerrainGen.populate(par1IChunkProvider, worldObj, rand, par2, par3, flag, ICE);

        for (k1 = 0; doGen && k1 < 16; ++k1)

        {

            for (l1 = 0; l1 < 16; ++l1)

            {

                i2 = this.worldObj.getPrecipitationHeight(k + k1, l + l1);

 

                if (this.worldObj.isBlockFreezable(k1 + k, i2 - 1, l1 + l))

                {

                    this.worldObj.setBlock(k1 + k, i2 - 1, l1 + l, Blocks.ice, 0, 2);

                }

 

                if (this.worldObj.func_147478_e(k1 + k, i2, l1 + l, true))

                {

                    this.worldObj.setBlock(k1 + k, i2, l1 + l, Blocks.snow_layer, 0, 2);

                }

            }

        }

 

        MinecraftForge.EVENT_BUS.post(new PopulateChunkEvent.Post(par1IChunkProvider, worldObj, rand, par2, par3, flag));

 

        BlockFalling.fallInstantly = false;

    }

 

    /**

    * Two modes of operation: if passed true, save all Chunks in one go.  If passed false, save up to two chunks.

    * Return true if all chunks have been saved.

    */

    public boolean saveChunks(boolean par1, IProgressUpdate par2IProgressUpdate)

    {

        return true;

    }

 

    /**

    * Save extra data not associated with any Chunk.  Not saved during autosave, only during world unload.  Currently

    * unimplemented.

    */

    public void saveExtraData() {}

 

    /**

    * Unloads chunks that are marked to be unloaded. This is not guaranteed to unload every such chunk.

    */

    public boolean unloadQueuedChunks()

    {

        return false;

    }

 

    /**

    * Returns if the IChunkProvider supports saving.

    */

    public boolean canSave()

    {

        return true;

    }

 

    /**

    * Converts the instance data to a readable string.

    */

    public String makeString()

    {

        return "RandomLevelSource";

    }

 

    /**

    * Returns a list of creatures of the specified type that can spawn at the given location.

    */

    public List getPossibleCreatures(EnumCreatureType par1EnumCreatureType, int par2, int par3, int par4)

    {

        BiomeGenBase biomegenbase = this.worldObj.getBiomeGenForCoords(par2, par4);

        return par1EnumCreatureType == EnumCreatureType.monster && this.scatteredFeatureGenerator.func_143030_a(par2, par3, par4) ? this.scatteredFeatureGenerator.getScatteredFeatureSpawnList() : biomegenbase.getSpawnableList(par1EnumCreatureType);

    }

 

    public ChunkPosition func_147416_a(World p_147416_1_, String p_147416_2_, int p_147416_3_, int p_147416_4_, int p_147416_5_)

    {

        return "Stronghold".equals(p_147416_2_) && this.strongholdGenerator != null ? this.strongholdGenerator.func_151545_a(p_147416_1_, p_147416_3_, p_147416_4_, p_147416_5_) : null;

    }

 

    public int getLoadedChunkCount()

    {

        return 0;

    }

 

    public void recreateStructures(int par1, int par2)

    {

        if (this.mapFeaturesEnabled)

        {

            this.mineshaftGenerator.func_151539_a(this, this.worldObj, par1, par2, (Block[])null);

            this.villageGenerator.func_151539_a(this, this.worldObj, par1, par2, (Block[])null);

            this.strongholdGenerator.func_151539_a(this, this.worldObj, par1, par2, (Block[])null);

            this.scatteredFeatureGenerator.func_151539_a(this, this.worldObj, par1, par2, (Block[])null);

        }

    }

}

 

 

I've been through this a couple of times, but I can't seem to find anything wrong with it. It's mostly just a copy of the ChunkProviderGenerate class I believe...

 

Use the mcreator and modify to insert into your mods package.

facepalm.jpg

 

ikr!

Posted

The way any git repo should work is: you clone it, run some commands and you have a working workspace that you can commit out of.

In your case running setupDecompWorkspace will not care about your sources, I'd have to copy those. Then to commit I'd have to copy them back, etc.

 

This might seem nitpicky, but I think it's better to get right from the start. As an example, this is my repository. You can set up a fully working workspace with just 2 commands: git clone <...>; gradlew setupDecompWorkspace. And you're done.

 

I had my workspace somewhere else because it had APIs that I wasn't allowed to redistribute (Player API). Anyways hopefully this is right now, and the parts that refer to Player API can be commented out or something.

  • 2 weeks later...
Posted

Sorry, your code does not even compile once I cloned it.

In all honesty I am not very motivated to keep helping you.

 

:'(

 

Did you comment out the parts that refer to PlayerAPI?

 

If that isn't the problem, I would request that you try to take a look at the code anyways. I'm not here to learn how to use Git, but to find an answer to the problem. I understand it's your job to answer questions and you want to be able to answer them quickly, but you should note that a lot of people who post their problems on here don't use a nicely formatted Git repo but rather paste pieces of many different sections of code into spoilers, which is not nearly as convenient for you as is a repo, even a badly formatted one.

Posted

Did you comment out the parts that refer to PlayerAPI?

No, why? A git repo should always work out of the box.

I understand it's your job to answer questions
Uh, no it's really not. I am a moderator, meaning I make sure nothing stupid happens on the forums. Yes, I do help, but that's not my "job" (and not my actual job either, this is my free time).
but you should note that a lot of people who post their problems on here don't use a nicely formatted Git repo but rather paste pieces of many different sections of code into spoilers, which is not nearly as convenient for you as is a repo, even a badly formatted one.

True. As long as the problem is immediately visible from the posted code, that is fine. But in your case the problem is far from obvious and needs to be debugged with an IDE with the Mod running. And I am not going to spend (insert arbitrary time frame here) trying to figure out how to get your mod to run so I can debug it for you.

 

Anyways, regardless of what a moderator's duties encompass...

I will fix the repo to make sure it works out of the box, and I will not come back until then.

  • 4 weeks later...
Posted

Wow,

that was something special.  Everyone that helps out here is a volunteer.  It is not their job.

 

Some people have a very long history of helping with rather rude replies, but whatever.  If you don't like it, don't listen to them.

 

 

Long time Bukkit & Forge Programmer

Happy to try and help

Posted

Ok, I got it now. Now what do I do to reproduce your bug?

Also: your entity registration code is horrid and will mostly likely break yours and most definitely other mods. Please do not ever ever use global IDs. That means unless you update to 1.8 you cannot use vanilla spawn eggs.

 

Okay, so teleporting to my dimension is a bit complex...

First, get a Atlantis Wand from the creative menu. Then, while your head is underwater, right-click to teleport to the dimension.

Once there, you should notice that all of the floor blocks in each biome are gravel. However, the code for the biomes dictates otherwise. I know it is the right biome because the F3 menu shows the name of the biome. About the entity registration: Weird. I got it from wuppy29.

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



×
×
  • Create New...

Important Information

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