Package vazkii.botania.common.item.equipment.tool

Source Code of vazkii.botania.common.item.equipment.tool.ItemTerraPick

/**
* This class was created by <Vazkii>. It's distributed as
* part of the Botania Mod. Get the Source Code in github:
* https://github.com/Vazkii/Botania
*
* Botania is Open Source and distributed under a
* Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License
* (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_GB)
*
* File Created @ [May 20, 2014, 10:56:14 PM (GMT)]
*/
package vazkii.botania.common.item.equipment.tool;

import java.awt.Color;
import java.util.List;

import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IIcon;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.oredict.RecipeSorter;
import net.minecraftforge.oredict.RecipeSorter.Category;
import vazkii.botania.api.BotaniaAPI;
import vazkii.botania.api.mana.IManaItem;
import vazkii.botania.client.core.helper.IconHelper;
import vazkii.botania.common.core.helper.ItemNBTHelper;
import vazkii.botania.common.crafting.recipe.TerraPickTippingRecipe;
import vazkii.botania.common.item.ItemSpark;
import vazkii.botania.common.item.ModItems;
import vazkii.botania.common.item.equipment.bauble.ItemAuraRing;
import vazkii.botania.common.item.equipment.bauble.ItemGreaterAuraRing;
import vazkii.botania.common.item.equipment.tool.manasteel.ItemManasteelPick;
import vazkii.botania.common.lib.LibItemNames;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class ItemTerraPick extends ItemManasteelPick implements IManaItem {

  private static final String TAG_ENABLED = "enabled";
  private static final String TAG_MANA = "mana";
  private static final String TAG_TIPPED = "tipped";

  private static final int MAX_MANA = Integer.MAX_VALUE;

  private static final Material[] MATERIALS = new Material[] { Material.rock, Material.iron, Material.ice, Material.glass, Material.piston, Material.anvil, Material.grass, Material.ground, Material.sand, Material.snow, Material.craftedSnow, Material.clay };

  private static final int[] LEVELS = new int[] {
    0, 10000, 1000000, 10000000, 100000000, 1000000000
  };

  private static final int[] CREATIVE_MANA = new int[] {
    10000 - 1, 1000000 - 1, 10000000 - 1, 100000000 - 1, 1000000000 - 1, MAX_MANA - 1
  };

  IIcon iconTool, iconOverlay, iconTipped;

  public ItemTerraPick() {
    super(BotaniaAPI.terrasteelToolMaterial, LibItemNames.TERRA_PICK);
    GameRegistry.addRecipe(new TerraPickTippingRecipe());
    RecipeSorter.register("botania:terraPickTipping", TerraPickTippingRecipe.class, Category.SHAPELESS, "");
  }

  @Override
  public void getSubItems(Item item, CreativeTabs tab, List list) {
    for(int mana : CREATIVE_MANA) {
      ItemStack stack = new ItemStack(item);
      setMana(stack, mana);
      list.add(stack);
    }
  }

  @Override
  public void addInformation(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, List par3List, boolean par4) {
    String rankFormat = StatCollector.translateToLocal("botaniamisc.toolRank");
    String rank = StatCollector.translateToLocal("botania.rank" + getLevel(par1ItemStack));
    par3List.add(String.format(rankFormat, rank).replaceAll("&", "\u00a7"));
    if(getMana(par1ItemStack) == Integer.MAX_VALUE)
      par3List.add(EnumChatFormatting.RED + StatCollector.translateToLocal("botaniamisc.getALife"));
  }

  @Override
  public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) {
    getMana(par1ItemStack);
    int level = getLevel(par1ItemStack);

    if(level != 0) {
      setEnabled(par1ItemStack, !isEnabled(par1ItemStack));
      if(!par2World.isRemote)
        par2World.playSoundAtEntity(par3EntityPlayer, "botania:terraPickMode", 0.5F, 0.4F);
    }

    return par1ItemStack;
  }

  @Override
  public void onUpdate(ItemStack par1ItemStack, World par2World, Entity par3Entity, int par4, boolean par5) {
    if(isEnabled(par1ItemStack)) {
      int level = getLevel(par1ItemStack);

      if(level == 0)
        setEnabled(par1ItemStack, false);
      else if(par3Entity instanceof EntityPlayer && !((EntityPlayer) par3Entity).isSwingInProgress)
        addMana(par1ItemStack, -level);
    }
  }

  @Override
  public boolean onBlockStartBreak(ItemStack stack, int x, int y, int z, EntityPlayer player) {
    if(!isEnabled(stack))
      return false;

    World world = player.worldObj;
    Material mat = world.getBlock(x, y, z).getMaterial();
    if(!ToolCommons.isRightMaterial(mat, MATERIALS))
      return false;

    MovingObjectPosition block = ToolCommons.raytraceFromEntity(world, player, true, 4.5);
    if(block == null)
      return false;

    ForgeDirection direction = ForgeDirection.getOrientation(block.sideHit);
    int fortune = EnchantmentHelper.getFortuneModifier(player);
    boolean silk = EnchantmentHelper.getSilkTouchModifier(player);
    boolean doX = direction.offsetX == 0;
    boolean doY = direction.offsetY == 0;
    boolean doZ = direction.offsetZ == 0;

    int level = getLevel(stack);
    int range = Math.max(0, level - 1);
    int rangeY = Math.max(1, range);

    if(range == 0 && level != 1)
      return false;

    ToolCommons.removeBlocksInIteration(player, stack, world, x, y, z, doX ? -range : 0, doY ? -1 : 0, doZ ? -range : 0, doX ? range + 1 : 1, doY ? rangeY * 2 : 1, doZ ? range + 1 : 1, null, MATERIALS, silk, fortune, isTipped(stack));

    return false;
  }

  @Override
  public int getEntityLifespan(ItemStack itemStack, World world) {
    return Integer.MAX_VALUE;
  }

  @Override
  public void registerIcons(IIconRegister par1IconRegister) {
    iconTool = IconHelper.forItem(par1IconRegister, this, 0);
    iconOverlay = IconHelper.forItem(par1IconRegister, this, 1);
    iconTipped = IconHelper.forItem(par1IconRegister, this, 2);
  }

  @Override
  public boolean requiresMultipleRenderPasses() {
    return true;
  }

  @Override
  public IIcon getIcon(ItemStack stack, int pass) {
    return pass == 1 && isEnabled(stack) ? iconOverlay : isTipped(stack) ? iconTipped : iconTool;
  }

  public static boolean isTipped(ItemStack stack) {
    return ItemNBTHelper.getBoolean(stack, TAG_TIPPED, false);
  }

  public static void setTipped(ItemStack stack) {
    ItemNBTHelper.setBoolean(stack, TAG_TIPPED, true);
  }

  @Override
  @SideOnly(Side.CLIENT)
  public int getColorFromItemStack(ItemStack par1ItemStack, int par2) {
    if(par2 == 0 || !isEnabled(par1ItemStack))
      return 0xFFFFFF;

    return Color.HSBtoRGB(0.375F, (float) Math.min(1F, Math.sin(System.currentTimeMillis() / 200D) * 0.5 + 1F), 1F);
  }

  boolean isEnabled(ItemStack stack) {
    return ItemNBTHelper.getBoolean(stack, TAG_ENABLED, false);
  }

  void setEnabled(ItemStack stack, boolean enabled) {
    ItemNBTHelper.setBoolean(stack, TAG_ENABLED, enabled);
  }

  public static void setMana(ItemStack stack, int mana) {
    ItemNBTHelper.setInt(stack, TAG_MANA, mana);
  }

  @Override
  public int getMana(ItemStack stack) {
    return ItemNBTHelper.getInt(stack, TAG_MANA, 0);
  }

  public int getLevel(ItemStack stack) {
    int mana = getMana(stack);
    for(int i = LEVELS.length - 1; i > 0; i--)
      if(mana >= LEVELS[i])
        return i;

    return 0;
  }

  @Override
  public int getMaxMana(ItemStack stack) {
    return MAX_MANA;
  }

  @Override
  public void addMana(ItemStack stack, int mana) {
    setMana(stack, Math.min(getMana(stack) + mana, MAX_MANA));
  }

  @Override
  public boolean canReceiveManaFromPool(ItemStack stack, TileEntity pool) {
    return true;
  }

  @Override
  public boolean canReceiveManaFromItem(ItemStack stack, ItemStack otherStack) {
    return !(otherStack.getItem() instanceof ItemSpark) && !(otherStack.getItem() instanceof ItemAuraRing) && !(otherStack.getItem() instanceof ItemGreaterAuraRing);
  }

  @Override
  public boolean canExportManaToPool(ItemStack stack, TileEntity pool) {
    return false;
  }

  @Override
  public boolean canExportManaToItem(ItemStack stack, ItemStack otherStack) {
    return false;
  }

  @Override
  public boolean isNoExport(ItemStack stack) {
    return true;
  }

  @Override
  public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) {
    return par2ItemStack.getItem() == ModItems.manaResource && par2ItemStack.getItemDamage() == 4 ? true : super.getIsRepairable(par1ItemStack, par2ItemStack);
  }

}
TOP

Related Classes of vazkii.botania.common.item.equipment.tool.ItemTerraPick

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.