package me.TheBukor.effects; import javax.annotation.Nullable; import org.bukkit.Location; import org.bukkit.event.Event; import org.bukkit.inventory.ItemStack; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.MaxChangedBlocksException; import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.bukkit.BukkitUtil; import com.sk89q.worldedit.function.pattern.BlockPattern; import com.sk89q.worldedit.function.pattern.RandomPattern; import com.sk89q.worldedit.patterns.Pattern; import ch.njol.skript.lang.Effect; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.util.Kleenean; @SuppressWarnings("deprecation") public class EffDrawLineWE extends Effect { private Expression location1; private Expression location2; private Expression editSession; private Expression blockList; private Expression thickness; private boolean filled = true; @SuppressWarnings("unchecked") @Override public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { location1 = (Expression) expr[0]; location2 = (Expression) expr[1]; editSession = (Expression) expr[2]; blockList = (Expression) expr[3]; thickness = (Expression) expr[4]; if (result.mark == 1) filled = false; return true; } @Override public String toString(@Nullable Event e, boolean arg1) { return "draw a line from " + location1.toString(e, false) + " to " + location2.toString(e, false) + " using an edit session with " + blockList.toString(e, false) + " and thickness " + thickness.toString(e, false); } @Override protected void execute(Event e) { Location pos1 = location1.getSingle(e); Location pos2 = location2.getSingle(e); EditSession session = editSession.getSingle(e); ItemStack[] blocks = blockList.getAll(e); Double thick = thickness.getSingle(e); RandomPattern random = new RandomPattern(); for (ItemStack b : blocks) { if (b.getType().isBlock()) { try { random.add(new BlockPattern(BukkitUtil.toBlock(BukkitUtil.getLocalWorld(pos1.getWorld()), b)), 50); } catch (WorldEditException ex) { ex.printStackTrace(); } } } try { session.drawLine((Pattern) random, BukkitUtil.toVector(pos1), BukkitUtil.toVector(pos2), thick, filled); session.flushQueue(); } catch (MaxChangedBlocksException ex) { return; } } }