package net.minecraft.item; import java.util.List; import javax.annotation.Nullable; import net.minecraft.advancements.CriteriaTriggers; import net.minecraft.block.BlockStandingSign; import net.minecraft.block.BlockWallSign; import net.minecraft.block.state.IBlockState; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.BannerPattern; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityBanner; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; import net.minecraft.util.NonNullList; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.util.text.translation.I18n; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class ItemBanner extends ItemBlock { public ItemBanner() { super(Blocks.STANDING_BANNER); this.maxStackSize = 16; this.setCreativeTab(CreativeTabs.DECORATIONS); this.setHasSubtypes(true); this.setMaxDamage(0); } /** * Called when a Block is right-clicked with this Item */ public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { IBlockState iblockstate = worldIn.getBlockState(pos); boolean flag = iblockstate.getBlock().isReplaceable(worldIn, pos); if (facing != EnumFacing.DOWN && (iblockstate.getMaterial().isSolid() || flag) && (!flag || facing == EnumFacing.UP)) { pos = pos.offset(facing); ItemStack itemstack = player.getHeldItem(hand); if (player.canPlayerEdit(pos, facing, itemstack) && Blocks.STANDING_BANNER.canPlaceBlockAt(worldIn, pos)) { if (worldIn.isRemote) { return EnumActionResult.SUCCESS; } else { pos = flag ? pos.down() : pos; if (facing == EnumFacing.UP) { int i = MathHelper.floor((double)((player.rotationYaw + 180.0F) * 16.0F / 360.0F) + 0.5D) & 15; worldIn.setBlockState(pos, Blocks.STANDING_BANNER.getDefaultState().withProperty(BlockStandingSign.ROTATION, Integer.valueOf(i)), 3); } else { worldIn.setBlockState(pos, Blocks.WALL_BANNER.getDefaultState().withProperty(BlockWallSign.FACING, facing), 3); } TileEntity tileentity = worldIn.getTileEntity(pos); if (tileentity instanceof TileEntityBanner) { ((TileEntityBanner)tileentity).setItemValues(itemstack, false); } if (player instanceof EntityPlayerMP) { CriteriaTriggers.PLACED_BLOCK.trigger((EntityPlayerMP)player, pos, itemstack); } itemstack.shrink(1); return EnumActionResult.SUCCESS; } } else { return EnumActionResult.FAIL; } } else { return EnumActionResult.FAIL; } } public String getItemStackDisplayName(ItemStack stack) { String s = "item.banner."; EnumDyeColor enumdyecolor = getBaseColor(stack); s = s + enumdyecolor.getUnlocalizedName() + ".name"; return I18n.translateToLocal(s); } @SideOnly(Side.CLIENT) public static void appendHoverTextFromTileEntityTag(ItemStack stack, List p_185054_1_) { NBTTagCompound nbttagcompound = stack.getSubCompound("BlockEntityTag"); if (nbttagcompound != null && nbttagcompound.hasKey("Patterns")) { NBTTagList nbttaglist = nbttagcompound.getTagList("Patterns", 10); for (int i = 0; i < nbttaglist.tagCount() && i < 6; ++i) { NBTTagCompound nbttagcompound1 = nbttaglist.getCompoundTagAt(i); EnumDyeColor enumdyecolor = EnumDyeColor.byDyeDamage(nbttagcompound1.getInteger("Color")); BannerPattern bannerpattern = BannerPattern.byHash(nbttagcompound1.getString("Pattern")); if (bannerpattern != null) { p_185054_1_.add(I18n.translateToLocal("item.banner." + bannerpattern.getFileName() + "." + enumdyecolor.getUnlocalizedName())); } } } } /** * allows items to add custom lines of information to the mouseover description */ @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, @Nullable World worldIn, List tooltip, ITooltipFlag flagIn) { appendHoverTextFromTileEntityTag(stack, tooltip); } /** * returns a list of items with the same ID, but different meta (eg: dye returns 16 items) */ public void getSubItems(CreativeTabs tab, NonNullList items) { if (this.isInCreativeTab(tab)) { for (EnumDyeColor enumdyecolor : EnumDyeColor.values()) { items.add(makeBanner(enumdyecolor, (NBTTagList)null)); } } } public static ItemStack makeBanner(EnumDyeColor p_190910_0_, @Nullable NBTTagList p_190910_1_) { ItemStack itemstack = new ItemStack(Items.BANNER, 1, p_190910_0_.getDyeDamage()); if (p_190910_1_ != null && !p_190910_1_.hasNoTags()) { itemstack.getOrCreateSubCompound("BlockEntityTag").setTag("Patterns", p_190910_1_.copy()); } return itemstack; } /** * gets the CreativeTab this item is displayed on */ public CreativeTabs getCreativeTab() { return CreativeTabs.DECORATIONS; } public static EnumDyeColor getBaseColor(ItemStack stack) { return EnumDyeColor.byDyeDamage(stack.getMetadata() & 15); } }