diff --git a/magicbees_res/changelog.txt b/magicbees_res/changelog.txt
index 9bbea56..4ada2c9 100644
--- a/magicbees_res/changelog.txt
+++ b/magicbees_res/changelog.txt
@@ -1,3 +1,8 @@
+2.1.3
+Added a new mini bee branch: Polymorphic. It is said Unusual bees can have some unusual effects on the world if they are advanced...
+Crumbling effect ages the area around the hive.
+Transmutation effect will turn blocks into other blocks. (It's still a bit rough though.)
+
2.1.2
Fixed issue with mob spawning effects incorrectly checking for effect data variables.
Updating localization files (RU, DE)
diff --git a/magicbees_res/mods/magicbees/lang/en_US.xml b/magicbees_res/mods/magicbees/lang/en_US.xml
index a17ad47..aaf77cd 100644
--- a/magicbees_res/mods/magicbees/lang/en_US.xml
+++ b/magicbees_res/mods/magicbees/lang/en_US.xml
@@ -266,6 +266,13 @@
It is said they have been to a land ruled by a Great Wizard, and have taken the aspect of his city.|Apinomicon
Apatine
Day and night the whining droned on. I barricaded the windows and hid in the cellar, but everywhere the high-pitched noise of the apatine bees penetrated the walls and drove me to distraction.|Beekeeping 101
+
+ Mutable
+ Changeable in nature, mercurial in personality.|Apinomicon
+ Transmuting
+ "I could've sworn this was made out of stone yesterday!"|Sengir, Mad Apiarist
+ Crumbling
+ They have a corrosive effect on their surroundings, rapidly aging them.|Apinomicon
Stark
"These are unusually attracted to shards. This warrents further investigation."|Azanor, Master Thaumaturge
@@ -350,6 +357,8 @@
Swiftness
Time Warp
Withering
+ Transmuting
+ Crumbling
Aura Attract
Purify Aura
Aura Flux
@@ -392,6 +401,8 @@
They collect fragments of metal and combine them into larger portions.|Apinomicon
Gem
They collect fragments of precious gems in their combs.|Apinomicon
+ Polymorphic
+ Reality seems to be somewhat volatile around bees of this family.|Apinomicon
Thaumic
These bees have an increased affinity to magic and aura.|Apinomicon
Fleshy
diff --git a/magicbees_src/magicbees/bees/Allele.java b/magicbees_src/magicbees/bees/Allele.java
index 393135e..cf0a904 100644
--- a/magicbees_src/magicbees/bees/Allele.java
+++ b/magicbees_src/magicbees/bees/Allele.java
@@ -26,6 +26,8 @@ public class Allele implements IAllele
public static IAlleleEffect effectMoveSpeed;
public static IAlleleEffect effectSlowSpeed;
public static IAlleleEffect effectWithering;
+ public static IAlleleEffect effectTransmuting;
+ public static IAlleleEffect effectCrumbling;
public static IAlleleEffect spawnBrainyZombie;
public static IAlleleEffect spawnWisp;
@@ -60,11 +62,18 @@ public class Allele implements IAllele
Allele.spawnWisp = new AlleleEffectSpawnWisp("Wispy", false, ThaumcraftHelper.Entity.WISP.entityID, "thaumcraft.wisplive")
.setThrottle(1800).setChanceToSpawn(79);
+
+ Allele.effectNodeAttract = new AlleleEffectAuraNodeAttract("NodeAttract", false, 400);
+ Allele.effectNodePurify = new AlleleEffectAuraNodePurify("NodePurify", false, 600, 150);
+ Allele.effectNodeFlux = new AlleleEffectAuraNodeFlux("NodeFlux", true, 300, 300);
+ Allele.effectNodeCharge = new AlleleEffectAuraNodeCharge("NodeCharge", true, 1200);
}
else
{
Allele.flowerThaumcraft = Allele.flowerAuraNode = (IAlleleFlowers)Allele.getBaseAllele("flowersVanilla");
- Allele.spawnBrainyZombie = Allele.spawnBats = Allele.spawnWisp = (IAlleleEffect)Allele.getBaseAllele("effectNone");
+ Allele.spawnBrainyZombie = Allele.spawnBats = Allele.spawnWisp =
+ Allele.effectNodeAttract = Allele.effectNodePurify =
+ Allele.effectNodeFlux = Allele.effectNodeCharge = (IAlleleEffect)Allele.getBaseAllele("effectNone");
}
if (ArsMagicaHelper.isActive())
@@ -85,16 +94,14 @@ public class Allele implements IAllele
Allele.spawnManaDrainer = Allele.spawnWispOrHecate = (IAlleleEffect)Allele.getBaseAllele("effectNone");
}
- Allele.effectNodeAttract = new AlleleEffectAuraNodeAttract("NodeAttract", false, 400);
- Allele.effectNodePurify = new AlleleEffectAuraNodePurify("NodePurify", false, 600, 150);
- Allele.effectNodeFlux = new AlleleEffectAuraNodeFlux("NodeFlux", true, 300, 300);
- Allele.effectNodeCharge = new AlleleEffectAuraNodeCharge("NodeCharge", true, 1200);
-
Allele.effectCleansing = new AlleleEffectCure("Curative", false);
Allele.effectDigSpeed = new AlleleEffectPotion("DigSpeed", Potion.digSpeed, 15, false);
Allele.effectMoveSpeed = new AlleleEffectPotion("MoveSpeed", Potion.moveSpeed, 10, false);
Allele.effectSlowSpeed = new AlleleEffectPotion("SlowSpeed", Potion.moveSlowdown, 3, false).setMalicious();
Allele.effectWithering = new AlleleEffectPotion("Withering", Potion.wither, 10, false).setMalicious();
+
+ Allele.effectTransmuting = new AlleleEffectTransmuting("Transmuting", true);
+ Allele.effectCrumbling = new AlleleEffectCrumbling("Crumbling", true);
Allele.spawnGhast = new AlleleEffectSpawnMob("Ghastly", false, "Ghast", "mob.ghast.moan")
.setThrottle(2060).setChanceToSpawn(10).setMaxMobsInSpawnZone(1);
diff --git a/magicbees_src/magicbees/bees/AlleleEffectCrumbling.java b/magicbees_src/magicbees/bees/AlleleEffectCrumbling.java
new file mode 100644
index 0000000..496da02
--- /dev/null
+++ b/magicbees_src/magicbees/bees/AlleleEffectCrumbling.java
@@ -0,0 +1,75 @@
+package magicbees.bees;
+
+import java.util.HashMap;
+
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+import net.minecraftforge.oredict.OreDictionary;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeHousing;
+import forestry.api.genetics.IEffectData;
+
+public class AlleleEffectCrumbling extends AlleleEffect
+{
+ private HashMap crumbleMap;
+
+ public AlleleEffectCrumbling(String id, boolean isDominant)
+ {
+ super(id, isDominant, 200);
+
+ crumbleMap = new HashMap();
+
+ crumbleMap.put(new ItemStack(Block.stone), new ItemStack(Block.cobblestone));
+ crumbleMap.put(new ItemStack(Block.cobblestone), new ItemStack(Block.cobblestoneMossy));
+ crumbleMap.put(new ItemStack(Block.stoneBrick, 1, 0), new ItemStack(Block.stoneBrick, 1, 2));
+ crumbleMap.put(new ItemStack(Block.stoneBrick, 1, 2), new ItemStack(Block.stoneBrick, 1, 1));
+ crumbleMap.put(new ItemStack(Block.cobblestoneWall), new ItemStack(Block.cobblestoneWall, 1, 1));
+ crumbleMap.put(new ItemStack(Block.gravel), new ItemStack(Block.sand));
+ }
+
+ @Override
+ public IEffectData validateStorage(IEffectData storedData)
+ {
+ if (storedData == null || !(storedData instanceof magicbees.bees.EffectData))
+ {
+ storedData = new magicbees.bees.EffectData(1, 0, 0);
+ }
+ return storedData;
+ }
+
+ @Override
+ protected IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing)
+ {
+ World world = housing.getWorld();
+ // Get random coords within territory
+ int xCoord = (int)(housing.getTerritoryModifier(genome, 1f) * genome.getTerritory()[0]);
+ xCoord = housing.getXCoord() + world.rand.nextInt(xCoord) - xCoord / 2;
+ int yCoord = (int)(housing.getTerritoryModifier(genome, 1f) * genome.getTerritory()[1]);
+ yCoord = housing.getYCoord() + world.rand.nextInt(yCoord) - yCoord / 2;
+ int zCoord = (int)(housing.getTerritoryModifier(genome, 1f) * genome.getTerritory()[0]);
+ zCoord = housing.getZCoord() + world.rand.nextInt(zCoord) - zCoord / 2;
+
+ boolean success = false;
+ Block block = Block.blocksList[world.getBlockId(xCoord, yCoord, zCoord)];
+ if (block != null)
+ {
+ ItemStack source = new ItemStack(block, 1, world.getBlockMetadata(xCoord, yCoord, zCoord));
+ for (ItemStack key : crumbleMap.keySet())
+ {
+ if (OreDictionary.itemMatches(source, key, false))
+ {
+ ItemStack target = crumbleMap.get(key);
+ world.setBlock(xCoord, yCoord, zCoord, target.itemID, target.getItemDamage(), 2);
+
+ break;
+ }
+ }
+ }
+
+ storedData.setInteger(0, 0);
+
+ return storedData;
+ }
+
+}
diff --git a/magicbees_src/magicbees/bees/AlleleEffectTransmuting.java b/magicbees_src/magicbees/bees/AlleleEffectTransmuting.java
new file mode 100644
index 0000000..346a1df
--- /dev/null
+++ b/magicbees_src/magicbees/bees/AlleleEffectTransmuting.java
@@ -0,0 +1,118 @@
+package magicbees.bees;
+
+import java.util.Locale;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraftforge.common.BiomeDictionary;
+import net.minecraftforge.oredict.OreDictionary;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeHousing;
+import forestry.api.genetics.IEffectData;
+
+public class AlleleEffectTransmuting extends AlleleEffect
+{
+ public AlleleEffectTransmuting(String id, boolean isDominant)
+ {
+ super(id, isDominant, 200);
+ }
+
+ @Override
+ public IEffectData validateStorage(IEffectData storedData)
+ {
+ if (storedData == null || !(storedData instanceof magicbees.bees.EffectData))
+ {
+ storedData = new magicbees.bees.EffectData(1, 0, 0);
+ }
+ return storedData;
+ }
+
+ @Override
+ protected IEffectData doEffectThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing)
+ {
+ World world = housing.getWorld();
+ // Get random coords within territory
+ int xCoord = (int)(housing.getTerritoryModifier(genome, 1f) * genome.getTerritory()[0]);
+ xCoord = housing.getXCoord() + world.rand.nextInt(xCoord) - xCoord / 2;
+ int yCoord = (int)(housing.getTerritoryModifier(genome, 1f) * genome.getTerritory()[1]);
+ yCoord = housing.getYCoord() + world.rand.nextInt(yCoord) - yCoord / 2;
+ int zCoord = (int)(housing.getTerritoryModifier(genome, 1f) * genome.getTerritory()[0]);
+ zCoord = housing.getZCoord() + world.rand.nextInt(zCoord) - zCoord / 2;
+
+ // Check if == stone
+ boolean doTransmute = false;
+ Block block = Block.blocksList[world.getBlockId(xCoord, yCoord, zCoord)];
+ if (block == null || block == Block.stone || block == Block.cobblestone)
+ {
+ doTransmute = true;
+ }
+ else if (block != null)
+ {
+ ItemStack cobbleItem = new ItemStack(Block.cobblestone);
+ ItemStack stoneItem = new ItemStack(Block.stone);
+ ItemStack testItem = new ItemStack(block);
+ doTransmute = OreDictionary.itemMatches(cobbleItem, testItem, false) || OreDictionary.itemMatches(stoneItem, cobbleItem, false);
+ }
+
+ // Transmute to something.
+ if (doTransmute)
+ {
+ BiomeGenBase biome = world.getBiomeGenForCoords(xCoord, zCoord);
+ // Gogo shortcutting logic operators!
+ boolean tryThis = trySpawnAbyssalStone(world, biome, xCoord, yCoord, zCoord) ||
+ trySpawnQuarriedStone(world, biome, xCoord, yCoord, zCoord) ||
+ trySpawnSandstone(world, biome, xCoord, yCoord, zCoord);
+ }
+ storedData.setInteger(0, 0);
+
+ return storedData;
+ }
+
+ private boolean trySpawnQuarriedStone(World world, BiomeGenBase biome, int x, int y, int z)
+ {
+ boolean flag = false;
+ if (BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.FOREST) &&
+ !BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.FROZEN))
+ {
+ ItemStack item = GameRegistry.findItemStack("Railcraft", "stone.abyssal", 1);
+ if (item != null)
+ {
+ world.setBlock(x, y, z, item.itemID, item.getItemDamage(), 2);
+ flag = true;
+ }
+ }
+ return flag;
+ }
+
+ private boolean trySpawnAbyssalStone(World world, BiomeGenBase biome, int x, int y, int z)
+ {
+ boolean flag = false;
+ if (BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.WATER) &&
+ biome.biomeName.toLowerCase(Locale.ENGLISH).contains("river"))
+ {
+ ItemStack item = GameRegistry.findItemStack("Railcraft", "stone.quarried", 1);
+ if (item != null)
+ {
+ world.setBlock(x, y, z, item.itemID, item.getItemDamage(), 2);
+ flag = true;
+ }
+ }
+ return flag;
+ }
+
+ private boolean trySpawnSandstone(World world, BiomeGenBase biome, int x, int y, int z)
+ {
+ boolean flag = false;
+ if (BiomeDictionary.isBiomeOfType(biome, BiomeDictionary.Type.DESERT))
+ {
+ world.setBlock(x, y, z, Block.sandStone.blockID);
+ flag = true;
+ }
+ return flag;
+ }
+
+}
diff --git a/magicbees_src/magicbees/bees/BeeClassification.java b/magicbees_src/magicbees/bees/BeeClassification.java
index fa4cf8a..0e61eb8 100644
--- a/magicbees_src/magicbees/bees/BeeClassification.java
+++ b/magicbees_src/magicbees/bees/BeeClassification.java
@@ -27,6 +27,7 @@ public enum BeeClassification implements IClassification
METALLIC("Metallic", "Metalliapis"),
GEM("Gem", "Lapidapis"),
+ TRANSMUTING("Transmuting", "Transmutapis"),
THAUMIC("Thaumic", "Thaumiapis"),
FLESHY("Fleshy", "Carnosapis"),
diff --git a/magicbees_src/magicbees/bees/BeeGenomeManager.java b/magicbees_src/magicbees/bees/BeeGenomeManager.java
index 847cb6e..fff0efc 100644
--- a/magicbees_src/magicbees/bees/BeeGenomeManager.java
+++ b/magicbees_src/magicbees/bees/BeeGenomeManager.java
@@ -718,6 +718,46 @@ public class BeeGenomeManager
return genome;
}
+ public static IAllele[] getTemplateMutableBase()
+ {
+ IAllele[] genome = getTemplateModBase();
+
+ genome[EnumBeeChromosome.LIFESPAN.ordinal()] = Allele.getBaseAllele("lifespanShortest");
+ genome[EnumBeeChromosome.HUMIDITY_TOLERANCE.ordinal()] = Allele.getBaseAllele("toleranceUp1");
+ genome[EnumBeeChromosome.TEMPERATURE_TOLERANCE.ordinal()] = Allele.getBaseAllele("toleranceDown2");
+
+ return genome;
+ }
+
+ public static IAllele[] getTemplateMutable()
+ {
+ IAllele[] genome = getTemplateMutableBase();
+
+ genome[EnumBeeChromosome.SPECIES.ordinal()] = BeeSpecies.MUTABLE;
+
+ return genome;
+ }
+
+ public static IAllele[] getTemplateTransmuting()
+ {
+ IAllele[] genome = getTemplateMutableBase();
+
+ genome[EnumBeeChromosome.SPECIES.ordinal()] = BeeSpecies.TRANSMUTING;
+ genome[EnumBeeChromosome.EFFECT.ordinal()] = Allele.effectTransmuting;
+
+ return genome;
+ }
+
+ public static IAllele[] getTemplateCrumbling()
+ {
+ IAllele[] genome = getTemplateMutableBase();
+
+ genome[EnumBeeChromosome.SPECIES.ordinal()] = BeeSpecies.CRUMBLING;
+ genome[EnumBeeChromosome.EFFECT.ordinal()] = Allele.effectCrumbling;
+
+ return genome;
+ }
+
private static IAllele[] getTemplateTCBase()
{
IAllele[] genome = getTemplateModBase();
diff --git a/magicbees_src/magicbees/bees/BeeMutation.java b/magicbees_src/magicbees/bees/BeeMutation.java
index 9eaedd2..d76ef4a 100644
--- a/magicbees_src/magicbees/bees/BeeMutation.java
+++ b/magicbees_src/magicbees/bees/BeeMutation.java
@@ -116,6 +116,10 @@ public class BeeMutation implements IBeeMutation
new BeeMutation(Allele.getBaseSpecies("Imperial"), BeeSpecies.ABANDONED, BeeSpecies.DRACONIC, 6)
.setBiomeRequired(BiomeDictionary.Type.END);
+ new BeeMutation(BeeSpecies.UNUSUAL, BeeSpecies.ELDRITCH, BeeSpecies.MUTABLE, 12);
+ new BeeMutation(BeeSpecies.UNUSUAL, BeeSpecies.MUTABLE, BeeSpecies.TRANSMUTING, 9);
+ new BeeMutation(BeeSpecies.UNUSUAL, BeeSpecies.MUTABLE, BeeSpecies.CRUMBLING, 9);
+
if (BeeSpecies.COPPER.isActive())
{
new BeeMutation(Allele.getBaseSpecies("Industrious"), Allele.getBaseSpecies("Meadows"), BeeSpecies.COPPER, 12)
@@ -252,7 +256,7 @@ public class BeeMutation implements IBeeMutation
if (EquivalentExchangeHelper.isActive())
{
- new BeeMutation(Allele.getBaseSpecies("Frugal"), BeeSpecies.ELDRITCH, BeeSpecies.EE_MINIUM, 8);
+ new BeeMutation(Allele.getBaseSpecies("Frugal"), BeeSpecies.MUTABLE, BeeSpecies.EE_MINIUM, 8);
}
}
diff --git a/magicbees_src/magicbees/bees/BeeSpecies.java b/magicbees_src/magicbees/bees/BeeSpecies.java
index 41fc5e5..0a5f7b9 100644
--- a/magicbees_src/magicbees/bees/BeeSpecies.java
+++ b/magicbees_src/magicbees/bees/BeeSpecies.java
@@ -159,6 +159,13 @@ public enum BeeSpecies implements IAlleleBeeSpecies, IIconProvider
BeeClassification.GEM, 0x005300, 0x17DD62, EnumTemperature.NORMAL, EnumHumidity.NORMAL, true, false),
APATITE("Apatite", "apatite",
BeeClassification.GEM, 0x2EA7EC, 0x001D51, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
+
+ MUTABLE("Mutable", "mutable",
+ BeeClassification.TRANSMUTING, 0xDBB24C, 0xE0D5A6, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
+ TRANSMUTING("Transmuting", "transmuting",
+ BeeClassification.TRANSMUTING, 0xDBB24C, 0xA2D2D8, EnumTemperature.NORMAL, EnumHumidity.NORMAL, false, false),
+ CRUMBLING("Crumbling", "crumbling",
+ BeeClassification.TRANSMUTING, 0xDBB24C, 0xDBA4A4, EnumTemperature.HOT, EnumHumidity.ARID, false, false),
// --------- Thaumcraft Bees ---------------------------------------------------------------------------------------
TC_STARK("TCStark", "torridae", // Stark
@@ -577,6 +584,19 @@ public enum BeeSpecies implements IAlleleBeeSpecies, IIconProvider
.setGenome(BeeGenomeManager.getTemplateApatite())
.register();
+ MUTABLE.addProduct(new ItemStack(Config.fBeeComb, 1, ForestryHelper.Comb.PARCHED.ordinal()), 30)
+ .setGenome(BeeGenomeManager.getTemplateMutable())
+ .register();
+ TRANSMUTING.addProduct(new ItemStack(Config.fBeeComb, 1, ForestryHelper.Comb.PARCHED.ordinal()), 10)
+ .addProduct(new ItemStack(Config.fBeeComb, 1, ForestryHelper.Comb.SILKY.ordinal()), 10)
+ .addProduct(new ItemStack(Config.fBeeComb, 1, ForestryHelper.Comb.SIMMERING.ordinal()), 10)
+ .setGenome(BeeGenomeManager.getTemplateTransmuting())
+ .register();
+ CRUMBLING.addProduct(new ItemStack(Config.fBeeComb, 1, ForestryHelper.Comb.POWDERY.ordinal()), 20)
+ .addProduct(new ItemStack(Config.fBeeComb, 1 , ForestryHelper.Comb.COCOA.ordinal()), 20)
+ .setGenome(BeeGenomeManager.getTemplateCrumbling())
+ .register();
+
TC_STARK.addProduct(Config.combs.getStackForType(CombType.HARMONIZING), 10)
.setGenome(BeeGenomeManager.getTemplateTCStark())
diff --git a/magicbees_src/magicbees/client/render/BeeRenderEffect.java b/magicbees_src/magicbees/client/render/BeeRenderEffect.java
index 1d2fa46..88abf99 100644
--- a/magicbees_src/magicbees/client/render/BeeRenderEffect.java
+++ b/magicbees_src/magicbees/client/render/BeeRenderEffect.java
@@ -18,7 +18,7 @@ import net.minecraftforge.client.ForgeHooksClient;
public class BeeRenderEffect extends EntityFX
{
public int blendmode = 1;
- private static String texture = "/mods/forestry/textures/items/particles/swarm_bee";
+ private static String texture = "forestry:textures/items/particles/swarm_bee.png";
public BeeRenderEffect(World world, double x, double y, double z, float motionScaleX, float motionScaleY, float motionScaleZ, int color)
{