From 871dedc1dfc04d7a4e881a6f6e7aa763406b5ed2 Mon Sep 17 00:00:00 2001 From: ShaneBee Date: Mon, 6 May 2024 11:12:13 -0700 Subject: [PATCH 1/4] ExprExplodedBlocks - fix not being able to remove --- .../expressions/ExprExplodedBlocks.java | 36 ++++++++++++++++--- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java b/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java index d08200c7e1a..52a274399f8 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java @@ -20,6 +20,8 @@ import java.util.List; +import ch.njol.skript.classes.Changer.ChangeMode; +import ch.njol.util.coll.CollectionUtils; import org.bukkit.block.Block; import org.bukkit.event.Event; import org.bukkit.event.entity.EntityExplodeEvent; @@ -38,12 +40,17 @@ import ch.njol.util.Kleenean; @Name("Exploded Blocks") -@Description("Get all the blocks that were destroyed in an explode event") -@Examples({"on explode:", - "\tloop exploded blocks:", - "\t\tadd loop-block to {exploded::blocks::*}"}) +@Description("Get all the blocks that were destroyed in an explode event. Supports removing blocks.") +@Examples({ + "on explode:", + "\tloop exploded blocks:", + "\t\tadd loop-block to {exploded::blocks::*}", + "on explode:", + "\tloop exploded blocks:", + "\t\tif loop-block is grass:", + "\t\t\tremove loop-block from exploded blocks"}) @Events("explode") -@Since("2.5") +@Since("2.5, INSERT VERSION (removing blocks)") public class ExprExplodedBlocks extends SimpleExpression { static { @@ -68,6 +75,25 @@ protected Block[] get(Event e) { List blockList = ((EntityExplodeEvent) e).blockList(); return blockList.toArray(new Block[blockList.size()]); } + + @Override + public @Nullable Class[] acceptChange(ChangeMode mode) { + if (mode == ChangeMode.REMOVE) + return CollectionUtils.array(Block[].class); + return null; + } + + @Override + public void change(Event event, @Nullable Object[] delta, ChangeMode mode) { + if (!(event instanceof EntityExplodeEvent)) + return; + + List blocks = ((EntityExplodeEvent) event).blockList(); + for (Object object : delta) { + if (object instanceof Block) + blocks.remove((Block) object); + } + } @Override public boolean isSingle() { From b56d3de21a6cf29c57b975a2d9aeded658e3d1a9 Mon Sep 17 00:00:00 2001 From: ShaneBee Date: Mon, 6 May 2024 11:44:21 -0700 Subject: [PATCH 2/4] ExprExplodedBlocks - requested changes --- .../expressions/ExprExplodedBlocks.java | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java b/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java index 52a274399f8..539ed668499 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java @@ -40,7 +40,7 @@ import ch.njol.util.Kleenean; @Name("Exploded Blocks") -@Description("Get all the blocks that were destroyed in an explode event. Supports removing blocks.") +@Description("Get all the blocks that were destroyed in an explode event. Supports add/remove/set/clear/delete blocks.") @Examples({ "on explode:", "\tloop exploded blocks:", @@ -48,9 +48,15 @@ "on explode:", "\tloop exploded blocks:", "\t\tif loop-block is grass:", - "\t\t\tremove loop-block from exploded blocks"}) + "\t\t\tremove loop-block from exploded blocks", + "on explode:", + "\tclear exploded blocks", + "on explode:", + "\tset exploded blocks to blocks in radius 10 around event-entity", + "on explode:", + "\tadd blocks above event-entity to exploded blocks"}) @Events("explode") -@Since("2.5, INSERT VERSION (removing blocks)") +@Since("2.5, INSERT VERSION (modify list)") public class ExprExplodedBlocks extends SimpleExpression { static { @@ -78,9 +84,16 @@ protected Block[] get(Event e) { @Override public @Nullable Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.REMOVE) - return CollectionUtils.array(Block[].class); - return null; + switch (mode) { + case ADD: + case REMOVE: + case SET: + return CollectionUtils.array(Block[].class); + case DELETE: + return CollectionUtils.array(); + default: + return null; + } } @Override @@ -89,9 +102,19 @@ public void change(Event event, @Nullable Object[] delta, ChangeMode mode) { return; List blocks = ((EntityExplodeEvent) event).blockList(); + if (mode == ChangeMode.DELETE) { + blocks.clear(); + return; + } + if (mode == ChangeMode.SET) + blocks.clear(); for (Object object : delta) { - if (object instanceof Block) - blocks.remove((Block) object); + if (object instanceof Block) { + if (mode == ChangeMode.REMOVE) + blocks.remove((Block) object); + else if (mode == ChangeMode.ADD || mode == ChangeMode.SET) + blocks.add((Block) object); + } } } From cc8a8edd11d73dc112d2ac03ac0cf2743c8b8634 Mon Sep 17 00:00:00 2001 From: ShaneBee Date: Mon, 6 May 2024 19:58:04 -0700 Subject: [PATCH 3/4] ExprExplodedBlocks - apply suggestions --- .../expressions/ExprExplodedBlocks.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java b/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java index 539ed668499..f3b1441241c 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java @@ -45,18 +45,22 @@ "on explode:", "\tloop exploded blocks:", "\t\tadd loop-block to {exploded::blocks::*}", + "", "on explode:", "\tloop exploded blocks:", "\t\tif loop-block is grass:", "\t\t\tremove loop-block from exploded blocks", + "", "on explode:", "\tclear exploded blocks", + "", "on explode:", "\tset exploded blocks to blocks in radius 10 around event-entity", + "", "on explode:", "\tadd blocks above event-entity to exploded blocks"}) @Events("explode") -@Since("2.5, INSERT VERSION (modify list)") +@Since("2.5, INSERT VERSION (modify blocks)") public class ExprExplodedBlocks extends SimpleExpression { static { @@ -108,13 +112,16 @@ public void change(Event event, @Nullable Object[] delta, ChangeMode mode) { } if (mode == ChangeMode.SET) blocks.clear(); - for (Object object : delta) { - if (object instanceof Block) { - if (mode == ChangeMode.REMOVE) - blocks.remove((Block) object); - else if (mode == ChangeMode.ADD || mode == ChangeMode.SET) + if (mode == ChangeMode.ADD || mode == ChangeMode.SET) { + for (Object object : delta) { + if (object instanceof Block) blocks.add((Block) object); } + } else if (mode == ChangeMode.REMOVE) { + for (Object object : delta) { + if (object instanceof Block) + blocks.remove((Block) object); + } } } From 48deb7f2622e75b8a0df0f549e0c190d86b77802 Mon Sep 17 00:00:00 2001 From: ShaneBee Date: Wed, 8 May 2024 12:20:15 -0700 Subject: [PATCH 4/4] ExprExplodedBlocks - apply pickle suggestions --- .../expressions/ExprExplodedBlocks.java | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java b/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java index f3b1441241c..cbec71446f8 100644 --- a/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java +++ b/src/main/java/ch/njol/skript/expressions/ExprExplodedBlocks.java @@ -92,9 +92,8 @@ protected Block[] get(Event e) { case ADD: case REMOVE: case SET: - return CollectionUtils.array(Block[].class); case DELETE: - return CollectionUtils.array(); + return CollectionUtils.array(Block[].class); default: return null; } @@ -106,22 +105,25 @@ public void change(Event event, @Nullable Object[] delta, ChangeMode mode) { return; List blocks = ((EntityExplodeEvent) event).blockList(); - if (mode == ChangeMode.DELETE) { - blocks.clear(); - return; - } - if (mode == ChangeMode.SET) - blocks.clear(); - if (mode == ChangeMode.ADD || mode == ChangeMode.SET) { - for (Object object : delta) { - if (object instanceof Block) - blocks.add((Block) object); - } - } else if (mode == ChangeMode.REMOVE) { - for (Object object : delta) { - if (object instanceof Block) - blocks.remove((Block) object); - } + switch (mode) { + case DELETE: + blocks.clear(); + break; + case SET: + blocks.clear(); + // Fallthrough intended + case ADD: + for (Object object : delta) { + if (object instanceof Block) + blocks.add((Block) object); + } + break; + case REMOVE: + for (Object object : delta) { + if (object instanceof Block) + blocks.remove((Block) object); + } + break; } }