Jump to content

Recommended Posts

Posted

In 1.8 i used this to let a custom biome spawn in a world without making a new World Type

WorldChunkManager.allowedBiomes.add(AppleForest);

 

But in 1.9 i can't find the WorldChunkManager class. So how can i add a custom biome in the world? I'm using the Forge version 12.16.0.1767

Don't blame me if i always ask for your help. I just want to learn to be better :)

Posted

WorldChunkManager

was renamed to

BiomeProvider

in 1.9.

 

BiomeProvider#allowedBiomes

doesn't control which biomes generate, it only controls which biomes can be used as the world spawn point.

 

To allow a biome to generate, call

BiomeManager.addBiome

. To allow a biome to used as the world spawn point, call

BiomeManager.addSpawnBiome

.

  • Like 1

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Posted

Thanks for the quick answer :) Also is there an easy way to check if a biome has generated in the world? Just to avoid the "exploring world for 20 minutes found nothing so create a new world and see if i find it"?

Don't blame me if i always ask for your help. I just want to learn to be better :)

Posted (edited)
BiomeProvider#findBiomePosition will try to find the position of one of the specified biomes in a fixed range around the starting coordinates and return null if none was found. Note that this uses the biomes that would currently generate at each position rather than the biomes that have already generated at each position. This is an important distinction if the world was generated with a different set of biomes to those currently registered.

 

To check for biomes that have already generated, use World#getBiomeGenForCoordsBlockPos.getAllInBoxMutable can be used to create an Iterable<BlockPos> that iterates through every BlockPos between two positions.

Edited by Choonster
Fixed formatting errors caused by forum migration

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Posted

Thanks for the answer. After generating several worlds it looks like the biome isn't spawing, even if it have a really high weight. Maybe i'm wrong registering it, this is the class i'm using for that

package com.mineworld.core;

import com.mineworld.world.WorldGenMinableMW;
import com.mineworld.world.biomes.BiomeGenAppleForest;
import com.mojang.realmsclient.util.RealmsTasks.WorldCreationTask;

import net.minecraft.client.multiplayer.WorldClient;
import net.minecraft.world.WorldManager;
import net.minecraft.world.WorldProvider;
import net.minecraft.world.WorldSettings;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.biome.BiomeProvider;
import net.minecraft.world.gen.ChunkProviderSettings;
import net.minecraft.world.gen.feature.WorldGenerator;
import net.minecraftforge.common.BiomeDictionary;
import net.minecraftforge.common.BiomeDictionary.Type;
import net.minecraftforge.common.BiomeManager;
import net.minecraftforge.common.BiomeManager.BiomeType;
import net.minecraftforge.event.terraingen.ChunkGeneratorEvent;
import net.minecraftforge.event.terraingen.WorldTypeEvent;
import net.minecraftforge.event.world.WorldEvent;
import net.minecraftforge.fml.common.registry.GameRegistry;

public class MWWorld {

public static BiomeGenBase appleForest;

//Called by preInit
public static void addComponents() {
	appleForest = new BiomeGenAppleForest();
}

//Called by Init
public static void registerComponents() {

	BiomeDictionary.registerBiomeType(appleForest, Type.FOREST);
	BiomeManager.addSpawnBiome(appleForest);
}

//Called by postInit
public static void addBiomesToWorld() {
	BiomeManager.addBiome(BiomeType.WARM, new BiomeManager.BiomeEntry(appleForest,1000000000));

	BiomeProvider.allowedBiomes.add(appleForest);
}
}

 

And this is the biome class

package com.mineworld.world.biomes;

import java.util.Random;

import com.mineworld.world.gen.feature.WorldGenAppleTree;
import com.mineworld.world.gen.feature.WorldGenBigAppleTree;

import net.minecraft.block.BlockDoublePlant;
import net.minecraft.block.BlockFlower;
import net.minecraft.entity.passive.EntityRabbit;
import net.minecraft.entity.passive.EntityWolf;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
import net.minecraft.world.gen.feature.WorldGenAbstractTree;
import net.minecraft.world.gen.feature.WorldGenBigMushroom;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

public class BiomeGenAppleForest extends BiomeGenBase {
protected static final WorldGenAppleTree worldGenAppleTree = new WorldGenAppleTree(false);
protected static final WorldGenBigAppleTree worldGenBigAppleTree = new WorldGenBigAppleTree(false);

public BiomeGenAppleForest() {
	super(new BiomeProperties("Apple Forest"));
	this.theBiomeDecorator.treesPerChunk = 10;
	this.theBiomeDecorator.grassPerChunk = 2;
}

public WorldGenAbstractTree genBigTreeChance(Random rand) {
	return (WorldGenAbstractTree) ((rand.nextInt(10) == 0 ? worldGenBigAppleTree : worldGenAppleTree));
}

public void decorate(World worldIn, Random rand, BlockPos pos) {
	this.decorateBiome(worldIn, rand, pos);
	super.decorate(worldIn, rand, pos);
}

public void decorateBiome(World worldIn, Random rand, BlockPos pos) {
	for (int i = 0; i < 4; ++i) {
		for (int j = 0; j < 4; ++j) {
			int k = i * 4 + 1 + 8 + rand.nextInt(3);
			int l = j * 4 + 1 + 8 + rand.nextInt(3);
			BlockPos blockpos = worldIn.getHeight(pos.add(k, 0, l));

			WorldGenAbstractTree worldgenabstracttree = this.genBigTreeChance(rand);
			worldgenabstracttree.func_175904_e();

			if (worldgenabstracttree.generate(worldIn, rand, blockpos)) {
				worldgenabstracttree.func_180711_a(worldIn, rand, blockpos);

			}
		}
	}
}
}

 

Is there something wrong with this class? Because otherwise i can't undesrtand why a biome with that high probability of spawning doesn't spawn :/

Don't blame me if i always ask for your help. I just want to learn to be better :)

Posted

You need to register your biome with

GameRegistry.register

in preInit, just like every other singleton class that implements

IForgeRegistryEntry

.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Posted

GameRegistry only allows me to register blocks, items, fuelhandler, worldgen and tileentity :/

Don't blame me if i always ask for your help. I just want to learn to be better :)

Posted

If you're not using the latest version of Forge, update. Recent versions overhauled the registry system, adding the

GameRegistry.register

method to register any

IForgeRegistryEntry

object (e.g.

Block

,

Item

,

BiomeGenBase

).

  • Like 1

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Posted

Thanks :D Upgrading has solved the problem :) But i also found a bug wich i'm gonna report in the related section :) Thanks for the help :)

Don't blame me if i always ask for your help. I just want to learn to be better :)

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.