Began work on a system for configurable biome decoration

This commit is contained in:
Adubbz 2015-01-14 21:34:24 +11:00
parent 6363c1c642
commit 1847f46548
7 changed files with 205 additions and 31 deletions

View File

@ -0,0 +1,15 @@
/*******************************************************************************
* Copyright 2014-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;
public enum BiomeOwner
{
BIOMESOPLENTY,
OTHER;
}

View File

@ -0,0 +1,34 @@
/*******************************************************************************
* Copyright 2014-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;
public enum BiomeProperty
{
GRASS_PER_CHUNK(1),
FLOWERS_PER_CHUNK(2);
private Object defaultValue;
private BiomeProperty() {}
private BiomeProperty(Object defaultValue)
{
this.defaultValue = defaultValue;
}
public String getName()
{
return this.name().toLowerCase();
}
public Object getDefaultValue()
{
return this.defaultValue;
}
}

View File

@ -0,0 +1,19 @@
/*******************************************************************************
* Copyright 2014-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 java.util.Map;
public interface IExtendedBiome
{
public BiomeOwner getBiomeOwner();
public void setProperty(BiomeProperty property, Object value);
public Object getProperty(BiomeProperty property);
public Map<BiomeProperty, Object> getPropertyMap();
}

View File

@ -13,13 +13,17 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.Map.Entry;
import net.minecraft.world.biome.BiomeGenBase;
import org.apache.commons.io.FileUtils;
import com.google.gson.JsonSyntaxException;
import biomesoplenty.api.biome.BiomeOwner;
import biomesoplenty.api.biome.BiomeProperty;
import biomesoplenty.api.biome.IExtendedBiome;
import biomesoplenty.common.util.config.JsonBiome;
import biomesoplenty.common.util.config.JsonEntitySpawn;
import net.minecraft.world.biome.BiomeGenBase;
import com.google.gson.JsonSyntaxException;
public class BiomeConfigurationHandler
{
@ -36,43 +40,43 @@ public class BiomeConfigurationHandler
registerConfigurableBiome(BiomeGenBase.ocean, "ocean");
registerConfigurableBiome(BiomeGenBase.plains, "plains");
registerConfigurableBiome(BiomeGenBase.desert, "desert");
registerConfigurableBiome(BiomeGenBase.extremeHills, "extremeHills");
registerConfigurableBiome(BiomeGenBase.extremeHills, "extreme_hills");
registerConfigurableBiome(BiomeGenBase.forest, "forest");
registerConfigurableBiome(BiomeGenBase.taiga, "taiga");
registerConfigurableBiome(BiomeGenBase.swampland, "swampland");
registerConfigurableBiome(BiomeGenBase.river, "river");
registerConfigurableBiome(BiomeGenBase.hell, "hell");
registerConfigurableBiome(BiomeGenBase.sky, "sky");
registerConfigurableBiome(BiomeGenBase.frozenOcean, "frozenOcean");
registerConfigurableBiome(BiomeGenBase.frozenRiver, "frozenRiver");
registerConfigurableBiome(BiomeGenBase.icePlains, "icePlains");
registerConfigurableBiome(BiomeGenBase.iceMountains, "iceMountains");
registerConfigurableBiome(BiomeGenBase.mushroomIsland, "mushroomIsland");
registerConfigurableBiome(BiomeGenBase.mushroomIslandShore, "mushroomIslandShore");
registerConfigurableBiome(BiomeGenBase.frozenOcean, "frozen_ocean");
registerConfigurableBiome(BiomeGenBase.frozenRiver, "frozen_river");
registerConfigurableBiome(BiomeGenBase.icePlains, "ice_plains");
registerConfigurableBiome(BiomeGenBase.iceMountains, "ice_mountains");
registerConfigurableBiome(BiomeGenBase.mushroomIsland, "mushroom_island");
registerConfigurableBiome(BiomeGenBase.mushroomIslandShore, "mushroom_island_shore");
registerConfigurableBiome(BiomeGenBase.beach, "beach");
registerConfigurableBiome(BiomeGenBase.desertHills, "beachHills");
registerConfigurableBiome(BiomeGenBase.forestHills, "forestHills");
registerConfigurableBiome(BiomeGenBase.taigaHills, "taigaHills");
registerConfigurableBiome(BiomeGenBase.extremeHillsEdge, "extremeHillsEdge");
registerConfigurableBiome(BiomeGenBase.desertHills, "beach_hills");
registerConfigurableBiome(BiomeGenBase.forestHills, "forest_hills");
registerConfigurableBiome(BiomeGenBase.taigaHills, "taiga_hills");
registerConfigurableBiome(BiomeGenBase.extremeHillsEdge, "extreme_hills_edge");
registerConfigurableBiome(BiomeGenBase.jungle, "jungle");
registerConfigurableBiome(BiomeGenBase.jungleHills, "jungleHills");
registerConfigurableBiome(BiomeGenBase.jungleEdge, "jungleEdge");
registerConfigurableBiome(BiomeGenBase.deepOcean, "deepOcean");
registerConfigurableBiome(BiomeGenBase.stoneBeach, "stoneBeach");
registerConfigurableBiome(BiomeGenBase.coldBeach, "coldBeach");
registerConfigurableBiome(BiomeGenBase.birchForest, "birchForest");
registerConfigurableBiome(BiomeGenBase.birchForestHills, "birchForestHills");
registerConfigurableBiome(BiomeGenBase.roofedForest, "roofedForest");
registerConfigurableBiome(BiomeGenBase.coldTaiga, "coldTaiga");
registerConfigurableBiome(BiomeGenBase.coldTaigaHills, "coldTaigaHills");
registerConfigurableBiome(BiomeGenBase.megaTaiga, "megaTaiga");
registerConfigurableBiome(BiomeGenBase.megaTaigaHills, "megaTaigaHills");
registerConfigurableBiome(BiomeGenBase.extremeHillsPlus, "extremeHillsPlus");
registerConfigurableBiome(BiomeGenBase.jungleHills, "jungle_hills");
registerConfigurableBiome(BiomeGenBase.jungleEdge, "jungle_edge");
registerConfigurableBiome(BiomeGenBase.deepOcean, "deep_ocean");
registerConfigurableBiome(BiomeGenBase.stoneBeach, "stone_beach");
registerConfigurableBiome(BiomeGenBase.coldBeach, "cold_beach");
registerConfigurableBiome(BiomeGenBase.birchForest, "birch_forest");
registerConfigurableBiome(BiomeGenBase.birchForestHills, "birch_forest_hills");
registerConfigurableBiome(BiomeGenBase.roofedForest, "roofed_forest");
registerConfigurableBiome(BiomeGenBase.coldTaiga, "cold_taiga");
registerConfigurableBiome(BiomeGenBase.coldTaigaHills, "cold_taiga_hills");
registerConfigurableBiome(BiomeGenBase.megaTaiga, "mega_taiga");
registerConfigurableBiome(BiomeGenBase.megaTaigaHills, "mega_taiga_hills");
registerConfigurableBiome(BiomeGenBase.extremeHillsPlus, "extreme_hills_plus");
registerConfigurableBiome(BiomeGenBase.savanna, "savanna");
registerConfigurableBiome(BiomeGenBase.savannaPlateau, "savannaPlateau");
registerConfigurableBiome(BiomeGenBase.savannaPlateau, "savanna_plateau");
registerConfigurableBiome(BiomeGenBase.mesa, "mesa");
registerConfigurableBiome(BiomeGenBase.mesaPlateau_F, "mesaPlatea_F");
registerConfigurableBiome(BiomeGenBase.mesaPlateau, "mesaPlateau");
registerConfigurableBiome(BiomeGenBase.mesaPlateau_F, "mesa_plateau_f");
registerConfigurableBiome(BiomeGenBase.mesaPlateau, "mesa_plateau");
}
private static void load(File configDirectory)
@ -116,9 +120,24 @@ public class BiomeConfigurationHandler
public static void registerConfigurableBiome(BiomeGenBase biome, String configFileName)
{
translateVanillaValues(biome);
configFileMap.put(biome, configFileName);
}
private static void translateVanillaValues(BiomeGenBase biome)
{
IExtendedBiome extendedBiome = (IExtendedBiome)biome;
if (extendedBiome.getBiomeOwner() == BiomeOwner.OTHER)
{
extendedBiome.setProperty(BiomeProperty.GRASS_PER_CHUNK, biome.theBiomeDecorator.grassPerChunk);
//TODO: Create our own implementations
//biome.theBiomeDecorator.grassPerChunk = 0;
extendedBiome.setProperty(BiomeProperty.FLOWERS_PER_CHUNK, biome.theBiomeDecorator.flowersPerChunk);
//biome.theBiomeDecorator.flowersPerChunk = 0;
}
}
private static void configureBiomeWithJson(BiomeGenBase biome, JsonBiome jsonBiome)
{
//TODO: Reflect and modify biome id biome.biomeId = jsonBiome.biomeID;
@ -132,5 +151,21 @@ public class BiomeConfigurationHandler
biome.color = jsonBiome.color;
biome.waterColorMultiplier = jsonBiome.waterColorMultiplier;
JsonEntitySpawn.addBiomeEntitySpawns(biome, jsonBiome);
IExtendedBiome extendedBiome = (IExtendedBiome)biome;
if (!jsonBiome.decorationProperties.isEmpty())
{
for (Entry<BiomeProperty, Object> entry : jsonBiome.decorationProperties.entrySet())
{
BiomeProperty property = entry.getKey();
Object value = entry.getValue();
if (property != null)
{
extendedBiome.setProperty(property, value);
}
}
}
}
}

View File

@ -0,0 +1,62 @@
/*******************************************************************************
* Copyright 2014-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.common.mixin.biome;
import java.util.HashMap;
import java.util.Map;
import net.minecraft.world.biome.BiomeGenBase;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import biomesoplenty.api.biome.BiomeOwner;
import biomesoplenty.api.biome.BiomeProperty;
import biomesoplenty.api.biome.IExtendedBiome;
@Mixin(BiomeGenBase.class)
public abstract class MixinBiomeGenBase implements IExtendedBiome
{
private BiomeOwner biomeOwner;
private HashMap<BiomeProperty, Object> properties;
@Inject(method = "<init>(IZ)V", at = @At("RETURN"))
private void onConstructed(int biomeId, boolean register, CallbackInfo callbackInfo)
{
this.biomeOwner = BiomeOwner.OTHER;
this.properties = new HashMap();
}
@Override
public BiomeOwner getBiomeOwner()
{
return biomeOwner;
}
@Override
public void setProperty(BiomeProperty property, Object value)
{
if (property.getDefaultValue() != value)
this.properties.put(property, value);
}
@Override
public Object getProperty(BiomeProperty property)
{
return this.properties.get(property);
}
@Override
public Map<BiomeProperty, Object> getPropertyMap()
{
return properties;
}
}

View File

@ -9,16 +9,22 @@
package biomesoplenty.common.util.config;
import java.util.ArrayList;
import java.util.Map;
import net.minecraft.block.state.IBlockState;
import net.minecraft.world.biome.BiomeGenBase;
import biomesoplenty.api.biome.BiomeProperty;
import biomesoplenty.api.biome.IExtendedBiome;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class JsonBiome
{
public static final Gson serializer = new GsonBuilder().setPrettyPrinting().registerTypeAdapter(IBlockState.class, new JsonBlockState()).create();
public static final Gson serializer = new GsonBuilder()
.setPrettyPrinting().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.registerTypeAdapter(IBlockState.class, new JsonBlockState()).create();
public String biomeName;
public int biomeId;
@ -31,6 +37,7 @@ public class JsonBiome
public int color;
public int waterColorMultiplier;
public ArrayList<JsonEntitySpawn> entities;
public Map<BiomeProperty, Object> decorationProperties;
public static JsonBiome createFromBiomeGenBase(BiomeGenBase baseBiome)
{
@ -47,6 +54,7 @@ public class JsonBiome
biome.color = baseBiome.color;
biome.waterColorMultiplier = baseBiome.waterColorMultiplier;
biome.entities = JsonEntitySpawn.getBiomeEntitySpawns(baseBiome);
biome.decorationProperties = ((IExtendedBiome)baseBiome).getPropertyMap();
return biome;
}

View File

@ -1,6 +1,7 @@
{
"package": "biomesoplenty.common.mixin",
"mixins": [
"biome.MixinBiomeGenBase",
"renderer.MixinBlockModelShapes"
]
}