aboutsummaryrefslogtreecommitdiff
path: root/src/Java/miscutil/core
diff options
context:
space:
mode:
authorDraknyte1 <Draknyte1@hotmail.com>2016-06-29 15:06:52 +1000
committerDraknyte1 <Draknyte1@hotmail.com>2016-06-29 15:06:52 +1000
commitb2c498a2a3afd75838c2d8cf69f1cb00a55a9dfa (patch)
treeb6ecbcb88a0732dc27366f100c46cfb12a719b73 /src/Java/miscutil/core
parentcd1da32653fc6083e9fe92fee770ea2df3fa7eec (diff)
downloadGT5-Unofficial-b2c498a2a3afd75838c2d8cf69f1cb00a55a9dfa.tar.gz
GT5-Unofficial-b2c498a2a3afd75838c2d8cf69f1cb00a55a9dfa.tar.bz2
GT5-Unofficial-b2c498a2a3afd75838c2d8cf69f1cb00a55a9dfa.zip
+Added Two Frames for Forestry
+First attempt at adding an Alveary block for Forestry As always, Used authors code to implement it the cleanest way possible. (Sorry if you don't like it, but feel free to offer PR's with better solutions)
Diffstat (limited to 'src/Java/miscutil/core')
-rw-r--r--src/Java/miscutil/core/handler/COMPAT_IntermodStaging.java4
-rw-r--r--src/Java/miscutil/core/intermod/forestry/HANDLER_Forestry.java25
-rw-r--r--src/Java/miscutil/core/intermod/forestry/apiculture/blocks/FR_BlockAlveary.java240
-rw-r--r--src/Java/miscutil/core/intermod/forestry/apiculture/items/FR_ItemHiveFrame.java67
-rw-r--r--src/Java/miscutil/core/intermod/forestry/apiculture/items/FR_ItemRegistryApiculture.java58
-rw-r--r--src/Java/miscutil/core/intermod/forestry/apiculture/items/magicbees/FR_StringManager.java30
-rw-r--r--src/Java/miscutil/core/intermod/forestry/apiculture/items/magicbees/MB_HiveFrameType.java107
-rw-r--r--src/Java/miscutil/core/intermod/forestry/apiculture/items/magicbees/MB_ItemMagicHiveFrame.java62
-rw-r--r--src/Java/miscutil/core/intermod/forestry/apiculture/multiblock/FR_TileAlveary.java199
-rw-r--r--src/Java/miscutil/core/intermod/forestry/apiculture/multiblock/TileAlvearyMutatron.java232
-rw-r--r--src/Java/miscutil/core/intermod/forestry/apiculture/multiblock/inventory/FR_ContainerAlvearyMutatron.java28
-rw-r--r--src/Java/miscutil/core/intermod/forestry/apiculture/multiblock/inventory/FR_GuiAlvearyMutatron.java26
-rw-r--r--src/Java/miscutil/core/intermod/forestry/apiculture/multiblock/inventory/FR_InventoryMutatron.java29
-rw-r--r--src/Java/miscutil/core/intermod/forestry/apiculture/multiblock/inventory/MutatronHandler.java22
-rw-r--r--src/Java/miscutil/core/intermod/forestry/core/gui/FR_FontRenderer.java111
-rw-r--r--src/Java/miscutil/core/intermod/forestry/core/gui/FR_GuiForestry.java272
-rw-r--r--src/Java/miscutil/core/intermod/forestry/core/gui/FR_GuiForestryTitled.java33
-rw-r--r--src/Java/miscutil/core/intermod/forestry/core/gui/FR_GuiUtil.java145
-rw-r--r--src/Java/miscutil/core/intermod/forestry/core/gui/FR_WidgetManager.java90
-rw-r--r--src/Java/miscutil/core/lib/LoadedMods.java12
20 files changed, 1792 insertions, 0 deletions
diff --git a/src/Java/miscutil/core/handler/COMPAT_IntermodStaging.java b/src/Java/miscutil/core/handler/COMPAT_IntermodStaging.java
index 668487c5b7..a1e12cea8b 100644
--- a/src/Java/miscutil/core/handler/COMPAT_IntermodStaging.java
+++ b/src/Java/miscutil/core/handler/COMPAT_IntermodStaging.java
@@ -1,5 +1,6 @@
package miscutil.core.handler;
+import miscutil.core.intermod.forestry.HANDLER_Forestry;
import miscutil.core.intermod.growthcraft.HANDLER_Growthcraft;
import miscutil.core.intermod.thermalfoundation.HANDLER_ThermalFoundation;
import miscutil.gregtech.HANDLER_Gregtech;
@@ -10,17 +11,20 @@ public class COMPAT_IntermodStaging {
HANDLER_Growthcraft.preInit();
HANDLER_ThermalFoundation.preInit();
HANDLER_Gregtech.preInit();
+ HANDLER_Forestry.preInit();
}
public static void init(){
HANDLER_ThermalFoundation.Init();
HANDLER_Gregtech.init();
+ HANDLER_Forestry.Init();
}
public static void postInit(){
HANDLER_ThermalFoundation.postInit();
HANDLER_Gregtech.postInit();
+ HANDLER_Forestry.postInit();
}
diff --git a/src/Java/miscutil/core/intermod/forestry/HANDLER_Forestry.java b/src/Java/miscutil/core/intermod/forestry/HANDLER_Forestry.java
new file mode 100644
index 0000000000..f670477318
--- /dev/null
+++ b/src/Java/miscutil/core/intermod/forestry/HANDLER_Forestry.java
@@ -0,0 +1,25 @@
+package miscutil.core.intermod.forestry;
+
+import miscutil.core.intermod.forestry.apiculture.items.FR_ItemRegistryApiculture;
+import miscutil.core.lib.LoadedMods;
+
+public class HANDLER_Forestry {
+
+ public static void preInit(){
+ if (LoadedMods.Forestry){
+ FR_ItemRegistryApiculture.RegisterApiculture();
+ }
+ }
+
+ public static void Init(){
+ if (LoadedMods.Forestry){
+
+ }
+ }
+
+ public static void postInit(){
+ if (LoadedMods.Forestry){
+
+ }
+ }
+}
diff --git a/src/Java/miscutil/core/intermod/forestry/apiculture/blocks/FR_BlockAlveary.java b/src/Java/miscutil/core/intermod/forestry/apiculture/blocks/FR_BlockAlveary.java
new file mode 100644
index 0000000000..24f34e3829
--- /dev/null
+++ b/src/Java/miscutil/core/intermod/forestry/apiculture/blocks/FR_BlockAlveary.java
@@ -0,0 +1,240 @@
+/*******************************************************************************
+ * Copyright (c) 2011-2014 SirSengir.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the GNU Lesser Public License v3
+ * which accompanies this distribution, and is available at
+ * http://www.gnu.org/licenses/lgpl-3.0.txt
+ *
+ * Various Contributors including, but not limited to:
+ * SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges
+ ******************************************************************************/
+package miscutil.core.intermod.forestry.apiculture.blocks;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import miscutil.core.creative.AddToCreativeTab;
+import miscutil.core.intermod.forestry.apiculture.multiblock.TileAlvearyMutatron;
+import net.minecraft.block.Block;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.IIcon;
+import net.minecraft.world.IBlockAccess;
+import net.minecraft.world.World;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import forestry.apiculture.MaterialBeehive;
+import forestry.apiculture.multiblock.TileAlveary;
+import forestry.apiculture.multiblock.TileAlvearyPlain;
+import forestry.core.blocks.BlockStructure;
+import forestry.core.render.TextureManager;
+
+public class FR_BlockAlveary extends BlockStructure {
+ public enum Type {
+ PLAIN,
+ MUTATRON;
+ public static final Type[] VALUES = values();
+ }
+
+ public FR_BlockAlveary() {
+ super(new MaterialBeehive(false));
+ setHardness(1.0f);
+ setCreativeTab(AddToCreativeTab.tabMisc);
+ setHarvestLevel("axe", 0);
+ }
+
+ @SuppressWarnings({"rawtypes", "unchecked"})
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void getSubBlocks(Item item, CreativeTabs tab, List list) {
+ for (int i = 0; i < 8; i++) {
+ if (i == 1) {
+ continue;
+ }
+ list.add(new ItemStack(item, 1, i));
+ }
+ }
+
+ @Override
+ public int getRenderType() {
+ return 0;
+ }
+
+ @Override
+ public boolean renderAsNormalBlock() {
+ return true;
+ }
+
+ @Override
+ public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune) {
+ ArrayList<ItemStack> drop = new ArrayList<>();
+ drop.add(new ItemStack(this, 1, metadata != 1 ? metadata : 0));
+ return drop;
+ }
+
+ @Override
+ public int getDamageValue(World world, int x, int y, int z) {
+ int meta = world.getBlockMetadata(x, y, z);
+ return meta != 1 ? meta : 0;
+ }
+
+ /* TILE ENTITY CREATION */
+ @Override
+ public TileEntity createTileEntity(World world, int metadata) {
+ if (metadata < 0 || metadata > Type.VALUES.length) {
+ return null;
+ }
+
+ Type type = Type.VALUES[metadata];
+ switch (type) {
+ case MUTATRON:
+ return new TileAlvearyMutatron();
+ case PLAIN:
+ default:
+ return new TileAlvearyPlain();
+ }
+ }
+
+ @Override
+ public TileEntity createNewTileEntity(World world, int meta) {
+ return createTileEntity(world, meta);
+ }
+
+ /* ICONS */
+ public static final int PLAIN = 0;
+ public static final int ENTRANCE = 1;
+ public static final int BOTTOM = 2;
+ public static final int LEFT = 3;
+ public static final int RIGHT = 4;
+ public static final int MUTATRON_OFF = 5;
+ public static final int MUTATRON_ON = 6;
+
+ @SideOnly(Side.CLIENT)
+ private IIcon[] icons;
+
+ @SideOnly(Side.CLIENT)
+ @Override
+ public void registerBlockIcons(IIconRegister register) {
+ icons = new IIcon[14];
+ icons[0] = TextureManager.registerTex(register, "apiculture/alveary.plain");
+ icons[1] = TextureManager.registerTex(register, "apiculture/alveary.entrance");
+ icons[2] = TextureManager.registerTex(register, "apiculture/alveary.bottom");
+ icons[3] = TextureManager.registerTex(register, "apiculture/alveary.left");
+ icons[4] = TextureManager.registerTex(register, "apiculture/alveary.right");
+ icons[5] = TextureManager.registerTex(register, "apiculture/alveary.mutatron.off");
+ icons[6] = TextureManager.registerTex(register, "apiculture/alveary.mutatron.on");
+ }
+
+ @SideOnly(Side.CLIENT)
+ @Override
+ public IIcon getIcon(int side, int metadata) {
+ if ((metadata <= 1 || metadata == Type.MUTATRON.ordinal())
+ && (side == 1 || side == 0)) {
+ return icons[BOTTOM];
+ }
+
+ Type type = Type.VALUES[metadata];
+
+ switch (type) {
+ case PLAIN:
+ return icons[PLAIN];
+ case MUTATRON:
+ return icons[MUTATRON_OFF];
+ default:
+ return null;
+ }
+
+ }
+
+ @SideOnly(Side.CLIENT)
+ @Override
+ public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) {
+ int meta = world.getBlockMetadata(x, y, z);
+
+ if (meta == 1) {
+ return this.getIcon(side, meta);
+ } else if (meta > 1) {
+ return getBlockTextureFromSideAndTile(world, x, y, z, side);
+ }
+
+ Block blockXP = world.getBlock(x + 1, y, z);
+ Block blockXM = world.getBlock(x - 1, y, z);
+
+ if (blockXP == this && blockXM != this) {
+
+ if (world.getBlockMetadata(x + 1, y, z) == 1) {
+
+ if (world.getBlock(x, y, z + 1) != this) {
+ return switchForSide(42, side);
+ } else {
+ return switchForSide(41, side);
+ }
+
+ } else {
+ return this.getIcon(side, meta);
+ }
+
+ } else if (blockXP != this && blockXM == this) {
+ if (world.getBlockMetadata(x - 1, y, z) == 1) {
+
+ if (world.getBlock(x, y, z + 1) != this) {
+ return switchForSide(41, side);
+ } else {
+ return switchForSide(42, side);
+ }
+
+ } else {
+ return this.getIcon(side, meta);
+ }
+ }
+
+ return this.getIcon(side, meta);
+ }
+
+ @SideOnly(Side.CLIENT)
+ private IIcon getBlockTextureFromSideAndTile(IBlockAccess world, int x, int y, int z, int side) {
+ TileEntity tile = world.getTileEntity(x, y, z);
+ if (!(tile instanceof TileAlveary)) {
+ return getIcon(side, 0);
+ }
+
+ return icons[((TileAlveary) tile).getIcon(side)];
+ }
+
+ @SideOnly(Side.CLIENT)
+ private IIcon switchForSide(int textureId, int side) {
+
+ if (side == 4 || side == 5) {
+ if (textureId == 41) {
+ return icons[LEFT];
+ } else {
+ return icons[RIGHT];
+ }
+ } else if (textureId == 41) {
+ return icons[RIGHT];
+ } else {
+ return icons[LEFT];
+ }
+
+ }
+
+ @Override
+ public void onNeighborBlockChange(World world, int x, int y, int z, Block block) {
+ super.onNeighborBlockChange(world, x, y, z, block);
+
+ TileEntity tileEntity = world.getTileEntity(x, y, z);
+ if (tileEntity instanceof TileAlveary) {
+ TileAlveary tileAlveary = (TileAlveary) tileEntity;
+
+ // We must check that the slabs on top were not removed
+ tileAlveary.getMultiblockLogic().getController().reassemble();
+ }
+ }
+
+ public ItemStack get(Type type) {
+ return new ItemStack(this, 1, type.ordinal());
+ }
+}
diff --git a/src/Java/miscutil/core/intermod/forestry/apiculture/items/FR_ItemHiveFrame.java b/src/Java/miscutil/core/intermod/forestry/apiculture/items/FR_ItemHiveFrame.java
new file mode 100644
index 0000000000..de8de491af
--- /dev/null
+++ b/src/Java/miscutil/core/intermod/forestry/apiculture/items/FR_ItemHiveFrame.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2011-2014 SirSengir.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the GNU Lesser Public License v3
+ * which accompanies this distribution, and is available at
+ * http://www.gnu.org/licenses/lgpl-3.0.txt
+ *
+ * Various Contributors including, but not limited to:
+ * SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges
+ ******************************************************************************/
+package miscutil.core.intermod.forestry.apiculture.items;
+
+import miscutil.core.creative.AddToCreativeTab;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import forestry.api.apiculture.DefaultBeeModifier;
+import forestry.api.apiculture.IBee;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeHousing;
+import forestry.api.apiculture.IBeeModifier;
+import forestry.api.apiculture.IHiveFrame;
+
+public class FR_ItemHiveFrame extends Item implements IHiveFrame {
+
+ private final IBeeModifier beeModifier;
+
+ public FR_ItemHiveFrame(int maxDamage, float geneticDecay) {
+ setMaxStackSize(1);
+ setMaxDamage(maxDamage);
+ setCreativeTab(AddToCreativeTab.tabMisc);
+
+ this.beeModifier = new HiveFrameBeeModifier(geneticDecay);
+ }
+
+ @Override
+ public ItemStack frameUsed(IBeeHousing housing, ItemStack frame, IBee queen, int wear) {
+ frame.setItemDamage(frame.getItemDamage() + wear);
+ if (frame.getItemDamage() >= frame.getMaxDamage()) {
+ return null;
+ } else {
+ return frame;
+ }
+ }
+
+ @Override
+ public IBeeModifier getBeeModifier() {
+ return beeModifier;
+ }
+
+ private static class HiveFrameBeeModifier extends DefaultBeeModifier {
+ private final float geneticDecay;
+
+ public HiveFrameBeeModifier(float geneticDecay) {
+ this.geneticDecay = geneticDecay;
+ }
+
+ @Override
+ public float getProductionModifier(IBeeGenome genome, float currentModifier) {
+ return (currentModifier < 10f) ? 2f : 1f;
+ }
+
+ @Override
+ public float getGeneticDecay(IBeeGenome genome, float currentModifier) {
+ return this.geneticDecay;
+ }
+ }
+}
diff --git a/src/Java/miscutil/core/intermod/forestry/apiculture/items/FR_ItemRegistryApiculture.java b/src/Java/miscutil/core/intermod/forestry/apiculture/items/FR_ItemRegistryApiculture.java
new file mode 100644
index 0000000000..f648077f4e
--- /dev/null
+++ b/src/Java/miscutil/core/intermod/forestry/apiculture/items/FR_ItemRegistryApiculture.java
@@ -0,0 +1,58 @@
+/*******************************************************************************
+ * Copyright (c) 2011-2014 SirSengir.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the GNU Lesser Public License v3
+ * which accompanies this distribution, and is available at
+ * http://www.gnu.org/licenses/lgpl-3.0.txt
+ *
+ * Various Contributors including, but not limited to:
+ * SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges
+ ******************************************************************************/
+package miscutil.core.intermod.forestry.apiculture.items;
+import miscutil.core.intermod.forestry.apiculture.items.magicbees.MB_HiveFrameType;
+import miscutil.core.intermod.forestry.apiculture.items.magicbees.MB_ItemMagicHiveFrame;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.WeightedRandomChestContent;
+import net.minecraftforge.common.ChestGenHooks;
+import cpw.mods.fml.common.registry.GameRegistry;
+import forestry.core.items.ItemRegistry;
+import forestry.core.utils.StringUtil;
+
+public class FR_ItemRegistryApiculture extends ItemRegistry {
+
+
+ //----- Apiary Frames ----------------------
+ public static FR_ItemHiveFrame frameUntreated;
+ public static FR_ItemHiveFrame frameImpregnated;
+ public static FR_ItemHiveFrame frameProven;
+ //Magic Bee Frame Items
+ public static MB_ItemMagicHiveFrame hiveFrameMetabolic;
+ public static MB_ItemMagicHiveFrame hiveFrameOblivion;
+
+ public static void RegisterApiculture() {
+
+ //Forestry Frames
+ //frameUntreated = registerItem(new FR_ItemHiveFrame(80, 0.9f), "frameUntreated");
+ //frameImpregnated = registerItem(new FR_ItemHiveFrame(240, 0.4f), "frameImpregnated");
+ //frameProven = registerItem(new FR_ItemHiveFrame(720, 0.3f), "frameProven");
+
+ //Magic Bee like Frames
+ hiveFrameMetabolic = new MB_ItemMagicHiveFrame(MB_HiveFrameType.ACCELERATED);
+ hiveFrameOblivion = new MB_ItemMagicHiveFrame(MB_HiveFrameType.VOID);
+ ChestGenHooks.addItem(ChestGenHooks.STRONGHOLD_CORRIDOR, new WeightedRandomChestContent(new ItemStack(hiveFrameOblivion), 1, 1, 18));
+ ChestGenHooks.addItem(ChestGenHooks.STRONGHOLD_LIBRARY, new WeightedRandomChestContent(new ItemStack(hiveFrameOblivion), 1, 3, 23));
+
+
+
+
+ }
+
+ protected static <T extends Item> T registerItem(T item, String name) {
+ item.setUnlocalizedName(name);
+ GameRegistry.registerItem(item, StringUtil.cleanItemName(item));
+ return item;
+ }
+}
+
+
diff --git a/src/Java/miscutil/core/intermod/forestry/apiculture/items/magicbees/FR_StringManager.java b/src/Java/miscutil/core/intermod/forestry/apiculture/items/magicbees/FR_StringManager.java
new file mode 100644
index 0000000000..991b961ba9
--- /dev/null
+++ b/src/Java/miscutil/core/intermod/forestry/apiculture/items/magicbees/FR_StringManager.java
@@ -0,0 +1,30 @@
+package miscutil.core.intermod.forestry.apiculture.items.magicbees;
+
+import net.minecraft.util.StatCollector;
+
+public class FR_StringManager
+{
+ public static String getLocalizedString(String key)
+ {
+ if(StatCollector.canTranslate(key))
+ {
+ return StatCollector.translateToLocal(key);
+ }
+ else
+ {
+ return StatCollector.translateToFallback(key);
+ }
+ }
+
+ public static String getLocalizedString(String key, Object... objects)
+ {
+ if(StatCollector.canTranslate(key))
+ {
+ return String.format(StatCollector.translateToLocal(key), objects);
+ }
+ else
+ {
+ return String.format(StatCollector.translateToFallback(key), objects);
+ }
+ }
+}
diff --git a/src/Java/miscutil/core/intermod/forestry/apiculture/items/magicbees/MB_HiveFrameType.java b/src/Java/miscutil/core/intermod/forestry/apiculture/items/magicbees/MB_HiveFrameType.java
new file mode 100644
index 0000000000..a168c8157b
--- /dev/null
+++ b/src/Java/miscutil/core/intermod/forestry/apiculture/items/magicbees/MB_HiveFrameType.java
@@ -0,0 +1,107 @@
+package miscutil.core.intermod.forestry.apiculture.items.magicbees;
+
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeModifier;
+
+public enum MB_HiveFrameType implements IBeeModifier
+{
+ ACCELERATED("Accelerated", 175, 1f, 2.5f, 0.9f, 1.8f, 1f),
+ VOID("Void", 20, 1f, 1f, 0.0001f, 10f, 1f);
+
+ private final String frameName;
+ public final int maxDamage;
+
+ private final float territoryMod;
+ private final float mutationMod;
+ private final float lifespanMod;
+ private final float productionMod;
+ private final float floweringMod;
+ private final float geneticDecayMod;
+ private final boolean isSealed;
+ private final boolean isLit;
+ private final boolean isSunlit;
+ private final boolean isHellish;
+
+ MB_HiveFrameType(String name, int damage, float territory, float mutation, float lifespan, float production, float geneticDecay) {
+ this(name, damage, territory, mutation, lifespan, production, 1f, geneticDecay, false, false, false, false);
+ }
+
+ MB_HiveFrameType(String name, int damage,
+ float territory, float mutation, float lifespan, float production, float flowering, float geneticDecay,
+ boolean sealed, boolean lit, boolean sunlit, boolean hellish)
+ {
+ this.frameName = name;
+ this.maxDamage = damage;
+
+ this.territoryMod = territory;
+ this.mutationMod = mutation;
+ this.lifespanMod = lifespan;
+ this.productionMod = production;
+ this.floweringMod = flowering;
+ this.geneticDecayMod = geneticDecay;
+ this.isSealed = sealed;
+ this.isLit = lit;
+ this.isSunlit = sunlit;
+ this.isHellish = hellish;
+ }
+
+ public String getName()
+ {
+ return this.frameName;
+ }
+
+ public String getLocalizedName()
+ {
+ return FR_StringManager.getLocalizedString("frame." + this.frameName);
+ }
+
+ @Override
+ public float getTerritoryModifier(IBeeGenome genome, float currentModifier) {
+ return territoryMod;
+ }
+
+ @Override
+ public float getMutationModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier) {
+ return mutationMod;
+ }
+
+ @Override
+ public float getLifespanModifier(IBeeGenome genome, IBeeGenome mate, float currentModifier) {
+ return lifespanMod;
+ }
+
+ @Override
+ public float getProductionModifier(IBeeGenome genome, float currentModifier) {
+ return productionMod;
+ }
+
+ @Override
+ public float getFloweringModifier(IBeeGenome genome, float currentModifier) {
+ return floweringMod;
+ }
+
+ @Override
+ public float getGeneticDecay(IBeeGenome genome, float currentModifier) {
+ return geneticDecayMod;
+ }
+
+ @Override
+ public boolean isSealed() {
+ return isSealed;
+ }
+
+ @Override
+ public boolean isSelfLighted() {
+ return isLit;
+ }
+
+ @Override
+ public boolean isSunlightSimulated() {
+ return isSunlit;
+ }
+
+ @Override
+ public boolean isHellish() {
+ return isHellish;
+ }
+}
diff --git a/src/Java/miscutil/core/intermod/forestry/apiculture/items/magicbees/MB_ItemMagicHiveFrame.java b/src/Java/miscutil/core/intermod/forestry/apiculture/items/magicbees/MB_ItemMagicHiveFrame.java
new file mode 100644
index 0000000000..14234e7aae
--- /dev/null
+++ b/src/Java/miscutil/core/intermod/forestry/apiculture/items/magicbees/MB_ItemMagicHiveFrame.java
@@ -0,0 +1,62 @@
+package miscutil.core.intermod.forestry.apiculture.items.magicbees;
+
+import miscutil.core.creative.AddToCreativeTab;
+import miscutil.core.lib.CORE;
+import net.minecraft.client.renderer.texture.IIconRegister;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import cpw.mods.fml.common.registry.GameRegistry;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import forestry.api.apiculture.IBee;
+import forestry.api.apiculture.IBeeHousing;
+import forestry.api.apiculture.IBeeModifier;
+import forestry.api.apiculture.IHiveFrame;
+
+public class MB_ItemMagicHiveFrame extends Item implements IHiveFrame
+{
+ private MB_HiveFrameType type;
+
+ public MB_ItemMagicHiveFrame(MB_HiveFrameType frameType)
+ {
+ super();
+ this.type = frameType;
+ this.setMaxDamage(this.type.maxDamage);
+ this.setMaxStackSize(1);
+ this.setCreativeTab(AddToCreativeTab.tabMisc);
+ this.setUnlocalizedName("frame" + frameType.getName());
+ GameRegistry.registerItem(this, "frame" + frameType.getName());
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void registerIcons(IIconRegister par1IconRegister)
+ {
+ this.itemIcon = par1IconRegister.registerIcon(CORE.MODID + ":frame" + type.getName());
+ }
+
+ // --------- IHiveFrame functions -----------------------------------------
+
+ @Override
+ public ItemStack frameUsed(IBeeHousing housing, ItemStack frame, IBee queen, int wear) {
+ frame.setItemDamage(frame.getItemDamage() + wear);
+
+ if (frame.getItemDamage() >= frame.getMaxDamage()) {
+ // Break the frame.
+ frame = null;
+ }
+
+ return frame;
+ }
+
+ @Override
+ public IBeeModifier getBeeModifier() {
+ return type;
+ }
+
+ @Override
+ public boolean isBookEnchantable(ItemStack itemstack1, ItemStack itemstack2)
+ {
+ return false;
+ }
+
+}
diff --git a/src/Java/miscutil/core/intermod/forestry/apiculture/multiblock/FR_TileAlveary.java b/src/Java/miscutil/core/intermod/forestry/apiculture/multiblock/FR_TileAlveary.java
new file mode 100644
index 0000000000..29c4a7f445
--- /dev/null
+++ b/src/Java/miscutil/core/intermod/forestry/apiculture/multiblock/FR_TileAlveary.java
@@ -0,0 +1,199 @@
+/*******************************************************************************
+ * Copyright (c) 2011-2014 SirSengir.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the GNU Lesser Public License v3
+ * which accompanies this distribution, and is available at
+ * http://www.gnu.org/licenses/lgpl-3.0.txt
+ *
+ * Various Contributors including, but not limited to:
+ * SirSengir (original work), CovertJaguar, Player, Binnie, MysteriousAges
+ ******************************************************************************/
+package miscutil.core.intermod.forestry.apiculture.multiblock;
+
+import java.io.IOException;
+import java.util.List;
+
+import miscutil.core.intermod.forestry.apiculture.blocks.FR_BlockAlveary;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.util.ChunkCoordinates;
+import net.minecraft.util.Vec3;
+import net.minecraft.world.biome.BiomeGenBase;
+import forestry.api.apiculture.IBeeHousing;
+import forestry.api.apiculture.IBeeHousingInventory;
+import forestry.api.apiculture.IBeeListener;
+import forestry.api.apiculture.IBeeModifier;
+import forestry.api.apiculture.IBeekeepingLogic;
+import forestry.api.core.EnumHumidity;
+import forestry.api.core.EnumTemperature;
+import forestry.api.core.IErrorLogic;
+import forestry.api.multiblock.IAlvearyComponent;
+import forestry.api.multiblock.IMultiblockController;
+import forestry.apiculture.multiblock.MultiblockLogicAlveary;
+import forestry.core.access.EnumAccess;
+import forestry.core.access.IAccessHandler;
+import forestry.core.access.IRestrictedAccess;
+import forestry.core.config.Config;
+import forestry.core.gui.IHintSource;
+import forestry.core.inventory.IInventoryAdapter;
+import forestry.core.multiblock.MultiblockTileEntityForestry;
+import forestry.core.network.DataInputStreamForestry;
+import forestry.core.network.DataOutputStreamForestry;
+import forestry.core.network.IStreamableGui;
+import forestry.core.tiles.IClimatised;
+import forestry.core.tiles.ITitled;
+
+public abstract class FR_TileAlveary extends MultiblockTileEntityForestry<MultiblockLogicAlveary> implements IBeeHousing, IAlvearyComponent, IRestrictedAccess, IStreamableGui, ITitled, IClimatised, IHintSource {
+ private final String unlocalizedTitle;
+
+ protected FR_TileAlveary() {
+ this(FR_BlockAlveary.Type.PLAIN);
+ }
+
+ protected FR_TileAlveary(FR_BlockAlveary.Type type) {
+ super(new MultiblockLogicAlveary());
+ this.unlocalizedTitle = "tile.alveary." + type.ordinal() + ".name";
+ }
+
+ /* TEXTURES */
+ public int getIcon(int side) {
+ return FR_BlockAlveary.PLAIN;
+ }
+
+ @Override
+ public void onMachineAssembled(IMultiblockController multiblockController, ChunkCoordinates minCoord, ChunkCoordinates maxCoord) {
+ // Re-render this block on the client
+ if (worldObj.isRemote) {
+ this.worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
+ }
+ worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord, getBlockType());
+ markDirty();
+ }
+
+ @Override
+ public void onMachineBroken() {
+ // Re-render this block on the client
+ if (worldObj.isRemote) {
+ this.worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
+ }
+ worldObj.notifyBlocksOfNeighborChange(xCoord, yCoord, zCoord, getBlockType());
+ markDirty();
+ }
+
+ /* IHousing */
+ @Override
+ public BiomeGenBase getBiome() {
+ return getMultiblockLogic().getController().getBiome();
+ }
+
+ /* IBeeHousing */
+ @Override
+ public Iterable<IBeeModifier> getBeeModifiers() {
+ return getMultiblockLogic().getController().getBeeModifiers();
+ }
+
+ @Override
+ public Iterable<IBeeListener> getBeeListeners() {
+ return getMultiblockLogic().getController().getBeeListeners();
+ }
+
+ @Override
+ public IBeeHousingInventory getBeeInventory() {
+ return getMultiblockLogic().getController().getBeeInventory();
+ }
+
+ @Override
+ public IBeekeepingLogic getBeekeepingLogic() {
+ return getMultiblockLogic().getController().getBeekeepingLogic();
+ }
+
+ @Override
+ public Vec3 getBeeFXCoordinates() {
+ return getMultiblockLogic().getController().getBeeFXCoordinates();
+ }
+
+ /* IClimatised */
+ @Override
+ public EnumTemperature getTemperature() {
+ return getMultiblockLogic().getController().getTemperature();
+ }
+
+ @Override
+ public EnumHumidity getHumidity() {
+ return getMultiblockLogic().getController().getHumidity();
+ }
+
+ @Override
+ public int getBlockLightValue() {
+ return getMultiblockLogic().getController().getBlockLightValue();
+ }
+
+ @Override
+ public boolean canBlockSeeTheSky() {
+ return getMultiblockLogic().getController().canBlockSeeTheSky();
+ }
+
+ @Override
+ public IErrorLogic getErrorLogic() {
+ return getMultiblockLogic().getController().getErrorLogic();
+ }
+
+ @Override
+ public IAccessHandler getAccessHandler() {
+ return getMultiblockLogic().getController().getAccessHandler();
+ }
+
+ @Override
+ public void onSwitchAccess(EnumAccess oldAccess, EnumAccess newAccess) {
+ getMultiblockLogic().getController().onSwitchAccess(oldAccess, newAccess);
+ }
+
+ @Override
+ public IInventoryAdapter getInternalInventory() {
+ return getMultiblockLogic().getController().getInternalInventory();
+ }
+
+ @Override
+ public String getUnlocalizedTitle() {
+ return unlocalizedTitle;
+ }
+
+ /* IHintSource */
+ @Override
+ public List<String> getHints() {
+ return Config.hints.get("apiary");
+ }
+
+ /* IClimatised */
+ @Override
+ public float getExactTemperature() {
+ return getMultiblockLogic().getController().getExactTemperature();
+ }
+
+ @Override
+ public float getExactHumidity() {
+ return getMultiblockLogic().getController().getExactHumidity();
+ }
+
+ /* IStreamableGui */
+ @Override
+ public void writeGuiData(DataOutputStreamForestry data) throws IOException {
+ getMultiblockLogic().getController().writeGuiData(data);
+ }
+
+ @Override
+ public void readGuiData(DataInputStreamForestry data) throws IOException {
+ getMultiblockLogic().getController().readGuiData(data);
+ }
+
+ @Override
+ public Object getGui(EntityPlayer player, int data) {
+ //return new GuiAlveary(p