package buildcraft.robotics.boards; import java.lang.reflect.Constructor; import java.util.HashMap; import java.util.List; import java.util.Map; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import buildcraft.api.boards.RedstoneBoardRobot; import buildcraft.api.boards.RedstoneBoardRobotNBT; import buildcraft.api.robots.EntityRobotBase; import buildcraft.core.DefaultProps; import buildcraft.core.lib.utils.StringUtils; public class BCBoardNBT extends RedstoneBoardRobotNBT { public static final Map<String, BCBoardNBT> REGISTRY = new HashMap<String, BCBoardNBT>(); private final ResourceLocation texture; private final String id, upperName, boardType; private final Constructor<? extends RedstoneBoardRobot> boardInit; @SideOnly(Side.CLIENT) private IIcon icon; public BCBoardNBT(String id, String name, Class<? extends RedstoneBoardRobot> board, String boardType) { this.id = id; this.boardType = boardType; this.upperName = name.substring(0, 1).toUpperCase() + name.substring(1); this.texture = new ResourceLocation( DefaultProps.TEXTURE_PATH_ROBOTS + "/robot_" + name + ".png"); Constructor<? extends RedstoneBoardRobot> boardInitLocal; try { boardInitLocal = board.getConstructor(EntityRobotBase.class); } catch (Exception e) { e.printStackTrace(); boardInitLocal = null; } this.boardInit = boardInitLocal; REGISTRY.put(name, this); } @Override public String getID() { return id; } @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean advanced) { list.add(EnumChatFormatting.BOLD + StringUtils.localize("buildcraft.boardRobot" + upperName)); list.add(StringUtils.localize("buildcraft.boardRobot" + upperName + ".desc")); } @Override public RedstoneBoardRobot create(EntityRobotBase robot) { try { return boardInit.newInstance(robot); } catch (Exception e) { e.printStackTrace(); return null; } } @Override @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister iconRegister) { icon = iconRegister.registerIcon("buildcraftrobotics:board/" + boardType); } @Override @SideOnly(Side.CLIENT) public IIcon getIcon(NBTTagCompound nbt) { return icon; } @Override public ResourceLocation getRobotTexture() { return texture; } }