package com.jaquadro.minecraft.gardencore.integration; import com.jaquadro.minecraft.gardencore.api.*; import com.jaquadro.minecraft.gardencore.api.plant.IPlantInfo; import com.jaquadro.minecraft.gardencore.api.plant.PlantItem; import com.jaquadro.minecraft.gardencore.api.plant.PlantSize; import com.jaquadro.minecraft.gardencore.api.plant.PlantType; import com.jaquadro.minecraft.gardencore.block.BlockGarden; import com.jaquadro.minecraft.gardencore.block.tile.TileEntityGarden; import cpw.mods.fml.common.Loader; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.item.ItemStack; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import plantmegapack.bin.PMPRenderers; import plantmegapack.block.PMPBlockPlant; import plantmegapack.common.PMPPlantGrowthType; public class PlantMegaPackIntegration { public static final String MOD_ID = "plantmegapack"; public static void init () { if (!Loader.isModLoaded(MOD_ID)) return; GardenCoreAPI.instance().registerBonemealHandler(new BonemealHandler()); PlantRegistry plantRegistry = PlantRegistry.instance(); PlantInfo resolver = new PlantInfo(); plantRegistry.registerPlantInfo(MOD_ID, resolver); plantRegistry.registerPlantRenderer(PMPRenderers.renderPlantID, PlantRegistry.CROSSED_SQUARES_RENDERER); } public static class BonemealHandler implements IBonemealHandler { @Override public boolean applyBonemeal (World world, int x, int y, int z, BlockGarden hostBlock, int slot) { TileEntityGarden te = hostBlock.getTileEntity(world, x, y, z); Block block = hostBlock.getPlantBlockFromSlot(world, x, y, z, slot); int meta = hostBlock.getPlantMetaFromSlot(world, x, y, z, slot); if (block == null || !(block instanceof PMPBlockPlant)) return false; PMPBlockPlant plantBlock = (PMPBlockPlant)block; if (plantBlock.isFullyGrown(meta)) return false; int growMeta = growMeta(plantBlock, meta); if (meta != growMeta) { ItemStack upgrade = new ItemStack(block, 1, growMeta); if (hostBlock.isPlantValidForSlot(world, x, y, z, slot, PlantItem.getForItem(upgrade))) { te.setInventorySlotContents(slot, upgrade); return true; } return false; } return false; } private int growMeta (PMPBlockPlant block, int meta) { if (meta == 0) return 1; if (meta == 1 && block.plantData.attributes.growthStages > 2) return 2; if (meta == 2 && block.plantData.attributes.growthStages > 3) return 4; if (meta == 4 && block.plantData.attributes.growthStages > 4) return 6; return meta; } } public static class PlantInfo implements IPlantInfo { @Override public int getPlantHeight (Block block, int meta) { if (block == null || !(block instanceof PMPBlockPlant)) return 1; PMPBlockPlant plantBlock = (PMPBlockPlant)block; if (plantBlock.plantData.attributes.growthType == PMPPlantGrowthType.DOUBLE && meta >= 2) return 2; return 1; } @Override public int getPlantSectionMeta (Block block, int meta, int section) { if (block == null || !(block instanceof PMPBlockPlant)) return meta; PMPBlockPlant plantBlock = (PMPBlockPlant)block; if (plantBlock.plantData.attributes.growthType == PMPPlantGrowthType.DOUBLE) { switch (section) { case 1: return meta; case 2: return (meta >= 2) ? meta + 1 : meta; } } return meta; } @Override public PlantType getPlantTypeClass (Block block, int meta) { if (block == null || !(block instanceof PMPBlockPlant)) return PlantType.INVALID; PMPBlockPlant plantBlock = (PMPBlockPlant)block; switch (plantBlock.plantData.attributes.renderType) { case CROP: case NORMAL: case STALK: case STAR: return PlantType.GROUND; case EPIPHYTE_HORIZONTAL: case EPIPHYTE_VERTICAL: return PlantType.SIDE; case FLAT: case GROUNDCOVER: return PlantType.GROUND_COVER; case FLOATING_FLAT: return PlantType.AQUATIC_COVER; case FLOATING_FLOWER: case FLOATING_PLANT: return PlantType.AQUATIC_SURFACE; case IMMERSED: return PlantType.AQUATIC_EMERGENT; case VINE_FLOWER: case VINE_NORMAL: case VINE_RANDOM: case VINE_VANILLA: return PlantType.HANGING_SIDE; case WATER: case WATER_FLAT: return PlantType.AQUATIC; default: return PlantType.INVALID; } } @Override public PlantSize getPlantSizeClass (Block block, int meta) { return PlantSize.SMALL; } @Override public int getPlantMaxHeight (Block block, int meta) { if (block == null || !(block instanceof PMPBlockPlant)) return 1; PMPBlockPlant plantBlock = (PMPBlockPlant)block; if (plantBlock.plantData.attributes.growthType == PMPPlantGrowthType.DOUBLE) return 2; return 1; } } }