summaryrefslogtreecommitdiffstats
path: root/src/main/java/org
diff options
context:
space:
mode:
authorCeltic Minstrel <celtic.minstrel.ca@some.place>2012-03-05 14:21:43 -0500
committerEvilSeph <evilseph@gmail.com>2012-03-21 12:42:51 -0400
commit5ba892804158ba81b655826469363eefa8f0baaa (patch)
tree75daade710326db6487550877a21a8557951bc52 /src/main/java/org
parent8d62de7055a8c901240412ac41f3cb5091ea41a9 (diff)
downloadcraftbukkit-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/org')
-rw-r--r--src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
index cebaa8f0..394e52ab 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -1,6 +1,8 @@
package org.bukkit.craftbukkit.event;
import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -16,10 +18,12 @@ import net.minecraft.server.EntityItem;
import net.minecraft.server.EntityLiving;
import net.minecraft.server.EntityPlayer;
import net.minecraft.server.EntityPotion;
+import net.minecraft.server.IInventory;
import net.minecraft.server.InventoryCrafting;
import net.minecraft.server.Item;
import net.minecraft.server.ItemStack;
import net.minecraft.server.Packet101CloseWindow;
+import net.minecraft.server.Packet53BlockChange;
import net.minecraft.server.World;
import net.minecraft.server.WorldServer;
@@ -485,6 +489,7 @@ public class CraftEventFactory {
public static ItemStack callPreCraftEvent(InventoryCrafting matrix, ItemStack result, InventoryView lastCraftView, boolean isRepair) {
CraftInventoryCrafting inventory = new CraftInventoryCrafting(matrix, matrix.resultInventory);
inventory.setResult(new CraftItemStack(result));
+
PrepareItemCraftEvent event = new PrepareItemCraftEvent(inventory, lastCraftView, isRepair);
Bukkit.getPluginManager().callEvent(event);
@@ -506,4 +511,42 @@ public class CraftEventFactory {
Bukkit.getPluginManager().callEvent(event);
return event;
}
+
+ public static boolean callBlockBreakEvent(World world, int x, int y, int z, int id, int data, boolean creative, EntityHuman player) {
+ net.minecraft.server.Block blockType = net.minecraft.server.Block.byId[id];
+ Block block = world.getWorld().getBlockAt(x, y, z);
+
+ // Tell client the block is gone immediately then process events
+ if (world.getTileEntity(x, y, z) == null) {
+ Packet53BlockChange packet = new Packet53BlockChange(x, y, z, world);
+
+ packet.material = 0;
+ packet.data = 0;
+ ((EntityPlayer) player).netServerHandler.sendPacket(packet);
+ }
+
+ List<org.bukkit.inventory.ItemStack> drops = new ArrayList<org.bukkit.inventory.ItemStack>();
+ if (!creative && player.b(blockType)) {
+ for (ItemStack stack : blockType.calculateDrops(world, player, x, y, z, data)) {
+ drops.add(new CraftItemStack(stack));
+ }
+ }
+
+ BlockBreakEvent event = new BlockBreakEvent(block, (org.bukkit.entity.Player) player.getBukkitEntity(), drops);
+ world.getServer().getPluginManager().callEvent(event);
+
+ if (event.isCancelled()) {
+ // Let the client know the block still exists
+ ((EntityPlayer) player).netServerHandler.sendPacket(new Packet53BlockChange(x, y, z, world));
+ return true;
+ }
+
+ ArrayList<ItemStack> toDrop = new ArrayList<ItemStack>();
+ for (org.bukkit.inventory.ItemStack stack : drops) {
+ toDrop.add(CraftItemStack.createNMSItemStack(stack));
+ }
+ blockType.setDrops(toDrop);
+
+ return false; // Event not cancelled
+ }
}