package mekanism.common.integration;
import ic2.api.recipe.IMachineRecipeManager.RecipeIoContainer;
import ic2.api.recipe.RecipeInputItemStack;
import ic2.api.recipe.RecipeInputOreDict;
import ic2.api.recipe.Recipes;
import java.util.List;
import li.cil.oc.api.Driver;
import mekanism.api.transmitters.TransmissionType;
import mekanism.common.Mekanism;
import mekanism.common.MekanismItems;
import mekanism.common.Resource;
import mekanism.common.multipart.TransmitterType;
import mekanism.common.recipe.RecipeHandler;
import mekanism.common.util.MekanismUtils;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.fml.common.Loader;
import net.minecraftforge.fml.common.Optional.Method;
import net.minecraftforge.fml.common.event.FMLInterModComms;
import dan200.computercraft.api.ComputerCraftAPI;
/**
* Hooks for Mekanism. Use to grab items or blocks out of different mods.
* @author AidanBrady
*
*/
public final class MekanismHooks
{
public boolean IC2Loaded = false;
public boolean RailcraftLoaded = false;
public boolean CoFHCoreLoaded = false;
public boolean TELoaded = false;
public boolean CCLoaded = false;
public boolean AE2Loaded = false;
public boolean TeslaLoaded = false;
public boolean MetallurgyCoreLoaded = false;
public boolean MetallurgyBaseLoaded = false;
public void hook()
{
if(Loader.isModLoaded("CoFHCore")) CoFHCoreLoaded = true;
if(Loader.isModLoaded("IC2")) IC2Loaded = true;
if(Loader.isModLoaded("Railcraft")) RailcraftLoaded = true;
if(Loader.isModLoaded("ThermalExpansion")) TELoaded = true;
if(Loader.isModLoaded("ComputerCraft")) CCLoaded = true;
if(Loader.isModLoaded("appliedenergistics2")) AE2Loaded = true;
if(Loader.isModLoaded("tesla")) TeslaLoaded = true;
if(Loader.isModLoaded("Metallurgy3Core"))
{
MetallurgyCoreLoaded = true;
if(Loader.isModLoaded("Metallurgy3Base")) MetallurgyBaseLoaded = true;
}
if(IC2Loaded)
{
hookIC2Recipes();
Mekanism.logger.info("Hooked into IC2 successfully.");
}
if(CCLoaded)
{
loadCCPeripheralProviders();
}
}
@Method(modid = "IC2")
public void hookIC2Recipes()
{
for(RecipeIoContainer entry : Recipes.macerator.getRecipes())
{
if(!entry.input.getInputs().isEmpty())
{
List<String> names = MekanismUtils.getOreDictName(entry.input.getInputs().get(0));
for(String name : names)
{
boolean did = false;
if(name.startsWith("ingot"))
{
RecipeHandler.addCrusherRecipe(entry.input.getInputs().get(0), entry.output.items.get(0));
did = true;
}
if(did)
{
break;
}
}
}
}
try {
Recipes.macerator.addRecipe(new RecipeInputOreDict("oreOsmium"), null, false, new ItemStack(MekanismItems.Dust, 2, Resource.OSMIUM.ordinal()));
} catch(Exception e) {}
try {
Recipes.macerator.addRecipe(new RecipeInputOreDict("ingotOsmium"), null, false, new ItemStack(MekanismItems.Dust, 1, Resource.OSMIUM.ordinal()));
Recipes.macerator.addRecipe(new RecipeInputOreDict("ingotRefinedObsidian"), null, false, new ItemStack(MekanismItems.OtherDust, 1, 5));
Recipes.macerator.addRecipe(new RecipeInputOreDict("ingotRefinedGlowstone"), null, false, new ItemStack(Items.GLOWSTONE_DUST));
Recipes.macerator.addRecipe(new RecipeInputOreDict("ingotSteel"), null, false, new ItemStack(MekanismItems.OtherDust, 1, 1));
} catch(Exception e) {}
try {
for(Resource resource : Resource.values())
{
Recipes.macerator.addRecipe(new RecipeInputOreDict("clump" + resource.getName()), null, false, new ItemStack(MekanismItems.DirtyDust, 1, resource.ordinal()));
}
} catch(Exception e) {}
NBTTagCompound tag = new NBTTagCompound();
tag.setInteger("amplification", 50000);
Recipes.matterAmplifier.addRecipe(new RecipeInputItemStack(new ItemStack(MekanismItems.EnrichedAlloy), 1), tag, false);
}
@Method(modid = "ComputerCraft")
public void loadCCPeripheralProviders()
{
try {
ComputerCraftAPI.registerPeripheralProvider(new CCPeripheral.CCPeripheralProvider());
} catch(Exception e) {}
}
@Method(modid = "OpenComputers")
public void loadOCDrivers()
{
try {
Driver.add(new OCDriver());
} catch(Exception e) {}
}
public void addPulverizerRecipe(ItemStack input, ItemStack output, int energy)
{
NBTTagCompound nbtTags = new NBTTagCompound();
nbtTags.setInteger("energy", energy);
nbtTags.setTag("input", input.writeToNBT(new NBTTagCompound()));
nbtTags.setTag("primaryOutput", output.writeToNBT(new NBTTagCompound()));
FMLInterModComms.sendMessage("mekanism", "PulverizerRecipe", nbtTags);
}
@Method(modid = "appliedenergistics2")
public void registerAE2P2P()
{
String energyP2P = "add-p2p-attunement-rf-power";
if(IC2Loaded)
{
energyP2P = "add-p2p-attunement-ic2-power";
}
for(TransmitterType type : TransmitterType.values())
{
if(type.getTransmission().equals(TransmissionType.ITEM))
{
FMLInterModComms.sendMessage("appliedenergistics2","add-p2p-attunement-item",new ItemStack(MekanismItems.PartTransmitter, 1, type.ordinal()));
continue;
}
if(type.getTransmission().equals(TransmissionType.FLUID))
{
FMLInterModComms.sendMessage("appliedenergistics2","add-p2p-attunement-fluid",new ItemStack(MekanismItems.PartTransmitter, 1, type.ordinal()));
continue;
}
if(type.getTransmission().equals(TransmissionType.ENERGY))
{
FMLInterModComms.sendMessage("appliedenergistics2",energyP2P,new ItemStack(MekanismItems.PartTransmitter, 1, type.ordinal()));
continue;
}
}
}
}