diff --git a/src/main/java/biomesoplenty/api/biome/BOPBiome.java b/src/main/java/biomesoplenty/api/biome/BOPBiome.java index 004595ae0..2d6dc4d82 100644 --- a/src/main/java/biomesoplenty/api/biome/BOPBiome.java +++ b/src/main/java/biomesoplenty/api/biome/BOPBiome.java @@ -8,6 +8,7 @@ package biomesoplenty.api.biome; +import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -21,10 +22,13 @@ import biomesoplenty.api.biome.generation.GeneratorStage; import biomesoplenty.api.biome.generation.IGenerator; import biomesoplenty.common.enums.BOPClimates; import biomesoplenty.common.enums.BOPPlants; +import biomesoplenty.common.init.ModBiomes; +import biomesoplenty.common.util.config.BOPConfig; import biomesoplenty.common.util.config.BOPConfig.IConfigObj; import biomesoplenty.common.world.BOPWorldSettings; import biomesoplenty.common.world.TerrainSettings; import biomesoplenty.common.world.feature.GeneratorFlora; +import biomesoplenty.core.BiomesOPlenty; import net.minecraft.block.BlockSand; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; @@ -57,10 +61,13 @@ public class BOPBiome extends BiomeGenBase implements IExtendedBiome public boolean noNeighborTerrainInfuence = false; public int avgDirtDepth = 3; - public BOPBiome() + public final String idName; + + public BOPBiome(String idName, BiomeProps defaultProps) { - super(-1, false); - + super(configureBiome(idName, defaultProps)); + + this.idName = idName; this.terrainSettings.setDefaults(); this.theBiomeDecorator.treesPerChunk = -999; @@ -74,15 +81,17 @@ public class BOPBiome extends BiomeGenBase implements IExtendedBiome this.addGenerator("roots", GeneratorStage.FLOWERS,(new GeneratorFlora.Builder()).amountPerChunk(4.0F).with(BOPPlants.ROOT).create()); } - @Override - public void applySettings(BOPWorldSettings settings){} - - @Override - public void configure(IConfigObj conf) + public static BiomeProps configureBiome(String idName, BiomeProps props) { + BOPConfig.IConfigObj conf = ModBiomes.readConfigFile(idName); + + // If there isn't a valid config file, don't use it to configure the biome + if (conf.isEmpty()) + return props; // Allow name to be overridden - this.biomeName = conf.getString("biomeName",this.biomeName); + props = new BiomeProps(conf.getString("biomeName",props.biomeName)); + // Allow basic properties to be overridden this.topBlock = conf.getBlockState("topBlock", this.topBlock); @@ -208,8 +217,12 @@ public class BOPBiome extends BiomeGenBase implements IExtendedBiome } } + return props; } + @Override + public void applySettings(BOPWorldSettings settings){} + @Override public BiomeOwner getBiomeOwner() @@ -269,14 +282,6 @@ public class BOPBiome extends BiomeGenBase implements IExtendedBiome return (this.skyColor == -1) ? super.getSkyColorByTemp(temperature) : this.skyColor; } - @Override - public BiomeGenBase setTemperatureRainfall(float temp, float rain) - { - this.temperature = temp; - this.rainfall = rain; - return this; - } - @Override public void genTerrainBlocks(World world, Random rand, ChunkPrimer primer, int x, int z, double stoneNoiseVal) { @@ -308,14 +313,14 @@ public class BOPBiome extends BiomeGenBase implements IExtendedBiome continue; } - if (state.getBlock().getMaterial() == Material.air) + if (state.getMaterial() == Material.air) { // topBlocks and dirtBlocks can occur after any pocket of air topBlocksToFill = (topBlock == null ? 0 : 1); dirtBlocksToFill = dirtDepth; continue; } - else if (!hitFloorYet && state.getBlock().getMaterial() == Material.water) + else if (!hitFloorYet && state.getMaterial() == Material.water) { // seaFloorBlocks can occur after surface water seaFloorBlocksToFill = seaFloorDepth; @@ -373,4 +378,84 @@ public class BOPBiome extends BiomeGenBase implements IExtendedBiome { return this; } + + @Override + public String getIdName() + { + return this.idName; + } + + //TODO: Convert this to a proper builder + private static class BiomePropsBuilder extends BiomeGenBase.BiomeProperties + { + /**The colour of this biome as seen in guis**/ + private float guiColour = 0xffffff; + + //Copied from Vanilla's BiomeProperties to provide us with access + private final String biomeName; + private float baseHeight = 0.1F; + private float heightVariation = 0.2F; + private float temperature = 0.5F; + private float rainfall = 0.5F; + private int waterColor = 16777215; + private boolean enableSnow; + private boolean enableRain = true; + private String baseBiomeRegName; + + public BiomeProps(String name) { super(name); } + + public BiomeProps setGuiColour(int colour) + { + this.guiColour = colour; + return this; + } + + @Override + public BiomeProps setTemperature(float temperature) + { + return (BiomeProps)super.setTemperature(temperature); + } + + @Override + public BiomeProps setRainfall(float rainfall) + { + return (BiomeProps) super.setRainfall(rainfall); + } + + @Override + public BiomeProps setBaseHeight(float baseHeight) + { + return (BiomeProps)super.setBaseHeight(baseHeight); + } + + @Override + public BiomeProps setHeightVariation(float heightVariation) + { + return (BiomeProps)super.setHeightVariation(heightVariation); + } + + @Override + public BiomeProps setRainDisabled() + { + return (BiomeProps)super.setRainDisabled(); + } + + @Override + public BiomeProps setSnowEnabled() + { + return (BiomeProps)super.setSnowEnabled(); + } + + @Override + public BiomeProps setWaterColor(int waterColor) + { + return (BiomeProps)super.setWaterColor(waterColor); + } + + @Override + public BiomeProps setBaseBiome(String name) + { + return (BiomeProps)super.setBaseBiome(name); + } + } } diff --git a/src/main/java/biomesoplenty/api/biome/IExtendedBiome.java b/src/main/java/biomesoplenty/api/biome/IExtendedBiome.java index 6a1616c95..a9876a610 100644 --- a/src/main/java/biomesoplenty/api/biome/IExtendedBiome.java +++ b/src/main/java/biomesoplenty/api/biome/IExtendedBiome.java @@ -14,14 +14,12 @@ import biomesoplenty.api.biome.generation.GenerationManager; import biomesoplenty.api.biome.generation.GeneratorStage; import biomesoplenty.api.biome.generation.IGenerator; import biomesoplenty.common.enums.BOPClimates; -import biomesoplenty.common.util.config.BOPConfig.IConfigObj; import biomesoplenty.common.world.BOPWorldSettings; import net.minecraft.world.biome.BiomeGenBase; public interface IExtendedBiome { public void applySettings(BOPWorldSettings settings); - public void configure(IConfigObj conf); public BiomeOwner getBiomeOwner(); public void addGenerator(String name, GeneratorStage stage, IGenerator generator); @@ -34,4 +32,5 @@ public interface IExtendedBiome /**Get the base biome associated with this extension**/ public BiomeGenBase getBaseBiome(); + public String getIdName(); } diff --git a/src/main/java/biomesoplenty/common/biome/overworld/BiomeGenAlps.java b/src/main/java/biomesoplenty/common/biome/overworld/BiomeGenAlps.java index a0ad30475..70aa4ba45 100644 --- a/src/main/java/biomesoplenty/common/biome/overworld/BiomeGenAlps.java +++ b/src/main/java/biomesoplenty/common/biome/overworld/BiomeGenAlps.java @@ -17,17 +17,16 @@ import biomesoplenty.common.world.feature.GeneratorLakes; import biomesoplenty.common.world.feature.GeneratorOreSingle; import net.minecraft.block.state.IBlockState; import net.minecraft.init.Blocks; +import net.minecraft.world.biome.BiomeGenBase; public class BiomeGenAlps extends BOPBiome { public BiomeGenAlps() { + super(new BiomeProps("Alps").setGuiColour(13421772).setSnowEnabled().setTemperature(-0.5F).setRainfall(0.3F)); + // terrain this.terrainSettings.avgHeight(198).heightVariation(12, 12).octaves(1, 1, 2, 2, 3, 3); - - this.setColor(13421772); - this.setEnableSnow(); - this.setTemperatureRainfall(-0.5F, 0.3F); this.canGenerateRivers = false; this.canSpawnInBiome = false; diff --git a/src/main/java/biomesoplenty/common/enums/BOPClimates.java b/src/main/java/biomesoplenty/common/enums/BOPClimates.java index 8ca197db0..bc774347e 100644 --- a/src/main/java/biomesoplenty/common/enums/BOPClimates.java +++ b/src/main/java/biomesoplenty/common/enums/BOPClimates.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Iterator; import biomesoplenty.common.world.layer.BOPGenLayer; +import net.minecraft.init.Biomes; import net.minecraft.world.biome.BiomeGenBase; import net.minecraftforge.common.BiomeManager.BiomeType; @@ -64,11 +65,11 @@ public enum BOPClimates { switch (this) { case ICE_CAP: - return (layer.nextInt(2)==0) ? this.getRandomLandBiome(layer) : BiomeGenBase.frozenOcean; + return (layer.nextInt(2)==0) ? this.getRandomLandBiome(layer) : Biomes.frozenOcean; case TUNDRA: case BOREAL: - return (layer.nextInt(3)!=0) ? (deep ? BiomeGenBase.deepOcean : BiomeGenBase.ocean) : BiomeGenBase.frozenOcean; + return (layer.nextInt(3)!=0) ? (deep ? Biomes.deepOcean : Biomes.ocean) : Biomes.frozenOcean; default: - return (deep ? BiomeGenBase.deepOcean : BiomeGenBase.ocean); + return (deep ? Biomes.deepOcean : Biomes.ocean); } } @@ -76,20 +77,20 @@ public enum BOPClimates { { // set up vanilla biomes - BOPClimates.ICE_CAP.addLandBiome(10,BiomeGenBase.icePlains); - BOPClimates.TUNDRA.addLandBiome(10, BiomeGenBase.coldTaiga).addLandBiome(10, BiomeGenBase.extremeHills); - BOPClimates.BOREAL.addLandBiome(5, BiomeGenBase.megaTaiga).addLandBiome(5, BiomeGenBase.extremeHills).addLandBiome(20, BiomeGenBase.taiga); - BOPClimates.COLD_SWAMP.addLandBiome(5, BiomeGenBase.swampland); - BOPClimates.WET_TEMPERATE.addLandBiome(20, BiomeGenBase.roofedForest).addLandBiome(5, BiomeGenBase.forest); - BOPClimates.DRY_TEMPERATE.addLandBiome(5, BiomeGenBase.plains); - BOPClimates.COOL_TEMPERATE.addLandBiome(15, BiomeGenBase.forest).addLandBiome(10, BiomeGenBase.birchForest); - BOPClimates.WARM_TEMPERATE.addLandBiome(20, BiomeGenBase.plains).addLandBiome(5, BiomeGenBase.birchForest); - BOPClimates.HOT_SWAMP.addLandBiome(5, BiomeGenBase.swampland); - BOPClimates.TROPICAL.addLandBiome(15, BiomeGenBase.jungle); - BOPClimates.MEDITERANEAN.addLandBiome(5, BiomeGenBase.plains); - BOPClimates.SAVANNA.addLandBiome(20, BiomeGenBase.savanna); - BOPClimates.HOT_DESERT.addLandBiome(30, BiomeGenBase.desert).addLandBiome(10, BiomeGenBase.mesaPlateau); - BOPClimates.WASTELAND.addLandBiome(1, BiomeGenBase.desert); + BOPClimates.ICE_CAP.addLandBiome(10,Biomes.icePlains); + BOPClimates.TUNDRA.addLandBiome(10, Biomes.coldTaiga).addLandBiome(10, Biomes.extremeHills); + BOPClimates.BOREAL.addLandBiome(5, Biomes.megaTaiga).addLandBiome(5, Biomes.extremeHills).addLandBiome(20, Biomes.taiga); + BOPClimates.COLD_SWAMP.addLandBiome(5, Biomes.swampland); + BOPClimates.WET_TEMPERATE.addLandBiome(20, Biomes.roofedForest).addLandBiome(5, Biomes.forest); + BOPClimates.DRY_TEMPERATE.addLandBiome(5, Biomes.plains); + BOPClimates.COOL_TEMPERATE.addLandBiome(15, Biomes.forest).addLandBiome(10, Biomes.birchForest); + BOPClimates.WARM_TEMPERATE.addLandBiome(20, Biomes.plains).addLandBiome(5, Biomes.birchForest); + BOPClimates.HOT_SWAMP.addLandBiome(5, Biomes.swampland); + BOPClimates.TROPICAL.addLandBiome(15, Biomes.jungle); + BOPClimates.MEDITERANEAN.addLandBiome(5, Biomes.plains); + BOPClimates.SAVANNA.addLandBiome(20, Biomes.savanna); + BOPClimates.HOT_DESERT.addLandBiome(30, Biomes.desert).addLandBiome(10, Biomes.mesaPlateau); + BOPClimates.WASTELAND.addLandBiome(1, Biomes.desert); } @@ -146,7 +147,7 @@ public enum BOPClimates { { for (WeightedBiomeEntry entry : climate.landBiomes) { - System.out.println(climate.name()+" "+entry.biome.biomeName+" "+entry.weight); + System.out.println(climate.name()+" "+entry.biome.getBiomeName()+" "+entry.weight); } } } diff --git a/src/main/java/biomesoplenty/common/handler/BucketEventHandler.java b/src/main/java/biomesoplenty/common/handler/BucketEventHandler.java index 1bdc67243..1be872f29 100644 --- a/src/main/java/biomesoplenty/common/handler/BucketEventHandler.java +++ b/src/main/java/biomesoplenty/common/handler/BucketEventHandler.java @@ -20,6 +20,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.stats.StatList; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; import net.minecraftforge.event.entity.player.FillBucketEvent; import net.minecraftforge.fml.common.eventhandler.Event.Result; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; @@ -31,14 +32,14 @@ public class BucketEventHandler public void onRightClickHoldingBucket(FillBucketEvent event) { // check we're using a bucket, on a block we can modify - if (event.current.getItem() != Items.bucket) {return;} - if (event.target.typeOfHit != MovingObjectPosition.MovingObjectType.BLOCK) {return;} - BlockPos blockpos = event.target.getBlockPos(); - if (!event.world.isBlockModifiable(event.entityPlayer, blockpos)) {return;} - if (!event.entityPlayer.canPlayerEdit(blockpos.offset(event.target.sideHit), event.target.sideHit, event.current)) {return;} + if (event.getEmptyBucket().getItem() != Items.bucket) {return;} + if (event.getTarget().typeOfHit != RayTraceResult.Type.BLOCK) {return;} + BlockPos blockpos = event.getTarget().getBlockPos(); + if (!event.getWorld().isBlockModifiable(event.entityPlayer, blockpos)) {return;} + if (!event.entityPlayer.canPlayerEdit(blockpos.offset(event.getTarget().sideHit), event.getTarget().sideHit, event.getEmptyBucket())) {return;} // determine if the block is one of our BOP fluids - IBlockState iblockstate = event.world.getBlockState(blockpos); + IBlockState iblockstate = event.getWorld().getBlockState(blockpos); Item filled_bucket = null; if (iblockstate.getBlock() == BOPBlocks.honey && ((Integer)iblockstate.getValue(BlockHoneyFluid.LEVEL)).intValue() == 0) { @@ -63,9 +64,9 @@ public class BucketEventHandler // remove the fluid and return the appropriate filled bucket event.setResult(Result.ALLOW); - event.result = new ItemStack(filled_bucket); - event.world.setBlockToAir(blockpos); - event.entityPlayer.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(event.current.getItem())]); + event.setFilledBucket(new ItemStack(filled_bucket)); + event.getWorld().setBlockToAir(blockpos); + event.entityPlayer.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(event.getEmptyBucket().getItem())]); } } \ No newline at end of file diff --git a/src/main/java/biomesoplenty/common/handler/DyeEventHandler.java b/src/main/java/biomesoplenty/common/handler/DyeEventHandler.java index 3ae5d5e3d..81a14a623 100644 --- a/src/main/java/biomesoplenty/common/handler/DyeEventHandler.java +++ b/src/main/java/biomesoplenty/common/handler/DyeEventHandler.java @@ -24,7 +24,7 @@ public class DyeEventHandler @SubscribeEvent public void entityInteract(EntityInteractEvent event) { - ItemStack stack = event.entityPlayer.getCurrentEquippedItem(); + ItemStack stack = event.entityPlayer.getHeldItem(event.getHand()); if (stack == null) {return;} Item item = stack.getItem(); @@ -36,7 +36,7 @@ public class DyeEventHandler else if (item == BOPItems.white_dye) {dyeColor = EnumDyeColor.WHITE;} else {return;} - Entity target = event.target; + Entity target = event.getTarget(); if (target instanceof EntityWolf) { EntityWolf wolf = (EntityWolf)target; diff --git a/src/main/java/biomesoplenty/common/handler/TrailsEventHandler.java b/src/main/java/biomesoplenty/common/handler/TrailsEventHandler.java index 8ca3f0f5a..69b83620a 100644 --- a/src/main/java/biomesoplenty/common/handler/TrailsEventHandler.java +++ b/src/main/java/biomesoplenty/common/handler/TrailsEventHandler.java @@ -57,7 +57,7 @@ public class TrailsEventHandler BlockPos groundPos = playerPos.add(offsetX, -1, offsetZ); - if (!world.isAirBlock(groundPos) && world.getBlockState(groundPos).getBlock().isSideSolid(world, groundPos, EnumFacing.UP)) //Only place particles on blocks with a solid top + if (!world.isAirBlock(groundPos) && world.getBlockState(groundPos).isSideSolid(world, groundPos, EnumFacing.UP)) //Only place particles on blocks with a solid top { if (player.posX != player.prevPosX || player.posZ != player.prevPosZ) //Particles should only spawn if the player is moving { diff --git a/src/main/java/biomesoplenty/common/init/ModBiomes.java b/src/main/java/biomesoplenty/common/init/ModBiomes.java index 78daa48de..6c6e3cf03 100644 --- a/src/main/java/biomesoplenty/common/init/ModBiomes.java +++ b/src/main/java/biomesoplenty/common/init/ModBiomes.java @@ -117,6 +117,7 @@ import com.google.common.collect.Sets; import biomesoplenty.api.biome.BOPBiome; import biomesoplenty.api.biome.BOPBiomes; import biomesoplenty.api.biome.IExtendedBiome; +import biomesoplenty.api.biome.BOPBiome.BiomeProps; import biomesoplenty.common.biome.overworld.BiomeGenAlps; import biomesoplenty.common.biome.overworld.BiomeGenBambooForest; import biomesoplenty.common.biome.overworld.BiomeGenBayou; @@ -232,7 +233,6 @@ public class ModBiomes implements BOPBiomes.IBiomeRegistry public static Set presentBiomes; public static Map> subBiomesMap; - public static Map> mutatedBiomesMap; public static Map islandBiomesMap = new HashMap(); public static int totalIslandBiomesWeight; @@ -273,7 +273,6 @@ public class ModBiomes implements BOPBiomes.IBiomeRegistry } initSubBiomes(); - initMutatedBiomes(); registerBiomes(); registerBiomeDictionaryTags(); @@ -318,41 +317,6 @@ public class ModBiomes implements BOPBiomes.IBiomeRegistry setSubBiome(Biomes.ocean, Biomes.deepOcean); } - - public static void initMutatedBiomes() - { - mutatedBiomesMap = new HashMap>(); - - // Add vanilla mutated biomes - - // the mutated versions of vanilla biomes aren't actually saved to static variables in BiomeGenBase - // instead, they just manually create mutated versions of many of their biomes via a hard coded list in BiomeGenBase - // and by default assume a biome id which is the old one + 128 - // this severely limits the number of new biomes we can add (we'd have to keep the number below 128 to avoid clashes) - // we hard code the list of vanilla biomes with mutated versions below, which enables other biomes to use the biome ids which are not taken - - setSubBiome(Biomes.plains, BiomeGenBase.getBiome(Biomes.plains.biomeID + 128)); - setSubBiome(Biomes.desert, BiomeGenBase.getBiome(Biomes.desert.biomeID + 128)); - setSubBiome(Biomes.forest, BiomeGenBase.getBiome(Biomes.forest.biomeID + 128)); - setSubBiome(Biomes.taiga, BiomeGenBase.getBiome(Biomes.taiga.biomeID + 128)); - setSubBiome(Biomes.swampland, BiomeGenBase.getBiome(Biomes.swampland.biomeID + 128)); - setSubBiome(Biomes.icePlains, BiomeGenBase.getBiome(Biomes.icePlains.biomeID + 128)); - setSubBiome(Biomes.jungle, BiomeGenBase.getBiome(Biomes.jungle.biomeID + 128)); - setSubBiome(Biomes.jungleEdge, BiomeGenBase.getBiome(Biomes.jungleEdge.biomeID + 128)); - setSubBiome(Biomes.coldTaiga, BiomeGenBase.getBiome(Biomes.coldTaiga.biomeID + 128)); - setSubBiome(Biomes.savanna, BiomeGenBase.getBiome(Biomes.savanna.biomeID + 128)); - setSubBiome(Biomes.savannaPlateau, BiomeGenBase.getBiome(Biomes.savannaPlateau.biomeID + 128)); - setSubBiome(Biomes.mesa, BiomeGenBase.getBiome(Biomes.mesa.biomeID + 128)); - setSubBiome(Biomes.mesaPlateau, BiomeGenBase.getBiome(Biomes.mesaPlateau.biomeID + 128)); - setSubBiome(Biomes.mesaPlateau_F, BiomeGenBase.getBiome(Biomes.mesaPlateau_F.biomeID + 128)); - setSubBiome(Biomes.birchForest, BiomeGenBase.getBiome(Biomes.birchForest.biomeID + 128)); - setSubBiome(Biomes.birchForestHills, BiomeGenBase.getBiome(Biomes.birchForestHills.biomeID + 128)); - setSubBiome(Biomes.roofedForest, BiomeGenBase.getBiome(Biomes.roofedForest.biomeID + 128)); - setSubBiome(Biomes.megaTaiga, BiomeGenBase.getBiome(Biomes.megaTaiga.biomeID + 128)); - setSubBiome(Biomes.extremeHills, BiomeGenBase.getBiome(Biomes.extremeHills.biomeID + 128)); - setSubBiome(Biomes.extremeHillsPlus, BiomeGenBase.getBiome(Biomes.extremeHillsPlus.biomeID + 128)); - setSubBiome(Biomes.megaTaigaHills, BiomeGenBase.getBiome(Biomes.megaTaigaHills.biomeID + 128)); - } private static void registerBiomes() { @@ -422,10 +386,10 @@ public class ModBiomes implements BOPBiomes.IBiomeRegistry coral_reef = registerBOPBiome(new BiomeGenCoralReef(), "Coral Reef"); kelp_forest = registerBOPBiome(new BiomeGenKelpForest(), "Kelp Forest"); - setSubBiome(Optional.of(BiomeGenBase.icePlains), BOPBiomes.glacier); - setSubBiome(Optional.of(BiomeGenBase.desert), BOPBiomes.oasis); - setSubBiome(Optional.of(BiomeGenBase.ocean), BOPBiomes.coral_reef); - setSubBiome(Optional.of(BiomeGenBase.ocean), BOPBiomes.kelp_forest); + setSubBiome(Optional.of(Biomes.icePlains), BOPBiomes.glacier); + setSubBiome(Optional.of(Biomes.desert), BOPBiomes.oasis); + setSubBiome(Optional.of(Biomes.ocean), BOPBiomes.coral_reef); + setSubBiome(Optional.of(Biomes.ocean), BOPBiomes.kelp_forest); // island biomes @@ -604,12 +568,18 @@ public class ModBiomes implements BOPBiomes.IBiomeRegistry return ImmutableSet.copyOf(presentBiomes); } - private static void setSubBiome(Optional parent, Optional... subBiomes) + public static BOPConfig.IConfigObj readConfigFile(String idName) { - setSubBiome(parent, false, subBiomes); + File configFile = new File(new File(BiomesOPlenty.configDirectory, "biomes"), idName + ".json"); + BOPConfig.IConfigObj conf = new BOPConfig.ConfigFileObj(configFile); + + // log any warnings from parsing the config file + for (String msg : conf.flushMessages()) {BiomesOPlenty.logger.warn(msg);} + + return conf; } - private static void setSubBiome(Optional parent, boolean mutated, Optional... subBiomes) + private static void setSubBiome(Optional parent, Optional... subBiomes) { if (parent.isPresent()) { @@ -617,7 +587,7 @@ public class ModBiomes implements BOPBiomes.IBiomeRegistry { if (subBiome.isPresent()) { - setSubBiome(parent.get(), mutated, subBiome.get()); + setSubBiome(parent.get(), subBiome.get()); } } } @@ -625,12 +595,7 @@ public class ModBiomes implements BOPBiomes.IBiomeRegistry private static void setSubBiome(BiomeGenBase parent, BiomeGenBase... subBiomes) { - setSubBiome(parent, false, subBiomes); - } - - private static void setSubBiome(BiomeGenBase parent, boolean mutated, BiomeGenBase... subBiomes) - { - Map> map = mutated ? mutatedBiomesMap : subBiomesMap; + Map> map = subBiomesMap; int parentId = parent.biomeID; if (!map.containsKey(parentId)) { @@ -651,17 +616,6 @@ public class ModBiomes implements BOPBiomes.IBiomeRegistry } } - private static void configureBiome(IExtendedBiome biome, String idName) - { - File configFile = new File(new File(BiomesOPlenty.configDirectory, "biomes"), idName + ".json"); - BOPConfig.IConfigObj conf = new BOPConfig.ConfigFileObj(configFile); - - // If there was a valid config file, then use it to configure the biome - if (!conf.isEmpty()) {biome.configure(conf);} - // log any warnings from parsing the config file - for (String msg : conf.flushMessages()) {BiomesOPlenty.logger.warn(msg);} - } - private static IExtendedBiome registerWrappedBiome(IExtendedBiome extendedBiome, String idName) { //Non-wrapped biomes should not be registered this way @@ -671,23 +625,17 @@ public class ModBiomes implements BOPBiomes.IBiomeRegistry return BOPBiomes.REG_INSTANCE.registerBiome(extendedBiome, idName); } - private static Optional registerBOPBiome(BOPBiome biome, String name) + private static Optional registerBOPBiome(BOPBiome biome, String idName) { - - biome.setBiomeName(name); - String idName = BiomeUtils.getBiomeIdentifier(biome); - Integer id = biomeIdMapConf.getInt(idName, null); if (id == null) {id = new Integer(getNextFreeBiomeId());} biomeIdMap.put(idName, id); if (id > -1) { BOPCommand.biomeCount++; - biome.biomeID = id; BOPBiomes.REG_INSTANCE.registerBiome(biome, idName); - - BiomeGenBase.getBiomeGenArray()[id] = biome; + BiomeGenBase.registerBiome(id, idName, biome); //Enable spwning and village generation in the biome if (biome.canSpawnInBiome) @@ -715,7 +663,7 @@ public class ModBiomes implements BOPBiomes.IBiomeRegistry { for (int i = nextBiomeId; i < 256; i++) { - if (BiomeGenBase.getBiomeGenArray()[i] != null) + if (BiomeGenBase.getBiome(i) != null) { if (i == 255) throw new IllegalArgumentException("There are no more biome ids avaliable!"); continue; diff --git a/src/main/java/biomesoplenty/common/init/ModChecks.java b/src/main/java/biomesoplenty/common/init/ModChecks.java index 5268d5013..69094a927 100644 --- a/src/main/java/biomesoplenty/common/init/ModChecks.java +++ b/src/main/java/biomesoplenty/common/init/ModChecks.java @@ -25,7 +25,7 @@ public class ModChecks String biomeIdentifier = entry.getKey(); int id = entry.getValue(); - //Ensure the id is valid + //Ensure the id is valid (some biomes may be set to -1 as they are disabled) if (id >= 0 && id <= BiomeGenBase.getBiomeGenArray().length) { BiomeGenBase biome = BiomeGenBase.getBiome(id); diff --git a/src/main/java/biomesoplenty/common/init/ModItems.java b/src/main/java/biomesoplenty/common/init/ModItems.java index 3dfc68af2..1ed3ecb4c 100644 --- a/src/main/java/biomesoplenty/common/init/ModItems.java +++ b/src/main/java/biomesoplenty/common/init/ModItems.java @@ -123,6 +123,7 @@ import net.minecraft.client.renderer.block.model.ModelBakery; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.init.Blocks; +import net.minecraft.init.MobEffects; import net.minecraft.item.Item; import net.minecraft.item.Item.ToolMaterial; import net.minecraft.item.ItemArmor; @@ -136,6 +137,7 @@ import net.minecraft.item.ItemSpade; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemSword; import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.common.util.EnumHelper; @@ -163,7 +165,7 @@ public class ModItems saladfruit = registerItem(new ItemSoup(6), "saladfruit"); ((ItemFood)saladfruit).setPotionEffect(Potion.digSpeed.id, 775, 1, 0.05F); saladveggie = registerItem(new ItemSoup(6), "saladveggie"); - ((ItemFood)saladveggie).setPotionEffect(Potion.nightVision.id, 1100, 1, 0.05F); // TODO: Is this the right potion effect for veggie salad? + ((ItemFood)saladveggie).setPotionEffect(new PotionEffect(MobEffects.nightVision, 1100, 1), 0.05F); // TODO: Is this the right potion effect for veggie salad? saladshroom = registerItem(new ItemSoup(6), "saladshroom"); ((ItemFood)saladshroom).setPotionEffect(Potion.jump.id, 550, 1, 0.05F); ricebowl = registerItem(new ItemSoup(2), "ricebowl"); @@ -271,7 +273,7 @@ public class ModItems stone_scythe = registerItem(new ItemBOPScythe(ToolMaterial.STONE), "stone_scythe"); iron_scythe = registerItem(new ItemBOPScythe(ToolMaterial.IRON), "iron_scythe"); gold_scythe = registerItem(new ItemBOPScythe(ToolMaterial.GOLD), "gold_scythe"); - diamond_scythe = registerItem(new ItemBOPScythe(ToolMaterial.EMERALD), "diamond_scythe"); + diamond_scythe = registerItem(new ItemBOPScythe(ToolMaterial.DIAMOND), "diamond_scythe"); amethyst_scythe = registerItem(new ItemBOPScythe(amethyst_tool_material), "amethyst_scythe"); dart = registerItem(new ItemDart(), "dart"); diff --git a/src/main/java/biomesoplenty/common/init/ModVanillaCompat.java b/src/main/java/biomesoplenty/common/init/ModVanillaCompat.java index 65f4fe163..f5cc6cd38 100644 --- a/src/main/java/biomesoplenty/common/init/ModVanillaCompat.java +++ b/src/main/java/biomesoplenty/common/init/ModVanillaCompat.java @@ -7,6 +7,7 @@ import biomesoplenty.common.entities.projectiles.dispenser.DispenserBehaviorMudb import biomesoplenty.common.enums.BOPGems; import biomesoplenty.common.enums.BOPTrees; import net.minecraft.block.BlockDispenser; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.WeightedRandomChestContent; import net.minecraftforge.common.ChestGenHooks; @@ -38,31 +39,31 @@ public class ModVanillaCompat ChestGenHooks bonusChest = ChestGenHooks.getInfo(ChestGenHooks.BONUS_CHEST); ChestGenHooks netherFortress = ChestGenHooks.getInfo(ChestGenHooks.NETHER_FORTRESS); - bonusChest.addItem(new WeightedRandomChestContent(new ItemStack(BOPItems.peach), 1, 3, 10)); - bonusChest.addItem(new WeightedRandomChestContent(new ItemStack(BOPItems.pear), 1, 3, 10)); - bonusChest.addItem(new WeightedRandomChestContent(new ItemStack(BOPItems.persimmon), 1, 3, 10)); + bonusChest.addItem(new WeightedRandomChestContent(BOPItems.peach, 0, 1, 3, 10)); + bonusChest.addItem(new WeightedRandomChestContent(BOPItems.pear, 0, 1, 3, 10)); + bonusChest.addItem(new WeightedRandomChestContent(BOPItems.persimmon, 0, 1, 3, 10)); - netherFortress.addItem(new WeightedRandomChestContent(new ItemStack(BOPItems.fleshchunk), 2, 6, 5)); - netherFortress.addItem(new WeightedRandomChestContent(new ItemStack(BOPItems.honeycomb), 2, 6, 5)); - netherFortress.addItem(new WeightedRandomChestContent(new ItemStack(BOPItems.filled_honeycomb), 2, 6, 3)); + netherFortress.addItem(new WeightedRandomChestContent(BOPItems.fleshchunk, 0, 2, 6, 5)); + netherFortress.addItem(new WeightedRandomChestContent(BOPItems.honeycomb, 0, 2, 6, 5)); + netherFortress.addItem(new WeightedRandomChestContent(BOPItems.filled_honeycomb, 0, 2, 6, 3)); - mineshaft.addItem(new WeightedRandomChestContent(new ItemStack(BOPItems.turnip_seeds), 3, 6, 25)); - mineshaft.addItem(new WeightedRandomChestContent(new ItemStack(BOPItems.gem, 1, BOPGems.RUBY.ordinal()), 1, 4, 3)); - mineshaft.addItem(new WeightedRandomChestContent(new ItemStack(BOPItems.gem, 1, BOPGems.AMBER.ordinal()), 1, 4, 3)); - mineshaft.addItem(new WeightedRandomChestContent(new ItemStack(BOPItems.gem, 1, BOPGems.MALACHITE.ordinal()), 1, 4, 3)); - mineshaft.addItem(new WeightedRandomChestContent(new ItemStack(BOPItems.gem, 1, BOPGems.PERIDOT.ordinal()), 1, 4, 3)); - mineshaft.addItem(new WeightedRandomChestContent(new ItemStack(BOPItems.gem, 1, BOPGems.SAPPHIRE.ordinal()), 1, 4, 3)); - mineshaft.addItem(new WeightedRandomChestContent(new ItemStack(BOPItems.gem, 1, BOPGems.TANZANITE.ordinal()), 1, 4, 3)); - mineshaft.addItem(new WeightedRandomChestContent(new ItemStack(BOPItems.gem, 1, BOPGems.TOPAZ.ordinal()), 1, 4, 3)); + mineshaft.addItem(new WeightedRandomChestContent(BOPItems.turnip_seeds, 0, 3, 6, 25)); + mineshaft.addItem(new WeightedRandomChestContent(BOPItems.gem, BOPGems.RUBY.ordinal(), 1, 4, 3)); + mineshaft.addItem(new WeightedRandomChestContent(BOPItems.gem, BOPGems.AMBER.ordinal(), 1, 4, 3)); + mineshaft.addItem(new WeightedRandomChestContent(BOPItems.gem, BOPGems.MALACHITE.ordinal(), 1, 4, 3)); + mineshaft.addItem(new WeightedRandomChestContent(BOPItems.gem, BOPGems.PERIDOT.ordinal(), 1, 4, 3)); + mineshaft.addItem(new WeightedRandomChestContent(BOPItems.gem, BOPGems.SAPPHIRE.ordinal(), 1, 4, 3)); + mineshaft.addItem(new WeightedRandomChestContent(BOPItems.gem, BOPGems.TANZANITE.ordinal(), 1, 4, 3)); + mineshaft.addItem(new WeightedRandomChestContent(BOPItems.gem, BOPGems.TOPAZ.ordinal(), 1, 4, 3)); - strongholdCorridor.addItem(new WeightedRandomChestContent(new ItemStack(BOPBlocks.sapling_1, 1, BOPTrees.SACRED_OAK.ordinal()), 1, 1, 1)); - strongholdCrossing.addItem(new WeightedRandomChestContent(new ItemStack(BOPBlocks.sapling_1, 1, BOPTrees.SACRED_OAK.ordinal()), 1, 1, 1)); - strongholdLibrary.addItem(new WeightedRandomChestContent(new ItemStack(BOPBlocks.sapling_1, 1, BOPTrees.SACRED_OAK.ordinal()), 1, 1, 1)); + strongholdCorridor.addItem(new WeightedRandomChestContent(Item.getItemFromBlock(BOPBlocks.sapling_1), BOPTrees.SACRED_OAK.ordinal(), 1, 1, 1)); + strongholdCrossing.addItem(new WeightedRandomChestContent(Item.getItemFromBlock(BOPBlocks.sapling_1), BOPTrees.SACRED_OAK.ordinal(), 1, 1, 1)); + strongholdLibrary.addItem(new WeightedRandomChestContent(Item.getItemFromBlock(BOPBlocks.sapling_1), BOPTrees.SACRED_OAK.ordinal(), 1, 1, 1)); - village.addItem(new WeightedRandomChestContent(new ItemStack(BOPItems.wading_boots), 1, 1, 15)); - village.addItem(new WeightedRandomChestContent(new ItemStack(BOPItems.flippers), 1, 1, 15)); + village.addItem(new WeightedRandomChestContent(BOPItems.wading_boots, 0, 1, 1, 15)); + village.addItem(new WeightedRandomChestContent(BOPItems.flippers, 0, 1, 1, 15)); - desertTemple.addItem(new WeightedRandomChestContent(new ItemStack(BOPItems.gem, 1, BOPGems.RUBY.ordinal()), 2, 8, 10)); - jungleTemple.addItem(new WeightedRandomChestContent(new ItemStack(BOPItems.gem, 1, BOPGems.TOPAZ.ordinal()), 2, 8, 10)); + desertTemple.addItem(new WeightedRandomChestContent(BOPItems.gem, BOPGems.RUBY.ordinal(), 2, 8, 10)); + jungleTemple.addItem(new WeightedRandomChestContent(BOPItems.gem, BOPGems.TOPAZ.ordinal(), 2, 8, 10)); } } diff --git a/src/main/java/biomesoplenty/common/integration/ThaumcraftCompat.java b/src/main/java/biomesoplenty/common/integration/ThaumcraftCompat.java index 7e4870603..21148f01f 100644 --- a/src/main/java/biomesoplenty/common/integration/ThaumcraftCompat.java +++ b/src/main/java/biomesoplenty/common/integration/ThaumcraftCompat.java @@ -31,15 +31,16 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.event.FMLInterModComms; +//TODO: Re-add this public class ThaumcraftCompat { public static void init() { - addThaumcraftAspects(); - addThaumcraftGolemsSupport(); + //addThaumcraftAspects(); + //addThaumcraftGolemsSupport(); } - private static void addThaumcraftAspects() + /*private static void addThaumcraftAspects() { //Thaumcraft sets most aspects automatically, just special cases are there @@ -211,5 +212,5 @@ public class ThaumcraftCompat list.add(aspects[i], amounts[i]); ThaumcraftApi.registerObjectTag(stack, list); - } + }*/ } diff --git a/src/main/java/biomesoplenty/common/util/biome/BiomeUtils.java b/src/main/java/biomesoplenty/common/util/biome/BiomeUtils.java index 0ab27c78a..db742f9ba 100644 --- a/src/main/java/biomesoplenty/common/util/biome/BiomeUtils.java +++ b/src/main/java/biomesoplenty/common/util/biome/BiomeUtils.java @@ -16,6 +16,7 @@ import biomesoplenty.core.BiomesOPlenty; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; +import net.minecraft.world.biome.BiomeProvider; import net.minecraft.world.gen.ChunkProviderSettings; public class BiomeUtils @@ -33,16 +34,6 @@ public class BiomeUtils } } - //TODO: This MUST be replaced with Vanilla's new proper identifiers - @Deprecated - public static String getBiomeIdentifier(BiomeGenBase biome) - { - // Vanilla Biomes are typically named in upper camel case, sometimes with spaces - // We follow the same convention with BOP Biomes - // return a standardised identifier for use in json files, etc by converting to lowercase with underscores - return CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, biome.getBiomeName().replace(" ", "")); - } - public static BlockPos spiralOutwardsLookingForBiome(World world, BiomeGenBase biomeToFind, double startX, double startZ) { int sampleSpacing = 4 << BiomeUtils.getBiomeSize(world); @@ -56,7 +47,7 @@ public class BiomeUtils { if (maxDist <= 0 || sampleSpace <= 0) {throw new IllegalArgumentException("maxDist and sampleSpace must be positive");} - WorldChunkManager chunkManager = world.getWorldChunkManager(); + BiomeProvider chunkManager = world.getWorldChunkManager(); double a = sampleSpace / Math.sqrt(Math.PI); double b = 2 * Math.sqrt(Math.PI); double x = 0; diff --git a/src/main/java/biomesoplenty/common/util/block/BlockQuery.java b/src/main/java/biomesoplenty/common/util/block/BlockQuery.java index 5bf242fc8..b473a48ae 100644 --- a/src/main/java/biomesoplenty/common/util/block/BlockQuery.java +++ b/src/main/java/biomesoplenty/common/util/block/BlockQuery.java @@ -302,15 +302,15 @@ public class BlockQuery case Desert: return block == Blocks.sand || block == Blocks.hardened_clay || block == Blocks.stained_hardened_clay || block == Blocks.dirt; case Nether: return block == Blocks.soul_sand; case Crop: return block == Blocks.farmland || block == BOPBlocks.farmland_0 || block == BOPBlocks.farmland_1; - case Cave: return block.isSideSolid(world, pos, EnumFacing.UP); + case Cave: return block.isSideSolid(state, world, pos, EnumFacing.UP); case Plains: return block == Blocks.grass || block == Blocks.dirt || block == Blocks.farmland || block == BOPBlocks.farmland_0 || block == BOPBlocks.farmland_1 || block == Blocks.mycelium; - case Water: return block.getMaterial() == Material.water && ((Integer)state.getValue(BlockLiquid.LEVEL)) == 0; + case Water: return state.getMaterial() == Material.water && ((Integer)state.getValue(BlockLiquid.LEVEL)) == 0; case Beach: boolean isBeach = block == Blocks.grass || block == Blocks.dirt || block == Blocks.sand || block == Blocks.mycelium; - boolean hasWater = (world.getBlockState(pos.east()).getBlock().getMaterial() == Material.water || - world.getBlockState(pos.west()).getBlock().getMaterial() == Material.water || - world.getBlockState(pos.north()).getBlock().getMaterial() == Material.water || - world.getBlockState(pos.south()).getBlock().getMaterial() == Material.water); + boolean hasWater = (world.getBlockState(pos.east()).getMaterial() == Material.water || + world.getBlockState(pos.west()).getMaterial() == Material.water || + world.getBlockState(pos.north()).getMaterial() == Material.water || + world.getBlockState(pos.south()).getMaterial() == Material.water); return isBeach && hasWater; } return false; @@ -496,7 +496,7 @@ public class BlockQuery @Override public boolean matches(IBlockState state) { - return this.materials.contains(state.getBlock().getMaterial()); + return this.materials.contains(state.getMaterial()); } public static IBlockQuery of(String materialName, boolean negated) throws BlockQueryParseException diff --git a/src/main/java/biomesoplenty/common/world/ChunkProviderGenerateBOP.java b/src/main/java/biomesoplenty/common/world/ChunkProviderGenerateBOP.java index eebba57aa..514027105 100644 --- a/src/main/java/biomesoplenty/common/world/ChunkProviderGenerateBOP.java +++ b/src/main/java/biomesoplenty/common/world/ChunkProviderGenerateBOP.java @@ -39,6 +39,7 @@ import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.ChunkPrimer; +import net.minecraft.world.chunk.IChunkGenerator; import net.minecraft.world.chunk.IChunkProvider; import net.minecraft.world.gen.MapGenBase; import net.minecraft.world.gen.MapGenCaves; @@ -58,7 +59,7 @@ import net.minecraftforge.event.terraingen.PopulateChunkEvent; import net.minecraftforge.event.terraingen.TerrainGen; import net.minecraftforge.fml.common.eventhandler.Event.Result; -public class ChunkProviderGenerateBOP implements IChunkProvider +public class ChunkProviderGenerateBOP implements IChunkGenerator { private Random rand; diff --git a/src/main/java/biomesoplenty/common/world/WorldTypeBOP.java b/src/main/java/biomesoplenty/common/world/WorldTypeBOP.java index 2f48ae89f..608f19690 100644 --- a/src/main/java/biomesoplenty/common/world/WorldTypeBOP.java +++ b/src/main/java/biomesoplenty/common/world/WorldTypeBOP.java @@ -13,7 +13,8 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiCreateWorld; import net.minecraft.world.World; import net.minecraft.world.WorldType; -import net.minecraft.world.chunk.IChunkProvider; +import net.minecraft.world.biome.BiomeProvider; +import net.minecraft.world.chunk.IChunkGenerator; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -27,13 +28,13 @@ public class WorldTypeBOP extends WorldType } @Override - public WorldChunkManager getChunkManager(World world) + public BiomeProvider getBiomeProvider(World world) { return new BiomeProviderBOP(world); } @Override - public IChunkProvider getChunkGenerator(World world, String generatorOptions) + public IChunkGenerator getChunkGenerator(World world, String generatorOptions) { return new ChunkProviderGenerateBOP(world, world.getSeed(), world.getWorldInfo().isMapFeaturesEnabled(), generatorOptions); //return new ChunkProviderGenerateVanilla(world, world.getSeed(), world.getWorldInfo().isMapFeaturesEnabled(), generatorOptions);