package com.jaquadro.minecraft.gardencommon.integration.mods;
import com.jaquadro.minecraft.gardencommon.integration.IntegrationModule;
import com.jaquadro.minecraft.gardencore.api.*;
import com.jaquadro.minecraft.gardencore.api.plant.*;
import com.jaquadro.minecraft.gardencore.block.BlockGarden;
import com.jaquadro.minecraft.gardencore.block.tile.TileEntityGarden;
import com.jaquadro.minecraft.gardencore.client.renderer.plant.DoublePlantRenderer;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class Botania extends IntegrationModule
{
public static final String MOD_ID = "Botania";
private static Block flower1;
private static Block flower2;
@Override
public String getModID () {
return MOD_ID;
}
@Override
public void init () throws Throwable {
flower1 = GameRegistry.findBlock(MOD_ID, "doubleFlower1");
flower2 = GameRegistry.findBlock(MOD_ID, "doubleFlower2");
PlantRegistry plantReg = PlantRegistry.instance();
IPlantRenderer doubleFlowerRender = new DoubleFlowerRenderer();
plantReg.registerPlantRenderer(MOD_ID, "flower", PlantRegistry.CROSSED_SQUARES_RENDERER);
plantReg.registerPlantRenderer(MOD_ID, "shinyFlower", PlantRegistry.CROSSED_SQUARES_RENDERER);
plantReg.registerPlantRenderer(MOD_ID, "doubleFlower1", doubleFlowerRender);
plantReg.registerPlantRenderer(MOD_ID, "doubleFlower2", doubleFlowerRender);
IPlantInfo doubleFlowerInfo = new DoubleFlowerPlantInfo();
plantReg.registerPlantInfo(MOD_ID, "doubleFlower1", doubleFlowerInfo);
plantReg.registerPlantInfo(MOD_ID, "doubleFlower2", doubleFlowerInfo);
GardenCoreAPI.instance().registerBonemealHandler(new BonemealHandler());
for (int i : new int[] { 2, 3, 6, 9, 15 }) {
plantReg.registerPlantInfo(MOD_ID, "flower", i, new SimplePlantInfo(PlantType.GROUND, PlantSize.SMALL));
plantReg.registerPlantInfo(MOD_ID, "shinyFlower", i, new SimplePlantInfo(PlantType.GROUND, PlantSize.SMALL));
}
for (int i : new int[] { 4 }) {
plantReg.registerPlantInfo(MOD_ID, "flower", i, new SimplePlantInfo(PlantType.GROUND, PlantSize.LARGE));
plantReg.registerPlantInfo(MOD_ID, "shinyFlower", i, new SimplePlantInfo(PlantType.GROUND, PlantSize.LARGE));
}
plantReg.registerPlantInfo(MOD_ID, "specialFlower", new SimplePlantInfo(PlantType.INVALID, PlantSize.MEDIUM));
}
@Override
public void postInit () throws Throwable {
}
private 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);
Block flower = GameRegistry.findBlock(MOD_ID, "flower");
if (block == flower) {
ItemStack upgrade = ((meta & 0x8) == 0) ? new ItemStack(flower1, 1, meta) : new ItemStack(flower2, 1, meta & 0x7);
if (hostBlock.isPlantValidForSlot(world, x, y, z, slot, PlantItem.getForItem(upgrade))) {
te.setInventorySlotContents(slot, upgrade);
return true;
}
}
return false;
}
}
private static class DoubleFlowerPlantInfo extends DefaultPlantInfo
{
@Override
public int getPlantHeight (Block block, int meta) {
if (block == flower1 || block == flower2)
return 2;
return 1;
}
@Override
public int getPlantSectionMeta (Block block, int meta, int section) {
if (block == flower1 || block == flower2) {
switch (section) {
case 2: return meta & 0x7;
case 1: return meta | 0x8;
}
}
return meta;
}
}
private static class DoubleFlowerRenderer extends DoublePlantRenderer
{
@Override
public IIcon getIcon (Block block, IBlockAccess blockAccess, int meta) {
return block.getIcon(0, meta);
}
}
}