Skip to content

Commit 2c666b7

Browse files
committed
Add block_explode event
1 parent b780a89 commit 2c666b7

File tree

5 files changed

+160
-0
lines changed

5 files changed

+160
-0
lines changed

src/main/java/com/laytonsmith/abstraction/bukkit/events/BukkitBlockEvents.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.laytonsmith.abstraction.events.MCBlockBurnEvent;
2727
import com.laytonsmith.abstraction.events.MCBlockDispenseEvent;
2828
import com.laytonsmith.abstraction.events.MCBlockEvent;
29+
import com.laytonsmith.abstraction.events.MCBlockExplodeEvent;
2930
import com.laytonsmith.abstraction.events.MCBlockFadeEvent;
3031
import com.laytonsmith.abstraction.events.MCBlockFromToEvent;
3132
import com.laytonsmith.abstraction.events.MCBlockGrowEvent;
@@ -46,6 +47,7 @@
4647
import org.bukkit.event.block.BlockBurnEvent;
4748
import org.bukkit.event.block.BlockDispenseEvent;
4849
import org.bukkit.event.block.BlockEvent;
50+
import org.bukkit.event.block.BlockExplodeEvent;
4951
import org.bukkit.event.block.BlockFadeEvent;
5052
import org.bukkit.event.block.BlockFromToEvent;
5153
import org.bukkit.event.block.BlockGrowEvent;
@@ -561,4 +563,51 @@ public Object _GetObject() {
561563
return bfe;
562564
}
563565
}
566+
567+
@abstraction(type = Implementation.Type.BUKKIT)
568+
public static class BukkitMCBlockExplodeEvent implements MCBlockExplodeEvent {
569+
570+
BlockExplodeEvent event;
571+
572+
public BukkitMCBlockExplodeEvent(BlockExplodeEvent event) {
573+
this.event = event;
574+
}
575+
576+
@Override
577+
public List<MCBlock> getBlocks() {
578+
List<MCBlock> ret = new ArrayList<>();
579+
for(Block b : event.blockList()) {
580+
ret.add(new BukkitMCBlock(b));
581+
}
582+
return ret;
583+
}
584+
585+
@Override
586+
public void setBlocks(List<MCBlock> blocks) {
587+
event.blockList().clear();
588+
for(MCBlock b : blocks) {
589+
event.blockList().add((Block) b.getHandle());
590+
}
591+
}
592+
593+
@Override
594+
public float getYield() {
595+
return event.getYield();
596+
}
597+
598+
@Override
599+
public void setYield(float power) {
600+
event.setYield(power);
601+
}
602+
603+
@Override
604+
public MCBlock getBlock() {
605+
return new BukkitMCBlock(event.getBlock());
606+
}
607+
608+
@Override
609+
public Object _GetObject() {
610+
return event;
611+
}
612+
}
564613
}

src/main/java/com/laytonsmith/abstraction/bukkit/events/drivers/BukkitBlockListener.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.bukkit.event.block.BlockBreakEvent;
1818
import org.bukkit.event.block.BlockBurnEvent;
1919
import org.bukkit.event.block.BlockDispenseEvent;
20+
import org.bukkit.event.block.BlockExplodeEvent;
2021
import org.bukkit.event.block.BlockFadeEvent;
2122
import org.bukkit.event.block.BlockFromToEvent;
2223
import org.bukkit.event.block.BlockGrowEvent;
@@ -140,4 +141,10 @@ public void onBlockFade(BlockFadeEvent e) {
140141
BukkitBlockEvents.BukkitMCBlockFadeEvent bfe = new BukkitBlockEvents.BukkitMCBlockFadeEvent(e);
141142
EventUtils.TriggerListener(Driver.BLOCK_FADE, "block_fade", bfe);
142143
}
144+
145+
@EventHandler(priority = EventPriority.LOWEST)
146+
public void onBlockExplode(BlockExplodeEvent e) {
147+
BukkitBlockEvents.BukkitMCBlockExplodeEvent bee = new BukkitBlockEvents.BukkitMCBlockExplodeEvent(e);
148+
EventUtils.TriggerListener(Driver.BLOCK_EXPLODE, "block_explode", bee);
149+
}
143150
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.laytonsmith.abstraction.events;
2+
3+
import com.laytonsmith.abstraction.blocks.MCBlock;
4+
5+
import java.util.List;
6+
7+
public interface MCBlockExplodeEvent extends MCBlockEvent {
8+
9+
List<MCBlock> getBlocks();
10+
11+
void setBlocks(List<MCBlock> blocks);
12+
13+
float getYield();
14+
15+
void setYield(float power);
16+
17+
}

src/main/java/com/laytonsmith/core/events/Driver.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ public enum Driver {
1818
BLOCK_BREAK,
1919
BLOCK_BURN,
2020
BLOCK_DISPENSE,
21+
BLOCK_EXPLODE,
2122
BLOCK_GROW,
2223
BLOCK_IGNITE,
2324
BLOCK_PLACE,

src/main/java/com/laytonsmith/core/events/drivers/BlockEvents.java

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.laytonsmith.PureUtilities.Common.StringUtils;
44
import com.laytonsmith.PureUtilities.Version;
55
import com.laytonsmith.abstraction.MCItemStack;
6+
import com.laytonsmith.abstraction.MCLocation;
67
import com.laytonsmith.abstraction.StaticLayer;
78
import com.laytonsmith.abstraction.blocks.MCBlock;
89
import com.laytonsmith.abstraction.blocks.MCMaterial;
@@ -11,6 +12,7 @@
1112
import com.laytonsmith.abstraction.events.MCBlockBreakEvent;
1213
import com.laytonsmith.abstraction.events.MCBlockBurnEvent;
1314
import com.laytonsmith.abstraction.events.MCBlockDispenseEvent;
15+
import com.laytonsmith.abstraction.events.MCBlockExplodeEvent;
1416
import com.laytonsmith.abstraction.events.MCBlockFadeEvent;
1517
import com.laytonsmith.abstraction.events.MCBlockFromToEvent;
1618
import com.laytonsmith.abstraction.events.MCBlockGrowEvent;
@@ -1433,4 +1435,88 @@ public boolean modifyEvent(String key, Mixed value, BindableEvent event) {
14331435
return false;
14341436
}
14351437
}
1438+
1439+
@api
1440+
public static class block_explode extends AbstractEvent {
1441+
1442+
@Override
1443+
public String getName() {
1444+
return "block_explode";
1445+
}
1446+
1447+
@Override
1448+
public Driver driver() {
1449+
return Driver.BLOCK_EXPLODE;
1450+
}
1451+
1452+
@Override
1453+
public String docs() {
1454+
return "{}"
1455+
+ "Called when a block explodes (like beds in the nether) or a plugin creates an explosion."
1456+
+ "{location: The location of the explosion."
1457+
+ " | blocks: An array of block locations that will be destroyed by this explosion."
1458+
+ " | yield: Decimal percentage of blocks destroyed that will drop items.}"
1459+
+ "{blocks | yield}"
1460+
+ "{}";
1461+
}
1462+
1463+
@Override
1464+
public Version since() {
1465+
return MSVersion.V3_3_4;
1466+
}
1467+
1468+
@Override
1469+
public boolean matches(Map<String, Mixed> prefilter, BindableEvent e) throws PrefilterNonMatchException {
1470+
return e instanceof MCBlockExplodeEvent;
1471+
}
1472+
1473+
@Override
1474+
public BindableEvent convert(CArray manualObject, Target t) {
1475+
return null;
1476+
}
1477+
1478+
@Override
1479+
public Map<String, Mixed> evaluate(BindableEvent e) throws EventException {
1480+
if(!(e instanceof MCBlockExplodeEvent)) {
1481+
throw new EventException("Cannot convert event to BlockExplodeEvent");
1482+
}
1483+
MCBlockExplodeEvent event = (MCBlockExplodeEvent) e;
1484+
Target t = Target.UNKNOWN;
1485+
Map<String, Mixed> ret = evaluate_helper(event);
1486+
1487+
MCBlock blk = event.getBlock();
1488+
ret.put("location", ObjectGenerator.GetGenerator().location(blk.getLocation(), false));
1489+
CArray blocks = new CArray(t);
1490+
for(MCBlock b : event.getBlocks()) {
1491+
blocks.push(ObjectGenerator.GetGenerator().location(b.getLocation(), false), t);
1492+
}
1493+
ret.put("blocks", blocks);
1494+
ret.put("yield", new CDouble(event.getYield(), t));
1495+
return ret;
1496+
}
1497+
1498+
@Override
1499+
public boolean modifyEvent(String key, Mixed value, BindableEvent event) {
1500+
if(event instanceof MCBlockExplodeEvent) {
1501+
MCBlockExplodeEvent e = (MCBlockExplodeEvent) event;
1502+
if(key.equals("yield")) {
1503+
e.setYield((float) ArgumentValidation.getDouble(value, value.getTarget()));
1504+
return true;
1505+
}
1506+
if(key.equals("blocks")) {
1507+
if(value.isInstanceOf(CArray.TYPE)) {
1508+
CArray ba = (CArray) value;
1509+
List<MCBlock> blocks = new ArrayList<>();
1510+
for(Mixed m : ba.asList()) {
1511+
MCLocation loc = ObjectGenerator.GetGenerator().location(m, null, value.getTarget());
1512+
blocks.add(loc.getBlock());
1513+
}
1514+
e.setBlocks(blocks);
1515+
return true;
1516+
}
1517+
}
1518+
}
1519+
return false;
1520+
}
1521+
}
14361522
}

0 commit comments

Comments
 (0)