/**
* Copyright (c) Lambda Innovation, 2013-2016
* This file is part of the AcademyCraft mod.
* https://github.com/LambdaInnovation/AcademyCraft
* Licensed under GPLv3, see project root for more information.
*/
package cn.academy.ability;
import cn.academy.ability.api.Category;
import cn.academy.ability.api.CategoryManager;
import cn.academy.ability.block.AbilityInterferer;
import cn.academy.ability.block.BlockDeveloper;
import cn.academy.ability.develop.DeveloperType;
import cn.academy.ability.item.ItemDeveloper;
import cn.academy.ability.item.ItemInductionFactor;
import cn.academy.core.item.ACItem;
import cn.academy.core.registry.ACRecipeNamesRegistration.RegACRecipeNames;
import cn.lambdalib.annoreg.core.Registrant;
import cn.lambdalib.annoreg.mc.RegBlock;
import cn.lambdalib.annoreg.mc.RegEventHandler;
import cn.lambdalib.annoreg.mc.RegEventHandler.Bus;
import cn.lambdalib.annoreg.mc.RegInitCallback;
import cn.lambdalib.annoreg.mc.RegItem;
import cn.lambdalib.crafting.CustomMappingHelper.RecipeName;
import cn.lambdalib.multiblock.ItemBlockMulti;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.MovingObjectPosition.MovingObjectType;
import net.minecraft.util.StatCollector;
import net.minecraft.util.WeightedRandomChestContent;
import net.minecraftforge.client.event.DrawBlockHighlightEvent;
import net.minecraftforge.common.ChestGenHooks;
import java.util.Arrays;
import java.util.List;
import static net.minecraftforge.common.ChestGenHooks.*;
/**
* The ability module init class.
*
* @author WeAthFolD
*/
@Registrant
@RegACRecipeNames
public class ModuleAbility {
@RegItem
@RegItem.HasRender
@RecipeName("dev_portable")
public static ItemDeveloper developerPortable;
@RegBlock(item = ItemBlockMulti.class)
@RecipeName("dev_normal")
public static BlockDeveloper developerNormal = new BlockDeveloper(DeveloperType.NORMAL);
@RegBlock(item = ItemBlockMulti.class)
@RecipeName("dev_advanced")
public static BlockDeveloper developerAdvanced = new BlockDeveloper(DeveloperType.ADVANCED);
@RegBlock
public static AbilityInterferer abilityInterferer;
@RegItem
@RecipeName("magnetic_coil")
public static ACItem magneticCoil = new ACItem("magnetic_coil") {
{
setMaxStackSize(1);
}
@Override
@SideOnly(Side.CLIENT)
@SuppressWarnings("unchecked")
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean wtf) {
list.addAll(Arrays.asList(StatCollector.translateToLocal("item.ac_magnetic_coil.desc").split("<br>")));
}
};
@RegItem
@RecipeName("induction_factor")
public static ItemInductionFactor inductionFactor;
@RegInitCallback
private static void __init() {
String[] factorAppearance = { MINESHAFT_CORRIDOR, PYRAMID_DESERT_CHEST, PYRAMID_JUNGLE_CHEST, STRONGHOLD_LIBRARY,
DUNGEON_CHEST };
// TODO test generation density
for (String s : factorAppearance) {
for (Category c : CategoryManager.INSTANCE.getCategories()) {
ItemStack stack = inductionFactor.create(c);
ChestGenHooks.addItem(s, new WeightedRandomChestContent(stack, 1, 1, 4));
}
}
}
@Registrant
public enum Events {
@RegEventHandler(Bus.Forge)
instance;
@SideOnly(Side.CLIENT)
@SubscribeEvent
public void onDrawBlockHighlight(DrawBlockHighlightEvent event) {
if (event.target != null && event.target.typeOfHit == MovingObjectType.BLOCK) {
if (event.player.worldObj.getBlock(event.target.blockX, event.target.blockY,
event.target.blockZ) instanceof BlockDeveloper)
event.setCanceled(true);
}
}
}
}