summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/minecraft/server/ItemInWorldManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/minecraft/server/ItemInWorldManager.java')
-rw-r--r--src/main/java/net/minecraft/server/ItemInWorldManager.java28
1 files changed, 26 insertions, 2 deletions
diff --git a/src/main/java/net/minecraft/server/ItemInWorldManager.java b/src/main/java/net/minecraft/server/ItemInWorldManager.java
index aa63a1c4..64515d16 100644
--- a/src/main/java/net/minecraft/server/ItemInWorldManager.java
+++ b/src/main/java/net/minecraft/server/ItemInWorldManager.java
@@ -243,6 +243,8 @@ public class ItemInWorldManager {
public boolean breakBlock(int i, int j, int k) {
// CraftBukkit start
+ BlockBreakEvent event = null;
+
if (this.player instanceof EntityPlayer) {
org.bukkit.block.Block block = this.world.getWorld().getBlockAt(i, j, k);
@@ -255,8 +257,24 @@ public class ItemInWorldManager {
((EntityPlayer) this.player).netServerHandler.sendPacket(packet);
}
- BlockBreakEvent event = new BlockBreakEvent(block, (org.bukkit.entity.Player) this.player.getBukkitEntity());
- event.setCancelled(this.gamemode.isAdventure()); // Adventure mode pre-cancel
+ event = new BlockBreakEvent(block, this.player.getBukkitEntity());
+
+ // Adventure mode pre-cancel
+ event.setCancelled(this.gamemode.isAdventure());
+
+ // Calculate default block experience
+ Block nmsBlock = Block.byId[block.getTypeId()];
+
+ if (nmsBlock != null && !event.isCancelled() && !this.isCreative() && this.player.b(nmsBlock)) {
+ // Copied from Block.a(world, entityhuman, int, int, int, int)
+ if (!(nmsBlock.q_() && EnchantmentManager.hasSilkTouchEnchantment(this.player.inventory))) {
+ int data = block.getData();
+ int bonusLevel = EnchantmentManager.getBonusBlockLootEnchantmentLevel(this.player.inventory);
+
+ event.setExpToDrop(nmsBlock.getExpDrop(this.world, data, bonusLevel));
+ }
+ }
+
this.world.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) {
@@ -295,6 +313,12 @@ public class ItemInWorldManager {
}
}
+ // CraftBukkit start - drop event experience
+ if (flag && event != null) {
+ Block.byId[l].g(this.world, i, j, k, event.getExpToDrop());
+ }
+ // CraftBukkit end
+
return flag;
}
}