diff --git a/src/main/java/ch/njol/skript/effects/EffApplyBoneMeal.java b/src/main/java/ch/njol/skript/effects/EffApplyBoneMeal.java new file mode 100644 index 00000000000..484654a14f6 --- /dev/null +++ b/src/main/java/ch/njol/skript/effects/EffApplyBoneMeal.java @@ -0,0 +1,77 @@ +/** + * 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 . + * + * Copyright Peter Güttinger, SkriptLang team and contributors + */ +package ch.njol.skript.effects; + +import ch.njol.skript.Skript; +import ch.njol.skript.doc.Description; +import ch.njol.skript.doc.Examples; +import ch.njol.skript.doc.Name; +import ch.njol.skript.doc.RequiredPlugins; +import ch.njol.skript.doc.Since; +import ch.njol.skript.lang.Effect; +import ch.njol.skript.lang.Expression; +import ch.njol.skript.lang.SkriptParser.ParseResult; +import ch.njol.util.Kleenean; +import org.bukkit.Bukkit; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.event.Event; +import org.eclipse.jdt.annotation.Nullable; + +@Name("Apply Bone Meal") +@Description("Applies bone meal to a crop, sapling, or composter") +@Examples("apply 3 bone meal to event-block") +@RequiredPlugins("MC 1.16.2+") +@Since("INSERT VERSION") +public class EffApplyBoneMeal extends Effect { + + static { + if (Skript.isRunningMinecraft(1, 16, 2)) + Skript.registerEffect(EffApplyBoneMeal.class, "apply [%-number%] bone[ ]meal[s] [to %blocks%]"); + } + + @Nullable + private Expression amount; + private Expression blocks; + + @Override + public boolean init(Expression[] exprs, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { + amount = (Expression) exprs[0]; + blocks = (Expression) exprs[1]; + return true; + } + + @Override + protected void execute(Event event) { + int times = 1; + if (amount != null) + times = amount.getOptionalSingle(event).orElse(0).intValue(); + for (Block block : blocks.getArray(event)) { + for (int i = 0; i < times; i++) { + block.applyBoneMeal(BlockFace.UP); + } + } + } + + @Override + public String toString(@Nullable Event event, boolean debug) { + return "apply " + amount != null ? amount.toString(event, debug) + " " : "" + "bone meal to " + blocks.toString(event, debug); + } + +}