From 8fbe78a2c3b65f4140c4d0db4bed5a9bcdaf1792 Mon Sep 17 00:00:00 2001 From: Nathan Adams Date: Tue, 29 Nov 2011 23:17:43 +0000 Subject: Updated to use mc-dev rename revision 1 --- .../java/net/minecraft/server/PlayerInventory.java | 429 +++++++++++++++++++++ 1 file changed, 429 insertions(+) create mode 100644 src/main/java/net/minecraft/server/PlayerInventory.java (limited to 'src/main/java/net/minecraft/server/PlayerInventory.java') diff --git a/src/main/java/net/minecraft/server/PlayerInventory.java b/src/main/java/net/minecraft/server/PlayerInventory.java new file mode 100644 index 00000000..e0f0914a --- /dev/null +++ b/src/main/java/net/minecraft/server/PlayerInventory.java @@ -0,0 +1,429 @@ +package net.minecraft.server; + +public class PlayerInventory implements IInventory { + + public ItemStack[] items = new ItemStack[36]; + public ItemStack[] armor = new ItemStack[4]; + public int itemInHandIndex = 0; + public EntityHuman d; + private ItemStack f; + public boolean e = false; + + // CraftBukkit start + public ItemStack[] getContents() { + return this.items; + } + + public ItemStack[] getArmorContents() { + return this.armor; + } + // CraftBukkit end + + public PlayerInventory(EntityHuman entityhuman) { + this.d = entityhuman; + } + + public ItemStack getItemInHand() { + return this.itemInHandIndex < 9 && this.itemInHandIndex >= 0 ? this.items[this.itemInHandIndex] : null; + } + + public static int h() { + return 9; + } + + private int e(int i) { + for (int j = 0; j < this.items.length; ++j) { + if (this.items[j] != null && this.items[j].id == i) { + return j; + } + } + + return -1; + } + + private int firstPartial(ItemStack itemstack) { + for (int i = 0; i < this.items.length; ++i) { + if (this.items[i] != null && this.items[i].id == itemstack.id && this.items[i].isStackable() && this.items[i].count < this.items[i].getMaxStackSize() && this.items[i].count < this.getMaxStackSize() && (!this.items[i].usesData() || this.items[i].getData() == itemstack.getData())) { + return i; + } + } + + return -1; + } + + // CraftBukkit start - watch method above! :D + public int canHold(ItemStack itemstack) { + int remains = itemstack.count; + for (int i = 0; i < this.items.length; ++i) { + if (this.items[i] == null) return itemstack.count; + + // Taken from firstPartial(ItemStack) + if (this.items[i] != null && this.items[i].id == itemstack.id && this.items[i].isStackable() && this.items[i].count < this.items[i].getMaxStackSize() && this.items[i].count < this.getMaxStackSize() && (!this.items[i].usesData() || this.items[i].getData() == itemstack.getData())) { + remains -= (this.items[i].getMaxStackSize() < this.getMaxStackSize() ? this.items[i].getMaxStackSize() : this.getMaxStackSize()) - this.items[i].count; + } + if (remains <= 0) return itemstack.count; + } + return itemstack.count - remains; + } + // CraftBukkit end + + private int m() { + for (int i = 0; i < this.items.length; ++i) { + if (this.items[i] == null) { + return i; + } + } + + return -1; + } + + private int e(ItemStack itemstack) { + int i = itemstack.id; + int j = itemstack.count; + int k; + + if (itemstack.getMaxStackSize() == 1) { + k = this.m(); + if (k < 0) { + return j; + } else { + if (this.items[k] == null) { + this.items[k] = ItemStack.b(itemstack); + } + + return 0; + } + } else { + k = this.firstPartial(itemstack); + if (k < 0) { + k = this.m(); + } + + if (k < 0) { + return j; + } else { + if (this.items[k] == null) { + this.items[k] = new ItemStack(i, 0, itemstack.getData()); + } + + int l = j; + + if (j > this.items[k].getMaxStackSize() - this.items[k].count) { + l = this.items[k].getMaxStackSize() - this.items[k].count; + } + + if (l > this.getMaxStackSize() - this.items[k].count) { + l = this.getMaxStackSize() - this.items[k].count; + } + + if (l == 0) { + return j; + } else { + j -= l; + this.items[k].count += l; + this.items[k].b = 5; + return j; + } + } + } + } + + public void i() { + for (int i = 0; i < this.items.length; ++i) { + if (this.items[i] != null) { + this.items[i].a(this.d.world, this.d, i, this.itemInHandIndex == i); + } + } + } + + public boolean b(int i) { + int j = this.e(i); + + if (j < 0) { + return false; + } else { + if (--this.items[j].count <= 0) { + this.items[j] = null; + } + + return true; + } + } + + public boolean c(int i) { + int j = this.e(i); + + return j >= 0; + } + + public boolean pickup(ItemStack itemstack) { + int i; + + if (itemstack.f()) { + i = this.m(); + if (i >= 0) { + this.items[i] = ItemStack.b(itemstack); + this.items[i].b = 5; + itemstack.count = 0; + return true; + } else if (this.d.abilities.canInstantlyBuild) { + itemstack.count = 0; + return true; + } else { + return false; + } + } else { + do { + i = itemstack.count; + itemstack.count = this.e(itemstack); + } while (itemstack.count > 0 && itemstack.count < i); + + if (itemstack.count == i && this.d.abilities.canInstantlyBuild) { + itemstack.count = 0; + return true; + } else { + return itemstack.count < i; + } + } + } + + public ItemStack splitStack(int i, int j) { + ItemStack[] aitemstack = this.items; + + if (i >= this.items.length) { + aitemstack = this.armor; + i -= this.items.length; + } + + if (aitemstack[i] != null) { + ItemStack itemstack; + + if (aitemstack[i].count <= j) { + itemstack = aitemstack[i]; + aitemstack[i] = null; + return itemstack; + } else { + itemstack = aitemstack[i].a(j); + if (aitemstack[i].count == 0) { + aitemstack[i] = null; + } + + return itemstack; + } + } else { + return null; + } + } + + public void setItem(int i, ItemStack itemstack) { + ItemStack[] aitemstack = this.items; + + if (i >= aitemstack.length) { + i -= aitemstack.length; + aitemstack = this.armor; + } + + aitemstack[i] = itemstack; + } + + public float a(Block block) { + float f = 1.0F; + + if (this.items[this.itemInHandIndex] != null) { + f *= this.items[this.itemInHandIndex].a(block); + } + + return f; + } + + public NBTTagList a(NBTTagList nbttaglist) { + int i; + NBTTagCompound nbttagcompound; + + for (i = 0; i < this.items.length; ++i) { + if (this.items[i] != null) { + nbttagcompound = new NBTTagCompound(); + nbttagcompound.setByte("Slot", (byte) i); + this.items[i].b(nbttagcompound); + nbttaglist.add(nbttagcompound); + } + } + + for (i = 0; i < this.armor.length; ++i) { + if (this.armor[i] != null) { + nbttagcompound = new NBTTagCompound(); + nbttagcompound.setByte("Slot", (byte) (i + 100)); + this.armor[i].b(nbttagcompound); + nbttaglist.add(nbttagcompound); + } + } + + return nbttaglist; + } + + public void b(NBTTagList nbttaglist) { + this.items = new ItemStack[36]; + this.armor = new ItemStack[4]; + + for (int i = 0; i < nbttaglist.size(); ++i) { + NBTTagCompound nbttagcompound = (NBTTagCompound) nbttaglist.get(i); + int j = nbttagcompound.getByte("Slot") & 255; + ItemStack itemstack = ItemStack.a(nbttagcompound); + + if (itemstack != null) { + if (j >= 0 && j < this.items.length) { + this.items[j] = itemstack; + } + + if (j >= 100 && j < this.armor.length + 100) { + this.armor[j - 100] = itemstack; + } + } + } + } + + public int getSize() { + return this.items.length + 4; + } + + public ItemStack getItem(int i) { + ItemStack[] aitemstack = this.items; + + if (i >= aitemstack.length) { + i -= aitemstack.length; + aitemstack = this.armor; + } + + return aitemstack[i]; + } + + public String getName() { + return "Inventory"; + } + + public int getMaxStackSize() { + return 64; + } + + public int a(Entity entity) { + ItemStack itemstack = this.getItem(this.itemInHandIndex); + + return itemstack != null ? itemstack.a(entity) : 1; + } + + public boolean b(Block block) { + // CraftBukkit start - fixed NPE + if (block == null) { + return false; + } + // CraftBukkit end + + if (block.material.k()) { + return true; + } else { + ItemStack itemstack = this.getItem(this.itemInHandIndex); + + return itemstack != null ? itemstack.b(block) : false; + } + } + + public int j() { + int i = 0; + + for (int j = 0; j < this.armor.length; ++j) { + if (this.armor[j] != null && this.armor[j].getItem() instanceof ItemArmor) { + int k = ((ItemArmor) this.armor[j].getItem()).b; + + i += k; + } + } + + return i; + } + + public void d(int i) { + i /= 4; + if (i < 1) { + i = 1; + } + + for (int j = 0; j < this.armor.length; ++j) { + if (this.armor[j] != null && this.armor[j].getItem() instanceof ItemArmor) { + this.armor[j].damage(i, this.d); + if (this.armor[j].count == 0) { + this.armor[j].a(this.d); + this.armor[j] = null; + } + } + } + } + + public void k() { + int i; + + for (i = 0; i < this.items.length; ++i) { + if (this.items[i] != null) { + this.d.a(this.items[i], true); + this.items[i] = null; + } + } + + for (i = 0; i < this.armor.length; ++i) { + if (this.armor[i] != null) { + this.d.a(this.armor[i], true); + this.armor[i] = null; + } + } + } + + public void update() { + this.e = true; + } + + public void b(ItemStack itemstack) { + this.f = itemstack; + this.d.a(itemstack); + } + + public ItemStack l() { + return this.f; + } + + public boolean a(EntityHuman entityhuman) { + return this.d.dead ? false : entityhuman.i(this.d) <= 64.0D; + } + + public boolean c(ItemStack itemstack) { + int i; + + for (i = 0; i < this.armor.length; ++i) { + if (this.armor[i] != null && this.armor[i].c(itemstack)) { + return true; + } + } + + for (i = 0; i < this.items.length; ++i) { + if (this.items[i] != null && this.items[i].c(itemstack)) { + return true; + } + } + + return false; + } + + public void f() {} + + public void g() {} + + public void a(PlayerInventory playerinventory) { + int i; + + for (i = 0; i < this.items.length; ++i) { + this.items[i] = ItemStack.b(playerinventory.items[i]); + } + + for (i = 0; i < this.armor.length; ++i) { + this.armor[i] = ItemStack.b(playerinventory.armor[i]); + } + } +} -- cgit v1.2.3