/** * 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 the * Botania License: http://botaniamod.net/license.php * * File Created @ [Mar 7, 2014, 7:06:20 PM (GMT)] */ package vazkii.botania.common.item; import java.util.List; import javax.annotation.Nonnull; import net.minecraft.client.resources.I18n; import net.minecraft.creativetab.CreativeTabs; 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.NonNullList; import net.minecraft.util.math.MathHelper; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import vazkii.botania.api.mana.ICreativeManaProvider; import vazkii.botania.api.mana.IManaItem; import vazkii.botania.api.mana.IManaTooltipDisplay; import vazkii.botania.common.core.helper.ItemNBTHelper; import vazkii.botania.common.lib.LibItemNames; public class ItemManaTablet extends ItemMod implements IManaItem, ICreativeManaProvider, IManaTooltipDisplay { public static final int MAX_MANA = 500000; private static final String TAG_MANA = "mana"; private static final String TAG_CREATIVE = "creative"; private static final String TAG_ONE_USE = "oneUse"; public ItemManaTablet() { super(LibItemNames.MANA_TABLET); setMaxStackSize(1); } @Override @SideOnly(Side.CLIENT) public void getSubItems(@Nonnull Item item, CreativeTabs tab, NonNullList<ItemStack> stacks) { // Empty tablet stacks.add(new ItemStack(item)); // Full tablet ItemStack fullPower = new ItemStack(item); setMana(fullPower, MAX_MANA); stacks.add(fullPower); // Creative Tablet ItemStack creative = new ItemStack(item); setMana(creative, MAX_MANA); setStackCreative(creative); stacks.add(creative); } @Override public int getDamage(ItemStack stack) { // Compatibility shim, so tablets from previous versions of botania // stack right in barrels and so forth if(super.getDamage(stack) != 0) super.setDamage(stack, 0); return 0; } @SideOnly(Side.CLIENT) @Override public void addInformation(ItemStack par1ItemStack, EntityPlayer player, List<String> stacks, boolean par4) { if(isStackCreative(par1ItemStack)) stacks.add(I18n.format("botaniamisc.creative")); } @Override public int getEntityLifespan(ItemStack itemStack, World world) { return Integer.MAX_VALUE; } public static void setMana(ItemStack stack, int mana) { ItemNBTHelper.setInt(stack, TAG_MANA, mana); } public static void setStackCreative(ItemStack stack) { ItemNBTHelper.setBoolean(stack, TAG_CREATIVE, true); } public static boolean isStackCreative(ItemStack stack) { return ItemNBTHelper.getBoolean(stack, TAG_CREATIVE, false); } @Override public int getMana(ItemStack stack) { return ItemNBTHelper.getInt(stack, TAG_MANA, 0); } @Override public int getMaxMana(ItemStack stack) { return isStackCreative(stack) ? MAX_MANA + 1000 : MAX_MANA; } @Override public void addMana(ItemStack stack, int mana) { if(!isStackCreative(stack)) setMana(stack, Math.min(getMana(stack) + mana, MAX_MANA)); } @Override public boolean canReceiveManaFromPool(ItemStack stack, TileEntity pool) { return !ItemNBTHelper.getBoolean(stack, TAG_ONE_USE, false); } @Override public boolean canReceiveManaFromItem(ItemStack stack, ItemStack otherStack) { return !isCreative(stack); } @Override public boolean canExportManaToPool(ItemStack stack, TileEntity pool) { return true; } @Override public boolean canExportManaToItem(ItemStack stack, ItemStack otherStack) { return true; } @Override public boolean isNoExport(ItemStack stack) { return false; } @Override public boolean isCreative(ItemStack stack) { return isStackCreative(stack); } @Override public float getManaFractionForDisplay(ItemStack stack) { return (float) getMana(stack) / (float) getMaxMana(stack); } @Override public boolean showDurabilityBar(ItemStack stack) { return !isStackCreative(stack); } @Override public double getDurabilityForDisplay(ItemStack stack) { return 1.0 - getManaFractionForDisplay(stack); } @Override public int getRGBDurabilityForDisplay(ItemStack stack) { return MathHelper.hsvToRGB(getManaFractionForDisplay(stack) / 3.0F, 1.0F, 1.0F); } }