From a65c593c9af7c31ef79aacf4b7796ef3c54c0c97 Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Mon, 20 Apr 2015 19:54:00 -0700 Subject: [PATCH] Adding Hiveacynth, with several configuration options. --- src/main/java/magicbees/bees/Allele.java | 2 +- src/main/java/magicbees/bees/BeeManager.java | 58 ++++++++++++ src/main/java/magicbees/main/Config.java | 5 + src/main/java/magicbees/main/utils/Tuple.java | 12 +++ .../main/utils/compat/BotaniaHelper.java | 27 +++++- .../utils/compat/botania/SubTileBeegonia.java | 2 +- .../compat/botania/SubTileHiveacynth.java | 88 ++++++++++++++++++ .../assets/magicbees/lang/en_US.lang | 5 +- .../magicbees/textures/blocks/hiveacynth.png | Bin 0 -> 1314 bytes 9 files changed, 193 insertions(+), 6 deletions(-) create mode 100644 src/main/java/magicbees/main/utils/Tuple.java create mode 100644 src/main/java/magicbees/main/utils/compat/botania/SubTileHiveacynth.java create mode 100644 src/main/resources/assets/magicbees/textures/blocks/hiveacynth.png diff --git a/src/main/java/magicbees/bees/Allele.java b/src/main/java/magicbees/bees/Allele.java index 9e0e684..cbf3245 100644 --- a/src/main/java/magicbees/bees/Allele.java +++ b/src/main/java/magicbees/bees/Allele.java @@ -219,7 +219,7 @@ public class Allele implements IAllele public static IAlleleBeeSpecies getExtraSpecies(String name) { - return (IAlleleBeeSpecies)AlleleManager.alleleRegistry.getAllele((new StringBuilder()).append("extrabees.species.").append(name).toString()); + return (IAlleleBeeSpecies)AlleleManager.alleleRegistry.getAllele((new StringBuilder()).append("extrabees.species.").append(name.toLowerCase()).toString()); } public static IAllele getBaseAllele(String name) diff --git a/src/main/java/magicbees/bees/BeeManager.java b/src/main/java/magicbees/bees/BeeManager.java index 167a2c5..69c290a 100644 --- a/src/main/java/magicbees/bees/BeeManager.java +++ b/src/main/java/magicbees/bees/BeeManager.java @@ -1,14 +1,25 @@ package magicbees.bees; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Random; + import magicbees.block.types.HiveType; import magicbees.item.types.DropType; import magicbees.main.Config; +import magicbees.main.utils.Tuple; +import magicbees.main.utils.compat.ExtraBeesHelper; +import forestry.api.apiculture.IAlleleBeeSpecies; import forestry.api.apiculture.IBeeRoot; import forestry.api.genetics.AlleleManager; public class BeeManager { public static IBeeRoot beeRoot; + + private static List> worldgenSpeciesWeights = new ArrayList>(); + private static double worldgenSpeciesWeightsTotal = 0; public static void ititializeBees() { @@ -23,4 +34,51 @@ public class BeeManager beeRoot.setResearchSuitability(Config.drops.getStackForType(DropType.INTELLECT), 0.5f); } + + public static IAlleleBeeSpecies getRandomWorldgenSpecies(Random r) { + Collections.shuffle(worldgenSpeciesWeights); + double value = r.nextDouble() * worldgenSpeciesWeightsTotal; + IAlleleBeeSpecies species = Allele.getBaseSpecies("Forest"); + + for (Tuple t : worldgenSpeciesWeights) { + value -= t.right.doubleValue(); + if (value <= 0.0) { + species = t.left; + break; + } + } + + return species; + } + + public static void addWorldgenSpeciesWeight(IAlleleBeeSpecies species, double d) { + worldgenSpeciesWeights.add(new Tuple(species, d)); + worldgenSpeciesWeightsTotal += d; + } + + public static void populateSpeciesListRarity() { + worldgenSpeciesWeights.add(new Tuple(Allele.getBaseSpecies("Forest"), 20.0)); + worldgenSpeciesWeights.add(new Tuple(Allele.getBaseSpecies("Meadows"), 20.0)); + worldgenSpeciesWeights.add(new Tuple(Allele.getBaseSpecies("Tropical"), 10.0)); + worldgenSpeciesWeights.add(new Tuple(Allele.getBaseSpecies("Modest"), 16.0)); + worldgenSpeciesWeights.add(new Tuple(Allele.getBaseSpecies("Wintry"), 10.0)); + worldgenSpeciesWeights.add(new Tuple(Allele.getBaseSpecies("Ended"), 0.5)); + + if (ExtraBeesHelper.isActive()) { + worldgenSpeciesWeights.add(new Tuple(Allele.getExtraSpecies("Water"), 12.0)); + worldgenSpeciesWeights.add(new Tuple(Allele.getExtraSpecies("Rocky"), 16.0)); + worldgenSpeciesWeights.add(new Tuple(Allele.getExtraSpecies("Embittered"), 10.0)); + } + + worldgenSpeciesWeights.add(new Tuple(BeeSpecies.MYSTICAL, 20.0)); + worldgenSpeciesWeights.add(new Tuple(BeeSpecies.UNUSUAL, 20.0)); + worldgenSpeciesWeights.add(new Tuple(BeeSpecies.SORCEROUS, 13.0)); + worldgenSpeciesWeights.add(new Tuple(BeeSpecies.ATTUNED, 6.0)); + worldgenSpeciesWeights.add(new Tuple(BeeSpecies.INFERNAL, 10.0)); + worldgenSpeciesWeights.add(new Tuple(BeeSpecies.OBLIVION, 1.0)); + + for (Tuple t : worldgenSpeciesWeights) { + worldgenSpeciesWeightsTotal += t.right.doubleValue(); + } + } } diff --git a/src/main/java/magicbees/main/Config.java b/src/main/java/magicbees/main/Config.java index eed1e33..bb8aaa4 100644 --- a/src/main/java/magicbees/main/Config.java +++ b/src/main/java/magicbees/main/Config.java @@ -2,6 +2,8 @@ package magicbees.main; import java.io.File; import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; import magicbees.block.BlockEffectJar; import magicbees.block.BlockHive; @@ -32,6 +34,7 @@ import magicbees.item.types.ResourceType; import magicbees.item.types.WaxType; import magicbees.main.utils.LocalizationManager; import magicbees.main.utils.LogHelper; +import magicbees.main.utils.Tuple; import magicbees.main.utils.VersionInfo; import magicbees.main.utils.compat.BotaniaHelper; import magicbees.main.utils.compat.ThaumcraftHelper; @@ -55,6 +58,7 @@ import cpw.mods.fml.common.event.FMLInterModComms; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.registry.GameRegistry; import forestry.api.apiculture.BeeManager; +import forestry.api.apiculture.IAlleleBeeSpecies; import forestry.api.storage.BackpackManager; import forestry.api.storage.EnumBackpackType; @@ -222,6 +226,7 @@ public class Config public static Item botManaResource; + //----- Config State info ---------------------------------- public static Configuration configuration; diff --git a/src/main/java/magicbees/main/utils/Tuple.java b/src/main/java/magicbees/main/utils/Tuple.java new file mode 100644 index 0000000..245f54f --- /dev/null +++ b/src/main/java/magicbees/main/utils/Tuple.java @@ -0,0 +1,12 @@ +package magicbees.main.utils; + +public class Tuple { + + public final X left; + public final Y right; + + public Tuple(X x, Y y) { + left = x; + right = y; + } +} diff --git a/src/main/java/magicbees/main/utils/compat/BotaniaHelper.java b/src/main/java/magicbees/main/utils/compat/BotaniaHelper.java index 5a1f322..b14202a 100644 --- a/src/main/java/magicbees/main/utils/compat/BotaniaHelper.java +++ b/src/main/java/magicbees/main/utils/compat/BotaniaHelper.java @@ -1,10 +1,12 @@ package magicbees.main.utils.compat; +import magicbees.bees.BeeManager; import magicbees.main.Config; import magicbees.main.utils.BlockInterface; import magicbees.main.utils.ItemInterface; import magicbees.main.utils.compat.botania.BotaniaSignature; import magicbees.main.utils.compat.botania.SubTileBeegonia; +import magicbees.main.utils.compat.botania.SubTileHiveacynth; import net.minecraft.util.IIcon; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.common.config.Property; @@ -43,6 +45,9 @@ public class BotaniaHelper { public static final String Name = "Botania"; public static double beegoniaManaMultiplier; + public static double hiveacynthManaMultiplier; + public static double hiveacynthRainResistRate; + public static double hiveacynthPrincessSpawnRate; public static boolean isActive() { return isBotaniaActive; @@ -68,6 +73,12 @@ public class BotaniaHelper { BotaniaAPI.registerSubTile(SubTileBeegonia.NAME, SubTileBeegonia.class); BotaniaAPI.registerSubTileSignature(SubTileBeegonia.class, new BotaniaSignature(SubTileBeegonia.NAME)); BotaniaAPI.addSubTileToCreativeMenu(SubTileBeegonia.NAME); + + // Hiveacynth would appreciate it if this list existed. + BeeManager.populateSpeciesListRarity(); + BotaniaAPI.registerSubTile(SubTileHiveacynth.NAME, SubTileHiveacynth.class); + BotaniaAPI.registerSubTileSignature(SubTileHiveacynth.class, new BotaniaSignature(SubTileHiveacynth.NAME)); + BotaniaAPI.addSubTileToCreativeMenu(SubTileHiveacynth.NAME); } } @@ -88,8 +99,20 @@ public class BotaniaHelper { Property p; String section = "botaniaPlugin"; - p = configuration.get(section, "beegoniaManaMultiplier", 1); - p.comment = "Multiplyer for the Beegonia's mana generation. Default: 1.0 (Affects duration, not throughput)"; + p = configuration.get(section, "beegoniaManaMultiplier", 1.0); + p.comment = "Multiplier for the Beegonia's mana generation. Default: 1.0 (Affects duration, not throughput)"; beegoniaManaMultiplier = p.getDouble(); + + p = configuration.get(section, "hiveacynthManaMultiplier", 1.0); + p.comment = "Multiplier for the Hiveacynth's mana consumption. Default: 1.0"; + hiveacynthManaMultiplier = p.getDouble(); + + p = configuration.get(section, "hiveacynthRainResistRate", 0.1); + p.comment = "Rate at which the hiveacynth applies rain resist to spawned bees. Default: 0.1 Setting to 0 will disable."; + hiveacynthRainResistRate = p.getDouble(); + + p = configuration.get(section, "hiveacynthPrincessSpawnRate", 0.09); + p.comment = "Rate at which the Hiveacynth will spawn a Princess instead of a Drone. Default: 0.09. Setting to 0 will disable."; + hiveacynthPrincessSpawnRate = p.getDouble(); } } diff --git a/src/main/java/magicbees/main/utils/compat/botania/SubTileBeegonia.java b/src/main/java/magicbees/main/utils/compat/botania/SubTileBeegonia.java index 316744b..093fadd 100644 --- a/src/main/java/magicbees/main/utils/compat/botania/SubTileBeegonia.java +++ b/src/main/java/magicbees/main/utils/compat/botania/SubTileBeegonia.java @@ -61,7 +61,7 @@ public class SubTileBeegonia extends SubTileGenerating { } } - public int getSpeciesScaledComplexity(IAlleleBeeSpecies species) { + private int getSpeciesScaledComplexity(IAlleleBeeSpecies species) { if (species == null) { return 0; } diff --git a/src/main/java/magicbees/main/utils/compat/botania/SubTileHiveacynth.java b/src/main/java/magicbees/main/utils/compat/botania/SubTileHiveacynth.java new file mode 100644 index 0000000..f93145a --- /dev/null +++ b/src/main/java/magicbees/main/utils/compat/botania/SubTileHiveacynth.java @@ -0,0 +1,88 @@ +package magicbees.main.utils.compat.botania; + +import magicbees.bees.BeeGenomeManager; +import magicbees.bees.BeeManager; +import magicbees.main.utils.compat.BotaniaHelper; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import vazkii.botania.api.BotaniaAPI; +import vazkii.botania.api.subtile.SubTileFunctional; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import forestry.api.apiculture.EnumBeeType; +import forestry.api.apiculture.IAlleleBeeSpecies; +import forestry.api.apiculture.IBee; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.genetics.IAllele; + +public class SubTileHiveacynth extends SubTileFunctional { + + public static final String NAME = "hiveacynth"; + private static final int COST = 15000; + + + + @Override + public void onUpdate() { + super.onUpdate(); + if (supertile.getWorldObj().isRemote) { + return; + } + + if (readyToProduceProduct()) { + EnumBeeType beeType = EnumBeeType.DRONE; + + if (supertile.getWorldObj().rand.nextDouble() < BotaniaHelper.hiveacynthPrincessSpawnRate) { + beeType = EnumBeeType.PRINCESS; + } + + ItemStack stack = BeeManager.beeRoot.getMemberStack(getRandomBee(), beeType.ordinal()); + + EntityItem entity = new EntityItem(supertile.getWorldObj(), supertile.xCoord, supertile.yCoord, supertile.zCoord, stack); + supertile.getWorldObj().spawnEntityInWorld(entity); + } + } + + private IBee getRandomBee() { + IAlleleBeeSpecies dropSpecies = BeeManager.getRandomWorldgenSpecies(supertile.getWorldObj().rand); + IAllele[] speciesTemplate = BeeManager.beeRoot.getTemplate(dropSpecies.getUID()); + + if (supertile.getWorldObj().rand.nextDouble() < BotaniaHelper.hiveacynthRainResistRate) { + speciesTemplate = BeeGenomeManager.addRainResist(speciesTemplate); + } + + IBeeGenome genome = BeeManager.beeRoot.templateAsGenome(speciesTemplate); + return BeeManager.beeRoot.getBee(supertile.getWorldObj(), genome); + } + + private boolean readyToProduceProduct() { + return redstoneSignal == 0 && ticksExisted % 20==0;//0 == 0 && mana >= getFinalCost(); + } + + private int getFinalCost() { + return (int)(COST * BotaniaHelper.hiveacynthManaMultiplier); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon() { + return BotaniaAPI.getSignatureForName(NAME).getIconForStack(null); + } + + @Override + public boolean acceptsRedstone() { + return true; + } + + @Override + public int getColor() { + return 0x0071C6; + } + + @Override + public int getMaxMana() { + return getFinalCost(); + } + +} diff --git a/src/main/resources/assets/magicbees/lang/en_US.lang b/src/main/resources/assets/magicbees/lang/en_US.lang index 5ad7f6b..7460c9a 100644 --- a/src/main/resources/assets/magicbees/lang/en_US.lang +++ b/src/main/resources/assets/magicbees/lang/en_US.lang @@ -170,10 +170,11 @@ backpack.thaumaturge=Thaumaturge's Backpack #Itemgroups itemGroup.magicBees=Magic Bees -#Botania stuff +#Botania flowers; Lexicon entries nearer the end. tile.botania:flower.beegonia.name=Beegonia tile.botania:flower.beegonia.lore=We won't bee seeing you any more... - +tile.botania:flower.hiveacynth.name=Hiveacynth +tile.botania:flower.hiveacynth.lore=In a Morvelaira's Garden #Research research.requiresBlock=Requires a foundation of %s diff --git a/src/main/resources/assets/magicbees/textures/blocks/hiveacynth.png b/src/main/resources/assets/magicbees/textures/blocks/hiveacynth.png new file mode 100644 index 0000000000000000000000000000000000000000..1c6ab75e96d7e228353f977a4632a10b4a8caed8 GIT binary patch literal 1314 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NSs56Z83KGlT!G@kMxKIZf$~Kx`jNbfnVdSgEb4ipN+rxnWqc}?{MuzaswD!d zCBo`O@><1W8s)-z1%k%K3=3bJ2guI9X1L^Lx9#HFfEsVD=?ohlmz(&{~y_aA^1DHDloh`3p^r=85sBu zgD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt33J=4@yqg0@pYEKu(5RKr{ zGdKB~0(e{lS1K=BN>#gGb0?i|uFV&eiS+_iUB^D_WyF_Hej7$z6gA&7MS6WTw_b!o`c3{hw2lWiK rHqsCNvEE>Q{_R1~imZ@ literal 0 HcmV?d00001