/**
* 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 @ [Jan 25, 2014, 2:04:15 PM (GMT)]
*/
package vazkii.botania.common.item.block;
import java.util.List;
import javax.annotation.Nonnull;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.stats.Achievement;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import vazkii.botania.api.BotaniaAPI;
import vazkii.botania.api.lexicon.IRecipeKeyProvider;
import vazkii.botania.api.subtile.SubTileEntity;
import vazkii.botania.api.subtile.SubTileFunctional;
import vazkii.botania.api.subtile.SubTileGenerating;
import vazkii.botania.api.subtile.signature.SubTileSignature;
import vazkii.botania.common.achievement.ModAchievements;
import vazkii.botania.common.block.ModBlocks;
import vazkii.botania.common.block.tile.TileSpecialFlower;
import vazkii.botania.common.core.handler.ConfigHandler;
import vazkii.botania.common.core.helper.ItemNBTHelper;
import vazkii.botania.common.lib.LibBlockNames;
import vazkii.botania.common.lib.LibMisc;
public class ItemBlockSpecialFlower extends ItemBlockMod implements IRecipeKeyProvider {
public ItemBlockSpecialFlower(Block block1) {
super(block1);
setHasSubtypes(true);
}
@Override
public boolean placeBlockAt(@Nonnull ItemStack stack, @Nonnull EntityPlayer player, World world, @Nonnull BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, @Nonnull IBlockState newState) {
boolean placed = super.placeBlockAt(stack, player, world, pos, side, hitX, hitY, hitZ, newState);
if(placed) {
String type = getType(stack);
TileEntity te = world.getTileEntity(pos);
if(te instanceof TileSpecialFlower) {
TileSpecialFlower tile = (TileSpecialFlower) te;
tile.setSubTile(type);
tile.onBlockAdded(world, pos, newState);
tile.onBlockPlacedBy(world, pos, newState, player, stack);
if(!world.isRemote)
world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 8);
}
}
return placed;
}
@Nonnull
@Override
public String getUnlocalizedName(ItemStack stack) {
return BotaniaAPI.getSignatureForName(getType(stack)).getUnlocalizedNameForStack(stack);
}
@Nonnull
@Override
public String getUnlocalizedNameInefficiently(@Nonnull ItemStack par1ItemStack) {
return getUnlocalizedNameInefficiently_(par1ItemStack);
}
@SideOnly(Side.CLIENT)
@Override
public void addInformation(@Nonnull ItemStack par1ItemStack, @Nonnull EntityPlayer player, @Nonnull List<String> stacks, boolean par4) {
String type = getType(par1ItemStack);
SubTileSignature sig = BotaniaAPI.getSignatureForName(type);
sig.addTooltip(par1ItemStack, player, stacks);
if(ConfigHandler.referencesEnabled) {
String refUnlocalized = sig.getUnlocalizedLoreTextForStack(par1ItemStack);
String refLocalized = I18n.format(refUnlocalized);
if(!refLocalized.equals(refUnlocalized))
stacks.add(TextFormatting.ITALIC + refLocalized);
}
String mod = BotaniaAPI.subTileMods.get(type);
if(mod != null && !mod.equals(LibMisc.MOD_ID))
stacks.add(TextFormatting.ITALIC + "[" + mod + "]");
}
public static String getType(ItemStack stack) {
return stack.hasTagCompound() ? ItemNBTHelper.getString(stack, SubTileEntity.TAG_TYPE, "") : "";
}
public static ItemStack ofType(String type) {
return ofType(new ItemStack(ModBlocks.specialFlower), type);
}
public static ItemStack ofType(ItemStack stack, String type) {
ItemNBTHelper.setString(stack, SubTileEntity.TAG_TYPE, type);
return stack;
}
@Override
public String getKey(ItemStack stack) {
return "flower." + getType(stack);
}
@Override
public Achievement getAchievementOnPickup(ItemStack stack, EntityPlayer player, EntityItem item) {
String type = getType(stack);
switch (type) {
case LibBlockNames.SUBTILE_KEKIMURUS:
return ModAchievements.kekimurusPickup;
case LibBlockNames.SUBTILE_HEISEI_DREAM:
return ModAchievements.heiseiDreamPickup;
case LibBlockNames.SUBTILE_POLLIDISIAC:
return ModAchievements.pollidisiacPickup;
case LibBlockNames.SUBTILE_BUBBELL:
return ModAchievements.bubbellPickup;
case LibBlockNames.SUBTILE_DANDELIFEON:
return ModAchievements.dandelifeonPickup;
case "":
return ModAchievements.nullFlower;
default:
Class<? extends SubTileEntity> clazz = BotaniaAPI.getSubTileMapping(type);
if(SubTileGenerating.class.isAssignableFrom(clazz))
return ModAchievements.daybloomPickup;
else if(SubTileFunctional.class.isAssignableFrom(clazz))
return ModAchievements.endoflamePickup;
}
return null;
}
}