diff --git a/plugin.yml b/plugin.yml index d5f9267..a0132a8 100644 --- a/plugin.yml +++ b/plugin.yml @@ -1,6 +1,6 @@ name: SkStuff author: TheBukor description: A Skript addon which adds extra functionalities such as NBT and extended WorldEdit support. -version: 1.2.2 +version: 1.2.3 main: me.TheBukor.SkStuff softdepend: [Skript] \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff.java b/src/me/TheBukor/SkStuff.java index d22dba0..a4d837a 100644 --- a/src/me/TheBukor/SkStuff.java +++ b/src/me/TheBukor/SkStuff.java @@ -20,7 +20,6 @@ import me.TheBukor.effects.EffDrawLineWE; import me.TheBukor.effects.EffUndoRedoSession; import me.TheBukor.expressions.ExprAreaOfSelection; import me.TheBukor.expressions.ExprChangedBlocksSession; -import me.TheBukor.expressions.ExprEditSession; import me.TheBukor.expressions.ExprEditSessionLimit; import me.TheBukor.expressions.ExprHeightOfSchematic; import me.TheBukor.expressions.ExprHeightOfSelection; @@ -32,6 +31,7 @@ import me.TheBukor.expressions.ExprLengthOfSelection; import me.TheBukor.expressions.ExprNBTv1_8_R1; import me.TheBukor.expressions.ExprNBTv1_8_R2; import me.TheBukor.expressions.ExprNBTv1_8_R3; +import me.TheBukor.expressions.ExprNewEditSession; import me.TheBukor.expressions.ExprSelectionOfPlayer; import me.TheBukor.expressions.ExprSelectionPos1; import me.TheBukor.expressions.ExprSelectionPos2; @@ -182,11 +182,11 @@ public class SkStuff extends JavaPlugin { typeAmount += 1; Skript.registerCondition(CondSelectionContains.class, "[(world[ ]edit|we)] selection of %player% (contains|has) %location%", "%player%'s [(world[ ]edit|we)] selection (contains|has) %location%", "[(world[ ]edit|we)] selection of %player% does(n't| not) (contain|have) %location%", "%player%'s [(world[ ]edit|we)] selection does(n't| not) (contain|have) %location%"); // EXPERIMENTAL EFFECTS/EXPRESSIONS - Skript.registerEffect(EffDrawLineWE.class, "(create|draw|make) [a] (no(n|t)(-| )hollow|filled) line from %location% to %location% (using|with) [edit[ ]session] %editsession% (using|with) [block] %itemstack% [[(and|with)] thick[ness] %-double%]", "(create|draw|make) [a] hollow line from %location% to %location% (using|with) [edit[ ]session] %editsession% (using|with) [block] %itemstack% [[(and|with)] thick[ness] %-double%]"); + Skript.registerEffect(EffDrawLineWE.class, "(create|draw|make) [a] (no(n|t)(-| )hollow|filled) line from %location% to %location% (using|with) [edit[ ]session] %editsession% (using|with) [block] %itemstack% [(and|with)] thick[ness] %double%", "(create|draw|make) [a] hollow line from %location% to %location% (using|with) [edit[ ]session] %editsession% (using|with) [block] %itemstack% [(and|with)] thick[ness] %double%"); Skript.registerEffect(EffUndoRedoSession.class, "undo [last] (change|edit)[s] (of|from) [edit[ ]session] %editsession%", "redo [last] (change|edit)[s] (of|from) [edit[ ]session] %editsession%"); Skript.registerExpression(ExprEditSessionLimit.class, Integer.class, ExpressionType.PROPERTY, "[block] limit [change] of [edit[ ]session] %editsession%"); Skript.registerExpression(ExprChangedBlocksSession.class, Integer.class, ExpressionType.PROPERTY, "number of [all] changed blocks (in|of) [edit[ ]session] %editsession%"); - Skript.registerExpression(ExprEditSession.class, EditSession.class, ExpressionType.PROPERTY, "[new] edit[ ]session (for|from|of) %player%", "[new] %player% edit[ ]session"); + Skript.registerExpression(ExprNewEditSession.class, EditSession.class, ExpressionType.PROPERTY, "[create] [a] new edit[ ]session in [world] %world% [with] [max[imum]] [block] limit [change] [of] %integer%"); // END OF EXPERIMENTAL EFFS/EXPRS Skript.registerExpression(ExprSelectionOfPlayer.class, Location.class, ExpressionType.PROPERTY, "[(world[ ]edit|we)] selection of %player%", "%player%'s [(world[ ]edit|we)] selection"); Skript.registerExpression(ExprSelectionPos1.class, Location.class, ExpressionType.PROPERTY, "[(world[ ]edit|we)] po(s|int)[ ]1 of %player%", "%player%'s [(world[ ]edit|we)] po(s|int)[ ]1"); diff --git a/src/me/TheBukor/effects/EffDrawLineWE.java b/src/me/TheBukor/effects/EffDrawLineWE.java index 619e523..595c01d 100644 --- a/src/me/TheBukor/effects/EffDrawLineWE.java +++ b/src/me/TheBukor/effects/EffDrawLineWE.java @@ -40,7 +40,7 @@ public class EffDrawLineWE extends Effect { @Override public String toString(@Nullable Event e, boolean arg1) { - return "draw a line using an edit session with " + block.toString(e, false); + return "draw a line from " + location1.toString(e, false) + " to " + location2.toString(e, false) + " using an edit session with " + block.toString(e, false) + " and thickness " + thickness.toString(e, false); } @Override @@ -50,7 +50,6 @@ public class EffDrawLineWE extends Effect { EditSession session = editSession.getSingle(e); ItemStack b = block.getSingle(e); Double thick = thickness.getSingle(e); - if (thick == null) thick = (double) 1; if (b.getType().isBlock()) { try { session.drawLine(new SingleBlockPattern(new BaseBlock(b.getTypeId(), b.getDurability())), BukkitUtil.toVector(pos1), BukkitUtil.toVector(pos2), thick, filled); diff --git a/src/me/TheBukor/expressions/ExprEditSessionLimit.java b/src/me/TheBukor/expressions/ExprEditSessionLimit.java index c8a9e65..71fd595 100644 --- a/src/me/TheBukor/expressions/ExprEditSessionLimit.java +++ b/src/me/TheBukor/expressions/ExprEditSessionLimit.java @@ -53,11 +53,12 @@ public class ExprEditSessionLimit extends SimpleExpression { @Override public void change(Event e, @Nullable Object[] delta, ChangeMode mode) { EditSession session = editSession.getSingle(e); + if (session == null) return; if (mode == ChangeMode.SET) { Integer newLimit = (Integer) delta[0]; - session.setBlockChangeLimit(newLimit); - } else if (mode == ChangeMode.DELETE || mode == ChangeMode.RESET) { - session.setBlockChangeLimit(we.getLocalConfiguration().defaultChangeLimit); + session.setBlockChangeLimit(Integer.valueOf(newLimit)); + } else if (mode == ChangeMode.RESET) { + session.setBlockChangeLimit(Integer.valueOf(we.getLocalConfiguration().defaultChangeLimit)); } } diff --git a/src/me/TheBukor/expressions/ExprEditSession.java b/src/me/TheBukor/expressions/ExprNewEditSession.java similarity index 57% rename from src/me/TheBukor/expressions/ExprEditSession.java rename to src/me/TheBukor/expressions/ExprNewEditSession.java index 36ed27f..504db5c 100644 --- a/src/me/TheBukor/expressions/ExprEditSession.java +++ b/src/me/TheBukor/expressions/ExprNewEditSession.java @@ -1,22 +1,25 @@ package me.TheBukor.expressions; +import javax.annotation.Nullable; + import org.bukkit.Bukkit; -import org.bukkit.entity.Player; +import org.bukkit.World; import org.bukkit.event.Event; import com.sk89q.worldedit.EditSession; +import com.sk89q.worldedit.LocalWorld; +import com.sk89q.worldedit.bukkit.BukkitUtil; import com.sk89q.worldedit.bukkit.WorldEditPlugin; -import com.sk89q.worldedit.world.World; - -import javax.annotation.Nullable; import ch.njol.skript.lang.Expression; import ch.njol.skript.lang.SkriptParser.ParseResult; import ch.njol.skript.lang.util.SimpleExpression; import ch.njol.util.Kleenean; -public class ExprEditSession extends SimpleExpression { - private Expression player; +@SuppressWarnings("deprecation") +public class ExprNewEditSession extends SimpleExpression { + private Expression world; + private Expression blockLimit; @Override public Class getReturnType() { @@ -31,24 +34,24 @@ public class ExprEditSession extends SimpleExpression { @SuppressWarnings("unchecked") @Override public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) { - player = (Expression) expr[0]; + world = (Expression) expr[0]; + blockLimit = (Expression) expr[1]; return true; } @Override public String toString(@Nullable Event e, boolean arg1) { - return "the edit session of " + player.toString(e, false); + return "create a new edit session in world " + world.toString(e, false) + " with maximum block change limit of " + blockLimit.toString(e, false); } @Override @Nullable protected EditSession[] get(Event e) { - Player p = player.getSingle(e); WorldEditPlugin we = (WorldEditPlugin) Bukkit.getServer().getPluginManager().getPlugin("WorldEdit"); - if (we.getWorldEdit().getEditSessionFactory().getEditSession((World) we.wrapPlayer(p).getWorld(), we.getSession(p).getBlockChangeLimit(), we.wrapPlayer(p)) == null) { - return new EditSession[] { we.createEditSession(p) }; - } - return new EditSession[] { we.getWorldEdit().getEditSessionFactory().getEditSession((World) we.wrapPlayer(p).getWorld(), we.getSession(p).getBlockChangeLimit(), we.wrapPlayer(p)) }; + World w = world.getSingle(e); + Integer limit = blockLimit.getSingle(e); + LocalWorld localWorld = BukkitUtil.getLocalWorld(w); + return new EditSession[] { we.getWorldEdit().getEditSessionFactory().getEditSession(localWorld, limit) }; } }