diff options
author | feildmaster <admin@feildmaster.com> | 2012-12-19 22:03:52 -0600 |
---|---|---|
committer | feildmaster <admin@feildmaster.com> | 2012-12-20 10:43:00 -0600 |
commit | 23b67643741d5754af4de020a29d557078f9f81d (patch) | |
tree | 90e1a32f7eb94af49a381cb6bc34bf6247f0efe6 /src/main/java/net/minecraft/server/EntityItem.java | |
parent | 9f1bf124eec7c20f16b2034fd9fba55f70c805fd (diff) | |
download | craftbukkit-23b67643741d5754af4de020a29d557078f9f81d.tar craftbukkit-23b67643741d5754af4de020a29d557078f9f81d.tar.gz craftbukkit-23b67643741d5754af4de020a29d557078f9f81d.tar.lz craftbukkit-23b67643741d5754af4de020a29d557078f9f81d.tar.xz craftbukkit-23b67643741d5754af4de020a29d557078f9f81d.zip |
Update CraftBukkit to Minecraft 1.4.6
Diffstat (limited to 'src/main/java/net/minecraft/server/EntityItem.java')
-rw-r--r-- | src/main/java/net/minecraft/server/EntityItem.java | 127 |
1 files changed, 73 insertions, 54 deletions
diff --git a/src/main/java/net/minecraft/server/EntityItem.java b/src/main/java/net/minecraft/server/EntityItem.java index a1dca162..c8776867 100644 --- a/src/main/java/net/minecraft/server/EntityItem.java +++ b/src/main/java/net/minecraft/server/EntityItem.java @@ -6,46 +6,47 @@ import org.bukkit.event.player.PlayerPickupItemEvent; // CraftBukkit public class EntityItem extends Entity { - public ItemStack itemStack; - public int age = 0; + public int age; public int pickupDelay; - private int e = 5; - public float d = (float) (Math.random() * 3.141592653589793D * 2.0D); + private int d; + public float c; private int lastTick = (int) (System.currentTimeMillis() / 50); // CraftBukkit - public EntityItem(World world, double d0, double d1, double d2, ItemStack itemstack) { + public EntityItem(World world, double d0, double d1, double d2) { super(world); + this.age = 0; + this.d = 5; + this.c = (float) (Math.random() * 3.141592653589793D * 2.0D); this.a(0.25F, 0.25F); this.height = this.length / 2.0F; this.setPosition(d0, d1, d2); - this.itemStack = itemstack; - - // CraftBukkit start - infinite item fix & nullcheck - if (this.itemStack == null) { - throw new IllegalArgumentException("Can't create an EntityItem for a null item"); - } - if (this.itemStack.count <= -1) { - this.itemStack.count = 1; - } - // CraftBukkit end - this.yaw = (float) (Math.random() * 360.0D); this.motX = (double) ((float) (Math.random() * 0.20000000298023224D - 0.10000000149011612D)); this.motY = 0.20000000298023224D; this.motZ = (double) ((float) (Math.random() * 0.20000000298023224D - 0.10000000149011612D)); } + public EntityItem(World world, double d0, double d1, double d2, ItemStack itemstack) { + this(world, d0, d1, d2); + this.setItemStack(itemstack); + } + protected boolean f_() { return false; } public EntityItem(World world) { super(world); + this.age = 0; + this.d = 5; + this.c = (float) (Math.random() * 3.141592653589793D * 2.0D); this.a(0.25F, 0.25F); this.height = this.length / 2.0F; } - protected void a() {} + protected void a() { + this.getDataWatcher().a(10, 5); + } public void j_() { super.j_(); @@ -63,7 +64,7 @@ public class EntityItem extends Entity { this.move(this.motX, this.motY, this.motZ); boolean flag = (int) this.lastX != (int) this.locX || (int) this.lastY != (int) this.locY || (int) this.lastZ != (int) this.locZ; - if (flag) { + if (flag || this.ticksLived % 25 == 0) { if (this.world.getMaterial(MathHelper.floor(this.locX), MathHelper.floor(this.locY), MathHelper.floor(this.locZ)) == Material.LAVA) { this.motY = 0.20000000298023224D; this.motX = (double) ((this.random.nextFloat() - this.random.nextFloat()) * 0.2F); @@ -72,7 +73,7 @@ public class EntityItem extends Entity { } if (!this.world.isStatic) { - this.d(); + this.g(); } } @@ -106,7 +107,7 @@ public class EntityItem extends Entity { } } - private void d() { + private void g() { Iterator iterator = this.world.a(EntityItem.class, this.boundingBox.grow(0.5D, 0.0D, 0.5D)).iterator(); while (iterator.hasNext()) { @@ -120,26 +121,26 @@ public class EntityItem extends Entity { if (entityitem == this) { return false; } else if (entityitem.isAlive() && this.isAlive()) { - if (entityitem.itemStack.getItem() != this.itemStack.getItem()) { + ItemStack itemstack = this.getItemStack(); + ItemStack itemstack1 = entityitem.getItemStack(); + + if (itemstack1.getItem() != itemstack.getItem()) { return false; - } else if (entityitem.itemStack.hasTag() ^ this.itemStack.hasTag()) { + } else if (itemstack1.hasTag() ^ itemstack.hasTag()) { return false; - } else if (entityitem.itemStack.hasTag() && !entityitem.itemStack.getTag().equals(this.itemStack.getTag())) { + } else if (itemstack1.hasTag() && !itemstack1.getTag().equals(itemstack.getTag())) { return false; - } else if (entityitem.itemStack.getItem().l() && entityitem.itemStack.getData() != this.itemStack.getData()) { + } else if (itemstack1.getItem().l() && itemstack1.getData() != itemstack.getData()) { return false; - } else if (entityitem.itemStack.count < this.itemStack.count) { + } else if (itemstack1.count < itemstack.count) { return entityitem.a(this); - } else if (entityitem.itemStack.count + this.itemStack.count > entityitem.itemStack.getMaxStackSize()) { + } else if (itemstack1.count + itemstack.count > itemstack1.getMaxStackSize()) { return false; - // CraftBukkit start - don't merge items with enchantments - } else if (entityitem.itemStack.hasEnchantments() || this.itemStack.hasEnchantments()) { - return false; - // CraftBukkit end } else { - entityitem.itemStack.count += this.itemStack.count; + itemstack1.count += itemstack.count; entityitem.pickupDelay = Math.max(entityitem.pickupDelay, this.pickupDelay); entityitem.age = Math.min(entityitem.age, this.age); + entityitem.setItemStack(itemstack1); this.die(); return true; } @@ -163,10 +164,12 @@ public class EntityItem extends Entity { public boolean damageEntity(DamageSource damagesource, int i) { if (this.isInvulnerable()) { return false; + } else if (this.getItemStack() != null && this.getItemStack().id == Item.NETHER_STAR.id && damagesource == DamageSource.EXPLOSION) { + return false; } else { this.K(); - this.e -= i; - if (this.e <= 0) { + this.d -= i; + if (this.d <= 0) { this.die(); } @@ -175,38 +178,39 @@ public class EntityItem extends Entity { } public void b(NBTTagCompound nbttagcompound) { - nbttagcompound.setShort("Health", (short) ((byte) this.e)); + nbttagcompound.setShort("Health", (short) ((byte) this.d)); nbttagcompound.setShort("Age", (short) this.age); - if (this.itemStack != null) { - nbttagcompound.setCompound("Item", this.itemStack.save(new NBTTagCompound())); + if (this.getItemStack() != null) { + nbttagcompound.setCompound("Item", this.getItemStack().save(new NBTTagCompound())); } } public void a(NBTTagCompound nbttagcompound) { - this.e = nbttagcompound.getShort("Health") & 255; + this.d = nbttagcompound.getShort("Health") & 255; this.age = nbttagcompound.getShort("Age"); NBTTagCompound nbttagcompound1 = nbttagcompound.getCompound("Item"); - this.itemStack = ItemStack.a(nbttagcompound1); - if (this.itemStack == null) { + this.setItemStack(ItemStack.a(nbttagcompound1)); + if (this.getItemStack() == null) { this.die(); } } public void c_(EntityHuman entityhuman) { - if ((!this.world.isStatic) && (this.itemStack != null)) { // CraftBukkit - nullcheck - int i = this.itemStack.count; + if (!this.world.isStatic) { + ItemStack itemstack = this.getItemStack(); + int i = itemstack.count; // CraftBukkit start - int canHold = entityhuman.inventory.canHold(this.itemStack); - int remaining = this.itemStack.count - canHold; + int canHold = entityhuman.inventory.canHold(itemstack); + int remaining = itemstack.count - canHold; if (this.pickupDelay <= 0 && canHold > 0) { - this.itemStack.count = canHold; + itemstack.count = canHold; PlayerPickupItemEvent event = new PlayerPickupItemEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), (org.bukkit.entity.Item) this.getBukkitEntity(), remaining); event.setCancelled(!entityhuman.canPickUpLoot); this.world.getServer().getPluginManager().callEvent(event); - this.itemStack.count = canHold + remaining; + itemstack.count = canHold + remaining; if (event.isCancelled()) { return; @@ -217,26 +221,26 @@ public class EntityItem extends Entity { } // CraftBukkit end - if (this.pickupDelay == 0 && entityhuman.inventory.pickup(this.itemStack)) { - if (this.itemStack.id == Block.LOG.id) { + if (this.pickupDelay == 0 && entityhuman.inventory.pickup(itemstack)) { + if (itemstack.id == Block.LOG.id) { entityhuman.a((Statistic) AchievementList.g); } - if (this.itemStack.id == Item.LEATHER.id) { + if (itemstack.id == Item.LEATHER.id) { entityhuman.a((Statistic) AchievementList.t); } - if (this.itemStack.id == Item.DIAMOND.id) { + if (itemstack.id == Item.DIAMOND.id) { entityhuman.a((Statistic) AchievementList.w); } - if (this.itemStack.id == Item.BLAZE_ROD.id) { + if (itemstack.id == Item.BLAZE_ROD.id) { entityhuman.a((Statistic) AchievementList.z); } this.makeSound("random.pop", 0.2F, ((this.random.nextFloat() - this.random.nextFloat()) * 0.7F + 1.0F) * 2.0F); entityhuman.receive(this, i); - if (this.itemStack.count <= 0) { + if (itemstack.count <= 0) { this.die(); } } @@ -244,8 +248,7 @@ public class EntityItem extends Entity { } public String getLocalizedName() { - if (this.itemStack == null) return LocaleI18n.get("item.unknown"); // CraftBukkit - nullcheck - return LocaleI18n.get("item." + this.itemStack.a()); + return LocaleI18n.get("item." + this.getItemStack().a()); } public boolean aq() { @@ -255,7 +258,23 @@ public class EntityItem extends Entity { public void b(int i) { super.b(i); if (!this.world.isStatic) { - this.d(); + this.g(); + } + } + + public ItemStack getItemStack() { + ItemStack itemstack = this.getDataWatcher().f(10); + + if (itemstack == null) { + System.out.println("Item entity " + this.id + " has no item?!"); + return new ItemStack(Block.STONE); + } else { + return itemstack; } } + + public void setItemStack(ItemStack itemstack) { + this.getDataWatcher().watch(10, itemstack); + this.getDataWatcher().h(10); + } } |