package pixlepix.auracascade.item;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.EnumRarity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ActionResult;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextComponentString;
import net.minecraft.world.World;
import pixlepix.auracascade.AuraCascade;
import pixlepix.auracascade.QuestManager;
import pixlepix.auracascade.lexicon.CategoryManager;
import pixlepix.auracascade.lexicon.ILexiconable;
import pixlepix.auracascade.lexicon.LexiconEntry;
import pixlepix.auracascade.lexicon.common.core.helper.ItemNBTHelper;
import pixlepix.auracascade.registry.BlockRegistry;
import pixlepix.auracascade.registry.CraftingBenchRecipe;
import pixlepix.auracascade.registry.ITTinkererItem;
import pixlepix.auracascade.registry.ThaumicTinkererRecipe;
import java.util.ArrayList;
import java.util.List;
/**
* Created by pixlepix on 12/27/14.
* *HEAVILY* based off of/stolen from Vazkii
*/
public class ItemLexicon extends Item implements ITTinkererItem {
private static final String TAG_KNOWLEDGE_PREFIX = "knowledge.";
private static final String TAG_FORCED_MESSAGE = "forcedMessage";
private static final String TAG_QUEUE_TICKS = "queueTicks";
private static final String name = "lexicon";
boolean skipSound = false;
public ItemLexicon() {
super();
setMaxStackSize(1);
}
public static void setForcedPage(ItemStack stack, String forced) {
ItemNBTHelper.setString(stack, TAG_FORCED_MESSAGE, forced);
}
public static String getForcedPage(ItemStack stack) {
return ItemNBTHelper.getString(stack, TAG_FORCED_MESSAGE, "");
}
private static LexiconEntry getEntryFromForce(ItemStack stack) {
String force = getForcedPage(stack);
for (LexiconEntry entry : CategoryManager.getAllEntries())
if (entry.unlocalizedName.equals(force)) {
return entry;
}
return null;
}
public static int getQueueTicks(ItemStack stack) {
return ItemNBTHelper.getInt(stack, TAG_QUEUE_TICKS, 0);
}
public static void setQueueTicks(ItemStack stack, int ticks) {
ItemNBTHelper.setInt(stack, TAG_QUEUE_TICKS, ticks);
}
@Override
public EnumActionResult onItemUse(ItemStack par1ItemStack, EntityPlayer par2EntityPlayer, World par3World, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
if (par2EntityPlayer.isSneaking()) {
Block block = par3World.getBlockState(pos).getBlock();
if (block != null) {
if (block instanceof ILexiconable) {
LexiconEntry entry = ((ILexiconable) block).getEntry(par3World, pos, par2EntityPlayer, par1ItemStack);
if (entry != null) {
AuraCascade.proxy.setEntryToOpen(entry);
AuraCascade.proxy.setLexiconStack(par1ItemStack);
par2EntityPlayer.openGui(AuraCascade.instance, 0, par3World, 0, 0, 0);
if (!par3World.isRemote) {
//TODO fix sounds
//par3World.playSoundAtEntity(par2EntityPlayer, "aura:lexiconOpen", 0.5F, 1F);
}
return EnumActionResult.PASS;
}
}
}
}
return EnumActionResult.FAIL;
}
private void addStringToTooltip(String s, List<String> tooltip) {
tooltip.add(s.replaceAll("&", "\u00a7"));
}
@Override
public ActionResult<ItemStack> onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer, EnumHand hand) {
String force = getForcedPage(par1ItemStack);
if (force != null && !force.isEmpty()) {
LexiconEntry entry = getEntryFromForce(par1ItemStack);
if (entry != null) {
AuraCascade.proxy.setEntryToOpen(entry);
} else {
par3EntityPlayer.addChatMessage(new TextComponentString("aura.misc.cantOpen"));
}
setForcedPage(par1ItemStack, "");
}
QuestManager.check(par3EntityPlayer);
AuraCascade.proxy.setLexiconStack(par1ItemStack);
par3EntityPlayer.openGui(AuraCascade.instance, 0, par2World, 0, 0, 0);
if (!par2World.isRemote && !skipSound){
//TODO Fix soundat
//par2World.playSoundAt(par3EntityPlayer, "aura:lexiconOpen", 0.5F, 1F);
}
skipSound = false;
return new ActionResult<ItemStack>(EnumActionResult.PASS, par1ItemStack);
}
@Override
public void onUpdate(ItemStack stack, World world, Entity entity, int idk, boolean something) {
int ticks = getQueueTicks(stack);
if (ticks > 0 && entity instanceof EntityPlayer) {
skipSound = ticks < 5;
if (ticks == 1)
onItemRightClick(stack, world, (EntityPlayer) entity, EnumHand.MAIN_HAND);
setQueueTicks(stack, ticks - 1);
}
}
@Override
public EnumRarity getRarity(ItemStack par1ItemStack) {
return EnumRarity.UNCOMMON;
}
@Override
public ArrayList<Object> getSpecialParameters() {
return null;
}
@Override
public String getItemName() {
return name;
}
@Override
public boolean shouldRegister() {
return true;
}
@Override
public boolean shouldDisplayInTab() {
return true;
}
@Override
public ThaumicTinkererRecipe getRecipeItem() {
return new CraftingBenchRecipe(new ItemStack(this), "CB", " ", 'C', new ItemStack(BlockRegistry.getFirstItemFromClass(ItemAuraCrystal.class)), 'B', new ItemStack(Items.BOOK));
}
@Override
public int getCreativeTabPriority() {
return 150;
}
}