From a7a5f273e3765a819f7d2ac71b4be4dbd28f9db4 Mon Sep 17 00:00:00 2001 From: Yariv Livay Date: Sun, 17 Mar 2013 22:46:48 +0200 Subject: Implement new cause versions of BlockIgniteEvent. Addresses BUKKIT-3609, BUKKIT-3656, BUKKIT-3657 --- src/main/java/net/minecraft/server/BlockFire.java | 16 ++++----------- .../java/net/minecraft/server/BlockStationary.java | 22 +++++++++------------ .../server/DispenseBehaviorFlintAndSteel.java | 11 ++++++++--- .../net/minecraft/server/EntityEnderCrystal.java | 6 +++++- .../java/net/minecraft/server/EntityLightning.java | 23 ++++++---------------- .../net/minecraft/server/EntitySmallFireball.java | 8 ++------ src/main/java/net/minecraft/server/Explosion.java | 5 ++++- .../java/net/minecraft/server/ItemFireball.java | 13 +----------- .../net/minecraft/server/ItemFlintAndSteel.java | 14 ++----------- 9 files changed, 41 insertions(+), 77 deletions(-) (limited to 'src/main/java/net/minecraft') diff --git a/src/main/java/net/minecraft/server/BlockFire.java b/src/main/java/net/minecraft/server/BlockFire.java index eb33c84f..16ea6d01 100644 --- a/src/main/java/net/minecraft/server/BlockFire.java +++ b/src/main/java/net/minecraft/server/BlockFire.java @@ -3,7 +3,7 @@ package net.minecraft.server; import java.util.Random; // CraftBukkit start -import org.bukkit.event.block.BlockIgniteEvent; +import org.bukkit.craftbukkit.event.CraftEventFactory; import org.bukkit.event.block.BlockBurnEvent; import org.bukkit.event.block.BlockSpreadEvent; // CraftBukkit end @@ -111,9 +111,6 @@ public class BlockFire extends Block { // CraftBukkit start - call to stop spread of fire org.bukkit.Server server = world.getServer(); org.bukkit.World bworld = world.getWorld(); - - BlockIgniteEvent.IgniteCause igniteCause = BlockIgniteEvent.IgniteCause.SPREAD; - org.bukkit.block.Block fromBlock = bworld.getBlockAt(i, j, k); // CraftBukkit end for (int i1 = i - 1; i1 <= i + 1; ++i1) { @@ -143,13 +140,8 @@ public class BlockFire extends Block { } // CraftBukkit start - call to stop spread of fire - org.bukkit.block.Block block = bworld.getBlockAt(i1, k1, j1); - - if (block.getTypeId() != Block.FIRE.id) { - BlockIgniteEvent event = new BlockIgniteEvent(block, igniteCause, null); - server.getPluginManager().callEvent(event); - - if (event.isCancelled()) { + if (world.getTypeId(i1, k1, j1) != Block.FIRE.id) { + if (CraftEventFactory.callBlockIgniteEvent(world, i1, k1, j1, i, j, k).isCancelled()) { continue; } @@ -157,7 +149,7 @@ public class BlockFire extends Block { blockState.setTypeId(this.id); blockState.setData(new org.bukkit.material.MaterialData(this.id, (byte) k2)); - BlockSpreadEvent spreadEvent = new BlockSpreadEvent(blockState.getBlock(), fromBlock, blockState); + BlockSpreadEvent spreadEvent = new BlockSpreadEvent(blockState.getBlock(), bworld.getBlockAt(i, j, k), blockState); server.getPluginManager().callEvent(spreadEvent); if (!spreadEvent.isCancelled()) { diff --git a/src/main/java/net/minecraft/server/BlockStationary.java b/src/main/java/net/minecraft/server/BlockStationary.java index cf444680..14fbb0fd 100644 --- a/src/main/java/net/minecraft/server/BlockStationary.java +++ b/src/main/java/net/minecraft/server/BlockStationary.java @@ -2,10 +2,7 @@ package net.minecraft.server; import java.util.Random; -// CraftBukkit start -import org.bukkit.craftbukkit.event.CraftEventFactory; -import org.bukkit.event.block.BlockIgniteEvent; -// CraftBukkit end +import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit public class BlockStationary extends BlockFluids { @@ -42,9 +39,10 @@ public class BlockStationary extends BlockFluids { int i1; int j1; - // CraftBukkit start - prevent lava putting something on fire - org.bukkit.World bworld = world.getWorld(); - BlockIgniteEvent.IgniteCause igniteCause = BlockIgniteEvent.IgniteCause.LAVA; + // CraftBukkit start - prevent lava putting something on fire, remember igniter block coords + int x = i; + int y = j; + int z = k; // CraftBukkit end for (i1 = 0; i1 < l; ++i1) { @@ -55,9 +53,8 @@ public class BlockStationary extends BlockFluids { if (j1 == 0) { if (this.m(world, i - 1, j, k) || this.m(world, i + 1, j, k) || this.m(world, i, j, k - 1) || this.m(world, i, j, k + 1) || this.m(world, i, j - 1, k) || this.m(world, i, j + 1, k)) { // CraftBukkit start - prevent lava putting something on fire - org.bukkit.block.Block block = bworld.getBlockAt(i, j, k); - if (block.getTypeId() != Block.FIRE.id) { - if (CraftEventFactory.callEvent(new BlockIgniteEvent(block, igniteCause, null)).isCancelled()) { + if (world.getTypeId(i, j, k) != Block.FIRE.id) { + if (CraftEventFactory.callBlockIgniteEvent(world, i, j, k, x, y, z).isCancelled()) { continue; } } @@ -80,9 +77,8 @@ public class BlockStationary extends BlockFluids { k = j1 + random.nextInt(3) - 1; if (world.isEmpty(i, j + 1, k) && this.m(world, i, j, k)) { // CraftBukkit start - prevent lava putting something on fire - org.bukkit.block.Block block = bworld.getBlockAt(i, j + 1, k); - if (block.getTypeId() != Block.FIRE.id) { - if (CraftEventFactory.callEvent(new BlockIgniteEvent(block, igniteCause, null)).isCancelled()) { + if (world.getTypeId(i, j + 1, k) != Block.FIRE.id) { + if (CraftEventFactory.callBlockIgniteEvent(world, i, j + 1, k, x, y, z).isCancelled()) { continue; } } diff --git a/src/main/java/net/minecraft/server/DispenseBehaviorFlintAndSteel.java b/src/main/java/net/minecraft/server/DispenseBehaviorFlintAndSteel.java index 834e93a2..c15c468b 100644 --- a/src/main/java/net/minecraft/server/DispenseBehaviorFlintAndSteel.java +++ b/src/main/java/net/minecraft/server/DispenseBehaviorFlintAndSteel.java @@ -1,6 +1,7 @@ package net.minecraft.server; // CraftBukkit start +import org.bukkit.craftbukkit.event.CraftEventFactory; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.event.block.BlockDispenseEvent; // CraftBukkit end @@ -43,10 +44,14 @@ final class DispenseBehaviorFlintAndSteel extends DispenseBehaviorItem { // CraftBukkit end if (world.isEmpty(i, j, k)) { - world.setTypeIdUpdate(i, j, k, Block.FIRE.id); - if (itemstack.isDamaged(1, world.random)) { - itemstack.count = 0; + // CraftBukkit - ignition by dispensing flint and steel + if (!CraftEventFactory.callBlockIgniteEvent(world, i, j, k, isourceblock.getBlockX(), isourceblock.getBlockY(), isourceblock.getBlockZ()).isCancelled()) { + world.setTypeIdUpdate(i, j, k, Block.FIRE.id); + if (itemstack.isDamaged(1, world.random)) { + itemstack.count = 0; + } } + // CraftBukkit end } else if (world.getTypeId(i, j, k) == Block.TNT.id) { Block.TNT.postBreak(world, i, j, k, 1); world.setAir(i, j, k); diff --git a/src/main/java/net/minecraft/server/EntityEnderCrystal.java b/src/main/java/net/minecraft/server/EntityEnderCrystal.java index c0155a65..43475eef 100644 --- a/src/main/java/net/minecraft/server/EntityEnderCrystal.java +++ b/src/main/java/net/minecraft/server/EntityEnderCrystal.java @@ -33,7 +33,11 @@ public class EntityEnderCrystal extends Entity { int k = MathHelper.floor(this.locZ); if (this.world.getTypeId(i, j, k) != Block.FIRE.id) { - this.world.setTypeIdUpdate(i, j, k, Block.FIRE.id); + // CraftBukkit start + if (!org.bukkit.craftbukkit.event.CraftEventFactory.callBlockIgniteEvent(this.world, i, j, k, this).isCancelled()) { + this.world.setTypeIdUpdate(i, j, k, Block.FIRE.id); + } + // CraftBukkit end } } diff --git a/src/main/java/net/minecraft/server/EntityLightning.java b/src/main/java/net/minecraft/server/EntityLightning.java index 638615d4..83c45101 100644 --- a/src/main/java/net/minecraft/server/EntityLightning.java +++ b/src/main/java/net/minecraft/server/EntityLightning.java @@ -2,7 +2,7 @@ package net.minecraft.server; import java.util.List; -import org.bukkit.event.block.BlockIgniteEvent; // CraftBukkit +import org.bukkit.craftbukkit.event.CraftEventFactory; // CraftBukkit public class EntityLightning extends EntityWeather { @@ -11,7 +11,6 @@ public class EntityLightning extends EntityWeather { private int c; // CraftBukkit start - private org.bukkit.craftbukkit.CraftWorld cworld; public boolean isEffect = false; public EntityLightning(World world, double d0, double d1, double d2) { @@ -25,7 +24,6 @@ public class EntityLightning extends EntityWeather { // CraftBukkit start this.isEffect = isEffect; - this.cworld = world.getWorld(); // CraftBukkit end this.setPositionRotation(d0, d1, d2, 0.0F, 0.0F); @@ -41,10 +39,7 @@ public class EntityLightning extends EntityWeather { if (world.getTypeId(i, j, k) == 0 && Block.FIRE.canPlace(world, i, j, k)) { // CraftBukkit start - BlockIgniteEvent event = new BlockIgniteEvent(this.cworld.getBlockAt(i, j, k), BlockIgniteEvent.IgniteCause.LIGHTNING, null); - world.getServer().getPluginManager().callEvent(event); - - if (!event.isCancelled()) { + if (!CraftEventFactory.callBlockIgniteEvent(world, i, j, k, this).isCancelled()) { world.setTypeIdUpdate(i, j, k, Block.FIRE.id); } // CraftBukkit end @@ -57,11 +52,8 @@ public class EntityLightning extends EntityWeather { if (world.getTypeId(j, k, l) == 0 && Block.FIRE.canPlace(world, j, k, l)) { // CraftBukkit start - BlockIgniteEvent event = new BlockIgniteEvent(this.cworld.getBlockAt(j, k, l), BlockIgniteEvent.IgniteCause.LIGHTNING, null); - world.getServer().getPluginManager().callEvent(event); - - if (!event.isCancelled()) { - world.setTypeIdUpdate(j, k, l, Block.FIRE.id); + if (!CraftEventFactory.callBlockIgniteEvent(world, j, k, l, this).isCancelled()) { + world.setTypeIdUpdate(i, j, k, Block.FIRE.id); } // CraftBukkit end } @@ -92,11 +84,8 @@ public class EntityLightning extends EntityWeather { if (this.world.getTypeId(i, j, k) == 0 && Block.FIRE.canPlace(this.world, i, j, k)) { // CraftBukkit start - BlockIgniteEvent event = new BlockIgniteEvent(this.cworld.getBlockAt(i, j, k), BlockIgniteEvent.IgniteCause.LIGHTNING, null); - this.world.getServer().getPluginManager().callEvent(event); - - if (!event.isCancelled()) { - this.world.setTypeIdUpdate(i, j, k, Block.FIRE.id); + if (!CraftEventFactory.callBlockIgniteEvent(world, i, j, k, this).isCancelled()) { + world.setTypeIdUpdate(i, j, k, Block.FIRE.id); } // CraftBukkit end } diff --git a/src/main/java/net/minecraft/server/EntitySmallFireball.java b/src/main/java/net/minecraft/server/EntitySmallFireball.java index a7e7915b..6d623d10 100644 --- a/src/main/java/net/minecraft/server/EntitySmallFireball.java +++ b/src/main/java/net/minecraft/server/EntitySmallFireball.java @@ -1,7 +1,7 @@ package net.minecraft.server; // CraftBukkit start -import org.bukkit.event.block.BlockIgniteEvent; +import org.bukkit.craftbukkit.event.CraftEventFactory; import org.bukkit.event.entity.EntityCombustByEntityEvent; // CraftBukkit end @@ -67,11 +67,7 @@ public class EntitySmallFireball extends EntityFireball { if (this.world.isEmpty(i, j, k)) { // CraftBukkit start - org.bukkit.block.Block block = world.getWorld().getBlockAt(i, j, k); - BlockIgniteEvent event = new BlockIgniteEvent(block, BlockIgniteEvent.IgniteCause.FIREBALL, null); - world.getServer().getPluginManager().callEvent(event); - - if (!event.isCancelled()) { + if (!CraftEventFactory.callBlockIgniteEvent(world, i, j, k, this).isCancelled()) { this.world.setTypeIdUpdate(i, j, k, Block.FIRE.id); } // CraftBukkit end diff --git a/src/main/java/net/minecraft/server/Explosion.java b/src/main/java/net/minecraft/server/Explosion.java index aa3ae585..50646cef 100644 --- a/src/main/java/net/minecraft/server/Explosion.java +++ b/src/main/java/net/minecraft/server/Explosion.java @@ -290,7 +290,10 @@ public class Explosion { int i1 = this.world.getTypeId(i, j - 1, k); if (l == 0 && Block.s[i1] && this.j.nextInt(3) == 0) { - this.world.setTypeIdUpdate(i, j, k, Block.FIRE.id); + // CraftBukkit start - ignition by explosion. + if (!org.bukkit.craftbukkit.event.CraftEventFactory.callBlockIgniteEvent(this.world, i, j, k, this).isCancelled()) { + this.world.setTypeIdUpdate(i, j, k, Block.FIRE.id); + } // CraftBukkit end } } } diff --git a/src/main/java/net/minecraft/server/ItemFireball.java b/src/main/java/net/minecraft/server/ItemFireball.java index decf0216..81777fcf 100644 --- a/src/main/java/net/minecraft/server/ItemFireball.java +++ b/src/main/java/net/minecraft/server/ItemFireball.java @@ -1,10 +1,5 @@ package net.minecraft.server; -// CraftBukkit start -import org.bukkit.entity.Player; -import org.bukkit.event.block.BlockIgniteEvent; -// CraftBukkit end - public class ItemFireball extends Item { public ItemFireball(int i) { @@ -47,13 +42,7 @@ public class ItemFireball extends Item { if (i1 == 0) { // CraftBukkit start - org.bukkit.block.Block blockClicked = world.getWorld().getBlockAt(i, j, k); - Player thePlayer = (Player) entityhuman.getBukkitEntity(); - - BlockIgniteEvent eventIgnite = new BlockIgniteEvent(blockClicked, BlockIgniteEvent.IgniteCause.FIREBALL, thePlayer); - world.getServer().getPluginManager().callEvent(eventIgnite); - - if (eventIgnite.isCancelled()) { + if (org.bukkit.craftbukkit.event.CraftEventFactory.callBlockIgniteEvent(world, i, j, k, org.bukkit.event.block.BlockIgniteEvent.IgniteCause.FIREBALL, entityhuman).isCancelled()) { if (!entityhuman.abilities.canInstantlyBuild) { --itemstack.count; } diff --git a/src/main/java/net/minecraft/server/ItemFlintAndSteel.java b/src/main/java/net/minecraft/server/ItemFlintAndSteel.java index 88b28cb3..988b8ef4 100644 --- a/src/main/java/net/minecraft/server/ItemFlintAndSteel.java +++ b/src/main/java/net/minecraft/server/ItemFlintAndSteel.java @@ -1,10 +1,6 @@ package net.minecraft.server; -// CraftBukkit start -import org.bukkit.craftbukkit.block.CraftBlockState; -import org.bukkit.entity.Player; -import org.bukkit.event.block.BlockIgniteEvent; -// CraftBukkit end +import org.bukkit.craftbukkit.block.CraftBlockState; // CraftBukkit public class ItemFlintAndSteel extends Item { @@ -49,13 +45,7 @@ public class ItemFlintAndSteel extends Item { if (i1 == 0) { // CraftBukkit start - store the clicked block - org.bukkit.block.Block blockClicked = world.getWorld().getBlockAt(i, j, k); - Player thePlayer = (Player) entityhuman.getBukkitEntity(); - - BlockIgniteEvent eventIgnite = new BlockIgniteEvent(blockClicked, BlockIgniteEvent.IgniteCause.FLINT_AND_STEEL, thePlayer); - world.getServer().getPluginManager().callEvent(eventIgnite); - - if (eventIgnite.isCancelled()) { + if (org.bukkit.craftbukkit.event.CraftEventFactory.callBlockIgniteEvent(world, i, j, k, org.bukkit.event.block.BlockIgniteEvent.IgniteCause.FLINT_AND_STEEL, entityhuman).isCancelled()) { itemstack.damage(1, entityhuman); return false; } -- cgit v1.2.3