/*
* Copyright (c) CovertJaguar, 2014 http://railcraft.info
*
* This code is the property of CovertJaguar
* and may only be used with explicit written
* permission unless otherwise specified on the
* license page at http://railcraft.info/wiki/info:license.
*/
package mods.railcraft.common.plugins.forestry;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.Loader;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.common.event.FMLInterModComms;
import cpw.mods.fml.common.registry.GameRegistry;
import mods.railcraft.common.core.RailcraftConfig;
import mods.railcraft.common.fluids.Fluids;
import mods.railcraft.common.plugins.forge.CraftingPlugin;
import mods.railcraft.common.plugins.forge.CreativePlugin;
import mods.railcraft.common.plugins.forge.LocalizationPlugin;
import mods.railcraft.common.plugins.forge.RailcraftRegistry;
import mods.railcraft.common.util.inventory.InvTools;
import mods.railcraft.common.util.misc.Game;
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 net.minecraftforge.fluids.FluidStack;
/**
* @author CovertJaguar <http://www.railcraft.info>
*/
public class ForestryPlugin {
public static Item trackmanBackpackT1;
public static Item trackmanBackpackT2;
public static Item icemanBackpackT1;
public static Item icemanBackpackT2;
public static Item apothecariesBackpackT1;
public static Item apothecariesBackpackT2;
public static Boolean modLoaded = null;
private static ForestryPlugin instance;
public static ForestryPlugin instance() {
if (instance == null) {
if (isForestryInstalled())
instance = new ForestryPluginInstalled();
else
instance = new ForestryPlugin();
}
return instance;
}
public static boolean isForestryInstalled() {
if (modLoaded == null)
modLoaded = Loader.isModLoaded("Forestry");
return modLoaded;
}
public static ItemStack getItem(String tag) {
if (!isForestryInstalled())
return null;
Item item = GameRegistry.findItem("Forestry", tag);
if (item == null)
return null;
return new ItemStack(item, 1);
}
public static void addBackpackItem(String pack, ItemStack stack) {
if (stack == null)
return;
addBackpackItem(pack, stack.getItem(), stack.getItemDamage());
}
public static void addBackpackItem(String pack, Item item) {
sendBackpackMessage(String.format("%s@%s:*", pack, GameRegistry.findUniqueIdentifierFor(item)));
}
public static void addBackpackItem(String pack, Item item, int damage) {
sendBackpackMessage(String.format("%s@%s:%d", pack, GameRegistry.findUniqueIdentifierFor(item), damage));
}
public static void addBackpackItem(String pack, Block block) {
sendBackpackMessage(String.format("%s@%s:*", pack, GameRegistry.findUniqueIdentifierFor(block)));
}
public static void addBackpackItem(String pack, Block block, int meta) {
sendBackpackMessage(String.format("%s@%s:%d", pack, GameRegistry.findUniqueIdentifierFor(block), meta));
}
private static void sendBackpackMessage(String message) {
if (message.contains("null"))
throw new IllegalArgumentException("Attempting to register broken item with Forestry Backpack!");
// Game.logDebug(Level.FINEST, "Sending IMC to Forestry add-backpack-items: {0}", message);
FMLInterModComms.sendMessage("Forestry", "add-backpack-items", message);
}
public void registerBackpacks() {
}
public void setupBackpackContents() {
}
public void addCarpenterRecipe(String recipeTag, int packagingTime, FluidStack liquid, ItemStack box, ItemStack product, Object... materials) {
}
private static class ForestryPluginInstalled extends ForestryPlugin {
@Override
@Optional.Method(modid = "Forestry")
public void registerBackpacks() {
try {
if (forestry.api.storage.BackpackManager.backpackInterface == null)
return;
String tag = "railcraft.backpack.trackman.t1";
if (RailcraftConfig.isItemEnabled(tag)) {
trackmanBackpackT1 = registerBackpack(TrackmanBackpack.getInstance(), forestry.api.storage.EnumBackpackType.T1, tag);
ItemStack output = new ItemStack(trackmanBackpackT1);
addBackpackTooltip(output);
CraftingPlugin.addShapedRecipe(output,
"X#X",
"VYV",
"X#X",
'#', Blocks.wool,
'V', new ItemStack(Blocks.rail),
'X', Items.string,
'Y', "chestWood");
}
tag = "railcraft.backpack.trackman.t2";
if (RailcraftConfig.isItemEnabled(tag)) {
trackmanBackpackT2 = registerBackpack(TrackmanBackpack.getInstance(), forestry.api.storage.EnumBackpackType.T2, tag);
ItemStack silk = getItem("craftingMaterial");
if (silk != null) {
silk.setItemDamage(3);
ItemStack output = new ItemStack(trackmanBackpackT2);
addBackpackTooltip(output);
forestry.api.recipes.RecipeManagers.carpenterManager.addRecipe(200, Fluids.WATER.get(1000), null, output, new Object[]{
"WXW",
"WTW",
"WWW",
'X', "gemDiamond",
'W', silk,
'T', trackmanBackpackT1});
}
}
tag = "railcraft.backpack.iceman.t1";
if (RailcraftConfig.isItemEnabled(tag)) {
icemanBackpackT1 = registerBackpack(IcemanBackpack.getInstance(), forestry.api.storage.EnumBackpackType.T1, tag);
ItemStack output = new ItemStack(icemanBackpackT1);
addBackpackTooltip(output);
CraftingPlugin.addShapedRecipe(output,
"X#X",
"VYV",
"X#X",
'#', Blocks.wool,
'V', new ItemStack(Blocks.snow),
'X', Items.string,
'Y', "chestWood");
}
tag = "railcraft.backpack.iceman.t2";
if (RailcraftConfig.isItemEnabled(tag)) {
icemanBackpackT2 = registerBackpack(IcemanBackpack.getInstance(), forestry.api.storage.EnumBackpackType.T2, tag);
ItemStack silk = getItem("craftingMaterial");
if (silk != null) {
silk.setItemDamage(3);
ItemStack output = new ItemStack(icemanBackpackT2);
addBackpackTooltip(output);
forestry.api.recipes.RecipeManagers.carpenterManager.addRecipe(200, Fluids.WATER.get(1000), null, output, new Object[]{
"WXW",
"WTW",
"WWW",
'X', "gemDiamond",
'W', silk,
'T', icemanBackpackT1});
}
}
if (icemanBackpackT1 != null || icemanBackpackT2 != null)
FMLCommonHandler.instance().bus().register(new IceManTickHandler());
tag = "railcraft.backpack.apothecary.t1";
if (RailcraftConfig.isItemEnabled(tag)) {
apothecariesBackpackT1 = registerBackpack(ApothecariesBackpack.getInstance(), forestry.api.storage.EnumBackpackType.T1, tag);
ItemStack output = new ItemStack(apothecariesBackpackT1);
addBackpackTooltip(output);
// if (!ThaumcraftPlugin.isModInstalled()) {
CraftingPlugin.addShapedRecipe(output,
"X#X",
"VYV",
"X#X",
'#', Blocks.wool,
'V', new ItemStack(Items.potionitem, 1, 8197),
'X', Items.string,
'Y', "chestWood");
CraftingPlugin.addShapedRecipe(output,
"X#X",
"VYV",
"X#X",
'#', Blocks.wool,
'V', new ItemStack(Items.potionitem, 1, 8261),
'X', Items.string,
'Y', "chestWood");
CraftingPlugin.addShapedRecipe(output,
"X#X",
"VYV",
"X#X",
'#', Blocks.wool,
'V', new ItemStack(Items.potionitem, 1, 8229),
'X', Items.string,
'Y', "chestWood");
// } else
// ApothecariesBackpack.registerThaumcraftResearch();
}
tag = "railcraft.backpack.apothecary.t2";
if (RailcraftConfig.isItemEnabled(tag)) {
apothecariesBackpackT2 = registerBackpack(ApothecariesBackpack.getInstance(), forestry.api.storage.EnumBackpackType.T2, tag);
ItemStack silk = getItem("craftingMaterial");
if (silk != null) {
silk.setItemDamage(3);
ItemStack output = new ItemStack(apothecariesBackpackT2);
addBackpackTooltip(output);
forestry.api.recipes.RecipeManagers.carpenterManager.addRecipe(200, Fluids.WATER.get(1000), null, output, new Object[]{
"WXW",
"WTW",
"WWW",
'X', "gemDiamond",
'W', silk,
'T', apothecariesBackpackT1});
}
}
} catch (Throwable error) {
Game.logErrorAPI("Forestry", error, forestry.api.storage.BackpackManager.class);
}
}
@Optional.Method(modid = "Forestry")
private Item registerBackpack(BaseBackpack backpack, forestry.api.storage.EnumBackpackType type, String tag) {
Item item = forestry.api.storage.BackpackManager.backpackInterface.addBackpack(backpack, type).setCreativeTab(CreativePlugin.RAILCRAFT_TAB).setUnlocalizedName(tag);
RailcraftRegistry.registerInit(item);
return item;
}
@Optional.Method(modid = "Forestry")
private void addBackpackTooltip(ItemStack stack) {
InvTools.addItemToolTip(stack, "\u00a77\u00a7o" + LocalizationPlugin.translate("item.railcraft.backpack.tip"));
}
@Override
@Optional.Method(modid = "Forestry")
public void setupBackpackContents() {
try {
if (forestry.api.storage.BackpackManager.backpackInterface == null)
return;
TrackmanBackpack.getInstance().setup();
IcemanBackpack.getInstance().setup();
ApothecariesBackpack.getInstance().setup();
} catch (Throwable error) {
Game.logErrorAPI("Forestry", error, forestry.api.storage.BackpackManager.class);
}
}
@Override
@Optional.Method(modid = "Forestry")
public void addCarpenterRecipe(String recipeTag, int packagingTime, FluidStack liquid, ItemStack box, ItemStack product, Object... materials) {
try {
if (forestry.api.recipes.RecipeManagers.carpenterManager != null && RailcraftConfig.getRecipeConfig("forestry.carpenter." + recipeTag))
forestry.api.recipes.RecipeManagers.carpenterManager.addRecipe(packagingTime, liquid, null, product, materials);
} catch (Throwable error) {
Game.logErrorAPI("Forestry", error, forestry.api.recipes.RecipeManagers.class);
}
}
}
}