From 2f3fdd19f10946b2bdee25517b2340c8f84ab3ca Mon Sep 17 00:00:00 2001 From: Chris Gallarno Date: Thu, 18 Jul 2013 18:54:11 -0400 Subject: [PATCH] Added block_burn Event --- .../bukkit/events/BukkitBlockEvents.java | 19 ++++ .../events/drivers/BukkitBlockListener.java | 9 ++ .../abstraction/events/MCBlockBurnEvent.java | 14 +++ .../com/laytonsmith/core/events/Driver.java | 1 + .../core/events/drivers/BlockEvents.java | 105 ++++++++++++++++++ 5 files changed, 148 insertions(+) create mode 100644 src/main/java/com/laytonsmith/abstraction/events/MCBlockBurnEvent.java diff --git a/src/main/java/com/laytonsmith/abstraction/bukkit/events/BukkitBlockEvents.java b/src/main/java/com/laytonsmith/abstraction/bukkit/events/BukkitBlockEvents.java index bdc5ff118..4ca4eaedb 100644 --- a/src/main/java/com/laytonsmith/abstraction/bukkit/events/BukkitBlockEvents.java +++ b/src/main/java/com/laytonsmith/abstraction/bukkit/events/BukkitBlockEvents.java @@ -15,6 +15,7 @@ import com.laytonsmith.core.constructs.CString; import com.laytonsmith.core.constructs.Target; import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockBurnEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.SignChangeEvent; @@ -91,6 +92,24 @@ public MCBlockState getBlockReplacedState() { return new BukkitMCBlockState(event.getBlockReplacedState()); } } + + @abstraction(type = Implementation.Type.BUKKIT) + public static class BukkitMCBlockBurnEvent implements MCBlockBurnEvent { + + BlockBurnEvent event; + + public BukkitMCBlockBurnEvent(BlockBurnEvent e) { + event = e; + } + + public Object _GetObject() { + return event; + } + + public MCBlock getBlock() { + return new BukkitMCBlock(event.getBlock()); + } + } @abstraction(type = Implementation.Type.BUKKIT) public static class BukkitMCSignChangeEvent implements MCSignChangeEvent { diff --git a/src/main/java/com/laytonsmith/abstraction/bukkit/events/drivers/BukkitBlockListener.java b/src/main/java/com/laytonsmith/abstraction/bukkit/events/drivers/BukkitBlockListener.java index 5ff7852d5..1767f01dc 100644 --- a/src/main/java/com/laytonsmith/abstraction/bukkit/events/drivers/BukkitBlockListener.java +++ b/src/main/java/com/laytonsmith/abstraction/bukkit/events/drivers/BukkitBlockListener.java @@ -3,12 +3,14 @@ package com.laytonsmith.abstraction.bukkit.events.drivers; import com.laytonsmith.abstraction.bukkit.events.BukkitBlockEvents; +import com.laytonsmith.core.events.BoundEvent; import com.laytonsmith.core.events.Driver; import com.laytonsmith.core.events.EventUtils; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockBurnEvent; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.SignChangeEvent; @@ -38,4 +40,11 @@ public void onBlockBreak(BlockBreakEvent e){ EventUtils.TriggerExternal(bbe); EventUtils.TriggerListener(Driver.BLOCK_BREAK, "block_break", bbe); } + + @EventHandler(priority=EventPriority.LOWEST) + public void onBlockBurn(BlockBurnEvent e){ + BukkitBlockEvents.BukkitMCBlockBurnEvent bbe = new BukkitBlockEvents.BukkitMCBlockBurnEvent(e); + EventUtils.TriggerExternal(bbe); + EventUtils.TriggerListener(Driver.BLOCK_BURN, "block_burn", bbe); + } } diff --git a/src/main/java/com/laytonsmith/abstraction/events/MCBlockBurnEvent.java b/src/main/java/com/laytonsmith/abstraction/events/MCBlockBurnEvent.java new file mode 100644 index 000000000..a687b5cce --- /dev/null +++ b/src/main/java/com/laytonsmith/abstraction/events/MCBlockBurnEvent.java @@ -0,0 +1,14 @@ +package com.laytonsmith.abstraction.events; + +import com.laytonsmith.abstraction.blocks.MCBlock; +import com.laytonsmith.core.events.BindableEvent; + +/** + * + * @author cgallarno + */ +public interface MCBlockBurnEvent extends BindableEvent { + + public MCBlock getBlock(); + +} diff --git a/src/main/java/com/laytonsmith/core/events/Driver.java b/src/main/java/com/laytonsmith/core/events/Driver.java index b28acd823..049e9d7e0 100644 --- a/src/main/java/com/laytonsmith/core/events/Driver.java +++ b/src/main/java/com/laytonsmith/core/events/Driver.java @@ -26,6 +26,7 @@ public enum Driver { SERVER_COMMAND, BLOCK_BREAK, BLOCK_PLACE, + BLOCK_BURN, TARGET_ENTITY, ENTITY_DAMAGE_PLAYER, ENTITY_DAMAGE, diff --git a/src/main/java/com/laytonsmith/core/events/drivers/BlockEvents.java b/src/main/java/com/laytonsmith/core/events/drivers/BlockEvents.java index d5d5c0052..c054571af 100644 --- a/src/main/java/com/laytonsmith/core/events/drivers/BlockEvents.java +++ b/src/main/java/com/laytonsmith/core/events/drivers/BlockEvents.java @@ -342,6 +342,111 @@ public boolean modifyEvent(String key, Construct value, return false; } } + + @api + public static class block_burn extends AbstractEvent { + + public String getName() { + return "block_burn"; + } + + public String docs() { + return "{type: | data: } " + + "This event is called when a block is burned. " + + "Cancelling the event cancels the burn. " + + "block: An array with " + + "keys 'type' (int), 'data' (int), 'X' (int), 'Y' (int), 'Z' (int) " + + "and 'world' (string) for the physical location of the block | " + + "location: the locationArray of this block | drops | xp} " + + "{block}"; + } + + public CHVersion since() { + return CHVersion.V3_3_1; + } + + public Driver driver() { + return Driver.BLOCK_BURN; + } + + public boolean matches(Map prefilter, BindableEvent e) + throws PrefilterNonMatchException { + if (e instanceof MCBlockBurnEvent) { + MCBlockBurnEvent event = (MCBlockBurnEvent) e; + + if (prefilter.containsKey("type")) { + Construct v = prefilter.get("type"); + + if (v instanceof CInt) { + int val = Integer.parseInt(v.val()); + + if (event.getBlock().getTypeId() != val) { + return false; + } + } else { + return false; + } + } + + if (prefilter.containsKey("data")) { + Construct v = prefilter.get("data"); + + if (v instanceof CInt) { + int val = Integer.parseInt(v.val()); + + if ((int) event.getBlock().getData() != val) { + return false; + } + } else { + return false; + } + } + } + + return true; + } + + public BindableEvent convert(CArray manualObject) { + return null; + } + + public Map evaluate(BindableEvent e) + throws EventException { + + MCBlockBurnEvent event = (MCBlockBurnEvent) e; + Map map = evaluate_helper(event); + + CArray blk = new CArray(Target.UNKNOWN); + + int blktype = event.getBlock().getTypeId(); + blk.set("type", new CInt(blktype, Target.UNKNOWN), Target.UNKNOWN); + + int blkdata = event.getBlock().getData(); + blk.set("data", new CInt(blkdata, Target.UNKNOWN), Target.UNKNOWN); + + blk.set("X", new CInt(event.getBlock().getX(), Target.UNKNOWN), Target.UNKNOWN); + blk.set("Y", new CInt(event.getBlock().getY(), Target.UNKNOWN), Target.UNKNOWN); + blk.set("Z", new CInt(event.getBlock().getZ(), Target.UNKNOWN), Target.UNKNOWN); + blk.set("world", new CString(event.getBlock().getWorld().getName(), Target.UNKNOWN), Target.UNKNOWN); + + map.put("block", blk); + + CArray location = ObjectGenerator.GetGenerator() + .location(StaticLayer.GetLocation(event.getBlock().getWorld(), event.getBlock().getX(), event.getBlock().getY(), event.getBlock().getZ())); + map.put("location", location); + + return map; + } + + public boolean modifyEvent(String key, Construct value, + BindableEvent e) { + + MCBlockBreakEvent event = (MCBlockBreakEvent) e; + MCBlock blk = event.getBlock(); + + return false; + } + } @api public static class sign_changed extends AbstractEvent {