@Override
  public ItemStack onFocusRightClick(
      ItemStack itemstack, World world, EntityPlayer player, MovingObjectPosition mop) {
    player.swingItem();
    if (mop != null
        && ThaumcraftApiHelper.consumeVisFromWand(itemstack, player, visCost.copy(), true, false)) {
      int x = mop.blockX;
      int y = mop.blockY;
      int z = mop.blockZ;

      switch (mop.sideHit) {
        case (0):
          {
            y--;
            break;
          }
        case (1):
          {
            y++;
            break;
          }
        case (2):
          {
            z--;
            break;
          }
        case (3):
          {
            z++;
            break;
          }
        case (4):
          {
            x--;
            break;
          }
        case (5):
          {
            x++;
            break;
          }
      }

      if (world.getBlock(x, y, z).isReplaceable(world, x, y, z) || world.isAirBlock(x, y, z)) {
        ItemStack focusStack = ((ItemWandCasting) itemstack.getItem()).getFocusItem(itemstack);

        world.setBlock(x, y, z, TCBlocks.nitorColour);
        TileColouredNitor te = (TileColouredNitor) world.getTileEntity(x, y, z);
        te.setColour(getColour(focusStack));
        world.playSoundEffect(
            mop.blockX + 0.5D, mop.blockY + 0.5D, mop.blockZ + 0.5D, "thaumcraft:zap", 0.25F, 1.0F);
      }
    }

    return itemstack;
  }
  private static void setupItemAspects() {
    ItemStack item;
    AspectList list;

    ThaumcraftApi.registerObjectTag(
        new ItemStack(Items.clock),
        new AspectList(new ItemStack(Items.clock)).add((Aspect) aspectTime, 4));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(Items.repeater),
        new AspectList(new ItemStack(Items.repeater)).add((Aspect) aspectTime, 2));

    list = new AspectList(new ItemStack(Blocks.log));
    for (int i = 1; i <= 8; i++) {
      item = ItemInterface.getItemStack("log" + i);
      if (item != null) {
        ThaumcraftApi.registerObjectTag(item, list);
      }
    }

    list = new AspectList(new ItemStack(Blocks.planks));
    for (int i = 1; i <= 2; i++) {
      item = ItemInterface.getItemStack("planks" + i);
      if (item != null) {
        ThaumcraftApi.registerObjectTag(item, list);
      }
    }

    list = new AspectList().add(Aspect.ORDER, 5).add(Aspect.ARMOR, 2).add(Aspect.BEAST, 1);
    item = new ItemStack(Config.fHiveBlock);
    ThaumcraftApi.registerObjectTag(item, list);
    ThaumcraftApi.registerObjectTag(new ItemStack(Config.hive), list);

    list = new AspectList().add(Aspect.LIGHT, 1);
    item = new ItemStack(BlockInterface.getBlock(ForestryHelper.Name, "candle"));
    ThaumcraftApi.registerObjectTag(item, new int[] {item.getItemDamage()}, list);

    list = new AspectList().add(Aspect.DARKNESS, 1);
    item = new ItemStack(BlockInterface.getBlock(ForestryHelper.Name, "stump"));
    ThaumcraftApi.registerObjectTag(item, new int[] {item.getItemDamage()}, list);

    list = new AspectList(new ItemStack(Blocks.glass)).add(Aspect.SENSES, 1);
    item = new ItemStack(BlockInterface.getBlock(ForestryHelper.Name, "glass"));
    ThaumcraftApi.registerObjectTag(item, list);

    list = new AspectList().add(Aspect.EARTH, 2).add(Aspect.WATER, 2);
    item = new ItemStack(BlockInterface.getBlock(ForestryHelper.Name, "soil"));
    ThaumcraftApi.registerObjectTag(item, new int[] {1}, list);

    list = new AspectList(new ItemStack(Blocks.leaves));
    item = ItemInterface.getItemStack(ForestryHelper.Name, "candle");
    ThaumcraftApi.registerObjectTag(item, new int[] {item.getItemDamage()}, list);

    list = new AspectList(new ItemStack(Blocks.sapling));
    item = ItemInterface.getItemStack(ForestryHelper.Name, "candle");
    ThaumcraftApi.registerObjectTag(item, list);

    list = new AspectList() /* .add(Aspect.SEED, 1) */.add(Aspect.PLANT, 1);
    item = ItemInterface.getItemStack(ForestryHelper.Name, "candle");
    ThaumcraftApi.registerObjectTag(item, list);

    list = new AspectList().add(Aspect.CRYSTAL, 1).add(Aspect.EARTH, 2);
    item = ItemInterface.getItemStack(ForestryHelper.Name, "candle");
    ThaumcraftApi.registerObjectTag(
        new ItemStack(item.getItem(), 1, ForestryHelper.BlockResource.APATITE.ordinal()),
        list.copy());
    item = ItemInterface.getItemStack(ForestryHelper.Name, "apatite");
    ThaumcraftApi.registerObjectTag(
        new ItemStack(item.getItem(), 1, item.getItemDamage()), list.copy().add(Aspect.CRYSTAL, 2));

    list = new AspectList().add(Aspect.MOTION, 2).add(Aspect.FLIGHT, 1);
    item = ItemInterface.getItemStack("beeDroneGE");
    ThaumcraftApi.registerObjectTag(item, list);
    list = list.copy().add(Aspect.GREED, 2).add(Aspect.EXCHANGE, 1);
    item = ItemInterface.getItemStack("beePrincessGE");
    ThaumcraftApi.registerObjectTag(item, list);
    item = ItemInterface.getItemStack("beeQueenGE");
    ThaumcraftApi.registerObjectTag(item, list);
    list = new AspectList().add(Aspect.LIFE, 2).add(Aspect.EXCHANGE, 5);
    item = ItemInterface.getItemStack("beeLarvaeGE");
    ThaumcraftApi.registerObjectTag(item, list);

    item = ItemInterface.getItemStack("scoop");
    list = new AspectList(new ItemStack(item.getItem(), 1, 0)).add(Aspect.TOOL, 2);
    ThaumcraftApi.registerComplexObjectTag(item, list);

    item = ItemInterface.getItemStack("grafter");
    list =
        new AspectList(new ItemStack(item.getItem(), 1, item.getItemDamage())).add(Aspect.TOOL, 2);
    ThaumcraftApi.registerComplexObjectTag(item, list);

    item = ItemInterface.getItemStack("grafterProven");
    list = list.copy().add(Aspect.TOOL, 2).add(Aspect.EXCHANGE, 3);
    ThaumcraftApi.registerObjectTag(new ItemStack(item.getItem(), 1, item.getItemDamage()), list);

    list = new AspectList().add(Aspect.TRAP, 2);
    ThaumcraftApi.registerObjectTag("beeComb", list);

    list = new AspectList().add(Aspect.SLIME, 1);
    item = ItemInterface.getItemStack("propolis");
    ThaumcraftApi.registerObjectTag(
        new ItemStack(item.getItem(), 1, ForestryHelper.Propolis.NORMAL.ordinal()), list);
    ThaumcraftApi.registerObjectTag(
        new ItemStack(item.getItem(), 1, ForestryHelper.Propolis.SILKY.ordinal()),
        list.copy().add(Aspect.SLIME, 2));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(item.getItem(), 1, ForestryHelper.Propolis.PULSATING.ordinal()),
        list.copy().add(Aspect.ELDRITCH, 2));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(Config.propolis, 1, PropolisType.UNSTABLE.ordinal()),
        list.copy().add(Aspect.ENTROPY, 1).add(Aspect.EXCHANGE, 1));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(Config.propolis, 1, PropolisType.AIR.ordinal()),
        list.copy().add(Aspect.AIR, 2));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(Config.propolis, 1, PropolisType.WATER.ordinal()),
        list.copy().add(Aspect.WATER, 2));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(Config.propolis, 1, PropolisType.FIRE.ordinal()),
        list.copy().add(Aspect.FIRE, 2));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(Config.propolis, 1, PropolisType.EARTH.ordinal()),
        list.copy().add(Aspect.EARTH, 2));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(Config.propolis, 1, PropolisType.ORDER.ordinal()),
        list.copy().add(Aspect.ORDER, 2));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(Config.propolis, 1, PropolisType.CHAOS.ordinal()),
        list.copy().add(Aspect.ENTROPY, 2));

    list = new AspectList().add(Aspect.PLANT, 2);
    item = ItemInterface.getItemStack("pollen");
    ThaumcraftApi.registerObjectTag(
        new ItemStack(item.getItem(), 1, ForestryHelper.Pollen.NORMAL.ordinal()), list);
    ThaumcraftApi.registerObjectTag(
        new ItemStack(item.getItem(), 1, ForestryHelper.Pollen.CRYSTALLINE.ordinal()), list.copy());
    ThaumcraftApi.registerObjectTag(
        new ItemStack(Config.pollen, 1, PollenType.UNUSUAL.ordinal()),
        list.copy().add(Aspect.MAGIC, 2));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(Config.pollen, 1, PollenType.PHASED.ordinal()),
        list.copy().add((Aspect) aspectTime, 2));

    list = new AspectList().add(Aspect.ORDER, 1);
    item = ItemInterface.getItemStack("beeswax");
    ThaumcraftApi.registerObjectTag(
        item, new int[] {item.getItemDamage()}, list.copy().add(Aspect.ORDER, 2));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(Config.wax, 1, WaxType.MAGIC.ordinal()), list.copy().add(Aspect.MAGIC, 2));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(Config.wax, 1, WaxType.SOUL.ordinal()), list.copy().add(Aspect.SOUL, 2));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(Config.wax, 1, WaxType.AMNESIC.ordinal()), list.copy().add(Aspect.MIND, 2));

    list = new AspectList().add(Aspect.EXCHANGE, 2).add(Aspect.LIFE, 2);
    item = ItemInterface.getItemStack("honeyDrop");
    ThaumcraftApi.registerObjectTag(item, new int[] {item.getItemDamage()}, list);

    list = new AspectList().add(Aspect.LIFE, 2).add(Aspect.ENERGY, 2);
    item = ItemInterface.getItemStack("honeydew");
    ThaumcraftApi.registerObjectTag(item, new int[] {item.getItemDamage()}, list);

    list = new AspectList().add(Aspect.GREED, 1).add(Aspect.LIFE, 4);
    item = ItemInterface.getItemStack("royalJelly");
    ThaumcraftApi.registerObjectTag(item, new int[] {item.getItemDamage()}, list);

    list = new AspectList().add(Aspect.FIRE, 1).add(Aspect.TRAP, 2);
    item = ItemInterface.getItemStack("phosphor");
    ThaumcraftApi.registerObjectTag(item, new int[] {item.getItemDamage()}, list);

    item = Config.miscResources.getStackForType(ResourceType.ESSENCE_FALSE_LIFE);
    ThaumcraftApi.registerObjectTag(
        item, new int[] {item.getItemDamage()}, new AspectList().add(Aspect.LIFE, 6));

    item = Config.miscResources.getStackForType(ResourceType.ESSENCE_SHALLOW_GRAVE);
    ThaumcraftApi.registerObjectTag(
        item, new int[] {item.getItemDamage()}, new AspectList().add(Aspect.DEATH, 6));

    item = Config.miscResources.getStackForType(ResourceType.ESSENCE_EVERLASTING_DURABILITY);
    ThaumcraftApi.registerObjectTag(
        item, new int[] {item.getItemDamage()}, new AspectList().add(Aspect.ARMOR, 6));

    item = Config.miscResources.getStackForType(ResourceType.ESSENCE_LOST_TIME);
    ThaumcraftApi.registerObjectTag(
        item,
        new int[] {item.getItemDamage()},
        new AspectList().add(Aspect.VOID, 6).add((Aspect) aspectTime, 8));
  }
  @Override
  public AspectList getVisCost(ItemStack focusStack) {

    return visCost.copy();
  }
  private static void registerItemAspects() {
    AspectList oldAspects =
        ThaumcraftCraftingManager.getObjectTags(new ItemStack(RegisteredBlocks.blockStoneMachine));

    ThaumcraftApi.registerObjectTag(
        new ItemStack(Item.getItemFromBlock(RegisteredBlocks.blockStoneMachine)),
        new int[] {11, 15},
        new AspectList());
    ThaumcraftApi.registerObjectTag(
        new ItemStack(Item.getItemFromBlock(RegisteredBlocks.blockStoneMachine)),
        new int[] {0},
        oldAspects);

    AspectList pylon =
        new AspectList()
            .add(Aspect.WATER, 10)
            .add(Aspect.MAGIC, 12)
            .add(Aspect.VOID, 4)
            .add(Aspect.MECHANISM, 4);
    ThaumcraftApi.registerObjectTag(
        new ItemStack(Item.getItemFromBlock(RegisteredBlocks.blockAuraPylon)),
        new int[] {0},
        pylon);
    pylon =
        new AspectList()
            .add(Aspect.FIRE, 10)
            .add(Aspect.AURA, 12)
            .add(Aspect.MAGIC, 8)
            .add(Aspect.LIGHT, 4)
            .add(Aspect.MECHANISM, 4);
    ThaumcraftApi.registerObjectTag(
        new ItemStack(Item.getItemFromBlock(RegisteredBlocks.blockAuraPylon)),
        new int[] {1},
        pylon);

    AspectList packager =
        new AspectList()
            .add(Aspect.TREE, 10)
            .add(Aspect.MECHANISM, 8)
            .add(Aspect.CRAFT, 8)
            .add(Aspect.AURA, 12);
    ThaumcraftApi.registerObjectTag(
        new ItemStack(Item.getItemFromBlock(RegisteredBlocks.blockStoneMachine)),
        new int[] {4},
        packager);

    AspectList aspect = new AspectList();
    aspect.add(Aspect.MAGIC, 6).add(Aspect.AURA, 12).add(Aspect.ELDRITCH, 4).add(Aspect.VOID, 10);
    ThaumcraftApi.registerObjectTag(
        new ItemStack(RegisteredItems.itemAuraCore), new int[] {0}, aspect.copy());
    ThaumcraftApi.registerObjectTag(
        new ItemStack(RegisteredItems.itemAuraCore),
        new int[] {1},
        aspect.copy().add(Aspect.AIR, 26));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(RegisteredItems.itemAuraCore),
        new int[] {2},
        aspect.copy().add(Aspect.FIRE, 26));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(RegisteredItems.itemAuraCore),
        new int[] {3},
        aspect.copy().add(Aspect.WATER, 26));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(RegisteredItems.itemAuraCore),
        new int[] {4},
        aspect.copy().add(Aspect.EARTH, 26));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(RegisteredItems.itemAuraCore),
        new int[] {5},
        aspect.copy().add(Aspect.ORDER, 26));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(RegisteredItems.itemAuraCore),
        new int[] {6},
        aspect.copy().add(Aspect.ENTROPY, 26));

    ThaumcraftApi.registerObjectTag(
        new ItemStack(RegisteredItems.itemPackage, 1, 0),
        new AspectList().add(Aspect.CLOTH, 2).add(Aspect.BEAST, 2).add(Aspect.ARMOR, 1));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(RegisteredItems.itemPackage, 1, 1), new AspectList().add(Aspect.CLOTH, 4));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(RegisteredItems.itemFakeLootbag, 1, 0),
        new AspectList().add(Aspect.CLOTH, 2).add(Aspect.BEAST, 2).add(Aspect.ARMOR, 1));
    ThaumcraftApi.registerObjectTag(
        new ItemStack(RegisteredItems.itemFakeLootbag, 1, 1),
        new AspectList().add(Aspect.CLOTH, 4));

    ThaumcraftApi.registerObjectTag(
        new ItemStack(RegisteredBlocks.blockKnowledgeBook),
        new AspectList()
            .add(Aspect.MIND, 8)
            .add(Aspect.MECHANISM, 4)
            .add(Aspect.MAGIC, 6)
            .add(Aspect.ORDER, 4));
  }