diff --git a/api/forestry b/api/forestry index 89d06484a..7f0657708 160000 --- a/api/forestry +++ b/api/forestry @@ -1 +1 @@ -Subproject commit 89d06484a2682d0d5ed5768c5c2e54b15778d0fb +Subproject commit 7f06577080e370fb0ed90bb2da4565be1ed8eeb6 diff --git a/src/main/java/forestry/apiculture/genetics/Bee.java b/src/main/java/forestry/apiculture/genetics/Bee.java index 9607e8f9d..47abb0e18 100755 --- a/src/main/java/forestry/apiculture/genetics/Bee.java +++ b/src/main/java/forestry/apiculture/genetics/Bee.java @@ -37,6 +37,7 @@ import forestry.api.core.BiomeHelper; import forestry.api.core.EnumHumidity; import forestry.api.core.EnumTemperature; import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.EnumTolerance; import forestry.api.genetics.IAllele; import forestry.api.genetics.IAlleleTolerance; import forestry.api.genetics.IChromosome; @@ -286,7 +287,7 @@ public class Bee extends IndividualLiving implements IBee { } // / And finally climate check - if (!checkSuitableClimate(housing.getTemperature(), housing.getHumidity())) { + if (!isSuitableClimate(housing.getTemperature(), housing.getHumidity())) { return EnumErrorCode.INVALIDBIOME; } @@ -301,20 +302,17 @@ public class Bee extends IndividualLiving implements IBee { return !genome.getPrimary().isNocturnal() || genome.getNocturnal(); } - private boolean checkBiomeHazard(BiomeGenBase biome) { + public boolean isSuitableBiome(BiomeGenBase biome) { if (biome == null) { return false; } EnumTemperature temperature = EnumTemperature.getFromBiome(biome); EnumHumidity humidity = EnumHumidity.getFromValue(biome.rainfall); - return AlleleManager.climateHelper.isWithinLimits(temperature, humidity, - genome.getPrimary().getTemperature(), genome.getToleranceTemp(), - genome.getPrimary().getHumidity(), genome.getToleranceHumid()); + return isSuitableClimate(temperature, humidity); } - private boolean checkSuitableClimate(EnumTemperature temperature, EnumHumidity humidity) { - + private boolean isSuitableClimate(EnumTemperature temperature, EnumHumidity humidity) { return AlleleManager.climateHelper.isWithinLimits(temperature, humidity, genome.getPrimary().getTemperature(), genome.getToleranceTemp(), genome.getPrimary().getHumidity(), genome.getToleranceHumid()); @@ -350,7 +348,7 @@ public class Bee extends IndividualLiving implements IBee { public ArrayList getSuitableBiomeIds() { ArrayList suitableBiomes = new ArrayList(); for (BiomeGenBase biome : BiomeGenBase.getBiomeGenArray()) { - if (checkBiomeHazard(biome)) { + if (isSuitableBiome(biome)) { suitableBiomes.add(biome.biomeID); } } @@ -362,7 +360,7 @@ public class Bee extends IndividualLiving implements IBee { public ArrayList getSuitableBiomes() { ArrayList suitableBiomes = new ArrayList(); for (BiomeGenBase biome : BiomeGenBase.getBiomeGenArray()) { - if (checkBiomeHazard(biome)) { + if (isSuitableBiome(biome)) { suitableBiomes.add(biome); } } @@ -610,14 +608,7 @@ public class Bee extends IndividualLiving implements IBee { } IBeekeepingMode mode = PluginApiculture.beeInterface.getBeekeepingMode(world); - IBee offspring = new Bee(new BeeGenome(chromosomes), mode.isNaturalOffspring(this), generation); - - /* Disabling the mutation rate nerf - // All mutation and no play makes queen a dull girl. - if(mode.isDegenerating(this, offspring, housing)) - offspring.setIsNatural(false);*/ - - return offspring; + return new Bee(new BeeGenome(chromosomes), mode.isNaturalOffspring(this), generation); } private IChromosome[] mutateSpecies(IBeeHousing housing, IGenome genomeOne, IGenome genomeTwo) { diff --git a/src/main/java/forestry/apiculture/items/ItemHabitatLocator.java b/src/main/java/forestry/apiculture/items/ItemHabitatLocator.java index 7ee09b74f..6ba5634fb 100644 --- a/src/main/java/forestry/apiculture/items/ItemHabitatLocator.java +++ b/src/main/java/forestry/apiculture/items/ItemHabitatLocator.java @@ -184,7 +184,8 @@ public class ItemHabitatLocator extends ItemInventoried { public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean flag) { BiomeGenBase currentBiome = player.worldObj.getBiomeGenForCoords((int) player.posX, (int) player.posZ); - EnumTemperature temperature = EnumTemperature.getFromBiome(currentBiome); + float temperatureValue = currentBiome.getFloatTemperature((int) player.posX, (int) player.posY, (int) player.posZ); + EnumTemperature temperature = EnumTemperature.getFromValue(temperatureValue); EnumHumidity humidity = EnumHumidity.getFromValue(currentBiome.rainfall); list.add(StringUtil.localize("gui.currentBiome") + ": " + currentBiome.biomeName); diff --git a/src/main/java/forestry/apiculture/worldgen/HiveDescription.java b/src/main/java/forestry/apiculture/worldgen/HiveDescription.java index a4f7516a4..e44a9a1ed 100644 --- a/src/main/java/forestry/apiculture/worldgen/HiveDescription.java +++ b/src/main/java/forestry/apiculture/worldgen/HiveDescription.java @@ -10,34 +10,40 @@ ******************************************************************************/ package forestry.apiculture.worldgen; -import java.util.EnumSet; - import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; +import net.minecraftforge.common.BiomeDictionary; + +import forestry.api.apiculture.IBeeGenome; import forestry.api.apiculture.hives.HiveManager; import forestry.api.apiculture.hives.IHiveDescription; import forestry.api.apiculture.hives.IHiveGen; import forestry.api.core.BiomeHelper; import forestry.api.core.EnumHumidity; import forestry.api.core.EnumTemperature; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.EnumTolerance; +import forestry.api.genetics.IAllele; +import forestry.apiculture.genetics.BeeTemplates; import forestry.core.config.ForestryBlock; +import forestry.plugins.PluginApiculture; public enum HiveDescription implements IHiveDescription { - FOREST(1, 3.0f, EnumSet.of(EnumHumidity.NORMAL), EnumSet.of(EnumTemperature.NORMAL), HiveManager.genHelper.tree()), - MEADOWS(2, 1.0f, EnumSet.of(EnumHumidity.NORMAL), EnumSet.of(EnumTemperature.NORMAL), HiveManager.genHelper.ground(Blocks.dirt, Blocks.grass)), - DESERT(3, 1.0f, EnumSet.of(EnumHumidity.ARID), EnumSet.of(EnumTemperature.HOT), HiveManager.genHelper.ground(Blocks.sand, Blocks.sandstone)), - JUNGLE(4, 4.0f, EnumSet.of(EnumHumidity.DAMP), EnumSet.of(EnumTemperature.WARM), HiveManager.genHelper.tree()), - END(5, 4.0f, EnumSet.allOf(EnumHumidity.class), EnumSet.allOf(EnumTemperature.class), HiveManager.genHelper.ground(Blocks.end_stone)) { + FOREST(1, 3.0f, BeeTemplates.getForestTemplate(), HiveManager.genHelper.tree()), + MEADOWS(2, 1.0f, BeeTemplates.getMeadowsTemplate(), HiveManager.genHelper.ground(Blocks.dirt, Blocks.grass)), + DESERT(3, 1.0f, BeeTemplates.getModestTemplate(), HiveManager.genHelper.ground(Blocks.dirt, Blocks.grass, Blocks.sand, Blocks.sandstone)), + JUNGLE(4, 4.0f, BeeTemplates.getTropicalTemplate(), HiveManager.genHelper.tree()), + END(5, 4.0f, BeeTemplates.getEnderTemplate(), HiveManager.genHelper.ground(Blocks.end_stone)) { @Override public boolean isGoodBiome(BiomeGenBase biome) { - return biome.biomeID == BiomeGenBase.sky.biomeID; + return BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.END); } }, - SNOW(6, 2.0f, EnumSet.allOf(EnumHumidity.class), EnumSet.of(EnumTemperature.COLD, EnumTemperature.ICY), HiveManager.genHelper.ground(Blocks.dirt, Blocks.grass, Blocks.snow)) { + SNOW(6, 2.0f, BeeTemplates.getWintryTemplate(), HiveManager.genHelper.ground(Blocks.dirt, Blocks.grass, Blocks.snow)) { @Override public void postGen(World world, int x, int y, int z) { if (world.isAirBlock(x, y + 1, z)) { @@ -45,19 +51,17 @@ public enum HiveDescription implements IHiveDescription { } } }, - SWAMP(7, 2.0f, EnumSet.of(EnumHumidity.DAMP), EnumSet.of(EnumTemperature.NORMAL), HiveManager.genHelper.ground(Blocks.dirt, Blocks.grass)),; + SWAMP(7, 2.0f, BeeTemplates.getMarshyTemplate(), HiveManager.genHelper.ground(Blocks.dirt, Blocks.grass)),; private final int meta; private final float genChance; - private final EnumSet humidities; - private final EnumSet temperatures; + private final IBeeGenome beeGenome; private final IHiveGen hiveGen; - private HiveDescription(int meta, float genChance, EnumSet humidities, EnumSet temperatures, IHiveGen hiveGen) { + private HiveDescription(int meta, float genChance, IAllele[] beeTemplate, IHiveGen hiveGen) { this.meta = meta; this.genChance = genChance; - this.humidities = humidities; - this.temperatures = temperatures; + this.beeGenome = PluginApiculture.beeInterface.templateAsGenome(beeTemplate); this.hiveGen = hiveGen; } @@ -83,12 +87,16 @@ public enum HiveDescription implements IHiveDescription { @Override public boolean isGoodHumidity(EnumHumidity humidity) { - return humidities.contains(humidity); + EnumHumidity idealHumidity = beeGenome.getPrimary().getHumidity(); + EnumTolerance humidityTolerance = beeGenome.getToleranceHumid(); + return AlleleManager.climateHelper.isWithinLimits(humidity, idealHumidity, humidityTolerance); } @Override public boolean isGoodTemperature(EnumTemperature temperature) { - return temperatures.contains(temperature); + EnumTemperature idealTemperature = beeGenome.getPrimary().getTemperature(); + EnumTolerance temperatureTolerance = beeGenome.getToleranceTemp(); + return AlleleManager.climateHelper.isWithinLimits(temperature, idealTemperature, temperatureTolerance); } @Override diff --git a/src/main/java/forestry/core/genetics/ClimateHelper.java b/src/main/java/forestry/core/genetics/ClimateHelper.java index e2f2347d7..8245a2eba 100755 --- a/src/main/java/forestry/core/genetics/ClimateHelper.java +++ b/src/main/java/forestry/core/genetics/ClimateHelper.java @@ -30,6 +30,14 @@ public class ClimateHelper implements IClimateHelper { return getToleratedHumidity(baseHumid, tolHumid).contains(humidity); } + + public boolean isWithinLimits(EnumTemperature temperature, EnumTemperature baseTemp, EnumTolerance tolTemp) { + return getToleratedTemperature(baseTemp, tolTemp).contains(temperature); + } + + public boolean isWithinLimits(EnumHumidity humidity, EnumHumidity baseHumid, EnumTolerance tolHumid) { + return getToleratedHumidity(baseHumid, tolHumid).contains(humidity); + } public ArrayList getToleratedHumidity(EnumHumidity prefered, EnumTolerance tolerance) { diff --git a/src/main/java/forestry/plugins/PluginApiculture.java b/src/main/java/forestry/plugins/PluginApiculture.java index 6432982b8..8abb45808 100644 --- a/src/main/java/forestry/plugins/PluginApiculture.java +++ b/src/main/java/forestry/plugins/PluginApiculture.java @@ -237,8 +237,6 @@ public class PluginApiculture extends ForestryPlugin { ForestryBlock.beehives.registerBlock(new BlockBeehives(), ItemForestryBlock.class, "beehives"); - createHives(); - // Init bee interface AlleleManager.alleleRegistry.registerSpeciesRoot(PluginApiculture.beeInterface = new BeeHelper()); BeeManager.villageBees = new ArrayList[]{new ArrayList(), new ArrayList()}; @@ -276,6 +274,7 @@ public class PluginApiculture extends ForestryPlugin { public void doInit() { super.doInit(); + // Config apicultureConfig = new Configuration(); Property property = apicultureConfig.get("apiary.sidesensitive", CONFIG_CATEGORY, apiarySideSensitive); @@ -301,9 +300,13 @@ public class PluginApiculture extends ForestryPlugin { apicultureConfig.save(); + // Genetics createAlleles(); createMutations(); + + // Hives registerBeehiveDrops(); + createHives(); // Inducers for swarmer BeeManager.inducers.put(ForestryItem.royalJelly.getItemStack(), 10);