/** * 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.vanilla.electromaster; import cn.academy.ability.api.Category; import cn.academy.ability.api.Skill; import cn.academy.core.AcademyCraft; import cn.academy.vanilla.ModuleVanilla; import cn.academy.vanilla.electromaster.skill.*; import cn.academy.vanilla.electromaster.skill.MagManip$; import cn.lambdalib.annoreg.core.Registrant; import cn.lambdalib.annoreg.mc.RegInitCallback; import net.minecraft.block.Block; import net.minecraft.block.BlockOre; import net.minecraft.block.BlockRedstoneOre; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; import java.util.HashSet; /** * @author WeAthFolD * */ @Registrant public class CatElectromaster extends Category { public static final Skill arcGen = ArcGen$.MODULE$, magManip = MagManip$.MODULE$, mineDetect = MineDetect$.MODULE$, railgun = Railgun$.MODULE$, magMovement = MagMovement$.MODULE$, currentCharging = CurrentCharging$.MODULE$, bodyIntensify = BodyIntensify$.MODULE$, thunderBolt = ThunderBolt$.MODULE$, thunderClap = ThunderClap$.MODULE$ /* ironSand = ??? */; public CatElectromaster() { super("electromaster"); colorStyle.setColor4i(20, 113, 208, 100); arcGen.setPosition(24, 46); currentCharging.setPosition(55, 18); bodyIntensify.setPosition(97.1, 15); mineDetect.setPosition(225, 12); magMovement.setPosition(137, 35); thunderBolt.setPosition(86, 67); railgun.setPosition(164, 59); thunderClap.setPosition(204, 80); magManip.setPosition(204, 33); addSkill(arcGen); addSkill(currentCharging); addSkill(magMovement); addSkill(magManip); addSkill(mineDetect); // TODO Finish the skill // addSkill(ironSand = new IronSand()); addSkill(bodyIntensify); addSkill(thunderBolt); addSkill(railgun); addSkill(thunderClap); ModuleVanilla.addGenericSkills(this); // Assign deps currentCharging.setParent(arcGen, 0.3f); magMovement.setParent(arcGen); magMovement.addSkillDep(currentCharging, 0.7f); magManip.setParent(magMovement, 0.5f); bodyIntensify.setParent(arcGen, 1f); bodyIntensify.addSkillDep(currentCharging, 1f); mineDetect.setParent(magManip, 1f); thunderBolt.setParent(arcGen); thunderBolt.addSkillDep(currentCharging, 0.7f); railgun.setParent(thunderBolt, 0.3f); railgun.addSkillDep(magManip, 1f); // ironSand.setParent(magManip, 1f); thunderClap.setParent(thunderBolt, 1f); } public static boolean isOreBlock(Block block) { if (block instanceof BlockOre || block instanceof BlockRedstoneOre) { return true; } if (Item.getItemFromBlock(block) == null) return false; ItemStack stack = new ItemStack(block); int[] val = OreDictionary.getOreIDs(stack); for (int i : val) { if (OreDictionary.getOreName(i).contains("ore")) return true; } return false; } private static HashSet<Block> normalMetalBlocks = new HashSet<>(); private static HashSet<Block> weakMetalBlocks = new HashSet<>(); private static HashSet<Class<? extends Entity>> metalEntities = new HashSet<>(); @RegInitCallback public static void init() { String[] defaultNBlocks = {"rail", "iron_bars", "iron_block", "iron_door", "activator_rail", "detector_rail", "golden_rail", "sticky_piston", "piston"}; String[] cfgNBlocks = AcademyCraft.config.getStringList("normalMetalBlocks", "ability", defaultNBlocks, "Supported Normal Metal Blocks of Electro Master. The block name and ore dictionary name can be used."); for (String block : cfgNBlocks) { if(Block.getBlockFromName(block) != null) { normalMetalBlocks.add(Block.getBlockFromName(block)); } else if(OreDictionary.doesOreNameExist(block)) { for(ItemStack is : OreDictionary.getOres(block)) { normalMetalBlocks.add(Block.getBlockFromItem(is.getItem())); } } else { AcademyCraft.log.error("The block " + block + "is not found!"); } } String[] defaultWBlocks = {"dispenser", "hopper", "iron_ore"}; String[] cfgWBlocks = AcademyCraft.config.getStringList("weakMetalBlocks", "ability", defaultWBlocks, "Supported Weak Metal Blocks of Electro Master. The block name and ore dictionary name can be used."); for (String block : cfgWBlocks) { if(Block.getBlockFromName(block) != null) { weakMetalBlocks.add(Block.getBlockFromName(block)); } else if(OreDictionary.doesOreNameExist(block)) { for(ItemStack is : OreDictionary.getOres(block)) { weakMetalBlocks.add(Block.getBlockFromItem(is.getItem())); } } else { AcademyCraft.log.error("The block " + block + "is not found!"); } } String[] defaultEntities = {"MinecartRideable", "MinecartChest", "MinecartFurnace", "MinecartTNT", "MinecartHopper", "MinecartSpawner", "MinecartCommandBlock", "academy-craft.ac_Entity_EntityMagHook", "VillagerGolem"}; String[] cfgEntities = AcademyCraft.config.getStringList("metalEntities", "ability", defaultEntities, "Supported Metal Entities of Electro Master. The entity name can be used."); for (String entity : cfgEntities) { Class<? extends Entity> c = (Class<? extends Entity>) EntityList.stringToClassMapping.get(entity); metalEntities.add(c); } } public static boolean isMetalBlock(Block block) { return isNormalMetalBlock(block) || isWeakMetalBlock(block); } public static boolean isNormalMetalBlock(Block block) { return normalMetalBlocks.contains(block); } public static boolean isWeakMetalBlock(Block block) { return weakMetalBlocks.contains(block); } public static boolean isEntityMetallic(Entity ent) { if(metalEntities.isEmpty()) return false; for (Class<? extends Entity> cl : metalEntities) { if (cl.isInstance(ent)) return true; } return false; } }