package crazypants.enderio.machine.farm; import java.util.Iterator; import java.util.regex.Pattern; import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.registry.GameRegistry; import crazypants.enderio.config.Config; import crazypants.enderio.machine.farm.farmers.CocoaFarmer; import crazypants.enderio.machine.farm.farmers.CustomSeedFarmer; import crazypants.enderio.machine.farm.farmers.FarmersCommune; import crazypants.enderio.machine.farm.farmers.FlowerPicker; import crazypants.enderio.machine.farm.farmers.ManaBeanFarmer; import crazypants.enderio.machine.farm.farmers.MelonFarmer; import crazypants.enderio.machine.farm.farmers.NaturaBerryFarmer; import crazypants.enderio.machine.farm.farmers.NetherWartFarmer; import crazypants.enderio.machine.farm.farmers.PickableFarmer; import crazypants.enderio.machine.farm.farmers.PlantableFarmer; import crazypants.enderio.machine.farm.farmers.RubberTreeFarmerIC2; import crazypants.enderio.machine.farm.farmers.StemFarmer; import crazypants.enderio.machine.farm.farmers.TreeFarmer; public final class FarmersRegistry { public static final PlantableFarmer DEFAULT_FARMER = new PlantableFarmer(); public static void addFarmers() { addExtraUtilities(); addNatura(); addTiC(); addStillHungry(); addIC2(); addMFR(); addThaumcraft(); addFlowers(); addGrowableOres(); addImmersiveEngineering(); FarmersCommune.joinCommune(new StemFarmer(Blocks.reeds, new ItemStack(Items.reeds))); FarmersCommune.joinCommune(new StemFarmer(Blocks.cactus, new ItemStack(Blocks.cactus))); FarmersCommune.joinCommune(new TreeFarmer(Blocks.sapling, Blocks.log)); FarmersCommune.joinCommune(new TreeFarmer(Blocks.sapling, Blocks.log2)); FarmersCommune.joinCommune(new TreeFarmer(true,Blocks.red_mushroom, Blocks.red_mushroom_block)); FarmersCommune.joinCommune(new TreeFarmer(true,Blocks.brown_mushroom, Blocks.brown_mushroom_block)); //special case of plantables to get spacing correct FarmersCommune.joinCommune(new MelonFarmer(Blocks.melon_stem, Blocks.melon_block, new ItemStack(Items.melon_seeds))); FarmersCommune.joinCommune(new MelonFarmer(Blocks.pumpkin_stem, Blocks.pumpkin, new ItemStack(Items.pumpkin_seeds))); //'BlockNetherWart' is not an IGrowable FarmersCommune.joinCommune(new NetherWartFarmer()); //Cocoa is odd FarmersCommune.joinCommune(new CocoaFarmer()); //Handles all 'vanilla' style crops FarmersCommune.joinCommune(DEFAULT_FARMER); } public static void addPickable(String mod, String blockName, String itemName) { Block cropBlock = GameRegistry.findBlock(mod, blockName); if(cropBlock != null) { Item seedItem = GameRegistry.findItem(mod, itemName); if(seedItem != null) { FarmersCommune.joinCommune(new PickableFarmer(cropBlock, new ItemStack(seedItem))); } } } public static CustomSeedFarmer addSeed(String mod, String blockName, String itemName, Block... extraFarmland) { Block cropBlock = GameRegistry.findBlock(mod, blockName); if(cropBlock != null) { Item seedItem = GameRegistry.findItem(mod, itemName); if(seedItem != null) { CustomSeedFarmer farmer = new CustomSeedFarmer(cropBlock, new ItemStack(seedItem)); if(extraFarmland != null) { for (Block farmland : extraFarmland) { if(farmland != null) { farmer.addTilledBlock(farmland); } } } FarmersCommune.joinCommune(farmer); return farmer; } } return null; } private static void addTiC() { String mod = "TConstruct"; String blockName = "ore.berries.two"; Block cropBlock = GameRegistry.findBlock(mod, blockName); if(cropBlock != null) { Item seedItem = GameRegistry.findItem(mod, blockName); if(seedItem != null) { for (int i = 0; i < 2; i++) { PickableFarmer farmer = new NaturaBerryFarmer(cropBlock, i, 12 + i, new ItemStack(seedItem, 1, 8 + i)); farmer.setRequiresFarmland(false); FarmersCommune.joinCommune(farmer); } } } blockName = "ore.berries.one"; cropBlock = GameRegistry.findBlock(mod, blockName); if(cropBlock != null) { Item seedItem = GameRegistry.findItem(mod, blockName); if(seedItem != null) { for (int i = 0; i < 4; i++) { PickableFarmer farmer = new NaturaBerryFarmer(cropBlock, i, 12 + i, new ItemStack(seedItem, 1, 8 + i)); farmer.setRequiresFarmland(false); FarmersCommune.joinCommune(farmer); } } } } private static void addNatura() { String mod = "Natura"; String blockName = "N Crops"; Block cropBlock = GameRegistry.findBlock(mod, blockName); if(cropBlock != null) { DEFAULT_FARMER.addHarvestExlude(cropBlock); Item seedItem = GameRegistry.findItem(mod, "barley.seed"); if(seedItem != null) { //barley FarmersCommune.joinCommune(new CustomSeedFarmer(cropBlock, 3, new ItemStack(seedItem))); // cotton FarmersCommune.joinCommune(new PickableFarmer(cropBlock, 4, 8, new ItemStack(seedItem, 1, 1))); } } blockName = "BerryBush"; cropBlock = GameRegistry.findBlock(mod, blockName); if(cropBlock != null) { Item seedItem = GameRegistry.findItem(mod, blockName); if(seedItem != null) { for (int i = 0; i < 4; i++) { PickableFarmer farmer = new NaturaBerryFarmer(cropBlock, i, 12 + i, new ItemStack(seedItem, 1, 12 + i)); farmer.setRequiresFarmland(false); FarmersCommune.joinCommune(farmer); } } } blockName = "florasapling"; Block saplingBlock = GameRegistry.findBlock(mod, blockName); if(saplingBlock != null) { FarmersCommune.joinCommune(new TreeFarmer(saplingBlock, GameRegistry.findBlock(mod, "tree"), GameRegistry.findBlock(mod, "willow"), GameRegistry.findBlock(mod, "Dark Tree"))); } blockName = "Rare Sapling"; saplingBlock = GameRegistry.findBlock(mod, blockName); if(saplingBlock != null) { FarmersCommune.joinCommune(new TreeFarmer(saplingBlock, GameRegistry.findBlock(mod, "Rare Tree"))); } } private static void addThaumcraft() { String mod = "Thaumcraft"; String manaBean = "ItemManaBean"; String manaPod = "blockManaPod"; Block block = GameRegistry.findBlock(mod,manaPod); Item item = GameRegistry.findItem(mod,manaBean); if (Config.farmManaBeansEnabled && block!=null && item!=null) { FarmersCommune.joinCommune(new ManaBeanFarmer(block, new ItemStack(item))); } } private static void addMFR() { String mod = "MineFactoryReloaded"; String blockName = "rubberwood.sapling"; Block saplingBlock = GameRegistry.findBlock(mod, blockName); if(saplingBlock != null) { FarmersCommune.joinCommune(new TreeFarmer(saplingBlock, GameRegistry.findBlock(mod, "rubberwood.log"))); } } private static void addIC2() { RubberTreeFarmerIC2 rtf = new RubberTreeFarmerIC2(); if(rtf.isValid()) { FarmersCommune.joinCommune(rtf); } } private static void addStillHungry() { String mod = "stillhungry"; addPickable(mod, "grapeBlock", "StillHungry_grapeSeed"); } private static void addExtraUtilities() { String mod = "ExtraUtilities"; String name = "plant/ender_lilly"; CustomSeedFarmer farmer = addSeed(mod, name, name, Blocks.end_stone, GameRegistry.findBlock(mod, "decorativeBlock1")); if(farmer != null) { farmer.setIgnoreGroundCanSustainCheck(true); } } private static void addFlowers() { FarmersCommune.joinCommune(new FlowerPicker().add( GameRegistry.findBlock("minecraft", "yellow_flower"), GameRegistry.findBlock("minecraft", "red_flower"), GameRegistry.findBlock("BiomesOPlenty", "flowers"), GameRegistry.findBlock("BiomesOPlenty", "flowers2"), GameRegistry.findBlock("Botany", "flower"), GameRegistry.findBlock("Botania", "flower") ) ); } @SuppressWarnings("unchecked") private static void addGrowableOres() { String mod = "B0bGrowsOre"; if (!Loader.isModLoaded(mod)) { return; } Pattern[] growableOres = { Pattern.compile("(.+)Reed"), Pattern.compile("oreGrowable(.+)") }; Iterator<Block> blockIter = Block.blockRegistry.iterator(); while (blockIter.hasNext()) { Block block = blockIter.next(); String name = Block.blockRegistry.getNameForObject(block); if (name != null && name.startsWith(mod)) { for (Pattern blockPattern : growableOres) { if (blockPattern.matcher(name).find()) { FarmersCommune.joinCommune(new StemFarmer(block, new ItemStack(block))); } } } } } private static void addImmersiveEngineering() { Block hemp = GameRegistry.findBlock("ImmersiveEngineering", "hemp"); Item hempSeed = GameRegistry.findItem("ImmersiveEngineering", "hemp"); if (hemp != null && hempSeed != null) { FarmersCommune.joinCommune(new StemFarmer(hemp, new ItemStack(hempSeed))); } } private FarmersRegistry() { } }