diff --git a/src/main/java/magicbees/main/Config.java b/src/main/java/magicbees/main/Config.java index 0c41ca9..eed1e33 100644 --- a/src/main/java/magicbees/main/Config.java +++ b/src/main/java/magicbees/main/Config.java @@ -33,6 +33,7 @@ import magicbees.item.types.WaxType; import magicbees.main.utils.LocalizationManager; import magicbees.main.utils.LogHelper; import magicbees.main.utils.VersionInfo; +import magicbees.main.utils.compat.BotaniaHelper; import magicbees.main.utils.compat.ThaumcraftHelper; import magicbees.storage.BackpackDefinition; import magicbees.tileentity.TileEntityEffectJar; @@ -339,6 +340,7 @@ public class Config p = configuration.get("modules", "Botania", true); botaniaActive = p.getBoolean(); + BotaniaHelper.doBotaniaModuleConfigs(configuration); } private void doGeneralConfigs() { diff --git a/src/main/java/magicbees/main/utils/compat/BotaniaHelper.java b/src/main/java/magicbees/main/utils/compat/BotaniaHelper.java index cb917e3..5a1f322 100644 --- a/src/main/java/magicbees/main/utils/compat/BotaniaHelper.java +++ b/src/main/java/magicbees/main/utils/compat/BotaniaHelper.java @@ -3,10 +3,21 @@ package magicbees.main.utils.compat; 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 net.minecraft.util.IIcon; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; +import vazkii.botania.api.BotaniaAPI; import cpw.mods.fml.common.Loader; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; public class BotaniaHelper { + @SideOnly(Side.CLIENT) + public static IIcon subtileIcons[]; + public enum ManaResource { MANASTEEL, MANAPEARL, @@ -31,6 +42,8 @@ public class BotaniaHelper { private static boolean isBotaniaActive = false; public static final String Name = "Botania"; + public static double beegoniaManaMultiplier; + public static boolean isActive() { return isBotaniaActive; } @@ -45,10 +58,17 @@ public class BotaniaHelper { if (isActive()) { getBlocks(); getItems(); + + registerSubtiles(); } } public static void postInit() { + if (isActive()) { + BotaniaAPI.registerSubTile(SubTileBeegonia.NAME, SubTileBeegonia.class); + BotaniaAPI.registerSubTileSignature(SubTileBeegonia.class, new BotaniaSignature(SubTileBeegonia.NAME)); + BotaniaAPI.addSubTileToCreativeMenu(SubTileBeegonia.NAME); + } } public static void getBlocks() { @@ -59,4 +79,17 @@ public class BotaniaHelper { public static void getItems() { Config.botManaResource = ItemInterface.getItem(Name, "manaResource"); } + + private static void registerSubtiles() { + BotaniaAPI.registerSubTile(SubTileBeegonia.NAME, SubTileBeegonia.class); + } + + public static void doBotaniaModuleConfigs(Configuration configuration) { + 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)"; + beegoniaManaMultiplier = p.getDouble(); + } } diff --git a/src/main/java/magicbees/main/utils/compat/botania/BotaniaSignature.java b/src/main/java/magicbees/main/utils/compat/botania/BotaniaSignature.java new file mode 100644 index 0000000..10debf6 --- /dev/null +++ b/src/main/java/magicbees/main/utils/compat/botania/BotaniaSignature.java @@ -0,0 +1,37 @@ +package magicbees.main.utils.compat.botania; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import vazkii.botania.api.subtile.signature.SubTileSignature; + +public class BotaniaSignature extends SubTileSignature { + + private String name; + IIcon icon; + + public BotaniaSignature(String subtileName) { + this.name = subtileName; + } + + @Override + public IIcon getIconForStack(ItemStack stack) { + return icon; + } + + @Override + public void registerIcons(IIconRegister register) { + icon = register.registerIcon("magicbees:" + name); + } + + @Override + public String getUnlocalizedNameForStack(ItemStack stack) { + return "tile.botania:flower." + name; + } + + @Override + public String getUnlocalizedLoreTextForStack(ItemStack stack) { + return "tile.botania:flower." + name + ".lore"; + } + +} diff --git a/src/main/java/magicbees/main/utils/compat/botania/SubTileBeegonia.java b/src/main/java/magicbees/main/utils/compat/botania/SubTileBeegonia.java new file mode 100644 index 0000000..316744b --- /dev/null +++ b/src/main/java/magicbees/main/utils/compat/botania/SubTileBeegonia.java @@ -0,0 +1,137 @@ +package magicbees.main.utils.compat.botania; + +import java.util.List; + +import magicbees.bees.BeeManager; +import magicbees.main.utils.compat.BotaniaHelper; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.IIcon; +import vazkii.botania.api.BotaniaAPI; +import vazkii.botania.api.subtile.SubTileGenerating; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import forestry.api.apiculture.IAlleleBeeSpecies; +import forestry.api.apiculture.IBee; + +public class SubTileBeegonia extends SubTileGenerating { + + public static final String NAME = "beegonia"; + + private static final int DRONE_BURN_TIME_BASE = 100; + private static final int ITEM_STACK_AGE_THRESHOLD = 60; + private static final int RANGE = 3; + + private int burnTimeLeft = 0; + + private void searchForDroneStack() { + if (!supertile.getWorldObj().isRemote && mana < getMaxMana()) { + boolean needsSync = false; + + @SuppressWarnings("unchecked") + List items = supertile.getWorldObj().getEntitiesWithinAABB(EntityItem.class, + AxisAlignedBB.getBoundingBox(supertile.xCoord - RANGE, supertile.yCoord - RANGE, supertile.zCoord - RANGE, + supertile.xCoord + RANGE + 1, supertile.yCoord + RANGE + 1, supertile.zCoord + RANGE + 1)); + for (EntityItem item : items) { + if (item.age >= ITEM_STACK_AGE_THRESHOLD && !item.isDead) { + ItemStack stack = item.getEntityItem(); + if (BeeManager.beeRoot.isDrone(stack)) { + IBee bee = BeeManager.beeRoot.getMember(stack); + + if (stack.stackSize > 0) { + stack.stackSize--; + burnTimeLeft = (int)(DRONE_BURN_TIME_BASE * getSpeciesScaledComplexity(bee.getGenome().getPrimary()) * BotaniaHelper.beegoniaManaMultiplier); + needsSync = true; + + supertile.getWorldObj().playSoundEffect(supertile.xCoord, supertile.yCoord, supertile.zCoord, "botania:endoflame", 0.2F, 1F); + } + + if (stack.stackSize <= 0) { + item.setDead(); + } + } + } + } + + if (needsSync) { + sync(); + } + } + } + + public int getSpeciesScaledComplexity(IAlleleBeeSpecies species) { + if (species == null) { + return 0; + } + else { + int halfComplexity = species.getComplexity() / 2; + return (halfComplexity >= 1) ? halfComplexity : 1; + } + } + + @Override + public void onUpdate() { + super.onUpdate(); + + if (linkedCollector != null) { + if (burnTimeLeft > 0) { + burnTimeLeft--; + } + else { + searchForDroneStack(); + } + } + } + + @Override + public void readFromPacketNBT(NBTTagCompound cmp) { + super.readFromPacketNBT(cmp); + + burnTimeLeft = cmp.getInteger("burnTimeLeft"); + } + + @Override + public void writeToPacketNBT(NBTTagCompound cmp) { + super.writeToPacketNBT(cmp); + + cmp.setInteger("burnTimeLeft", burnTimeLeft); + } + + @Override + public int getMaxMana() { + return 600; + } + + @Override + public int getValueForPassiveGeneration() { + return 1; + } + + @Override + public boolean canGeneratePassively() { + return burnTimeLeft > 0; + } + + @Override + public int getDelayBetweenPassiveGeneration() { + return 1; + } + + @Override + public boolean isPassiveFlower() { + return true; + } + + @Override + public int getColor() { + return 0xFFFF96; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon() { + return BotaniaAPI.getSignatureForName(NAME).getIconForStack(null); + } +} diff --git a/src/main/resources/assets/magicbees/lang/en_US.lang b/src/main/resources/assets/magicbees/lang/en_US.lang index 9852245..5ad7f6b 100644 --- a/src/main/resources/assets/magicbees/lang/en_US.lang +++ b/src/main/resources/assets/magicbees/lang/en_US.lang @@ -8,6 +8,11 @@ magicbees.versioning.newVersion=A new version of Magic Bees is available: %s magicbees.versioning.critical=Magic Bees has a critical update ready: %s - Please update! magicbees.versioning.clickDownload=Click to open the Download page. Hover for update info. +# -- Mysterious Magnet levels +misc.level=Level %s +misc.magnetActive=%s - Active +misc.magnetInactive=%s - Inactive + #Items item.magicbees:jellyBabies.name=Handful of Jelly Babies item.thaumiumScoop.name=Thaumium Scoop @@ -165,10 +170,10 @@ backpack.thaumaturge=Thaumaturge's Backpack #Itemgroups itemGroup.magicBees=Magic Bees -#Misc -misc.level=Level %s -misc.magnetActive=%s - Active -misc.magnetInactive=%s - Inactive +#Botania stuff +tile.botania:flower.beegonia.name=Beegonia +tile.botania:flower.beegonia.lore=We won't bee seeing you any more... + #Research research.requiresBlock=Requires a foundation of %s diff --git a/src/main/resources/assets/magicbees/textures/blocks/beegonia.png b/src/main/resources/assets/magicbees/textures/blocks/beegonia.png new file mode 100644 index 0000000..a2a830a Binary files /dev/null and b/src/main/resources/assets/magicbees/textures/blocks/beegonia.png differ