Skip to content

Commit

Permalink
Add sponge absorb event (#1655)
Browse files Browse the repository at this point in the history
  • Loading branch information
bensku committed Jan 11, 2020
1 parent 1726477 commit ed8a593
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/main/java/ch/njol/skript/events/SimpleEvents.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import org.bukkit.event.block.BlockSpreadEvent;
import org.bukkit.event.block.LeavesDecayEvent;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.block.SpongeAbsorbEvent;
import org.bukkit.event.entity.AreaEffectCloudApplyEvent;
import org.bukkit.event.entity.CreeperPowerEvent;
import org.bukkit.event.entity.EntityBreakDoorEvent;
Expand Down Expand Up @@ -527,5 +528,14 @@ public class SimpleEvents {
" send \"You equipped %event-item%!\"")
.since("INSERT VERSION");
}
if (Skript.classExists("org.bukkit.event.block.SpongeAbsorbEvent")) {
Skript.registerEvent("Sponge Absorb", SimpleEvent.class, SpongeAbsorbEvent.class, "sponge absorb")
.description("Called when a sponge absorbs blocks.")
.requiredPlugins("Minecraft 1.13 or newer")
.examples("on sponge absorb:",
"\tloop absorbed blocks:",
"\t\tbroadcast \"%loop-block% was absorbed by a sponge\"!")
.since("INSERT VERSION");
}
}
}
98 changes: 98 additions & 0 deletions src/main/java/ch/njol/skript/expressions/ExprAbsorbedBlocks.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
/**
* This file is part of Skript.
*
* Skript is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Skript is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Skript. If not, see <http://www.gnu.org/licenses/>.
*
*
* Copyright 2011-2017 Peter Güttinger and contributors
*/
package ch.njol.skript.expressions;

import java.util.Iterator;
import java.util.List;

import org.bukkit.block.BlockState;
import org.bukkit.event.Event;
import org.bukkit.event.block.SpongeAbsorbEvent;
import org.eclipse.jdt.annotation.Nullable;

import ch.njol.skript.ScriptLoader;
import ch.njol.skript.Skript;
import ch.njol.skript.doc.Description;
import ch.njol.skript.doc.Events;
import ch.njol.skript.doc.Examples;
import ch.njol.skript.doc.Name;
import ch.njol.skript.doc.Since;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.ExpressionType;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.lang.util.SimpleExpression;
import ch.njol.skript.log.ErrorQuality;
import ch.njol.skript.util.BlockStateBlock;
import ch.njol.util.Kleenean;

@Name("Absorbed blocks")
@Description("Blocks which are absorbed in a sponge absorb event. Cannot be used outside of sponge absorb events.")
@Events("sponge absorb")
@Examples("the absorbed blocks")
@Since("INSERT VERSION")
public class ExprAbsorbedBlocks extends SimpleExpression<BlockStateBlock> {

static {
Skript.registerExpression(ExprAbsorbedBlocks.class, BlockStateBlock.class, ExpressionType.SIMPLE, "[the] absorbed blocks");
}

@Override
public boolean init(Expression<?>[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) {
if (!ScriptLoader.isCurrentEvent(SpongeAbsorbEvent.class)) {
Skript.error("The absorbed blocks are only usable in sponge absorb events", ErrorQuality.SEMANTIC_ERROR);
return false;
}
return true;
}

@Override
@Nullable
protected BlockStateBlock[] get(Event e) {
List<BlockState> bs = ((SpongeAbsorbEvent) e).getBlocks();
return bs.stream()
.map(BlockStateBlock::new)
.toArray(BlockStateBlock[]::new);
}

@Override
@Nullable
public Iterator<BlockStateBlock> iterator(Event e) {
List<BlockState> bs = ((SpongeAbsorbEvent) e).getBlocks();
return bs.stream()
.map(BlockStateBlock::new)
.iterator();
}

@Override
public Class<? extends BlockStateBlock> getReturnType() {
return BlockStateBlock.class;
}

@Override
public boolean isSingle() {
return false;
}

@Override
public String toString(@Nullable Event e, boolean debug) {
return "absorbed blocks";
}

}

0 comments on commit ed8a593

Please sign in to comment.