summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/minecraft/server/ItemStack.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/minecraft/server/ItemStack.java')
-rw-r--r--src/main/java/net/minecraft/server/ItemStack.java593
1 files changed, 0 insertions, 593 deletions
diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java
deleted file mode 100644
index c9d74d37..00000000
--- a/src/main/java/net/minecraft/server/ItemStack.java
+++ /dev/null
@@ -1,593 +0,0 @@
-package net.minecraft.server;
-
-import java.text.DecimalFormat;
-import java.util.Random;
-
-import net.minecraft.util.com.google.common.collect.HashMultimap;
-import net.minecraft.util.com.google.common.collect.Multimap;
-
-// CraftBukkit start
-import java.util.List;
-
-import org.bukkit.Location;
-import org.bukkit.TreeType;
-import org.bukkit.block.BlockState;
-import org.bukkit.craftbukkit.block.CraftBlockState;
-import org.bukkit.craftbukkit.util.CraftMagicNumbers;
-import org.bukkit.entity.Player;
-import org.bukkit.event.world.StructureGrowEvent;
-// CraftBukkit end
-
-public final class ItemStack {
-
- public static final DecimalFormat a = new DecimalFormat("#.###");
- public int count;
- public int c;
- private Item item;
- public NBTTagCompound tag;
- private int damage;
- private EntityItemFrame g;
-
- public ItemStack(Block block) {
- this(block, 1);
- }
-
- public ItemStack(Block block, int i) {
- this(block, i, 0);
- }
-
- public ItemStack(Block block, int i, int j) {
- this(Item.getItemOf(block), i, j);
- }
-
- public ItemStack(Item item) {
- this(item, 1);
- }
-
- public ItemStack(Item item, int i) {
- this(item, i, 0);
- }
-
- public ItemStack(Item item, int i, int j) {
- this.item = item;
- this.count = i;
- // CraftBukkit start - Pass to setData to do filtering
- this.setData(j);
- //this.damage = j;
- //if (this.damage < 0) {
- // this.damage = 0;
- //}
- // CraftBukkit end
- }
-
- public static ItemStack createStack(NBTTagCompound nbttagcompound) {
- ItemStack itemstack = new ItemStack();
-
- itemstack.c(nbttagcompound);
- return itemstack.getItem() != null ? itemstack : null;
- }
-
- private ItemStack() {}
-
- public ItemStack a(int i) {
- ItemStack itemstack = new ItemStack(this.item, i, this.damage);
-
- if (this.tag != null) {
- itemstack.tag = (NBTTagCompound) this.tag.clone();
- }
-
- this.count -= i;
- return itemstack;
- }
-
- public Item getItem() {
- return this.item;
- }
-
- public boolean placeItem(EntityHuman entityhuman, World world, int i, int j, int k, int l, float f, float f1, float f2) {
- // CraftBukkit start - handle all block place event logic here
- int data = this.getData();
- int count = this.count;
-
- if (!(this.getItem() instanceof ItemBucket)) { // if not bucket
- world.captureBlockStates = true;
- // special case bonemeal
- if (this.getItem() instanceof ItemDye && this.getData() == 15) {
- Block block = world.getType(i, j, k);
- if (block == Blocks.SAPLING || block instanceof BlockMushroom) {
- world.captureTreeGeneration = true;
- }
- }
- }
- boolean flag = this.getItem().interactWith(this, entityhuman, world, i, j, k, l, f, f1, f2);
- int newData = this.getData();
- int newCount = this.count;
- this.count = count;
- this.setData(data);
- world.captureBlockStates = false;
- if (flag && world.captureTreeGeneration && world.capturedBlockStates.size() > 0) {
- world.captureTreeGeneration = false;
- Location location = new Location(world.getWorld(), i, j, k);
- TreeType treeType = BlockSapling.treeType;
- BlockSapling.treeType = null;
- List<BlockState> blocks = (List<BlockState>) world.capturedBlockStates.clone();
- world.capturedBlockStates.clear();
- StructureGrowEvent event = null;
- if (treeType != null) {
- event = new StructureGrowEvent(location, treeType, false, (Player) entityhuman.getBukkitEntity(), blocks);
- org.bukkit.Bukkit.getPluginManager().callEvent(event);
- }
- if (event == null || !event.isCancelled()) {
- // Change the stack to its new contents if it hasn't been tampered with.
- if (this.count == count && this.getData() == data) {
- this.setData(newData);
- this.count = newCount;
- }
- for (BlockState blockstate : blocks) {
- blockstate.update(true);
- }
- }
-
- return flag;
- }
- world.captureTreeGeneration = false;
-
- if (flag) {
- org.bukkit.event.block.BlockPlaceEvent placeEvent = null;
- List<BlockState> blocks = (List<BlockState>) world.capturedBlockStates.clone();
- world.capturedBlockStates.clear();
- if (blocks.size() > 1) {
- placeEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockMultiPlaceEvent(world, entityhuman, blocks, i, j, k);
- } else if (blocks.size() == 1) {
- placeEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callBlockPlaceEvent(world, entityhuman, blocks.get(0), i, j, k);
- }
-
- if (placeEvent != null && (placeEvent.isCancelled() || !placeEvent.canBuild())) {
- flag = false; // cancel placement
- // revert back all captured blocks
- for (BlockState blockstate : blocks) {
- blockstate.update(true, false);
- }
- } else {
- // Change the stack to its new contents if it hasn't been tampered with.
- if (this.count == count && this.getData() == data) {
- this.setData(newData);
- this.count = newCount;
- }
- for (BlockState blockstate : blocks) {
- int x = blockstate.getX();
- int y = blockstate.getY();
- int z = blockstate.getZ();
- int updateFlag = ((CraftBlockState) blockstate).getFlag();
- org.bukkit.Material mat = blockstate.getType();
- Block oldBlock = CraftMagicNumbers.getBlock(mat);
- Block block = world.getType(x, y, z);
-
- if (block != null && !(block instanceof BlockContainer)) { // Containers get placed automatically
- block.onPlace(world, x, y, z);
- }
-
- world.notifyAndUpdatePhysics(x, y, z, null, oldBlock, block, updateFlag); // send null chunk as chunk.k() returns false by this point
- }
- entityhuman.a(StatisticList.USE_ITEM_COUNT[Item.getId(this.item)], 1);
- }
- }
- world.capturedBlockStates.clear();
- // CraftBukkit end
-
- return flag;
- }
-
- public float a(Block block) {
- return this.getItem().getDestroySpeed(this, block);
- }
-
- public ItemStack a(World world, EntityHuman entityhuman) {
- return this.getItem().a(this, world, entityhuman);
- }
-
- public ItemStack b(World world, EntityHuman entityhuman) {
- return this.getItem().b(this, world, entityhuman);
- }
-
- public NBTTagCompound save(NBTTagCompound nbttagcompound) {
- nbttagcompound.setShort("id", (short) Item.getId(this.item));
- nbttagcompound.setByte("Count", (byte) this.count);
- nbttagcompound.setShort("Damage", (short) this.damage);
- if (this.tag != null) {
- nbttagcompound.set("tag", this.tag.clone()); // CraftBukkit - make defensive copy, data is going to another thread
- }
-
- return nbttagcompound;
- }
-
- public void c(NBTTagCompound nbttagcompound) {
- this.item = Item.getById(nbttagcompound.getShort("id"));
- this.count = nbttagcompound.getByte("Count");
- /* CraftBukkit start - Route through setData for filtering
- this.damage = nbttagcompound.getShort("Damage");
- if (this.damage < 0) {
- this.damage = 0;
- }
- */
- this.setData(nbttagcompound.getShort("Damage"));
- // CraftBukkit end
-
- if (nbttagcompound.hasKeyOfType("tag", 10)) {
- // CraftBukkit - make defensive copy as this data may be coming from the save thread
- this.tag = (NBTTagCompound) nbttagcompound.getCompound("tag").clone();
- }
- }
-
- public int getMaxStackSize() {
- return this.getItem().getMaxStackSize();
- }
-
- public boolean isStackable() {
- return this.getMaxStackSize() > 1 && (!this.g() || !this.i());
- }
-
- public boolean g() {
- return this.item.getMaxDurability() <= 0 ? false : !this.hasTag() || !this.getTag().getBoolean("Unbreakable");
- }
-
- public boolean usesData() {
- return this.item.n();
- }
-
- public boolean i() {
- return this.g() && this.damage > 0;
- }
-
- public int j() {
- return this.damage;
- }
-
- public int getData() {
- return this.damage;
- }
-
- public void setData(int i) {
- // CraftBukkit start - Filter out data for items that shouldn't have it
- // The crafting system uses this value for a special purpose so we have to allow it
- if (i == 32767) {
- this.damage = i;
- return;
- }
-
- // Is this a block?
- if (CraftMagicNumbers.getBlock(CraftMagicNumbers.getId(this.getItem())) != Blocks.AIR) {
- // If vanilla doesn't use data on it don't allow any
- if (!(this.usesData() || this.getItem().usesDurability())) {
- i = 0;
- }
- }
-
- // Filter invalid plant data
- if (CraftMagicNumbers.getBlock(CraftMagicNumbers.getId(this.getItem())) == Blocks.DOUBLE_PLANT && (i > 5 || i < 0)) {
- i = 0;
- }
- // CraftBukkit end
-
- this.damage = i;
- if (this.damage < -1) { // CraftBukkit - don't filter -1, we use it
- this.damage = 0;
- }
- }
-
- public int l() {
- return this.item.getMaxDurability();
- }
-
- public boolean isDamaged(int i, Random random) {
- if (!this.g()) {
- return false;
- } else {
- if (i > 0) {
- int j = EnchantmentManager.getEnchantmentLevel(Enchantment.DURABILITY.id, this);
- int k = 0;
-
- for (int l = 0; j > 0 && l < i; ++l) {
- if (EnchantmentDurability.a(this, j, random)) {
- ++k;
- }
- }
-
- i -= k;
- if (i <= 0) {
- return false;
- }
- }
-
- this.damage += i;
- return this.damage > this.l();
- }
- }
-
- public void damage(int i, EntityLiving entityliving) {
- if (!(entityliving instanceof EntityHuman) || !((EntityHuman) entityliving).abilities.canInstantlyBuild) {
- if (this.g()) {
- if (this.isDamaged(i, entityliving.aI())) {
- entityliving.a(this);
- --this.count;
- if (entityliving instanceof EntityHuman) {
- EntityHuman entityhuman = (EntityHuman) entityliving;
-
- entityhuman.a(StatisticList.BREAK_ITEM_COUNT[Item.getId(this.item)], 1);
- if (this.count == 0 && this.getItem() instanceof ItemBow) {
- entityhuman.bG();
- }
- }
-
- if (this.count < 0) {
- this.count = 0;
- }
-
- // CraftBukkit start - Check for item breaking
- if (this.count == 0 && entityliving instanceof EntityHuman) {
- org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemBreakEvent((EntityHuman) entityliving, this);
- }
- // CraftBukkit end
-
- this.damage = 0;
- }
- }
- }
- }
-
- public void a(EntityLiving entityliving, EntityHuman entityhuman) {
- boolean flag = this.item.a(this, entityliving, (EntityLiving) entityhuman);
-
- if (flag) {
- entityhuman.a(StatisticList.USE_ITEM_COUNT[Item.getId(this.item)], 1);
- }
- }
-
- public void a(World world, Block block, int i, int j, int k, EntityHuman entityhuman) {
- boolean flag = this.item.a(this, world, block, i, j, k, entityhuman);
-
- if (flag) {
- entityhuman.a(StatisticList.USE_ITEM_COUNT[Item.getId(this.item)], 1);
- }
- }
-
- public boolean b(Block block) {
- return this.item.canDestroySpecialBlock(block);
- }
-
- public boolean a(EntityHuman entityhuman, EntityLiving entityliving) {
- return this.item.a(this, entityhuman, entityliving);
- }
-
- public ItemStack cloneItemStack() {
- ItemStack itemstack = new ItemStack(this.item, this.count, this.damage);
-
- if (this.tag != null) {
- itemstack.tag = (NBTTagCompound) this.tag.clone();
- }
-
- return itemstack;
- }
-
- public static boolean equals(ItemStack itemstack, ItemStack itemstack1) {
- return itemstack == null && itemstack1 == null ? true : (itemstack != null && itemstack1 != null ? (itemstack.tag == null && itemstack1.tag != null ? false : itemstack.tag == null || itemstack.tag.equals(itemstack1.tag)) : false);
- }
-
- public static boolean matches(ItemStack itemstack, ItemStack itemstack1) {
- return itemstack == null && itemstack1 == null ? true : (itemstack != null && itemstack1 != null ? itemstack.d(itemstack1) : false);
- }
-
- private boolean d(ItemStack itemstack) {
- return this.count != itemstack.count ? false : (this.item != itemstack.item ? false : (this.damage != itemstack.damage ? false : (this.tag == null && itemstack.tag != null ? false : this.tag == null || this.tag.equals(itemstack.tag))));
- }
-
- public boolean doMaterialsMatch(ItemStack itemstack) {
- return this.item == itemstack.item && this.damage == itemstack.damage;
- }
-
- public String a() {
- return this.item.a(this);
- }
-
- public static ItemStack b(ItemStack itemstack) {
- return itemstack == null ? null : itemstack.cloneItemStack();
- }
-
- public String toString() {
- return this.count + "x" + this.item.getName() + "@" + this.damage;
- }
-
- public void a(World world, Entity entity, int i, boolean flag) {
- if (this.c > 0) {
- --this.c;
- }
-
- this.item.a(this, world, entity, i, flag);
- }
-
- public void a(World world, EntityHuman entityhuman, int i) {
- entityhuman.a(StatisticList.CRAFT_BLOCK_COUNT[Item.getId(this.item)], i);
- this.item.d(this, world, entityhuman);
- }
-
- public int n() {
- return this.getItem().d_(this);
- }
-
- public EnumAnimation o() {
- return this.getItem().d(this);
- }
-
- public void b(World world, EntityHuman entityhuman, int i) {
- this.getItem().a(this, world, entityhuman, i);
- }
-
- public boolean hasTag() {
- return this.tag != null;
- }
-
- public NBTTagCompound getTag() {
- return this.tag;
- }
-
- public NBTTagList getEnchantments() {
- return this.tag == null ? null : this.tag.getList("ench", 10);
- }
-
- public void setTag(NBTTagCompound nbttagcompound) {
- this.tag = nbttagcompound;
- }
-
- public String getName() {
- String s = this.getItem().n(this);
-
- if (this.tag != null && this.tag.hasKeyOfType("display", 10)) {
- NBTTagCompound nbttagcompound = this.tag.getCompound("display");
-
- if (nbttagcompound.hasKeyOfType("Name", 8)) {
- s = nbttagcompound.getString("Name");
- }
- }
-
- return s;
- }
-
- public ItemStack c(String s) {
- if (this.tag == null) {
- this.tag = new NBTTagCompound();
- }
-
- if (!this.tag.hasKeyOfType("display", 10)) {
- this.tag.set("display", new NBTTagCompound());
- }
-
- this.tag.getCompound("display").setString("Name", s);
- return this;
- }
-
- public void t() {
- if (this.tag != null) {
- if (this.tag.hasKeyOfType("display", 10)) {
- NBTTagCompound nbttagcompound = this.tag.getCompound("display");
-
- nbttagcompound.remove("Name");
- if (nbttagcompound.isEmpty()) {
- this.tag.remove("display");
- if (this.tag.isEmpty()) {
- this.setTag((NBTTagCompound) null);
- }
- }
- }
- }
- }
-
- public boolean hasName() {
- return this.tag == null ? false : (!this.tag.hasKeyOfType("display", 10) ? false : this.tag.getCompound("display").hasKeyOfType("Name", 8));
- }
-
- public EnumItemRarity w() {
- return this.getItem().f(this);
- }
-
- public boolean x() {
- return !this.getItem().e_(this) ? false : !this.hasEnchantments();
- }
-
- public void addEnchantment(Enchantment enchantment, int i) {
- if (this.tag == null) {
- this.setTag(new NBTTagCompound());
- }
-
- if (!this.tag.hasKeyOfType("ench", 9)) {
- this.tag.set("ench", new NBTTagList());
- }
-
- NBTTagList nbttaglist = this.tag.getList("ench", 10);
- NBTTagCompound nbttagcompound = new NBTTagCompound();
-
- nbttagcompound.setShort("id", (short) enchantment.id);
- nbttagcompound.setShort("lvl", (short) ((byte) i));
- nbttaglist.add(nbttagcompound);
- }
-
- public boolean hasEnchantments() {
- return this.tag != null && this.tag.hasKeyOfType("ench", 9);
- }
-
- public void a(String s, NBTBase nbtbase) {
- if (this.tag == null) {
- this.setTag(new NBTTagCompound());
- }
-
- this.tag.set(s, nbtbase);
- }
-
- public boolean z() {
- return this.getItem().v();
- }
-
- public boolean A() {
- return this.g != null;
- }
-
- public void a(EntityItemFrame entityitemframe) {
- this.g = entityitemframe;
- }
-
- public EntityItemFrame B() {
- return this.g;
- }
-
- public int getRepairCost() {
- return this.hasTag() && this.tag.hasKeyOfType("RepairCost", 3) ? this.tag.getInt("RepairCost") : 0;
- }
-
- public void setRepairCost(int i) {
- if (!this.hasTag()) {
- this.tag = new NBTTagCompound();
- }
-
- this.tag.setInt("RepairCost", i);
- }
-
- public Multimap D() {
- Object object;
-
- if (this.hasTag() && this.tag.hasKeyOfType("AttributeModifiers", 9)) {
- object = HashMultimap.create();
- NBTTagList nbttaglist = this.tag.getList("AttributeModifiers", 10);
-
- for (int i = 0; i < nbttaglist.size(); ++i) {
- NBTTagCompound nbttagcompound = nbttaglist.get(i);
- AttributeModifier attributemodifier = GenericAttributes.a(nbttagcompound);
-
- if (attributemodifier.a().getLeastSignificantBits() != 0L && attributemodifier.a().getMostSignificantBits() != 0L) {
- ((Multimap) object).put(nbttagcompound.getString("AttributeName"), attributemodifier);
- }
- }
- } else {
- object = this.getItem().k();
- }
-
- return (Multimap) object;
- }
-
- public void setItem(Item item) {
- this.item = item;
- this.setData(this.getData()); // CraftBukkit - Set data again to ensure it is filtered properly
- }
-
- public IChatBaseComponent E() {
- IChatBaseComponent ichatbasecomponent = (new ChatComponentText("[")).a(this.getName()).a("]");
-
- if (this.item != null) {
- NBTTagCompound nbttagcompound = new NBTTagCompound();
-
- this.save(nbttagcompound);
- ichatbasecomponent.getChatModifier().a(new ChatHoverable(EnumHoverAction.SHOW_ITEM, new ChatComponentText(nbttagcompound.toString())));
- ichatbasecomponent.getChatModifier().setColor(this.w().e);
- }
-
- return ichatbasecomponent;
- }
-}