diff options
author | Celtic Minstrel <celtic.minstrel.ca@some.place> | 2012-03-05 14:21:43 -0500 |
---|---|---|
committer | EvilSeph <evilseph@gmail.com> | 2012-03-21 12:42:51 -0400 |
commit | 5ba892804158ba81b655826469363eefa8f0baaa (patch) | |
tree | 75daade710326db6487550877a21a8557951bc52 /src/main/java/net/minecraft/server/Block.java | |
parent | 8d62de7055a8c901240412ac41f3cb5091ea41a9 (diff) | |
download | craftbukkit-5ba892804158ba81b655826469363eefa8f0baaa.tar craftbukkit-5ba892804158ba81b655826469363eefa8f0baaa.tar.gz craftbukkit-5ba892804158ba81b655826469363eefa8f0baaa.tar.lz craftbukkit-5ba892804158ba81b655826469363eefa8f0baaa.tar.xz craftbukkit-5ba892804158ba81b655826469363eefa8f0baaa.zip |
[Bleeding] Added getting and setting drops to all appropriate events. Fixes BUKKIT-397 and fixes BUKKIT-1252
- Allows drops in creative mode by adding items to the getDrops() list
- Contents of containers are not reported
- Contents of storage minecarts are not reported
Diffstat (limited to 'src/main/java/net/minecraft/server/Block.java')
-rw-r--r-- | src/main/java/net/minecraft/server/Block.java | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java index 0cd743ce..ede85087 100644 --- a/src/main/java/net/minecraft/server/Block.java +++ b/src/main/java/net/minecraft/server/Block.java @@ -164,6 +164,7 @@ public class Block { public final Material material; public float frictionFactor; private String name; + protected ArrayList<ItemStack> dropList; // CraftBukkit protected Block(int i, Material material) { this.bR = true; @@ -358,6 +359,17 @@ public class Block { } protected void a(World world, int i, int j, int k, ItemStack itemstack) { + // CraftBukkit start - the logic of this function is moved into finishDrop + if (this.dropList != null) { + this.dropList.add(itemstack); + } else { + this.finishDrop(world, i, j, k, itemstack); + } + } + + public final void finishDrop(World world, int i, int j, int k, ItemStack itemstack) { + this.dropList = null; + // CraftBukkit end if (!world.isStatic) { float f = 0.7F; double d0 = (double) (world.random.nextFloat() * f) + (double) (1.0F - f) * 0.5D; @@ -529,6 +541,23 @@ public class Block { public void a(World world, EntityHuman entityhuman, int i, int j, int k, int l) { entityhuman.a(StatisticList.C[this.id], 1); entityhuman.c(0.025F); + // CraftBukkit start - A way to separate statistics from the logic of determining what to drop + this.doActualDrop(world, entityhuman, i, j, k, l); + } + + public void doActualDrop(World world, EntityHuman entityhuman, int i, int j, int k, int l) { + for (ItemStack stack : dropList) { + finishDrop(world, i, j, k, stack); + } + } + + public void setDrops(ArrayList<ItemStack> drops) { + this.dropList = drops; + } + + public ArrayList<ItemStack> calculateDrops(World world, EntityHuman entityhuman, int i, int j, int k, int l) { + this.dropList = new ArrayList<ItemStack>(); + // CraftBukkit end if (this.b() && !this.isTileEntity && EnchantmentManager.hasSilkTouchEnchantment(entityhuman.inventory)) { ItemStack itemstack = this.a_(l); @@ -540,6 +569,7 @@ public class Block { this.b(world, i, j, k, l, i1); } + return this.dropList; // CraftBukkit } protected ItemStack a_(int i) { |