From 918334e5bfb5bc1aa33df7bb67aac3042d1dc232 Mon Sep 17 00:00:00 2001 From: KryptonCaptain Date: Mon, 11 Jun 2018 19:36:19 +1000 Subject: [PATCH] More Thaumcraft compat Fixed only some hives having aspects assigned Removed the [MB] tag from research. This hasn't been needed since TC3, when addons didn't have their own tabs Added Void metal scoop and grafter for the eldritch-inclined apiarists Added uncommon rarity to Thaumium scoop/grafter for consistant tool look --- .../magicbees/item/ItemThaumiumGrafter.java | 7 + .../magicbees/item/ItemThaumiumScoop.java | 7 + .../java/magicbees/item/ItemVoidGrafter.java | 126 +++++++++++++++++ .../java/magicbees/item/ItemVoidScoop.java | 128 ++++++++++++++++++ src/main/java/magicbees/main/Config.java | 16 +++ .../main/utils/compat/ExtraBeesHelper.java | 12 +- .../main/utils/compat/ThaumcraftHelper.java | 39 +++++- .../assets/magicbees/lang/en_US.lang | 42 ++++-- .../magicbees/textures/items/voidGrafter.png | Bin 0 -> 3062 bytes .../magicbees/textures/items/voidScoop.png | Bin 0 -> 3244 bytes 10 files changed, 360 insertions(+), 17 deletions(-) create mode 100644 src/main/java/magicbees/item/ItemVoidGrafter.java create mode 100644 src/main/java/magicbees/item/ItemVoidScoop.java create mode 100644 src/main/resources/assets/magicbees/textures/items/voidGrafter.png create mode 100644 src/main/resources/assets/magicbees/textures/items/voidScoop.png diff --git a/src/main/java/magicbees/item/ItemThaumiumGrafter.java b/src/main/java/magicbees/item/ItemThaumiumGrafter.java index e108984..b7b56bc 100644 --- a/src/main/java/magicbees/item/ItemThaumiumGrafter.java +++ b/src/main/java/magicbees/item/ItemThaumiumGrafter.java @@ -5,6 +5,7 @@ import magicbees.main.utils.compat.ThaumcraftHelper; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; import net.minecraft.item.ItemStack; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.oredict.OreDictionary; @@ -84,4 +85,10 @@ public class ItemThaumiumGrafter extends ItemGrafter implements IRepairableExten { this.itemIcon = iconRegister.registerIcon(CommonProxy.DOMAIN + ":thaumiumGrafter"); } + + public EnumRarity getRarity(ItemStack itemstack) + { + return EnumRarity.uncommon; + } + } diff --git a/src/main/java/magicbees/item/ItemThaumiumScoop.java b/src/main/java/magicbees/item/ItemThaumiumScoop.java index 6fe4d1d..d7e72ca 100644 --- a/src/main/java/magicbees/item/ItemThaumiumScoop.java +++ b/src/main/java/magicbees/item/ItemThaumiumScoop.java @@ -5,6 +5,7 @@ import magicbees.main.utils.compat.ThaumcraftHelper; import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.EnumRarity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; @@ -88,4 +89,10 @@ public class ItemThaumiumScoop extends Item implements IRepairable, IToolScoop { this.itemIcon = iconRegister.registerIcon(CommonProxy.DOMAIN + ":thaumiumScoop"); } + + public EnumRarity getRarity(ItemStack itemstack) + { + return EnumRarity.uncommon; + } + } diff --git a/src/main/java/magicbees/item/ItemVoidGrafter.java b/src/main/java/magicbees/item/ItemVoidGrafter.java new file mode 100644 index 0000000..8c0db6b --- /dev/null +++ b/src/main/java/magicbees/item/ItemVoidGrafter.java @@ -0,0 +1,126 @@ +package magicbees.item; + +import magicbees.main.CommonProxy; +import magicbees.main.utils.compat.ThaumcraftHelper; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.oredict.OreDictionary; +import thaumcraft.api.IRepairableExtended; +import thaumcraft.api.IWarpingGear; +import thaumcraft.api.ThaumcraftApi; +import cpw.mods.fml.common.Optional; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@Optional.InterfaceList({ + @Optional.Interface(iface = "thaumcraft.api.IRepairableExtended", modid = ThaumcraftHelper.Name, striprefs = true), + @Optional.Interface(iface = "thaumcraft.api.IWarpingGear", modid = ThaumcraftHelper.Name, striprefs = true) +}) +public class ItemVoidGrafter extends ItemGrafter implements IRepairableExtended, IWarpingGear +{ + public ItemVoidGrafter() + { + super(); + this.setMaxDamage(10); + this.setUnlocalizedName("voidGrafter"); + } + + @Override + public float func_150893_a(ItemStack itemStack, Block block) + { + return 1f; + } + + @Override + public float getDigSpeed(ItemStack itemStack, Block block, int metadata) + { + return ForgeHooks.isToolEffective(itemStack, block, metadata) ? 4.8f : func_150893_a(itemStack, block); + } + + /** + * Return the enchantability factor of the item, most of the time is based on material. + */ + @Optional.Method(modid = ThaumcraftHelper.Name) + public int getItemEnchantability() + { + return ThaumcraftApi.toolMatThaumium.getEnchantability(); + } + + /** + * Return the name for this tool's material. + */ + @Optional.Method(modid = ThaumcraftHelper.Name) + public String getToolMaterialName() + { + return ThaumcraftApi.toolMatThaumium.toString(); + } + + /** + * Return whether this item is repairable in an anvil. + */ + @Optional.Method(modid = ThaumcraftHelper.Name) + public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) + { + return OreDictionary.itemMatches(ThaumcraftApi.toolMatThaumium.getRepairItemStack(), par2ItemStack, true) + || super.getIsRepairable(par1ItemStack, par2ItemStack); + } + + @Override + public boolean doRepair(ItemStack stack, EntityPlayer player, int enchantLevel) + { + boolean flag = false; + if (stack.getItemDamage() > 0) + { + flag = true; + player.addExhaustion(0.6f * (enchantLevel * enchantLevel)); + } + return flag; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) + { + this.itemIcon = iconRegister.registerIcon(CommonProxy.DOMAIN + ":voidGrafter"); //TODO + } + + public EnumRarity getRarity(ItemStack itemstack) + { + return EnumRarity.uncommon; + } + + public void onUpdate(ItemStack stack, World world, Entity entity, int p_77663_4_, boolean p_77663_5_) + { + super.onUpdate(stack, world, entity, p_77663_4_, p_77663_5_); + if ((stack.isItemDamaged()) && (entity != null) && (entity.ticksExisted % 20 == 0) && ((entity instanceof EntityLivingBase))) { + stack.damageItem(-1, (EntityLivingBase)entity); + } + } + + public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) + { + if ((!player.worldObj.isRemote) && ((entity instanceof EntityLivingBase)) && ( + (!(entity instanceof EntityPlayer)) || (MinecraftServer.getServer().isPVPEnabled()))) { + ((EntityLivingBase)entity).addPotionEffect(new PotionEffect(Potion.weakness.getId(), 80)); + } + return super.onLeftClickEntity(stack, player, entity); + } + + @Override + public int getWarp(ItemStack itemstack, EntityPlayer player) + { + return 1; + } + + +} diff --git a/src/main/java/magicbees/item/ItemVoidScoop.java b/src/main/java/magicbees/item/ItemVoidScoop.java new file mode 100644 index 0000000..91b54cd --- /dev/null +++ b/src/main/java/magicbees/item/ItemVoidScoop.java @@ -0,0 +1,128 @@ +package magicbees.item; + +import magicbees.main.CommonProxy; +import magicbees.main.utils.compat.ThaumcraftHelper; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.server.MinecraftServer; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeHooks; +import net.minecraftforge.oredict.OreDictionary; +import thaumcraft.api.IRepairable; +import thaumcraft.api.IWarpingGear; +import thaumcraft.api.ThaumcraftApi; +import cpw.mods.fml.common.Optional; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import forestry.api.core.IToolScoop; + +@Optional.InterfaceList( + { + @Optional.Interface(iface = "thaumcraft.api.IRepairable", modid = ThaumcraftHelper.Name, striprefs = true), + @Optional.Interface(iface = "thaumcraft.api.IWarpingGear", modid = ThaumcraftHelper.Name, striprefs = true) + } +) +public class ItemVoidScoop extends Item implements IRepairable, IToolScoop, IWarpingGear +{ + public ItemVoidScoop() + { + super(); + this.setMaxStackSize(1); + this.setMaxDamage(20); + this.setCreativeTab(forestry.api.core.Tabs.tabApiculture); + this.setUnlocalizedName("voidScoop"); + this.setHarvestLevel("scoop", 3); + } + + @Override + public float func_150893_a(ItemStack itemStack, Block block) + { + return 1f; + } + + @Override + public float getDigSpeed(ItemStack itemStack, Block block, int metadata) + { + return ForgeHooks.isToolEffective(itemStack, block, metadata) ? 4.8f : func_150893_a(itemStack, block); + } + + @Override + public boolean onBlockDestroyed(ItemStack itemstack, World world, Block block, int j, int k, int l, + EntityLivingBase entityliving) + { + itemstack.damageItem(1, entityliving); + return true; + } + + /** + * Return the enchantability factor of the item, most of the time is based on material. + */ + @Optional.Method(modid = ThaumcraftHelper.Name) + public int getItemEnchantability() + { + return ThaumcraftApi.toolMatVoid.getEnchantability(); + } + + /** + * Return the name for this tool's material. + */ + @Optional.Method(modid = ThaumcraftHelper.Name) + public String getToolMaterialName() + { + return ThaumcraftApi.toolMatVoid.toString(); + } + + /** + * Return whether this item is repairable in an anvil. + */ + @Optional.Method(modid = ThaumcraftHelper.Name) + public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) + { + return OreDictionary.itemMatches(ThaumcraftApi.toolMatVoid.getRepairItemStack(), par2ItemStack, true) + || super.getIsRepairable(par1ItemStack, par2ItemStack); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) + { + this.itemIcon = iconRegister.registerIcon(CommonProxy.DOMAIN + ":voidScoop"); //TODO + } + + public EnumRarity getRarity(ItemStack itemstack) + { + return EnumRarity.uncommon; + } + + public void onUpdate(ItemStack stack, World world, Entity entity, int p_77663_4_, boolean p_77663_5_) + { + super.onUpdate(stack, world, entity, p_77663_4_, p_77663_5_); + if ((stack.isItemDamaged()) && (entity != null) && (entity.ticksExisted % 20 == 0) && ((entity instanceof EntityLivingBase))) { + stack.damageItem(-1, (EntityLivingBase)entity); + } + } + + public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) + { + if ((!player.worldObj.isRemote) && ((entity instanceof EntityLivingBase)) && ( + (!(entity instanceof EntityPlayer)) || (MinecraftServer.getServer().isPVPEnabled()))) { + ((EntityLivingBase)entity).addPotionEffect(new PotionEffect(Potion.weakness.getId(), 80)); + } + return super.onLeftClickEntity(stack, player, entity); + } + + @Override + public int getWarp(ItemStack itemstack, EntityPlayer player) + { + return 1; + } + +} diff --git a/src/main/java/magicbees/main/Config.java b/src/main/java/magicbees/main/Config.java index 868ef43..25e3a16 100644 --- a/src/main/java/magicbees/main/Config.java +++ b/src/main/java/magicbees/main/Config.java @@ -25,6 +25,8 @@ import magicbees.item.ItemPollen; import magicbees.item.ItemPropolis; import magicbees.item.ItemThaumiumGrafter; import magicbees.item.ItemThaumiumScoop; +import magicbees.item.ItemVoidGrafter; +import magicbees.item.ItemVoidScoop; import magicbees.item.ItemWax; import magicbees.item.types.CapsuleType; import magicbees.item.types.HiveFrameType; @@ -124,6 +126,9 @@ public class Config public static ItemMoonDial moonDial; public static ItemMysteriousMagnet magnet; + public static Item voidScoop; + public static Item voidGrafter; + public static boolean disableMagnetSound; //----- Liquid Capsules -------------------- @@ -460,6 +465,17 @@ public class Config thaumiumGrafter = new ItemThaumiumGrafter(); GameRegistry.registerItem(thaumiumGrafter, thaumiumGrafter.getUnlocalizedName(), CommonProxy.DOMAIN); + + voidScoop = new ItemVoidScoop(); + GameRegistry.registerItem(voidScoop, voidScoop.getUnlocalizedName(), CommonProxy.DOMAIN); + + voidGrafter = new ItemVoidGrafter(); + GameRegistry.registerItem(voidGrafter, voidGrafter.getUnlocalizedName(), CommonProxy.DOMAIN); + + + + + } } diff --git a/src/main/java/magicbees/main/utils/compat/ExtraBeesHelper.java b/src/main/java/magicbees/main/utils/compat/ExtraBeesHelper.java index 8c07962..b5ae253 100644 --- a/src/main/java/magicbees/main/utils/compat/ExtraBeesHelper.java +++ b/src/main/java/magicbees/main/utils/compat/ExtraBeesHelper.java @@ -1,6 +1,8 @@ package magicbees.main.utils.compat; import magicbees.main.Config; +import magicbees.main.utils.BlockInterface; +import net.minecraft.block.Block; import cpw.mods.fml.common.Loader; public class ExtraBeesHelper implements IModHelper { @@ -89,7 +91,10 @@ public class ExtraBeesHelper implements IModHelper { SAWDUST, ; } - + + public static Block hiveBlock; + + public static final String Name = "ExtraBees"; private static boolean isEBPresent = false; public static boolean isActive() { @@ -103,8 +108,13 @@ public class ExtraBeesHelper implements IModHelper { } public void init() { + getBlocks(); } public void postInit() { } + + private static void getBlocks() { + hiveBlock = BlockInterface.getBlock(Name, "hive"); + } } diff --git a/src/main/java/magicbees/main/utils/compat/ThaumcraftHelper.java b/src/main/java/magicbees/main/utils/compat/ThaumcraftHelper.java index 2cb1229..742e5c3 100644 --- a/src/main/java/magicbees/main/utils/compat/ThaumcraftHelper.java +++ b/src/main/java/magicbees/main/utils/compat/ThaumcraftHelper.java @@ -253,6 +253,9 @@ public class ThaumcraftHelper implements IModHelper { private static Object essenceTime; private static Object essenceOblivion; private static Object visAuraProvider; + + private static Object voidScoop; + private static Object voidGrafter; private static void getBlocks() { plant = BlockInterface.getBlock(Name, "blockCustomPlant"); @@ -395,6 +398,20 @@ public class ThaumcraftHelper implements IModHelper { new Object[] { Config.miscResources.getStackForType(ResourceType.DIMENSIONAL_SINGULARITY), Blocks.dragon_egg, }); + + voidScoop = ThaumcraftApi.addArcaneCraftingRecipe("MB_ScoopVoid", new ItemStack(Config.voidScoop), + new AspectList().add(Aspect.ORDER, 2), new Object[] { + "sWs", "sTs", " T ", + 's', Items.stick, + 'W', Blocks.wool, + 'T', new ItemStack(miscResource, 1, MiscResource.VOID_INGOT.ordinal()) }); + + voidGrafter = ThaumcraftApi.addArcaneCraftingRecipe("MB_GrafterVoid", + new ItemStack(Config.voidGrafter), + new AspectList().add(Aspect.ORDER, 5), new Object[] { + " T", " s ", "s ", + 's', Items.stick, + 'T', new ItemStack(miscResource, 1, MiscResource.VOID_INGOT.ordinal()) }); } private static void setupResearch() { @@ -444,6 +461,22 @@ public class ThaumcraftHelper implements IModHelper { new ItemStack(Config.thaumiumGrafter)) .setPages(getResearchPage("MB_Grafter.1"), new ResearchPage((IArcaneRecipe) thaumGrafter)) .setParents("MB_Scoop").registerResearchItem(); + + //Void tool insert + new ResearchItem("MB_ScoopVoid", category, + new AspectList().add(Aspect.TOOL, 1).add(Aspect.ELDRITCH, 1).add(Aspect.AIR, 1), + -4, -4, 1, + new ItemStack(Config.voidScoop)) + .setPages(getResearchPage("MB_ScoopVoid.1"), new ResearchPage((IArcaneRecipe) voidScoop)) + .setParents("MB_Scoop").setParentsHidden("VOIDMETAL").setSecondary().setConcealed().registerResearchItem(); + + new ResearchItem("MB_GrafterVoid", category, + new AspectList().add(Aspect.TOOL, 1).add(Aspect.TREE, 1).add(Aspect.ELDRITCH, 1), + -4, -2, 2, + new ItemStack(Config.voidGrafter)) + .setPages(getResearchPage("MB_GrafterVoid.1"), new ResearchPage((IArcaneRecipe) voidGrafter)) + .setParents("MB_Grafter").setParentsHidden("VOIDMETAL").setSecondary().setConcealed().registerResearchItem(); + // new ResearchItem("MB_FrameMagic", category, new AspectList().add(Aspect.TOOL, 1).add(Aspect.ARMOR, 1), @@ -595,9 +628,11 @@ public class ThaumcraftHelper implements IModHelper { } list = new AspectList().add(Aspect.ORDER, 5).add(Aspect.ARMOR, 2).add(Aspect.BEAST, 1); - item = new ItemStack(ForestryHelper.hiveBlock); + item = new ItemStack(ForestryHelper.hiveBlock,1,32767); ThaumcraftApi.registerObjectTag(item, list); - ThaumcraftApi.registerObjectTag(new ItemStack(Config.hive), list); + ThaumcraftApi.registerObjectTag(new ItemStack(Config.hive,1,32767), list); + if (ExtraBeesHelper.isActive() ) + ThaumcraftApi.registerObjectTag(new ItemStack(ExtraBeesHelper.hiveBlock,1,32767), list); list = new AspectList().add(Aspect.LIGHT, 1); item = new ItemStack(BlockInterface.getBlock(ForestryHelper.Name, "candle")); diff --git a/src/main/resources/assets/magicbees/lang/en_US.lang b/src/main/resources/assets/magicbees/lang/en_US.lang index 850ee7e..3af5d26 100644 --- a/src/main/resources/assets/magicbees/lang/en_US.lang +++ b/src/main/resources/assets/magicbees/lang/en_US.lang @@ -30,6 +30,9 @@ item.thaumiumGrafter.name=Thaumium Grafter item.magicbees:mysteriousMagnet.name=Mysterious Magnet item.moonDial.name=Jade Moon Dial +item.voidScoop.name=Void Scoop +item.voidGrafter.name=Void Grafter + #Tiles tile.effectJar.name=Bee Collector's Jar tile.magicApiary.name=Magic Apiary @@ -615,57 +618,68 @@ tc.research_category.MAGICBEES=Apimancy tc.research_name.MB_Root=Apimancy -tc.research_text.MB_Root=[MB] Adding some sparkle to your buzz. +tc.research_text.MB_Root=Adding some sparkle to your buzz. tc.research_page.MB_Root.1=Welcome to Apimancy! As a budding keeper of magical bees, there are a few things you should know before diving in. As your acceptance letter to the Academy of Austere Apimancers has mentioned, there are several new tools available to discover. These include some improved versions of Forestry tools, each with their own particular quirks and new frames for your apiaries. You may also discover that there are new bee strains available to discover, if you can coax them to live in certain conditions. The Forestry Escritoire will help you discover them and become the envy tc.research_page.MB_Root.2=of your former, nonmagical colleagues. Also take note of the several new strains of wild bees that have appeared: these are the key to progressing into the magical lineages of your small winged charges. tc.research_name.MB_LoreFragment=Lore Fragments -tc.research_text.MB_LoreFragment=[MB] Research? More like BEEsearch! +tc.research_text.MB_LoreFragment=Research? More like BEEsearch! tc.research_page.MB_LoreFragment.1=While experimenting with bee breeds, you may run accross a strain whose intellectual capabilities are a match for your own. Well, maybe, however unlikely that is. It's possible that they may unearth some obscure reference or a snippet of information that your great intellect may have missed while exploiting the greater mysteries of the universe.
Should your helpful buzzing friends happen to locate this sort of item for you, it may be possible to combine the scraps together into something a little more cohesive. tc.research_name.MB_FrameMagic=Magic Frame -tc.research_text.MB_FrameMagic=[MB] Putting magic into beekeeping contexts +tc.research_text.MB_FrameMagic=Putting magic into beekeeping contexts tc.research_page.MB_FrameMagic.1=The Magic Frame is a simple improvement over your regular, run-of-the-mill Untreated Frames. Still fairly simple to produce, it is capable of lasting three times longer in an apiary than Untreated Frames before becoming unuseable. The enchantable properties of the Magic Frame enable it to be used with several of the special essences involved in Apimancy where other frames would reject the infusion of magics. tc.research_name.MB_Scoop=Thaumium Scoop -tc.research_text.MB_Scoop=[MB] Handled with care. +tc.research_text.MB_Scoop=Handled with care. tc.research_page.MB_Scoop.1=Normal scoops are fragile, and prone to breakage. As an authority in Apimancy, you can do better. By adding some Thaumium to the handle, and lacing it with a measure of order, your new scoop will last up to three times longer!
In addition, the Thaumium in the device will accept the Repair enchantment. tc.research_name.MB_Grafter=Thaumium Grafter -tc.research_text.MB_Grafter=[MB] Saplings for every occasion. +tc.research_text.MB_Grafter=Saplings for every occasion. tc.research_page.MB_Grafter.1=Simple grafters are almost uselessly fragile, and while Proven Grafters are useful, the rarity of emeralds makes them annoying to procure. The solution? Make it yourself!
The Thaumium Grafter, like the Thaumium Scoop, is a tougher, enchantable version of the most basic of the Arborimancer's tools. Use caution though, for although the Repair enchantment can be applied to the grafter, its unusual properties make it exhausting to use. tc.research_name.MB_EssenceLife=Essence of False Life -tc.research_text.MB_EssenceLife=[MB] A rose by any other name. . . +tc.research_text.MB_EssenceLife=A rose by any other name. . . tc.research_page.MB_EssenceLife.1=Simple to create by means of magic, this essence has unusual properties when exposed to bees. When combined with an everyday apiary frame, it has the effect of greatly extending the lifespan of a working hive. tc.research_name.MB_EssenceDeath=Essence of a Shallow Grave -tc.research_text.MB_EssenceDeath=[MB] Not quite six feet under. +tc.research_text.MB_EssenceDeath=Not quite six feet under. tc.reseacrh_page.MB_EssenceDeath.1=The Essence of a Shallow Grave channels the death of many of the ... "natural" creatures that wander the world: Zombies, Skeletons, those sorts of things. Exposing bees to this energy has the effect of making them slow and sluggish, and curtails the extent of their lifespan. Some Apimancers consider using frames imbued with these Essences to be cruel, however, others view it as a natrual part of normal beekeeping, with an eye to creating their perfect strain of bees sometime within THEIR lifetime.
The Apimancer's Guild of Safety recommends handling them with telekenisis or very long tongs. tc.research_name.MB_EssenceArmor=Essence of Everlasting Durability -tc.research_text.MB_EssenceArmor=[MB] The rubber to your glue +tc.research_text.MB_EssenceArmor=The rubber to your glue tc.research_page.MB_EssenceArmor.1=This is the distilled essence of protection, bound to last forever, or until the magics stored within it weaken and eventually break. But until then, it's invincible. Mostly.
While Magic Frames are useful, they are a tad fragile. This essence takes the enchantments you weave into Magic frames to an entirely new level. Combine the essence with a magic frame, and it should have a vastly extended lifespan. tc.research_name.MB_EssenceUnstable=Essence of Fickle Permanence -tc.research_text.MB_EssenceUnstable=[MB] Assured in unsurity +tc.research_text.MB_EssenceUnstable=Assured in unsurity tc.research_page.MB_EssenceUnstable.1=Unstable by nature, the Essence of Fickle Permanence has the side effect of causing normally stable objects and systems to become somewhat unreliable. While this may mostly be a bad thing, Apimancers have discovered that exposing a hive to the essence has the duel effects of both causing the bees to work faster, and the offspring to have higher mutation rates. tc.research_name.MB_EssenceTime=Essence of Lost Time -tc.research_text.MB_EssenceTime=[MB] No time like the unmoment +tc.research_text.MB_EssenceTime=No time like the unmoment tc.research_page.MB_EssenceTime.1=Time is a fickle thing. It comes and it goes, but where exactly does it go to? As a respectable thaumaturge, it has become possible to trap these wasted moments and save them in a magical form. So, now that it is possible to collect extra time from the world, it seems only appropriate that they are used in a place that would be useful. It would be too dangerous to attempt to access these moments yourself for the moment, but perhaps it would be simple to allow your bees access to this untapped lump of time.
By combining the essence with a Magic Frame as usual will suffice to extend the lifespan of bees in your keeping by several times. tc.research_name.MB_DimensionalSingularity=Dimensional Singularity -tc.research_text.MB_DimensionalSingularity=[MB] Quantum flux for them, unlimited storage for you +tc.research_text.MB_DimensionalSingularity=Quantum flux for them, unlimited storage for you tc.research_page.MB_DimensionalSingularity.1=While it may appear similar to the Portable Hole, it serves as a two-way link with another place, which is... probably uninhabited. It should be possible to utilize these singularities to store materials outside of your dimensional understanding - which of course means that they won't clutter up your inventory. As they are now, they are not particularly useful, but there should be ways to unlock their potential. tc.research_name.MB_EssenceOblivion=Essence of Scornful Oblivion -tc.research_text.MB_EssenceOblivion=[MB] Cast aside with malice +tc.research_text.MB_EssenceOblivion=Cast aside with malice tc.research_page.MB_EssenceOblivion.1=Breeding bees for mutations can be aggrivating, especially whith long-lived species. With a little cleverness and only the slightest hint of smugness, you have found a way to utilize the Dimensional Singularity in a manner that only sucks away the life force of your tiny flying friends, bit by bit. Well, maybe significant amounts all at once. It's probably not going to affect them too badly.
It may be somewhat tricky to obtain more than one of the §5Dragon Eggs§0 nessecary to obtain more than one of these. Perhaps there is a bee species that can assist with the limitation. tc.research_name.MB_VisAuraProvider=Vis Apiary Booster -tc.research_text.MB_VisAuraProvider=[MB] Vis? What about Bis? -tc.research_page.MB_VisAuraProvider.1=Infusing Unusual Pollen with vis and combining it with gold creates an unusual crystal that, when fed vis from an aura node, creates an energizing aura that bees are naturally attracted to when attuned to the environment within a Magic Apiary. +tc.research_text.MB_VisAuraProvider=Vis? What about Bis? +tc.research_page.MB_VisAuraProvider.1=Infusing Unusual Pollen with vis and combining it with gold creates an unusual crystal that, when fed centivis from an aura node, creates an energizing aura that bees are naturally attracted to when attuned to the environment within a Magic Apiary.§3Aqua§0 CV will double mutation rate
§8Perditio§0 CV will halve lifespan
§6Aer§0 CV will double production rate + +tc.research_name.MB_ScoopVoid=Void Scoop +tc.research_text.MB_ScoopVoid=The dark net +tc.research_page.MB_ScoopVoid.1=Void metal is a curious thing, and it's time to see what it can bring to Apimancy. Its self-regenerative properties have seeped their way into the net as well, creating a most unsettling mesh.
Hopefully it won't affect the bees too much... + +tc.research_name.MB_GrafterVoid=Void Grafter +tc.research_text.MB_GrafterVoid=Warping Willows +tc.research_page.MB_GrafterVoid.1=While there's no doubt thaumium is an excellent material, your recent discovery of void metal, and subsequent experiments have shown much promise in use as a tool material. The delicate nature of grafters, and the repairing properties of void metal look to be a promising combination.
Much like the thaumium grafter, this one seems to induce the same exhaustion. + + + #Botania Lexicon entries magicbees.botania.lexicon.subtitle=[Magic Bees] diff --git a/src/main/resources/assets/magicbees/textures/items/voidGrafter.png b/src/main/resources/assets/magicbees/textures/items/voidGrafter.png new file mode 100644 index 0000000000000000000000000000000000000000..b3b0104274770d19dee31e1cb888ce35bcc63eb3 GIT binary patch literal 3062 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