From 0126ce2b16b74a4d40b46cf8c6cd80cd4552c157 Mon Sep 17 00:00:00 2001 From: CraftBukkit/Spigot Date: Sat, 11 Feb 2012 23:32:24 -0600 Subject: [PATCH] [Bleeding] Added BlockGrowEvent. Addresses BUKKIT-104 By: Feildmaster --- .../craftbukkit/block/CraftBlockState.java | 12 +++++++----- .../craftbukkit/event/CraftEventFactory.java | 17 ++++++++++++++++- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java index 5519afea4..34d8290f4 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java @@ -80,9 +80,11 @@ public class CraftBlockState implements BlockState { } public boolean setTypeId(final int type) { - this.type = type; + if (this.type != type) { + this.type = type; - createData((byte) 0); + createData((byte) 0); + } return true; } @@ -126,7 +128,7 @@ public class CraftBlockState implements BlockState { } private void createData(final byte data) { - Material mat = Material.getMaterial(type); + Material mat = getType(); if (mat == null || mat.getData() == null) { this.data = new MaterialData(type, data); } else { @@ -142,8 +144,8 @@ public class CraftBlockState implements BlockState { return new Location(world, x, y, z); } - public void setData(byte data) { - createData(data); + public void setRawData(byte data) { + this.data.setData(data); } @Override diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java index 9087d6ffa..a829d2ef9 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -52,6 +52,7 @@ import org.bukkit.block.BlockState; import org.bukkit.craftbukkit.CraftServer; import org.bukkit.craftbukkit.CraftWorld; import org.bukkit.craftbukkit.block.CraftBlock; +import org.bukkit.craftbukkit.block.CraftBlockState; import org.bukkit.craftbukkit.entity.CraftLivingEntity; import org.bukkit.craftbukkit.entity.CraftPlayer; import org.bukkit.craftbukkit.inventory.CraftItemStack; @@ -424,7 +425,7 @@ public class CraftEventFactory { public static boolean handleProjectileEvent(Projectile projectile, Entity target, DamageSource damagesource, int damage) { if (target instanceof EntityLiving || target instanceof EntityComplexPart || target instanceof EntityEnderCrystal) { org.bukkit.entity.Entity damagee = target.getBukkitEntity(); - + EntityDamageByEntityEvent event = new EntityDamageByEntityEvent(projectile, damagee, EntityDamageEvent.DamageCause.PROJECTILE, damage); Bukkit.getPluginManager().callEvent(event); @@ -438,4 +439,18 @@ public class CraftEventFactory { return !projectile.doesBounce(); } + + public static void handleBlockGrowEvent(World world, int x, int y, int z, int type, int data) { + Block block = world.getWorld().getBlockAt(x, y, z); + CraftBlockState state = (CraftBlockState) block.getState(); + state.setTypeId(type); + state.setRawData((byte) data); + + BlockGrowEvent event = new BlockGrowEvent(block, state); + Bukkit.getPluginManager().callEvent(event); + + if (!event.isCancelled()) { + state.update(true); + } + } }