From f7649572f021110e3e315887e3d87775a790285e Mon Sep 17 00:00:00 2001 From: Adubbz Date: Mon, 9 Mar 2015 16:17:49 +1100 Subject: [PATCH] Added the basic framework for adding new biomes --- .../biomesoplenty/api/biome/BOPBiome.java | 34 ++++++++++++ .../biomesoplenty/api/biome/BOPBiomes.java | 4 +- .../common/biome/ExtendedBiomeRegistry.java | 5 ++ .../config/BiomeConfigurationHandler.java | 54 ++++++++++++------- .../decoration/DecorateBiomeEventHandler.java | 24 +++++---- .../biomesoplenty/common/init/ModBiomes.java | 12 +++++ .../common/util/config/JsonBiome.java | 10 +++- src/main/resources/biomesoplenty_at.cfg | 1 + 8 files changed, 112 insertions(+), 32 deletions(-) create mode 100644 src/main/java/biomesoplenty/api/biome/BOPBiome.java diff --git a/src/main/java/biomesoplenty/api/biome/BOPBiome.java b/src/main/java/biomesoplenty/api/biome/BOPBiome.java new file mode 100644 index 000000000..171819898 --- /dev/null +++ b/src/main/java/biomesoplenty/api/biome/BOPBiome.java @@ -0,0 +1,34 @@ +/******************************************************************************* + * Copyright 2015, the Biomes O' Plenty Team + * + * This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License. + * + * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/. + ******************************************************************************/ + +package biomesoplenty.api.biome; + +import biomesoplenty.common.biome.ExtendedBiomeRegistry.GenerationManager; +import net.minecraft.world.biome.BiomeGenBase; + +public class BOPBiome extends BiomeGenBase implements IExtendedBiome +{ + private GenerationManager generationManager = new GenerationManager(); + + public BOPBiome(int id) + { + super(id, false); + } + + @Override + public BiomeOwner getBiomeOwner() + { + return BiomeOwner.BIOMESOPLENTY; + } + + @Override + public GenerationManager getGenerationManager() + { + return this.generationManager; + } +} diff --git a/src/main/java/biomesoplenty/api/biome/BOPBiomes.java b/src/main/java/biomesoplenty/api/biome/BOPBiomes.java index 565c44dc5..d537f860a 100644 --- a/src/main/java/biomesoplenty/api/biome/BOPBiomes.java +++ b/src/main/java/biomesoplenty/api/biome/BOPBiomes.java @@ -10,9 +10,7 @@ package biomesoplenty.api.biome; import net.minecraft.world.biome.BiomeGenBase; -import com.google.common.base.Optional; - public class BOPBiomes { - public static Optional alps; + public static BiomeGenBase alps; } diff --git a/src/main/java/biomesoplenty/common/biome/ExtendedBiomeRegistry.java b/src/main/java/biomesoplenty/common/biome/ExtendedBiomeRegistry.java index fd564c92c..5b792ed88 100644 --- a/src/main/java/biomesoplenty/common/biome/ExtendedBiomeRegistry.java +++ b/src/main/java/biomesoplenty/common/biome/ExtendedBiomeRegistry.java @@ -22,6 +22,11 @@ public class ExtendedBiomeRegistry { private static Map externalExtensions = new HashMap(); + public static boolean isRegistered(BiomeGenBase biome) + { + return biome.biomeID != -1; + } + public static BiomeExtension createExtension(BiomeGenBase biome) { return externalExtensions.put(biome, new BiomeExtension(biome)); diff --git a/src/main/java/biomesoplenty/common/config/BiomeConfigurationHandler.java b/src/main/java/biomesoplenty/common/config/BiomeConfigurationHandler.java index 3a6648c86..94ec56f43 100644 --- a/src/main/java/biomesoplenty/common/config/BiomeConfigurationHandler.java +++ b/src/main/java/biomesoplenty/common/config/BiomeConfigurationHandler.java @@ -26,6 +26,7 @@ import biomesoplenty.common.biome.ExtendedBiomeRegistry; import biomesoplenty.common.biome.ExtendedBiomeRegistry.GenerationManager; import biomesoplenty.common.util.config.JsonBiome; import biomesoplenty.common.util.config.JsonEntitySpawn; +import biomesoplenty.core.BiomesOPlenty; import com.google.gson.JsonSyntaxException; @@ -79,12 +80,12 @@ public class BiomeConfigurationHandler public static void translateVanillaValues(BiomeGenBase biome) { - IExtendedBiome extendedBiome = ExtendedBiomeRegistry.getExtension(biome); + /*IExtendedBiome extendedBiome = ExtendedBiomeRegistry.getExtension(biome); GenerationManager generationManager = extendedBiome.getGenerationManager(); if (extendedBiome.getBiomeOwner() == BiomeOwner.OTHER) { - /*if (biome.theBiomeDecorator.cactiPerChunk > 0) + if (biome.theBiomeDecorator.cactiPerChunk > 0) { WorldGenCactus cactusGen = new WorldGenCactus(); IExtendedCactusGen extendedCactusGen = (IExtendedCactusGen) cactusGen; @@ -92,27 +93,44 @@ public class BiomeConfigurationHandler extendedCactusGen.setCactiPerChunk(biome.theBiomeDecorator.cactiPerChunk); generationManager.addGenerator("cactus", extendedCactusGen, Decorate.EventType.CACTUS); biome.theBiomeDecorator.cactiPerChunk = 0; - }*/ - } + } + }*/ } private static void configureBiomeWithJson(BiomeGenBase biome, JsonBiome jsonBiome) { - // TODO: Reflect and modify biome id biome.biomeId = jsonBiome.biomeID; - biome.biomeName = jsonBiome.biomeName; - biome.topBlock = jsonBiome.topBlock; - biome.fillerBlock = jsonBiome.fillerBlock; - biome.setHeight(new BiomeGenBase.Height(jsonBiome.rootHeight, jsonBiome.rootVariation)); - biome.temperature = jsonBiome.temperature; - biome.rainfall = jsonBiome.rainfall; - // TODO: Reflect and modify enableRain and enableSnow - biome.color = jsonBiome.color; - biome.waterColorMultiplier = jsonBiome.waterColorMultiplier; - JsonEntitySpawn.addBiomeEntitySpawns(biome, jsonBiome); + IExtendedBiome extendedBiome = ExtendedBiomeRegistry.getExtension(biome); - GenerationManager generationManager = ExtendedBiomeRegistry.getExtension(biome).getGenerationManager(); - - generationManager.configureGenerators(jsonBiome.decoration); + if (extendedBiome != null) + { + GenerationManager generationManager = extendedBiome.getGenerationManager(); + + if (extendedBiome.getBiomeOwner() == BiomeOwner.BIOMESOPLENTY) + { + if (jsonBiome.biomeId != -1) + { + biome.biomeID = jsonBiome.biomeId; + BiomeGenBase.getBiomeGenArray()[jsonBiome.biomeId] = biome; + } + else + { + biome.biomeID = -1; + } + } + + biome.biomeName = jsonBiome.biomeName; + biome.topBlock = jsonBiome.topBlock; + biome.fillerBlock = jsonBiome.fillerBlock; + biome.setHeight(new BiomeGenBase.Height(jsonBiome.rootHeight, jsonBiome.rootVariation)); + biome.temperature = jsonBiome.temperature; + biome.rainfall = jsonBiome.rainfall; + // TODO: Reflect and modify enableRain and enableSnow + biome.color = jsonBiome.color; + biome.waterColorMultiplier = jsonBiome.waterColorMultiplier; + JsonEntitySpawn.addBiomeEntitySpawns(biome, jsonBiome); + + generationManager.configureGenerators(jsonBiome.decoration); + } } public static Map getConfigFileMap() diff --git a/src/main/java/biomesoplenty/common/handler/decoration/DecorateBiomeEventHandler.java b/src/main/java/biomesoplenty/common/handler/decoration/DecorateBiomeEventHandler.java index ed54b40f8..deaf33dc4 100644 --- a/src/main/java/biomesoplenty/common/handler/decoration/DecorateBiomeEventHandler.java +++ b/src/main/java/biomesoplenty/common/handler/decoration/DecorateBiomeEventHandler.java @@ -15,6 +15,7 @@ import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; import net.minecraftforge.event.terraingen.DecorateBiomeEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import biomesoplenty.api.biome.IExtendedBiome; import biomesoplenty.api.biome.IGenerator; import biomesoplenty.common.biome.ExtendedBiomeRegistry; import biomesoplenty.common.biome.ExtendedBiomeRegistry.GenerationManager; @@ -27,17 +28,22 @@ public class DecorateBiomeEventHandler World world = event.world; BlockPos pos = event.pos.add(16, 0, 16); BiomeGenBase biome = world.getBiomeGenForCoords(pos); - GenerationManager generationManager = ExtendedBiomeRegistry.getExtension(biome).getGenerationManager(); + IExtendedBiome extendedBiome = ExtendedBiomeRegistry.getExtension(biome); - for (Entry> entry : generationManager.getGeneratorMap().entrySet()) + if (extendedBiome != null) { - String key = entry.getKey(); - IGenerator generator = entry.getValue(); - - if (generationManager.getGeneratorStage(key) == event.type) - { - generator.generate(world, event.rand, event.pos); - } + GenerationManager generationManager = extendedBiome.getGenerationManager(); + + for (Entry> entry : generationManager.getGeneratorMap().entrySet()) + { + String key = entry.getKey(); + IGenerator generator = entry.getValue(); + + if (generationManager.getGeneratorStage(key) == event.type) + { + generator.generate(world, event.rand, event.pos); + } + } } } } diff --git a/src/main/java/biomesoplenty/common/init/ModBiomes.java b/src/main/java/biomesoplenty/common/init/ModBiomes.java index c3036c202..258476e8a 100644 --- a/src/main/java/biomesoplenty/common/init/ModBiomes.java +++ b/src/main/java/biomesoplenty/common/init/ModBiomes.java @@ -21,9 +21,14 @@ public class ModBiomes { worldTypeBOP = new WorldTypeBOP(); + registerBiomes(); registerExternalBiomes(); } + private static void registerBiomes() + { + } + private static void registerExternalBiomes() { registerExternalBiome(BiomeGenBase.ocean, "ocean"); @@ -68,6 +73,13 @@ public class ModBiomes registerExternalBiome(BiomeGenBase.mesaPlateau, "mesa_plateau"); } + private static BiomeGenBase registerBiome(BiomeGenBase biome, String id) + { + BiomeConfigurationHandler.getConfigFileMap().put(biome, id); + + return biome; + } + private static void registerExternalBiome(BiomeGenBase biome, String id) { ExtendedBiomeRegistry.createExtension(biome); diff --git a/src/main/java/biomesoplenty/common/util/config/JsonBiome.java b/src/main/java/biomesoplenty/common/util/config/JsonBiome.java index cd7cdf878..a1c3c49fe 100644 --- a/src/main/java/biomesoplenty/common/util/config/JsonBiome.java +++ b/src/main/java/biomesoplenty/common/util/config/JsonBiome.java @@ -13,6 +13,7 @@ import java.util.Map; import net.minecraft.block.state.IBlockState; import net.minecraft.world.biome.BiomeGenBase; +import biomesoplenty.api.biome.IExtendedBiome; import biomesoplenty.api.biome.IGenerator; import biomesoplenty.common.biome.ExtendedBiomeRegistry; import biomesoplenty.common.biome.ExtendedBiomeRegistry.GenerationManager; @@ -54,9 +55,14 @@ public class JsonBiome biome.waterColorMultiplier = baseBiome.waterColorMultiplier; biome.entities = JsonEntitySpawn.getBiomeEntitySpawns(baseBiome); - GenerationManager generationManager = ExtendedBiomeRegistry.getExtension(baseBiome).getGenerationManager(); + IExtendedBiome extendedBiome = ExtendedBiomeRegistry.getExtension(baseBiome); + + if (extendedBiome != null) + { + GenerationManager generationManager = extendedBiome.getGenerationManager(); - biome.decoration = generationManager.getGeneratorMap(); + biome.decoration = generationManager.getGeneratorMap(); + } return biome; } diff --git a/src/main/resources/biomesoplenty_at.cfg b/src/main/resources/biomesoplenty_at.cfg index 23432683b..961887ac0 100644 --- a/src/main/resources/biomesoplenty_at.cfg +++ b/src/main/resources/biomesoplenty_at.cfg @@ -2,3 +2,4 @@ public net.minecraft.client.gui.GuiScreen func_146283_a(Ljava/util/List;II)V #dr public net.minecraft.client.gui.GuiCreateWorld field_146320_D #field_146320_D public net.minecraft.client.gui.GuiCreateWorld field_146331_K #field_146331_K public net.minecraft.world.WorldType func_151358_j()Lnet/minecraft/world/WorldType; #setNotificationData +public-f net.minecraft.world.biome.BiomeGenBase field_76756_M #biomeID \ No newline at end of file