Archiviert
13
0
Dieses Repository wurde am 2024-12-25 archiviert. Du kannst Dateien ansehen und es klonen, aber nicht pushen oder Issues/Pull-Requests öffnen.
Paper-Old/src/main/java/net/minecraft/server/InventoryPlayer.java

349 Zeilen
8.3 KiB
Java

2011-01-29 22:50:29 +01:00
package net.minecraft.server;
public class InventoryPlayer implements IInventory {
public ItemStack[] a = new ItemStack[36];
public ItemStack[] b = new ItemStack[4];
public int c = 0;
2011-03-31 22:40:00 +02:00
public EntityHuman d; // CraftBukkit - private->public
2011-01-29 22:50:29 +01:00
private ItemStack f;
2011-03-31 22:40:00 +02:00
public boolean e = false;
2011-01-29 22:50:29 +01:00
// CraftBukkit start
public ItemStack[] getContents() {
return a;
}
public ItemStack[] getArmorContents() {
return b;
}
// CraftBukkit end
public InventoryPlayer(EntityHuman entityhuman) {
2011-03-31 22:40:00 +02:00
this.d = entityhuman;
2011-01-29 22:50:29 +01:00
}
2011-02-23 03:37:56 +01:00
public ItemStack b() {
2011-03-31 22:40:00 +02:00
return this.c < 9 && this.c >= 0 ? this.a[this.c] : null;
}
public static int e() {
return 9;
2011-01-29 22:50:29 +01:00
}
private int d(int i) {
for (int j = 0; j < this.a.length; ++j) {
if (this.a[j] != null && this.a[j].id == i) {
return j;
}
}
return -1;
}
private int c(ItemStack itemstack) {
for (int i = 0; i < this.a.length; ++i) {
2011-03-31 22:40:00 +02:00
if (this.a[i] != null && this.a[i].id == itemstack.id && this.a[i].c() && this.a[i].count < this.a[i].b() && this.a[i].count < this.r_() && (!this.a[i].e() || this.a[i].h() == itemstack.h())) {
2011-01-29 22:50:29 +01:00
return i;
}
}
return -1;
}
2011-03-31 22:40:00 +02:00
private int k() {
2011-01-29 22:50:29 +01:00
for (int i = 0; i < this.a.length; ++i) {
if (this.a[i] == null) {
return i;
}
}
return -1;
}
private int d(ItemStack itemstack) {
int i = itemstack.id;
int j = itemstack.count;
int k = this.c(itemstack);
if (k < 0) {
2011-03-31 22:40:00 +02:00
k = this.k();
2011-01-29 22:50:29 +01:00
}
if (k < 0) {
return j;
} else {
if (this.a[k] == null) {
this.a[k] = new ItemStack(i, 0, itemstack.h());
}
int l = j;
if (j > this.a[k].b() - this.a[k].count) {
l = this.a[k].b() - this.a[k].count;
}
2011-03-31 22:40:00 +02:00
if (l > this.r_() - this.a[k].count) {
l = this.r_() - this.a[k].count;
2011-01-29 22:50:29 +01:00
}
if (l == 0) {
return j;
} else {
j -= l;
this.a[k].count += l;
this.a[k].b = 5;
return j;
}
}
}
2011-03-31 22:40:00 +02:00
public void f() {
2011-01-29 22:50:29 +01:00
for (int i = 0; i < this.a.length; ++i) {
if (this.a[i] != null && this.a[i].b > 0) {
--this.a[i].b;
}
}
}
public boolean b(int i) {
int j = this.d(i);
if (j < 0) {
return false;
} else {
if (--this.a[j].count <= 0) {
this.a[j] = null;
}
return true;
}
}
public boolean a(ItemStack itemstack) {
if (!itemstack.f()) {
itemstack.count = this.d(itemstack);
if (itemstack.count == 0) {
return true;
}
}
2011-03-31 22:40:00 +02:00
int i = this.k();
2011-01-29 22:50:29 +01:00
if (i >= 0) {
this.a[i] = itemstack;
this.a[i].b = 5;
return true;
} else {
return false;
}
}
2011-02-23 03:37:56 +01:00
public ItemStack a(int i, int j) {
2011-01-29 22:50:29 +01:00
ItemStack[] aitemstack = this.a;
if (i >= this.a.length) {
aitemstack = this.b;
i -= this.a.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 a(int i, ItemStack itemstack) {
ItemStack[] aitemstack = this.a;
if (i >= aitemstack.length) {
i -= aitemstack.length;
aitemstack = this.b;
}
aitemstack[i] = itemstack;
}
public float a(Block block) {
float f = 1.0F;
if (this.a[this.c] != null) {
f *= this.a[this.c].a(block);
}
return f;
}
public NBTTagList a(NBTTagList nbttaglist) {
int i;
NBTTagCompound nbttagcompound;
for (i = 0; i < this.a.length; ++i) {
if (this.a[i] != null) {
nbttagcompound = new NBTTagCompound();
nbttagcompound.a("Slot", (byte) i);
this.a[i].a(nbttagcompound);
nbttaglist.a((NBTBase) nbttagcompound);
}
}
for (i = 0; i < this.b.length; ++i) {
if (this.b[i] != null) {
nbttagcompound = new NBTTagCompound();
nbttagcompound.a("Slot", (byte) (i + 100));
this.b[i].a(nbttagcompound);
nbttaglist.a((NBTBase) nbttagcompound);
}
}
return nbttaglist;
}
public void b(NBTTagList nbttaglist) {
this.a = new ItemStack[36];
this.b = new ItemStack[4];
2011-02-23 03:37:56 +01:00
for (int i = 0; i < nbttaglist.c(); ++i) {
2011-01-29 22:50:29 +01:00
NBTTagCompound nbttagcompound = (NBTTagCompound) nbttaglist.a(i);
2011-02-23 03:37:56 +01:00
int j = nbttagcompound.c("Slot") & 255;
2011-01-29 22:50:29 +01:00
ItemStack itemstack = new ItemStack(nbttagcompound);
if (itemstack.a() != null) {
if (j >= 0 && j < this.a.length) {
this.a[j] = itemstack;
}
if (j >= 100 && j < this.b.length + 100) {
this.b[j - 100] = itemstack;
}
}
}
}
2011-03-31 22:40:00 +02:00
public int q_() {
2011-02-23 03:37:56 +01:00
return this.a.length + 4;
2011-01-29 22:50:29 +01:00
}
2011-02-23 03:37:56 +01:00
public ItemStack c_(int i) {
2011-01-29 22:50:29 +01:00
ItemStack[] aitemstack = this.a;
if (i >= aitemstack.length) {
i -= aitemstack.length;
aitemstack = this.b;
}
return aitemstack[i];
}
2011-02-23 03:37:56 +01:00
public String c() {
2011-01-29 22:50:29 +01:00
return "Inventory";
}
2011-03-31 22:40:00 +02:00
public int r_() {
2011-01-29 22:50:29 +01:00
return 64;
}
public int a(Entity entity) {
2011-02-23 03:37:56 +01:00
ItemStack itemstack = this.c_(this.c);
2011-01-29 22:50:29 +01:00
return itemstack != null ? itemstack.a(entity) : 1;
}
public boolean b(Block block) {
if (block.material != Material.STONE && block.material != Material.ORE && block.material != Material.SNOW_BLOCK && block.material != Material.SNOW_LAYER) {
return true;
} else {
2011-02-23 03:37:56 +01:00
ItemStack itemstack = this.c_(this.c);
2011-01-29 22:50:29 +01:00
return itemstack != null ? itemstack.b(block) : false;
}
}
2011-03-31 22:40:00 +02:00
public int g() {
2011-01-29 22:50:29 +01:00
int i = 0;
int j = 0;
int k = 0;
for (int l = 0; l < this.b.length; ++l) {
if (this.b[l] != null && this.b[l].a() instanceof ItemArmor) {
int i1 = this.b[l].i();
int j1 = this.b[l].g();
int k1 = i1 - j1;
j += k1;
k += i1;
2011-02-23 03:37:56 +01:00
int l1 = ((ItemArmor) this.b[l].a()).bj;
2011-01-29 22:50:29 +01:00
i += l1;
}
}
if (k == 0) {
return 0;
} else {
return (i - 1) * j / k + 1;
}
}
public void c(int i) {
for (int j = 0; j < this.b.length; ++j) {
if (this.b[j] != null && this.b[j].a() instanceof ItemArmor) {
2011-03-31 22:40:00 +02:00
this.b[j].a(i, this.d);
2011-01-29 22:50:29 +01:00
if (this.b[j].count == 0) {
2011-03-31 22:40:00 +02:00
this.b[j].a(this.d);
2011-01-29 22:50:29 +01:00
this.b[j] = null;
}
}
}
}
2011-03-31 22:40:00 +02:00
public void h() {
2011-01-29 22:50:29 +01:00
int i;
for (i = 0; i < this.a.length; ++i) {
if (this.a[i] != null) {
2011-03-31 22:40:00 +02:00
this.d.a(this.a[i], true);
2011-01-29 22:50:29 +01:00
this.a[i] = null;
}
}
for (i = 0; i < this.b.length; ++i) {
if (this.b[i] != null) {
2011-03-31 22:40:00 +02:00
this.d.a(this.b[i], true);
2011-01-29 22:50:29 +01:00
this.b[i] = null;
}
}
}
2011-03-31 22:40:00 +02:00
public void i() {
this.e = true;
2011-01-29 22:50:29 +01:00
}
public void b(ItemStack itemstack) {
this.f = itemstack;
2011-03-31 22:40:00 +02:00
this.d.a(itemstack);
2011-01-29 22:50:29 +01:00
}
2011-03-31 22:40:00 +02:00
public ItemStack j() {
2011-01-29 22:50:29 +01:00
return this.f;
}
public boolean a_(EntityHuman entityhuman) {
2011-03-31 22:40:00 +02:00
return this.d.dead ? false : entityhuman.g(this.d) <= 64.0D;
2011-01-29 22:50:29 +01:00
}
}