Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

For some reason I am unable to generate custom ore/blocks in Savannah biomes.  All other biomes I have tried no problems.  I am trying to generate the "Block_3" on the surface of the Savannah.  I recall reading somewhere that you can only replace certain blocks?  The surface of Savannah is usually stone is there a way to change this code to replace the grass or stone on the surface of the Savannah?

 

package com.glistre.glistremod.biome;

import com.glistre.glistremod.BlockRegistry;

import java.util.Random;

import net.minecraft.init.Blocks;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;
import net.minecraft.world.gen.feature.WorldGenerator;
import cpw.mods.fml.common.IWorldGenerator;



public class BlockGenGlistre implements IWorldGenerator {

    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
        switch(world.provider.dimensionId)
        {
        //case 0 = Overworld
            case 0: 
                generateSurface(world, random, chunkX*16,chunkZ*16);
                
        }              
    }

    private void generateSurface(World world, Random random, int chunkX, int chunkZ) {
    	 BiomeGenBase b = world.getBiomeGenForCoords(chunkX, chunkZ);
     	if (b.biomeName.equals("Savannah"))
     	
         	for(int i =0; i<10; i++){ 
             int Xcoord = chunkX + random.nextInt(16);
             int Zcoord = chunkZ + random.nextInt(16);
//             int Ycoord = random.nextInt(256); 
             int Ycoord = world.getHeightValue(Xcoord, Zcoord);
             (new WorldGenMinable(BlockRegistry.Block_3, 22)).generate(world, random, Xcoord, Ycoord, Zcoord);
           //this below just tells me if its generating or not
             System.out.println("Generating Glistre Blocks in Savannah");
         		}
     	else if (b.biomeName.equals("Savannah Plateau"))        	
         	for(int i =0; i<10; i++){ 
             int Xcoord = chunkX + random.nextInt(16);
             int Zcoord = chunkZ + random.nextInt(16);
//             int Ycoord = random.nextInt(256); 
             int Ycoord = world.getHeightValue(Xcoord, Zcoord);
             (new WorldGenMinable(BlockRegistry.Block_3, 22)).generate(world, random, Xcoord, Ycoord, Zcoord);
           //this below just tells me if its generating or not
             System.out.println("Generating Glistre Blocks in Savannah Plateau");
         		}
         	else if (b.biomeName.equals("Birch Forest"))
         		for(int i =0; i<100; i++){ 
                    int Xcoord = chunkX + random.nextInt(16);
                    int Zcoord = chunkZ + random.nextInt(16);
//                    int Ycoord = random.nextInt(256); 
                    int Ycoord = world.getHeightValue(Xcoord, Zcoord);
                    (new WorldGenMinable(BlockRegistry.Block_2, 22)).generate(world, random, Xcoord, Ycoord, Zcoord);
                  //this below just tells me if its generating or not
                    System.out.println("Generating Silver Blocks in Birch Forest");
         		}
         	else if (b.biomeName.equals("Extreme Hills"))
         		for(int i =0; i<10; i++){ 
                    int Xcoord = chunkX + random.nextInt(16);
                    int Zcoord = chunkZ + random.nextInt(16);
                    int Ycoord = random.nextInt(256); 
//                    int Ycoord = world.getHeightValue(Xcoord, Zcoord);
                    (new WorldGenMinable(BlockRegistry.Block_1, 20)).generate(world, random, Xcoord, Ycoord, Zcoord);
                  //this below just tells me if its generating or not
                    System.out.println("Generating Silver Ore in Extreme Hills");
                   
    	}
    }
}

 

   

 

 

   

 

 

See, it helps if you actually look at the BiomeGenBase class.

 

    public static final BiomeGenBase savanna = (new BiomeGenSavanna(35)).setColor(12431967).setBiomeName("Savanna").setTemperatureRainfall(1.2F, 0.0F).setDisableRain().setHeight(height_LowPlains);
    public static final BiomeGenBase savannaPlateau = (new BiomeGenSavanna(36)).setColor(10984804).setBiomeName("Savanna Plateau").setTemperatureRainfall(1.0F, 0.0F).setDisableRain().setHeight(height_HighPlateaus);

 

"Savanna" will never equal "Savannah"

 

Second, there's a public static reference right there you can compare to without having to do string comparison (which is expensive).

 

Third, it is possible for the savanna biome to show up in dimensions other than the overworld, e.g. Mystcraft ages.  You should let your ore generate in all dimensions as long as the biome check is valid.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

  • Author

I am flocking blind thank you for the suggestions and the eyes

 

I will change it I was noticing a bit of "warning: clientsidechunkingticking took ..." error and lag hope that gets rid of it

  • Author

See, it helps if you actually look at the BiomeGenBase class.

 

    public static final BiomeGenBase savanna = (new BiomeGenSavanna(35)).setColor(12431967).setBiomeName("Savanna").setTemperatureRainfall(1.2F, 0.0F).setDisableRain().setHeight(height_LowPlains);
    public static final BiomeGenBase savannaPlateau = (new BiomeGenSavanna(36)).setColor(10984804).setBiomeName("Savanna Plateau").setTemperatureRainfall(1.0F, 0.0F).setDisableRain().setHeight(height_HighPlateaus);

 

"Savanna" will never equal "Savannah"

 

Second, there's a public static reference right there you can compare to without having to do string comparison (which is expensive).

 

Third, it is possible for the savanna biome to show up in dimensions other than the overworld, e.g. Mystcraft ages.  You should let your ore generate in all dimensions as long as the biome check is valid.

 

Not real sure if I am doing this right it seems to work.  ...am I doing the Height part and any of this correct?

 

It works but I would appreciate your input if you have a sec to look at it

 

package com.glistre.glistremod.blocks;

import java.util.Random;

import com.glistre.glistremod.blocks.BlockRegistry;

import net.minecraft.init.Blocks;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.biome.BiomeGenSavanna;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;
import net.minecraft.world.gen.feature.WorldGenerator;
import cpw.mods.fml.common.IWorldGenerator;



public class BlockGenSavanna implements IWorldGenerator {

    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
        switch(world.provider.dimensionId)
        {
        //case 0 = Overworld
            case 0: 
                generateSurface(world, random, chunkX*16,chunkZ*16);
                break;
        //case 0 = Nether
            case -1:
            	generateSurface(world, random, chunkX*16,chunkZ*16);
            	break;
        //case 0 = End
            case 1:
            	generateSurface(world, random, chunkX*16,chunkZ*16);
            	break;
            	
                
        }              
    }
    
    BiomeGenBase.Height height_LowPlains = new BiomeGenBase.Height(0.125F, 0.05F);
    BiomeGenBase.Height height_HighPlateaus = new BiomeGenBase.Height(1.5F, 0.025F);

    private void generateSurface(World world, Random random, int chunkX, int chunkZ) {
    	BiomeGenBase savanna = new BiomeGenSavanna(35).setColor(12431967).setBiomeName("Savanna").setTemperatureRainfall(1.2F, 0.0F).setDisableRain();
    	BiomeGenBase savannaPlateau = new BiomeGenSavanna(36).setColor(10984804).setBiomeName("Savanna Plateau").setTemperatureRainfall(1.0F, 0.0F).setDisableRain();
    	BiomeGenBase b = world.getBiomeGenForCoords(chunkX, chunkZ);
     	if (b == savanna)
     	
         	for(int i =0; i<20; i++){ 
             int Xcoord = chunkX + random.nextInt(16);
             int Zcoord = chunkZ + random.nextInt(16);
//             int Ycoord = random.nextInt(256); 
             int Ycoord = world.getHeightValue(Xcoord, Zcoord);
             (new WorldGenMinable(BlockRegistry.MyBlock_3, 22)).generate(world, random, Xcoord, Ycoord, Zcoord);
           //this below just tells me if its generating or not
             System.out.println("Generating Glistre Blocks in Savanna");
         		}
     	else if (b == savannaPlateau)        	
         	for(int i =0; i<10; i++){ 
             int Xcoord = chunkX + random.nextInt(16);
             int Zcoord = chunkZ + random.nextInt(16);
//             int Ycoord = random.nextInt(256); 
             int Ycoord = world.getHeightValue(Xcoord, Zcoord);
             (new WorldGenMinable(BlockRegistry.MyBlock_3, 22)).generate(world, random, Xcoord, Ycoord, Zcoord);
           //this below just tells me if its generating or not
             System.out.println("Generating Glistre Blocks in Savanna Plateau");
         		}


                   
    	}
    
}

 

   

 

 

   

 

 

Why are you creating new instances of

BiomeGenBase

? Use the static instance in

BiomeGenBase.class

.

Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support.

 

1.12 -> 1.13 primer by williewillus.

 

1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support.

 

http://www.howoldisminecraft1710.today/

Followed by:

 

        switch(world.provider.dimensionId)
        {
        //case 0 = Overworld
            case 0:
                generateSurface(world, random, chunkX*16,chunkZ*16);
                break;
        //case 0 = Nether
            case -1:
            	generateSurface(world, random, chunkX*16,chunkZ*16);
            	break;
        //case 0 = End
            case 1:
            	generateSurface(world, random, chunkX*16,chunkZ*16);
            	break;
            	
               
        }             
    }

 

What happens when dimension 47 generates and is an overworld clone?  The reason I mentioned the other dimensions was not so you would run your code on the nether and the end (which, by the way, is pointless as the savanna never shows up in either of those) but so that you would add a default case so that it could handle ANY mod-added dimension.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

  • Author

Why are you creating new instances of

BiomeGenBase

? Use the static instance in

BiomeGenBase.class

.

 

Because I'm a dumbass

 

I changed it to this :

 

package com.glistre.glistremod.blocks;

import java.util.Random;

import com.glistre.glistremod.blocks.BlockRegistry;

import net.minecraft.init.Blocks;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.biome.BiomeGenSavanna;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.gen.feature.WorldGenMinable;
import net.minecraft.world.gen.feature.WorldGenerator;
import cpw.mods.fml.common.IWorldGenerator;



public class BlockGenSavanna implements IWorldGenerator {

    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
        switch(world.provider.dimensionId)
        {
        //case 0 = Overworld
            case 0: 
                generateSurface(world, random, chunkX*16,chunkZ*16);
                break;
        //case -1 = Nether
            case -1:
            	generateSurface(world, random, chunkX*16,chunkZ*16);
            	break;
        //case 1 = End
            case 1:
            	generateSurface(world, random, chunkX*16,chunkZ*16);
            	break;
            	
                
        }              
    }
    
    private void generateSurface(World world, Random random, int chunkX, int chunkZ) {

    	BiomeGenBase b = world.getBiomeGenForCoords(chunkX, chunkZ);
     	if (b == BiomeGenBase.savanna || b == BiomeGenBase.savannaPlateau)
     	
         	for(int i =0; i<20; i++){ 
             int Xcoord = chunkX + random.nextInt(16);
             int Zcoord = chunkZ + random.nextInt(16);
//             int Ycoord = random.nextInt(256); 
             int Ycoord = world.getHeightValue(Xcoord, Zcoord);
             (new WorldGenMinable(BlockRegistry.MyBlock_3, 22)).generate(world, random, Xcoord, Ycoord, Zcoord);
           //this below just tells me if its generating or not
             System.out.println("Generating Glistre Blocks in Savanna and Savanna Plateau");
         		}
                   
    	}
    
}

That should work, but it still won't generate in a Mystcraft dimension.

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

  • Author

That should work, but it still won't generate in a Mystcraft dimension.

 

So maybe add something like case Glistreland.DIMENSIONID ...

 

make a custom dimension?

No. You know how a

switch

statement works? You can add a

default

which is the default thing to do if the other cases don't hit. So instead of

case #:

, you do

default:

. That way, as Draco18s said three times before, it will generate in every dimension with a Savanna biome, instead of only the Overworld.

Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support.

 

1.12 -> 1.13 primer by williewillus.

 

1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support.

 

http://www.howoldisminecraft1710.today/

  • Author

No. You know how a

switch

statement works? You can add a

default

which is the default thing to do if the other cases don't hit. So instead of

case #:

, you do

default:

. That way, as Draco18s said three times before, it will generate in every dimension with a Savanna biome, instead of only the Overworld.

 

Would this work for Mystcraft etc?

 

@Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) {
        switch(world.provider.dimensionId)
        {
        //case -1 = Nether
            case -1: 
                generateSurface(world, random, chunkX*16,chunkZ*16);
                break;
        //case 0 = Overworld
            case 0:
            	generateSurface(world, random, chunkX*16,chunkZ*16);
            	break;
        //case 1 = End
            case 1:
            	generateSurface(world, random, chunkX*16,chunkZ*16);
            	break;         	
        //default case e.g. Mystcraft ..others
            default:
            	generateSurface(world, random, chunkX*16,chunkZ*16);
            	break;
        }              
    }

 

Yes, it would, though it is a bit redundant if the 3 cases and the default all do the same thing. Unless you are going to change the Nether and the End case to something else, you might aswell remove the

switch

statement.

Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support.

 

1.12 -> 1.13 primer by williewillus.

 

1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support.

 

http://www.howoldisminecraft1710.today/

Perfect. I spoke up about it as I know that other mods did something similar as you had done, checking "is overworld" rather than "is not nether, end"

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

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

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.