Files
Mohammad-Ali Minaie b86dedad2f base mod created
2018-10-08 09:07:47 -04:00

180 lines
6.4 KiB
Java

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<String> 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<String> 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<ItemStack> 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);
}
}