WorldEdit block change event, still in test. Also fixed package names.

This commit is contained in:
Richard
2015-12-24 22:23:38 -02:00
parent 653b66e30e
commit 6089934ffd
58 changed files with 261 additions and 112 deletions

View File

@@ -0,0 +1,476 @@
package me.TheBukor.SkStuff;
import javax.annotation.Nullable;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;
import com.sk89q.worldedit.EditSession;
import ch.njol.skript.Skript;
import ch.njol.skript.classes.ClassInfo;
import ch.njol.skript.classes.Parser;
import ch.njol.skript.lang.ExpressionType;
import ch.njol.skript.lang.ParseContext;
import ch.njol.skript.lang.util.SimpleEvent;
import ch.njol.skript.registrations.Classes;
import ch.njol.skript.registrations.EventValues;
import ch.njol.skript.util.Getter;
import me.TheBukor.SkStuff.conditions.CondSelectionContains;
import me.TheBukor.SkStuff.effects.EffDrainLiquid;
import me.TheBukor.SkStuff.effects.EffDrawLineWE;
import me.TheBukor.SkStuff.effects.EffMakeCylinder;
import me.TheBukor.SkStuff.effects.EffMakePyramid;
import me.TheBukor.SkStuff.effects.EffMakeSphere;
import me.TheBukor.SkStuff.effects.EffMakeWalls;
import me.TheBukor.SkStuff.effects.EffNaturalize;
import me.TheBukor.SkStuff.effects.EffRememberChanges;
import me.TheBukor.SkStuff.effects.EffReplaceBlocksWE;
import me.TheBukor.SkStuff.effects.EffSetBlocksWE;
import me.TheBukor.SkStuff.effects.EffSimulateSnow;
import me.TheBukor.SkStuff.effects.EffUndoRedoSession;
import me.TheBukor.SkStuff.events.EvtWorldEditChange;
import me.TheBukor.SkStuff.events.WorldEditChangeHandler;
import me.TheBukor.SkStuff.expressions.ExprAreaOfSchematic;
import me.TheBukor.SkStuff.expressions.ExprAreaOfSelection;
import me.TheBukor.SkStuff.expressions.ExprChangedBlocksSession;
import me.TheBukor.SkStuff.expressions.ExprEditSessionLimit;
import me.TheBukor.SkStuff.expressions.ExprFileNBTv1_8_R1;
import me.TheBukor.SkStuff.expressions.ExprFileNBTv1_8_R2;
import me.TheBukor.SkStuff.expressions.ExprFileNBTv1_8_R3;
import me.TheBukor.SkStuff.expressions.ExprHeightOfSchematic;
import me.TheBukor.SkStuff.expressions.ExprHeightOfSelection;
import me.TheBukor.SkStuff.expressions.ExprItemNBTv1_7_R1;
import me.TheBukor.SkStuff.expressions.ExprItemNBTv1_7_R2;
import me.TheBukor.SkStuff.expressions.ExprItemNBTv1_7_R3;
import me.TheBukor.SkStuff.expressions.ExprItemNBTv1_7_R4;
import me.TheBukor.SkStuff.expressions.ExprItemNBTv1_8_R1;
import me.TheBukor.SkStuff.expressions.ExprItemNBTv1_8_R2;
import me.TheBukor.SkStuff.expressions.ExprItemNBTv1_8_R3;
import me.TheBukor.SkStuff.expressions.ExprLengthOfSchematic;
import me.TheBukor.SkStuff.expressions.ExprLengthOfSelection;
import me.TheBukor.SkStuff.expressions.ExprNBTv1_7_R1;
import me.TheBukor.SkStuff.expressions.ExprNBTv1_7_R2;
import me.TheBukor.SkStuff.expressions.ExprNBTv1_7_R3;
import me.TheBukor.SkStuff.expressions.ExprNBTv1_7_R4;
import me.TheBukor.SkStuff.expressions.ExprNBTv1_8_R1;
import me.TheBukor.SkStuff.expressions.ExprNBTv1_8_R2;
import me.TheBukor.SkStuff.expressions.ExprNBTv1_8_R3;
import me.TheBukor.SkStuff.expressions.ExprNewEditSession;
import me.TheBukor.SkStuff.expressions.ExprSelectionOfPlayer;
import me.TheBukor.SkStuff.expressions.ExprSelectionPos1;
import me.TheBukor.SkStuff.expressions.ExprSelectionPos2;
import me.TheBukor.SkStuff.expressions.ExprTagOfv1_7_R1;
import me.TheBukor.SkStuff.expressions.ExprTagOfv1_7_R2;
import me.TheBukor.SkStuff.expressions.ExprTagOfv1_7_R3;
import me.TheBukor.SkStuff.expressions.ExprTagOfv1_7_R4;
import me.TheBukor.SkStuff.expressions.ExprTagOfv1_8_R1;
import me.TheBukor.SkStuff.expressions.ExprTagOfv1_8_R2;
import me.TheBukor.SkStuff.expressions.ExprTagOfv1_8_R3;
import me.TheBukor.SkStuff.expressions.ExprVolumeOfSchematic;
import me.TheBukor.SkStuff.expressions.ExprVolumeOfSelection;
import me.TheBukor.SkStuff.expressions.ExprWidthOfSchematic;
import me.TheBukor.SkStuff.expressions.ExprWidthOfSelection;
import net.minecraft.server.v1_8_R1.MojangsonParser;
import net.minecraft.server.v1_8_R1.NBTTagCompound;
import net.minecraft.server.v1_8_R2.MojangsonParseException;
public class SkStuff extends JavaPlugin {
private int condAmount = 0;
private int exprAmount = 0;
private int typeAmount = 0;
private int effAmount = 0;
private boolean evtWE = false;
public void onEnable() {
if (Bukkit.getPluginManager().getPlugin("Skript") != null) {
Skript.registerAddon(this);
getLogger().info("SkStuff " + this.getDescription().getVersion() + " has been successfully enabled!");
if (Bukkit.getVersion().contains("(MC: 1.7.2)")) {
getLogger().info("Successfully found 1.7.2! Registering version specific expressions...");
exprAmount += 3;
typeAmount += 1;
Skript.registerExpression(ExprNBTv1_7_R1.class, net.minecraft.server.v1_7_R1.NBTTagCompound.class, ExpressionType.PROPERTY, "nbt[[ ]tag[s]] of %entity/block/itemstack%", "%entity/block/itemstack%'s nbt[[ ]tag[s]]");
Skript.registerExpression(ExprItemNBTv1_7_R1.class, ItemStack.class, ExpressionType.SIMPLE, "%itemstack% with [custom] nbt[[ ]tag[s]] %string%");
Skript.registerExpression(ExprTagOfv1_7_R1.class, Object.class, ExpressionType.SIMPLE, "[nbt[ ]]tag %string% of [nbt [compound]] %compound%");
//WARNING! HIGHLY EXPERIMENTAL, IT CAN CORRUPT WORLDS AT CURRENT VERSION, USE AT YOUR OWN RISK!
//Skript.registerExpression(ExprFileNBTv1_7_R1.class, net.minecraft.server.v1_7_R1.NBTTagCompound.class, ExpressionType.PROPERTY, "nbt[[ ]tag[s]] from [file] %string%");
Classes.registerClass(new ClassInfo<net.minecraft.server.v1_7_R1.NBTTagCompound>(net.minecraft.server.v1_7_R1.NBTTagCompound.class, "compound").name("NBT Tag Compound").user("((nbt)?( ?tag)?) ?compounds?").parser(new Parser<net.minecraft.server.v1_7_R1.NBTTagCompound>() {
@Override
public String getVariableNamePattern() {
return "{.+:.+}";
}
@Override
@Nullable
public net.minecraft.server.v1_7_R1.NBTTagCompound parse(String s, ParseContext context) {
if (s.startsWith("{")) {
net.minecraft.server.v1_7_R1.NBTTagCompound NBT = new net.minecraft.server.v1_7_R1.NBTTagCompound();
net.minecraft.server.v1_7_R1.NBTTagCompound NBT1 = (net.minecraft.server.v1_7_R1.NBTTagCompound) net.minecraft.server.v1_7_R1.MojangsonParser.a(s);
NBT.set("", NBT1);
if (NBT.isEmpty() || NBT == null) {
return null;
}
return NBT;
}
return null;
}
@Override
public String toString(net.minecraft.server.v1_7_R1.NBTTagCompound compound, int arg1) {
return compound.toString();
}
@Override
public String toVariableNameString(net.minecraft.server.v1_7_R1.NBTTagCompound compound) {
return compound.toString();
}
}));
}
if (Bukkit.getVersion().contains("(MC: 1.7.5)")) {
getLogger().info("Successfully found 1.7.5! Registering version specific expressions...");
exprAmount += 3;
typeAmount += 1;
Skript.registerExpression(ExprNBTv1_7_R2.class, net.minecraft.server.v1_7_R2.NBTTagCompound.class, ExpressionType.PROPERTY, "nbt[[ ]tag[s]] of %entity/block/itemstack%", "%entity/block/itemstack%'s nbt[[ ]tag[s]]");
Skript.registerExpression(ExprItemNBTv1_7_R2.class, ItemStack.class, ExpressionType.SIMPLE, "%itemstack% with [custom] nbt[[ ]tag[s]] %string%");
Skript.registerExpression(ExprTagOfv1_7_R2.class, Object.class, ExpressionType.SIMPLE, "[nbt[ ]]tag %string% of [nbt [compound]] %compound%");
//WARNING! HIGHLY EXPERIMENTAL, IT CAN CORRUPT WORLDS AT CURRENT VERSION, USE AT YOUR OWN RISK!
//Skript.registerExpression(ExprFileNBTv1_7_R2.class, net.minecraft.server.v1_7_R2.NBTTagCompound.class, ExpressionType.PROPERTY, "nbt[[ ]tag[s]] from [file] %string%");
Classes.registerClass(new ClassInfo<net.minecraft.server.v1_7_R2.NBTTagCompound>(net.minecraft.server.v1_7_R2.NBTTagCompound.class, "compound").name("NBT Tag Compound").user("((nbt)?( ?tag)?) ?compounds?").parser(new Parser<net.minecraft.server.v1_7_R2.NBTTagCompound>() {
@Override
public String getVariableNamePattern() {
return "nbt:{.+:.+}";
}
@Override
@Nullable
public net.minecraft.server.v1_7_R2.NBTTagCompound parse(String s, ParseContext context) {
if (s.startsWith("{")) {
net.minecraft.server.v1_7_R2.NBTTagCompound NBT = new net.minecraft.server.v1_7_R2.NBTTagCompound();
net.minecraft.server.v1_7_R2.NBTTagCompound NBT1 = (net.minecraft.server.v1_7_R2.NBTTagCompound) net.minecraft.server.v1_7_R2.MojangsonParser.parse(s);
NBT.set("", NBT1);
if (NBT.isEmpty() || NBT == null) {
return null;
}
return NBT;
}
return null;
}
@Override
public String toString(net.minecraft.server.v1_7_R2.NBTTagCompound compound, int arg1) {
return compound.toString();
}
@Override
public String toVariableNameString(net.minecraft.server.v1_7_R2.NBTTagCompound compound) {
return "nbt:" + compound.toString();
}
}));
}
if (Bukkit.getVersion().contains("(MC: 1.7.9)")) {
getLogger().info("Successfully found 1.7.9! Registering version specific expressions...");
exprAmount += 3;
typeAmount += 1;
Skript.registerExpression(ExprNBTv1_7_R3.class, net.minecraft.server.v1_7_R3.NBTTagCompound.class, ExpressionType.PROPERTY, "nbt[[ ]tag[s]] of %entity/block/itemstack%", "%entity/block/itemstack%'s nbt[[ ]tag[s]]");
Skript.registerExpression(ExprItemNBTv1_7_R3.class, ItemStack.class, ExpressionType.SIMPLE, "%itemstack% with [custom] nbt[[ ]tag[s]] %string%");
Skript.registerExpression(ExprTagOfv1_7_R3.class, Object.class, ExpressionType.SIMPLE, "[nbt[ ]]tag %string% of [nbt [compound]] %compound%");
//WARNING! HIGHLY EXPERIMENTAL, IT CAN CORRUPT WORLDS AT CURRENT VERSION, USE AT YOUR OWN RISK!
//Skript.registerExpression(ExprFileNBTv1_7_R3.class, net.minecraft.server.v1_7_R3.NBTTagCompound.class, ExpressionType.PROPERTY, "nbt[[ ]tag[s]] from [file] %string%");
Classes.registerClass(new ClassInfo<net.minecraft.server.v1_7_R3.NBTTagCompound>(net.minecraft.server.v1_7_R3.NBTTagCompound.class, "compound").name("NBT Tag Compound").user("((nbt)?( ?tag)?) ?compounds?").parser(new Parser<net.minecraft.server.v1_7_R3.NBTTagCompound>() {
@Override
public String getVariableNamePattern() {
return "nbt:{.+:.+}";
}
@Override
@Nullable
public net.minecraft.server.v1_7_R3.NBTTagCompound parse(String s, ParseContext context) {
if (s.startsWith("{")) {
net.minecraft.server.v1_7_R3.NBTTagCompound NBT = new net.minecraft.server.v1_7_R3.NBTTagCompound();
net.minecraft.server.v1_7_R3.NBTTagCompound NBT1 = (net.minecraft.server.v1_7_R3.NBTTagCompound) net.minecraft.server.v1_7_R3.MojangsonParser.parse(s);
NBT.set("", NBT1);
if (NBT.isEmpty() || NBT == null) {
return null;
}
return NBT;
}
return null;
}
@Override
public String toString(net.minecraft.server.v1_7_R3.NBTTagCompound compound, int arg1) {
return compound.toString();
}
@Override
public String toVariableNameString(net.minecraft.server.v1_7_R3.NBTTagCompound compound) {
return "nbt:" + compound.toString();
}
}));
}
if (Bukkit.getVersion().contains("(MC: 1.7.10)")) {
getLogger().info("Successfully found 1.7.10! Registering version specific expressions...");
exprAmount += 3;
typeAmount += 1;
Skript.registerExpression(ExprNBTv1_7_R4.class, net.minecraft.server.v1_7_R4.NBTTagCompound.class, ExpressionType.PROPERTY, "nbt[[ ]tag[s]] of %entity/block/itemstack%", "%entity/block/itemstack%'s nbt[[ ]tag[s]]");
Skript.registerExpression(ExprItemNBTv1_7_R4.class, ItemStack.class, ExpressionType.SIMPLE, "%itemstack% with [custom] nbt[[ ]tag[s]] %string%");
Skript.registerExpression(ExprTagOfv1_7_R4.class, Object.class, ExpressionType.SIMPLE, "[nbt[ ]]tag %string% of [nbt [compound]] %compound%");
//WARNING! HIGHLY EXPERIMENTAL, IT CAN CORRUPT WORLDS AT CURRENT VERSION, USE AT YOUR OWN RISK!
//Skript.registerExpression(ExprFileNBTv1_7_R4.class, net.minecraft.server.v1_7_R4.NBTTagCompound.class, ExpressionType.PROPERTY, "nbt[[ ]tag[s]] from [file] %string%");
Classes.registerClass(new ClassInfo<net.minecraft.server.v1_7_R4.NBTTagCompound>(net.minecraft.server.v1_7_R4.NBTTagCompound.class, "compound").user("((nbt)?( ?tag)?) ?compounds?").name("NBT Tag Compound").parser(new Parser<net.minecraft.server.v1_7_R4.NBTTagCompound>() {
@Override
public String getVariableNamePattern() {
return "nbt:{.+:.+}";
}
@Override
@Nullable
public net.minecraft.server.v1_7_R4.NBTTagCompound parse(String s, ParseContext context) {
if (s.startsWith("{")) {
net.minecraft.server.v1_7_R4.NBTTagCompound NBT = new net.minecraft.server.v1_7_R4.NBTTagCompound();
net.minecraft.server.v1_7_R4.NBTTagCompound NBT1 = (net.minecraft.server.v1_7_R4.NBTTagCompound) net.minecraft.server.v1_7_R4.MojangsonParser.parse(s);
NBT.set("", NBT1);
if (NBT.isEmpty() || NBT == null) {
return null;
}
return NBT;
}
return null;
}
@Override
public String toString(net.minecraft.server.v1_7_R4.NBTTagCompound compound, int arg1) {
return compound.toString();
}
@Override
public String toVariableNameString(net.minecraft.server.v1_7_R4.NBTTagCompound compound) {
return "nbt:" + compound.toString();
}
}));
}
if (Bukkit.getVersion().contains("(MC: 1.8)")) {
getLogger().info("Successfully found 1.8! Registering version specific expressions...");
exprAmount += 4;
typeAmount += 1;
Skript.registerExpression(ExprNBTv1_8_R1.class, NBTTagCompound.class, ExpressionType.PROPERTY, "nbt[[ ]tag[s]] of %entity/block/itemstack%", "%entity/block/itemstack%'s nbt[[ ]tag[s]]");
Skript.registerExpression(ExprItemNBTv1_8_R1.class, ItemStack.class, ExpressionType.SIMPLE, "%itemstack% with [custom] nbt[[ ]tag[s]] %string%");
Skript.registerExpression(ExprTagOfv1_8_R1.class, Object.class, ExpressionType.SIMPLE, "[nbt[ ]]tag %string% of [nbt [compound]] %compound%");
//WARNING! HIGHLY EXPERIMENTAL, IT CAN CORRUPT WORLDS AT CURRENT VERSION, USE AT YOUR OWN RISK!
Skript.registerExpression(ExprFileNBTv1_8_R1.class, NBTTagCompound.class, ExpressionType.PROPERTY, "nbt[[ ]tag[s]] from [file] %string%");
Classes.registerClass(new ClassInfo<NBTTagCompound>(NBTTagCompound.class, "compound").name("NBT Tag Compound").user("((nbt)?( ?tag)?) ?compounds?").parser(new Parser<NBTTagCompound>() {
@Override
public String getVariableNamePattern() {
return "nbt:{.+:.+}";
}
@Override
@Nullable
public NBTTagCompound parse(String s, ParseContext context) {
if (s.startsWith("{")) {
NBTTagCompound NBT = new NBTTagCompound();
NBTTagCompound NBT1 = null;
NBT1 = MojangsonParser.parse(s);
NBT.a(NBT1);
if (NBT.isEmpty() || NBT == null) {
return null;
}
return NBT;
}
return null;
}
@Override
public String toString(NBTTagCompound compound, int arg1) {
return compound.toString();
}
@Override
public String toVariableNameString(NBTTagCompound compound) {
return "nbt:" + compound.toString();
}
}));
}
if (Bukkit.getVersion().contains("(MC: 1.8.3)")) {
getLogger().info("Successfully found 1.8.3! Registering version specific expressions...");
exprAmount += 4;
typeAmount += 1;
Skript.registerExpression(ExprNBTv1_8_R2.class, net.minecraft.server.v1_8_R2.NBTTagCompound.class, ExpressionType.PROPERTY, "nbt[[ ]tag[s]] of %entity/block/itemstack%", "%entity/block/itemstack%'s nbt[[ ]tag[s]]");
Skript.registerExpression(ExprItemNBTv1_8_R2.class, ItemStack.class, ExpressionType.SIMPLE, "%itemstack% with [custom] nbt[[ ]tag[s]] %string%");
Skript.registerExpression(ExprTagOfv1_8_R2.class, Object.class, ExpressionType.SIMPLE, "[nbt[ ]]tag %string% of [nbt [compound]] %compound%");
//WARNING! HIGHLY EXPERIMENTAL, IT CAN CORRUPT WORLDS AT CURRENT VERSION, USE AT YOUR OWN RISK!
Skript.registerExpression(ExprFileNBTv1_8_R2.class, net.minecraft.server.v1_8_R2.NBTTagCompound.class, ExpressionType.PROPERTY, "nbt[[ ]tag[s]] from [file] %string%");
Classes.registerClass(new ClassInfo<net.minecraft.server.v1_8_R2.NBTTagCompound>(net.minecraft.server.v1_8_R2.NBTTagCompound.class, "compound").user("((nbt)?( ?tag)?) ?compounds?").name("NBT Tag Compound").parser(new Parser<net.minecraft.server.v1_8_R2.NBTTagCompound>() {
@Override
public String getVariableNamePattern() {
return "nbt:{.+:.+}";
}
@Override
@Nullable
public net.minecraft.server.v1_8_R2.NBTTagCompound parse(String s, ParseContext context) {
if (s.startsWith("{")) {
net.minecraft.server.v1_8_R2.NBTTagCompound NBT = new net.minecraft.server.v1_8_R2.NBTTagCompound();
try {
net.minecraft.server.v1_8_R2.NBTTagCompound NBT1 = net.minecraft.server.v1_8_R2.MojangsonParser.parse(s);
NBT.a(NBT1);
} catch (MojangsonParseException ex) {
Skript.warning("Error when parsing NBT - " + ex.getMessage());
}
if (NBT.isEmpty() || NBT == null) {
return null;
}
return NBT;
}
return null;
}
@Override
public String toString(net.minecraft.server.v1_8_R2.NBTTagCompound compound, int arg1) {
return compound.toString();
}
@Override
public String toVariableNameString(net.minecraft.server.v1_8_R2.NBTTagCompound compound) {
return "nbt:" + compound.toString();
}
}));
}
if (Bukkit.getVersion().contains("(MC: 1.8.4)") || Bukkit.getVersion().contains("(MC: 1.8.5)") || Bukkit.getVersion().contains("(MC: 1.8.6)") || Bukkit.getVersion().contains("(MC: 1.8.7)") || Bukkit.getVersion().contains("(MC: 1.8.8)")) {
getLogger().info("Successfully found 1.8.4 - 1.8.8! Registering version specific expressions...");
exprAmount += 4;
typeAmount += 1;
Skript.registerExpression(ExprNBTv1_8_R3.class, net.minecraft.server.v1_8_R3.NBTTagCompound.class, ExpressionType.PROPERTY, "nbt[[ ]tag[s]] of %entity/block/itemstack%", "%entity/block/itemstack%'s nbt[[ ]tag[s]]");
Skript.registerExpression(ExprItemNBTv1_8_R3.class, ItemStack.class, ExpressionType.SIMPLE, "%itemstack% with [custom] nbt[[ ]tag[s]] %string%");
Skript.registerExpression(ExprTagOfv1_8_R3.class, Object.class, ExpressionType.SIMPLE, "[nbt[ ]]tag %string% of [nbt [compound]] %compound%");
//WARNING! HIGHLY EXPERIMENTAL, IT CAN CORRUPT WORLDS AT CURRENT VERSION, USE AT YOUR OWN RISK!
Skript.registerExpression(ExprFileNBTv1_8_R3.class, net.minecraft.server.v1_8_R3.NBTTagCompound.class, ExpressionType.PROPERTY, "nbt[[ ]tag[s]] from [file] %string%");
Classes.registerClass(new ClassInfo<net.minecraft.server.v1_8_R3.NBTTagCompound>(net.minecraft.server.v1_8_R3.NBTTagCompound.class, "compound").user("((nbt)?( ?tag)?) ?compounds?").name("NBT Compound").parser(new Parser<net.minecraft.server.v1_8_R3.NBTTagCompound>() {
@Override
public String getVariableNamePattern() {
return "nbt:{.+:.+}";
}
@Override
@Nullable
public net.minecraft.server.v1_8_R3.NBTTagCompound parse(String s, ParseContext context) {
if (s.startsWith("{")) {
net.minecraft.server.v1_8_R3.NBTTagCompound NBT = new net.minecraft.server.v1_8_R3.NBTTagCompound();
try {
net.minecraft.server.v1_8_R3.NBTTagCompound NBT1 = net.minecraft.server.v1_8_R3.MojangsonParser.parse(s);
NBT.a(NBT1);
} catch (net.minecraft.server.v1_8_R3.MojangsonParseException ex) {
return null;
}
if (NBT.isEmpty() || NBT == null) {
return null;
}
return NBT;
}
return null;
}
@Override
public String toString(net.minecraft.server.v1_8_R3.NBTTagCompound compound, int arg1) {
return compound.toString();
}
@Override
public String toVariableNameString(net.minecraft.server.v1_8_R3.NBTTagCompound compound) {
return "nbt:" + compound.toString();
}
}));
}
if (Bukkit.getPluginManager().getPlugin("WorldEdit") != null) {
getLogger().info("WorldEdit found! Registering WorldEdit stuff...");
condAmount += 1;
effAmount += 12;
exprAmount += 16;
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%");
Skript.registerEffect(EffDrawLineWE.class, "(create|draw|make) [a[n]] (0¦(no(n|t)(-| )hollow|filled|)|1¦hollow) line from %location% to %location% (using|with) [edit[ ]session] %editsession% (using|with) [block[s]] %itemstacks% [with] thick[ness] %double%");
Skript.registerEffect(EffUndoRedoSession.class, "(0¦undo|1¦redo) (change|edit)s (of|from) [edit[ ]session] %editsession%");
Skript.registerEffect(EffRememberChanges.class, "make %player% (remember|be able to undo) changes (of|from) [edit[ ]session] %editsession%");
Skript.registerEffect(EffMakeSphere.class, "(create|make) [a[n]] (0¦(no(n|t)(-| )hollow|filled|)|1¦hollow) (ellipsoid|sphere) [centered] at %location% [with] radius [of] %double%,[ ]%double%(,[ ]| and )%double% (using|with) [edit[ ]session] %editsession% (using|with) [block[s]] %itemstacks%");
Skript.registerEffect(EffSimulateSnow.class, "(simulate snow at|place snow over) %location% (in|within) [a] radius [of] %double% (using|with) [edit[ ]session] %editsession%", "make %location% snowy (in|within) [a] radius [of] %double% (using|with) [edit[ ]session] %editsession%");
Skript.registerEffect(EffMakePyramid.class, "(create|make) [a[n]] (0¦(no(n|t)(-| )hollow|filled|)|1¦hollow) pyramid at %location% [with] radius [of] %integer% (using|with) [edit[ ]session] %editsession% (using|with) [block[s]] %itemstacks%");
Skript.registerEffect(EffDrainLiquid.class, "(drain|remove) [all] liquid[s] at %location% (in|within) [a] radius [of] %double% (using|with) [edit[ ]session] %editsession%");
Skript.registerEffect(EffNaturalize.class, "naturalize ([cuboid] region|[all] blocks) (from|between) %location% (to|and) %location% (using|with) [edit[ ]session] %editsession%");
Skript.registerEffect(EffMakeWalls.class, "(create|make) wall[s] from %location% to %location% (using|with) [edit[ ]session] %editsession% (using|with) [block[s]] %itemstacks%");
Skript.registerEffect(EffSetBlocksWE.class, "set [all] blocks (from|between) %location% (to|and) %location% to %itemstacks% (using|with) [edit[ ]session] %editsession%");
Skript.registerEffect(EffMakeCylinder.class, "(create|make) [a[n]] (0¦(no(n|t)(-| )hollow|filled|)|1¦hollow) cylinder at %location% [with] radius [of] %double%,[ ]%integer%(,[ ]| and )%double% (using|with) [edit[ ]session] %editsession% (using|with) [block[s]] %itemstacks%");
Skript.registerEffect(EffReplaceBlocksWE.class, "replace [all] %itemstacks% (from|between) %location% (to|and) %location% with %itemstacks% (using|with) [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(ExprNewEditSession.class, EditSession.class, ExpressionType.PROPERTY, "new edit[ ]session in [world] %world% [with] [max[imum]] [block] limit [change] [of] %integer%");
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");
Skript.registerExpression(ExprSelectionPos2.class, Location.class, ExpressionType.PROPERTY, "[(world[ ]edit|we)] po(s|int)[ ]2 of %player%", "%player%'s [(world[ ]edit|we)] po(s|int)[ ]2");
Skript.registerExpression(ExprVolumeOfSelection.class, Integer.class, ExpressionType.SIMPLE, "volume of [(world[ ]edit|we)] selection of %player%", "%player%'s [(world[ ]edit|we)] selection volume");
Skript.registerExpression(ExprWidthOfSelection.class, Integer.class, ExpressionType.SIMPLE, "(x( |-)size|width) of [(world[ ]edit|we)] selection of %player%", "%player%'s [(world[ ]edit|we)] selection (x( |-)size|width)");
Skript.registerExpression(ExprLengthOfSelection.class, Integer.class, ExpressionType.SIMPLE, "(z( |-)size|length) of [(world[ ]edit|we)] selection of %player%", "%player%'s [(world[ ]edit|we) ]selection (z( |-)size|length)");
Skript.registerExpression(ExprHeightOfSelection.class, Integer.class, ExpressionType.SIMPLE, "(y( |-)size|height) of [(world[ ]edit|we)] selection of %player%", "%player%'s [(world[ ]edit|we) ]selection (y( |-)size|height)");
Skript.registerExpression(ExprAreaOfSelection.class, Integer.class, ExpressionType.SIMPLE, "area of [(world[ ]edit|we)] selection of %player%", "%player%'s [(world[ ]edit|we)] selection area");
Skript.registerExpression(ExprVolumeOfSchematic.class, Integer.class, ExpressionType.SIMPLE, "volume of schem[atic] [from] %string%");
Skript.registerExpression(ExprWidthOfSchematic.class, Integer.class, ExpressionType.SIMPLE, "(x( |-)size|width) of schem[atic] [from] %string%");
Skript.registerExpression(ExprHeightOfSchematic.class, Integer.class, ExpressionType.SIMPLE, "(y( |-)size|height) of schem[atic] [from] %string%");
Skript.registerExpression(ExprLengthOfSchematic.class, Integer.class, ExpressionType.SIMPLE, "(z( |-)size|length) of schem[atic] [from] %string%");
Skript.registerExpression(ExprAreaOfSchematic.class, Integer.class, ExpressionType.SIMPLE, "area of schem[atic] [from] %string%");
Classes.registerClass(new ClassInfo<EditSession>(EditSession.class, "editsession").name("Edit Session").user("edit ?sessions?"));
try {
Class.forName("com.sk89q.worldedit.extent.logging.AbstractLoggingExtent");
new WorldEditChangeHandler();
Skript.registerEvent("WorldEdit block change", SimpleEvent.class, EvtWorldEditChange.class, "world[ ]edit [block] (chang(e|ing)|edit[ing])");
EventValues.registerEventValue(EvtWorldEditChange.class, Player.class, new Getter<Player, EvtWorldEditChange>() {
@Override
@Nullable
public Player get(EvtWorldEditChange e) {
return EvtWorldEditChange.getPlayer();
}
}, 0);
EventValues.registerEventValue(EvtWorldEditChange.class, Block.class, new Getter<Block, EvtWorldEditChange>() {
@Override
@Nullable
public Block get(EvtWorldEditChange e) {
return EvtWorldEditChange.getBlock();
}
}, -1);
EventValues.registerEventValue(EvtWorldEditChange.class, Block.class, new Getter<Block, EvtWorldEditChange>() {
@Override
@Nullable
public Block get(EvtWorldEditChange e) {
return EvtWorldEditChange.getBlock();
}
}, 0);
EventValues.registerEventValue(EvtWorldEditChange.class, Block.class, new Getter<Block, EvtWorldEditChange>() {
@Override
@Nullable
public Block get(EvtWorldEditChange e) {
return EvtWorldEditChange.getFutureBlock();
}
}, 1);
evtWE = true;
} catch (ClassNotFoundException ex) {
Skript.error("Unable to register \"On WorldEdit block change\" event! You will need to upgrade to WorldEdit 6.0");
}
}
getLogger().info("Everything ready! Loaded a total of " + condAmount + (condAmount == 1 ? " condition, " : " conditions, ") + effAmount + (effAmount == 1 ? " effect, " : " effects, ") + (evtWE ? "1 event, " : "") + exprAmount + (exprAmount == 1 ? " expression" : " expressions and ") + typeAmount + (typeAmount == 1 ? " type!" : " types!"));
} else {
getLogger().info("Unable to find Skript, disabling SkStuff...");
Bukkit.getPluginManager().disablePlugin(this);;
}
}
public void onDisable() {
getLogger().info("SkStuff " + this.getDescription().getVersion() + " has been successfully disabled.");
}
}

View File

@@ -0,0 +1,49 @@
package me.TheBukor.SkStuff.conditions;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import javax.annotation.Nullable;
import ch.njol.skript.lang.Condition;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.util.Checker;
import ch.njol.util.Kleenean;
public class CondSelectionContains extends Condition {
private Expression<Player> player;
private Expression<Location> loc;
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
player = (Expression<Player>) expr[0];
loc = (Expression<Location>) expr[1];
setNegated(matchedPattern == 2 || matchedPattern == 3);
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "if WorldEdit selection of " + player.toString(e, false) + (isNegated() ? " doesn't contain " : " contains ") + loc.toString(e, false);
}
@Override
public boolean check(final Event e) {
final WorldEditPlugin we = (WorldEditPlugin) Bukkit.getServer().getPluginManager().getPlugin("WorldEdit");
if (we.getSelection(player.getSingle(e)) == null) {
return false;
}
return player.check(e, new Checker<Player>() {
@Override
public boolean check(Player p) {
return we.getSelection(p).contains(loc.getSingle(e));
}
}, isNegated());
}
}

View File

@@ -0,0 +1,52 @@
package me.TheBukor.SkStuff.effects;
import javax.annotation.Nullable;
import org.bukkit.Location;
import org.bukkit.event.Event;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.MaxChangedBlocksException;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.bukkit.BukkitUtil;
import ch.njol.skript.lang.Effect;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.util.Kleenean;
public class EffDrainLiquid extends Effect {
private Expression<Location> location;
private Expression<Double> radius;
private Expression<EditSession> editSession;
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult result) {
location = (Expression<Location>) expr[0];
radius = (Expression<Double>) expr[1];
editSession = (Expression<EditSession>) expr[2];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "drain liquids at " + location.toString(e, false) + " in a radius of " + radius.toString(e, false);
}
@Override
protected void execute(Event e) {
Location loc = location.getSingle(e);
Double rad = radius.getSingle(e);
EditSession session = editSession.getSingle(e);
if (session == null) return;
try {
session.drainArea(BukkitUtil.toVector(loc), rad);
session.flushQueue();
} catch (WorldEditException ex) {
if (ex instanceof MaxChangedBlocksException)
return;
else
ex.printStackTrace();
}
}
}

View File

@@ -0,0 +1,69 @@
package me.TheBukor.SkStuff.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.blocks.BaseBlock;
import com.sk89q.worldedit.bukkit.BukkitUtil;
import com.sk89q.worldedit.function.pattern.BlockPattern;
import com.sk89q.worldedit.function.pattern.Patterns;
import com.sk89q.worldedit.function.pattern.RandomPattern;
import ch.njol.skript.lang.Effect;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.util.Kleenean;
public class EffDrawLineWE extends Effect {
private Expression<Location> location1;
private Expression<Location> location2;
private Expression<EditSession> editSession;
private Expression<ItemStack> blockList;
private Expression<Double> thickness;
private boolean filled = true;
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult result) {
location1 = (Expression<Location>) expr[0];
location2 = (Expression<Location>) expr[1];
editSession = (Expression<EditSession>) expr[2];
blockList = (Expression<ItemStack>) expr[3];
thickness = (Expression<Double>) 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);
}
@SuppressWarnings("deprecation")
@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();
if (session == null) return;
for (ItemStack b : blocks) {
if (b.getType().isBlock()) {
random.add(new BlockPattern(new BaseBlock(b.getTypeId(), b.getDurability())), 50);
}
}
try {
session.drawLine(Patterns.wrap(random), BukkitUtil.toVector(pos1), BukkitUtil.toVector(pos2), thick, filled);
session.flushQueue();
} catch (MaxChangedBlocksException ex) {
return;
}
}
}

View File

@@ -0,0 +1,75 @@
package me.TheBukor.SkStuff.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.blocks.BaseBlock;
import com.sk89q.worldedit.bukkit.BukkitUtil;
import com.sk89q.worldedit.function.pattern.BlockPattern;
import com.sk89q.worldedit.function.pattern.Patterns;
import com.sk89q.worldedit.function.pattern.RandomPattern;
import ch.njol.skript.lang.Effect;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.util.Kleenean;
public class EffMakeCylinder extends Effect {
private Expression<Location> location;
private Expression<Double> radius1;
private Expression<Double> radius2;
private Expression<Integer> height;
private Expression<EditSession> editSession;
private Expression<ItemStack> blockList;
private boolean filled = true;
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult result) {
location = (Expression<Location>) expr[0];
radius1 = (Expression<Double>) expr[1];
height = (Expression<Integer>) expr[2];
radius2 = (Expression<Double>) expr[3];
editSession = (Expression<EditSession>) expr[4];
blockList = (Expression<ItemStack>) expr[5];
if (result.mark == 1) filled = false;
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "create a cylinder at " + location.toString(e, false) + " with a radius of " + radius1.toString(e, false) + " " + height.toString(e, false) + " " + radius2.toString(e, false) + " using an edit session with " + blockList.toString(e, false);
}
@SuppressWarnings("deprecation")
@Override
protected void execute(Event e) {
Location loc = location.getSingle(e);
Double rad1 = radius1.getSingle(e);
Integer h = height.getSingle(e);
Double rad2 = radius2.getSingle(e);
EditSession session = editSession.getSingle(e);
ItemStack[] blocks = blockList.getAll(e);
RandomPattern random = new RandomPattern();
if (session == null) return;
for (ItemStack b : blocks) {
if (b.getType().isBlock()) {
random.add(new BlockPattern(new BaseBlock(b.getTypeId(), b.getDurability())), 50);
}
}
try {
session.makeCylinder(BukkitUtil.toVector(loc), Patterns.wrap(random), rad1, rad2, h, filled);
session.flushQueue();
} catch (WorldEditException ex) {
if (ex instanceof MaxChangedBlocksException)
return;
else
ex.printStackTrace();
}
}
}

View File

@@ -0,0 +1,69 @@
package me.TheBukor.SkStuff.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.blocks.BaseBlock;
import com.sk89q.worldedit.bukkit.BukkitUtil;
import com.sk89q.worldedit.function.pattern.BlockPattern;
import com.sk89q.worldedit.function.pattern.Patterns;
import com.sk89q.worldedit.function.pattern.RandomPattern;
import ch.njol.skript.lang.Effect;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.util.Kleenean;
public class EffMakePyramid extends Effect {
private Expression<Location> location;
private Expression<Integer> radius;
private Expression<EditSession> editSession;
private Expression<ItemStack> blockList;
private boolean filled = true;
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult result) {
location = (Expression<Location>) expr[0];
radius = (Expression<Integer>) expr[1];
editSession = (Expression<EditSession>) expr[2];
blockList = (Expression<ItemStack>) expr[3];
if (result.mark == 1) filled = false;
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "create a pyramid at " + location.toString(e, false) + " with a radius of " + radius.toString(e, false) + " using an edit session with " + blockList.toString(e, false);
}
@SuppressWarnings("deprecation")
@Override
protected void execute(Event e) {
Location loc = location.getSingle(e);
Integer rad = radius.getSingle(e);
EditSession session = editSession.getSingle(e);
ItemStack[] blocks = blockList.getAll(e);
RandomPattern random = new RandomPattern();
if (session == null) return;
for (ItemStack b : blocks) {
if (b.getType().isBlock()) {
random.add(new BlockPattern(new BaseBlock(b.getTypeId(), b.getDurability())), 50);
}
}
try {
session.makePyramid(BukkitUtil.toVector(loc), Patterns.wrap(random), rad, filled);
session.flushQueue();
} catch (WorldEditException ex) {
if (ex instanceof MaxChangedBlocksException)
return;
else
ex.printStackTrace();
}
}
}

View File

@@ -0,0 +1,75 @@
package me.TheBukor.SkStuff.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.blocks.BaseBlock;
import com.sk89q.worldedit.bukkit.BukkitUtil;
import com.sk89q.worldedit.function.pattern.BlockPattern;
import com.sk89q.worldedit.function.pattern.Patterns;
import com.sk89q.worldedit.function.pattern.RandomPattern;
import ch.njol.skript.lang.Effect;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.util.Kleenean;
public class EffMakeSphere extends Effect {
private Expression<Location> location;
private Expression<Double> radius1;
private Expression<Double> radius2;
private Expression<Double> radius3;
private Expression<EditSession> editSession;
private Expression<ItemStack> blockList;
private boolean filled = true;
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult result) {
location = (Expression<Location>) expr[0];
radius1 = (Expression<Double>) expr[1];
radius2 = (Expression<Double>) expr[2];
radius3 = (Expression<Double>) expr[3];
editSession = (Expression<EditSession>) expr[4];
blockList = (Expression<ItemStack>) expr[5];
if (result.mark == 1) filled = false;
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "create a sphere centered at " + location.toString(e, false) + " with a radius of " + radius1.toString(e, false) + " " + radius2.toString(e, false) + " " + radius3.toString(e, false) + " using an edit session with " + blockList.toString(e, false);
}
@SuppressWarnings("deprecation")
@Override
protected void execute(Event e) {
Location loc = location.getSingle(e);
Double rad1 = radius1.getSingle(e);
Double rad2 = radius2.getSingle(e);
Double rad3 = radius3.getSingle(e);
EditSession session = editSession.getSingle(e);
ItemStack[] blocks = blockList.getAll(e);
RandomPattern random = new RandomPattern();
if (session == null) return;
for (ItemStack b : blocks) {
if (b.getType().isBlock()) {
random.add(new BlockPattern(new BaseBlock(b.getTypeId(), b.getDurability())), 50);
}
}
try {
session.makeSphere(BukkitUtil.toVector(loc), Patterns.wrap(random), rad1, rad2, rad3, filled);
session.flushQueue();
} catch (WorldEditException ex) {
if (ex instanceof MaxChangedBlocksException)
return;
else
ex.printStackTrace();
}
}
}

View File

@@ -0,0 +1,69 @@
package me.TheBukor.SkStuff.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.blocks.BaseBlock;
import com.sk89q.worldedit.bukkit.BukkitUtil;
import com.sk89q.worldedit.function.pattern.BlockPattern;
import com.sk89q.worldedit.function.pattern.Patterns;
import com.sk89q.worldedit.function.pattern.RandomPattern;
import com.sk89q.worldedit.regions.CuboidRegion;
import com.sk89q.worldedit.world.World;
import ch.njol.skript.lang.Effect;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.util.Kleenean;
public class EffMakeWalls extends Effect {
private Expression<Location> location1;
private Expression<Location> location2;
private Expression<EditSession> editSession;
private Expression<ItemStack> blockList;
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult result) {
location1 = (Expression<Location>) expr[0];
location2 = (Expression<Location>) expr[1];
editSession = (Expression<EditSession>) expr[2];
blockList = (Expression<ItemStack>) expr[3];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "make walls from " + location1.toString(e, false) + " to " + location2.toString(e, false) + " using an edit session with " + blockList.toString(e, false);
}
@SuppressWarnings("deprecation")
@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);
RandomPattern random = new RandomPattern();
if (session == null) return;
for (ItemStack b : blocks) {
if (b.getType().isBlock()) {
random.add(new BlockPattern(new BaseBlock(b.getTypeId(), b.getDurability())), 50);
}
}
try {
session.makeWalls(new CuboidRegion((World) BukkitUtil.getLocalWorld(pos1.getWorld()), BukkitUtil.toVector(pos1), BukkitUtil.toVector(pos2)), Patterns.wrap(random));
session.flushQueue();
} catch (WorldEditException ex) {
if (ex instanceof MaxChangedBlocksException)
return;
else
ex.printStackTrace();
}
}
}

View File

@@ -0,0 +1,54 @@
package me.TheBukor.SkStuff.effects;
import javax.annotation.Nullable;
import org.bukkit.Location;
import org.bukkit.event.Event;
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.regions.CuboidRegion;
import ch.njol.skript.lang.Effect;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.util.Kleenean;
public class EffNaturalize extends Effect {
private Expression<Location> location1;
private Expression<Location> location2;
private Expression<EditSession> editSession;
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult result) {
location1 = (Expression<Location>) expr[0];
location2 = (Expression<Location>) expr[1];
editSession = (Expression<EditSession>) expr[2];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "naturalize all blocks from " + location1.toString(e, false) + " to " + location2.toString(e, false);
}
@Override
protected void execute(Event e) {
Location pos1 = location1.getSingle(e);
Location pos2 = location2.getSingle(e);
EditSession session = editSession.getSingle(e);
if (session == null) return;
CuboidRegion region = new CuboidRegion(BukkitUtil.toVector(pos1), BukkitUtil.toVector(pos2));
try {
session.naturalizeCuboidBlocks(region);
session.flushQueue();
} catch (WorldEditException ex) {
if (ex instanceof MaxChangedBlocksException)
return;
else
ex.printStackTrace();
}
}
}

View File

@@ -0,0 +1,42 @@
package me.TheBukor.SkStuff.effects;
import javax.annotation.Nullable;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import ch.njol.skript.lang.Effect;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.util.Kleenean;
public class EffRememberChanges extends Effect {
private Expression<Player> player;
private Expression<EditSession> editSession;
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
player = (Expression<Player>) expr[0];
editSession = (Expression<EditSession>) expr[1];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "make " + player.toString(e, false) + " remember changes from edit session";
}
@Override
protected void execute(Event e) {
WorldEditPlugin we = (WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit");
Player p = player.getSingle(e);
EditSession session = editSession.getSingle(e);
if (we.getSession(p) == null) return;
we.getSession(p).remember(session);
}
}

View File

@@ -0,0 +1,81 @@
package me.TheBukor.SkStuff.effects;
import java.util.HashSet;
import java.util.Set;
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.blocks.BaseBlock;
import com.sk89q.worldedit.bukkit.BukkitUtil;
import com.sk89q.worldedit.function.pattern.BlockPattern;
import com.sk89q.worldedit.function.pattern.Patterns;
import com.sk89q.worldedit.function.pattern.RandomPattern;
import com.sk89q.worldedit.regions.CuboidRegion;
import com.sk89q.worldedit.world.World;
import ch.njol.skript.lang.Effect;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.util.Kleenean;
public class EffReplaceBlocksWE extends Effect {
private Expression<ItemStack> blockList1;
private Expression<Location> location1;
private Expression<Location> location2;
private Expression<ItemStack> blockList2;
private Expression<EditSession> editSession;
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult result) {
blockList1 = (Expression<ItemStack>) expr[0];
location1 = (Expression<Location>) expr[1];
location2 = (Expression<Location>) expr[2];
blockList2 = (Expression<ItemStack>) expr[3];
editSession = (Expression<EditSession>) expr[4];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "replace all " + blockList1.toString(e, false) + " from " + location1.toString(e, false) + " to " + location2.toString(e, false) + " with " + blockList1.toString(e, false) + " using an edit session";
}
@SuppressWarnings({ "deprecation" })
@Override
protected void execute(Event e) {
Location pos1 = location1.getSingle(e);
Location pos2 = location2.getSingle(e);
EditSession session = editSession.getSingle(e);
ItemStack[] blocks = blockList1.getAll(e);
ItemStack[] blocksToPlace = blockList2.getAll(e);
RandomPattern random = new RandomPattern();
Set<BaseBlock> blocksToReplace = new HashSet<BaseBlock>();
if (session == null) return;
for (ItemStack b : blocks) {
if (b.getType().isBlock()) {
blocksToReplace.add(new BaseBlock(b.getTypeId(), b.getDurability()));
}
}
for (ItemStack b : blocksToPlace) {
if (b.getType().isBlock()) {
random.add(new BlockPattern(new BaseBlock(b.getTypeId(), b.getDurability())), 50);
}
}
try {
session.replaceBlocks(new CuboidRegion((World) BukkitUtil.getLocalWorld(pos1.getWorld()), BukkitUtil.toVector(pos1), BukkitUtil.toVector(pos2)), blocksToReplace, Patterns.wrap(random));
session.flushQueue();
} catch (WorldEditException ex) {
if (ex instanceof MaxChangedBlocksException)
return;
else
ex.printStackTrace();
}
}
}

View File

@@ -0,0 +1,69 @@
package me.TheBukor.SkStuff.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.blocks.BaseBlock;
import com.sk89q.worldedit.bukkit.BukkitUtil;
import com.sk89q.worldedit.function.pattern.BlockPattern;
import com.sk89q.worldedit.function.pattern.Patterns;
import com.sk89q.worldedit.function.pattern.RandomPattern;
import com.sk89q.worldedit.regions.CuboidRegion;
import com.sk89q.worldedit.world.World;
import ch.njol.skript.lang.Effect;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.util.Kleenean;
public class EffSetBlocksWE extends Effect {
private Expression<Location> location1;
private Expression<Location> location2;
private Expression<ItemStack> blockList;
private Expression<EditSession> editSession;
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult result) {
location1 = (Expression<Location>) expr[0];
location2 = (Expression<Location>) expr[1];
blockList = (Expression<ItemStack>) expr[2];
editSession = (Expression<EditSession>) expr[3];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "set all blocks from " + location1.toString(e, false) + " to " + location2.toString(e, false) + " to " + blockList.toString(e, false) + " using an edit session";
}
@SuppressWarnings("deprecation")
@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);
RandomPattern random = new RandomPattern();
if (session == null) return;
for (ItemStack b : blocks) {
if (b.getType().isBlock()) {
random.add(new BlockPattern(new BaseBlock(b.getTypeId(), b.getDurability())), 50);
}
}
try {
session.setBlocks(new CuboidRegion((World) BukkitUtil.getLocalWorld(pos1.getWorld()), BukkitUtil.toVector(pos1), BukkitUtil.toVector(pos2)), Patterns.wrap(random));
session.flushQueue();
} catch (WorldEditException ex) {
if (ex instanceof MaxChangedBlocksException)
return;
else
ex.printStackTrace();
}
}
}

View File

@@ -0,0 +1,52 @@
package me.TheBukor.SkStuff.effects;
import javax.annotation.Nullable;
import org.bukkit.Location;
import org.bukkit.event.Event;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.MaxChangedBlocksException;
import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.bukkit.BukkitUtil;
import ch.njol.skript.lang.Effect;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.util.Kleenean;
public class EffSimulateSnow extends Effect {
private Expression<Location> location;
private Expression<Double> radius;
private Expression<EditSession> editSession;
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult result) {
location = (Expression<Location>) expr[0];
radius = (Expression<Double>) expr[1];
editSession = (Expression<EditSession>) expr[2];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "make " + location.toString(e, false) + " snowy in a radius of " + radius.toString(e, false);
}
@Override
protected void execute(Event e) {
Location loc = location.getSingle(e);
Double rad = radius.getSingle(e);
EditSession session = editSession.getSingle(e);
if (session == null) return;
try {
session.simulateSnow(BukkitUtil.toVector(loc), rad);
session.flushQueue();
} catch (WorldEditException ex) {
if (ex instanceof MaxChangedBlocksException)
return;
else
ex.printStackTrace();
}
}
}

View File

@@ -0,0 +1,42 @@
package me.TheBukor.SkStuff.effects;
import javax.annotation.Nullable;
import org.bukkit.event.Event;
import com.sk89q.worldedit.EditSession;
import ch.njol.skript.lang.Effect;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.util.Kleenean;
public class EffUndoRedoSession extends Effect {
private Expression<EditSession> editSession;
private boolean redo = false;
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult result) {
editSession = (Expression<EditSession>) expr[0];
if (result.mark == 1) redo = true;
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return (redo == true ? "redo " : "undo ") + "changes from edit session";
}
@Override
protected void execute(Event e) {
EditSession session = editSession.getSingle(e);
if (session == null) return;
if (redo == false) {
session.undo(session);
} else {
session.redo(session);
}
session.flushQueue();
}
}

View File

@@ -0,0 +1,40 @@
package me.TheBukor.SkStuff.events;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
public class EvtWorldEditChange extends Event {
static Player player;
static Block block;
static Block futureBlock;
public EvtWorldEditChange(Player player, Block block, Block futureBlock) {
EvtWorldEditChange.player = player;
EvtWorldEditChange.block = block;
EvtWorldEditChange.futureBlock = futureBlock;
}
public static Player getPlayer() {
return player;
}
public static Block getBlock() {
return block;
}
public static Block getFutureBlock() {
return futureBlock;
}
private static final HandlerList handlers = new HandlerList();
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}

View File

@@ -0,0 +1,24 @@
package me.TheBukor.SkStuff.events;
import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.bukkit.BukkitWorld;
import com.sk89q.worldedit.event.extent.EditSessionEvent;
import com.sk89q.worldedit.extension.platform.Actor;
import com.sk89q.worldedit.util.eventbus.Subscribe;
import com.sk89q.worldedit.world.World;
public class WorldEditChangeHandler {
public WorldEditChangeHandler() {
WorldEdit.getInstance().getEventBus().register(this);
}
@Subscribe
public void wrapForLogging(EditSessionEvent event) {
Actor actor = event.getActor();
World world = event.getWorld();
if (world instanceof BukkitWorld) {
event.setExtent(new WorldEditExtent(actor, world, event.getExtent()));
}
}
}

View File

@@ -0,0 +1,41 @@
package me.TheBukor.SkStuff.events;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.blocks.BaseBlock;
import com.sk89q.worldedit.bukkit.BukkitUtil;
import com.sk89q.worldedit.bukkit.BukkitWorld;
import com.sk89q.worldedit.extension.platform.Actor;
import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.extent.logging.AbstractLoggingExtent;
import me.TheBukor.SkStuff.SkStuff;
public class WorldEditExtent extends AbstractLoggingExtent {
private final Actor actor;
private final World world;
public WorldEditExtent(Actor actor, com.sk89q.worldedit.world.World weWorld, Extent extent) {
super(extent);
this.actor = actor;
this.world = ((BukkitWorld) weWorld).getWorld();
}
@Override
protected void onBlockChange(final Vector vec, BaseBlock baseBlock) {
final Block b = BukkitUtil.toLocation(world, vec).getBlock();
final Player p = Bukkit.getPlayerExact(actor.getName());
Bukkit.getScheduler().scheduleSyncDelayedTask(new SkStuff(), new Runnable() {
@Override
public void run() {
Block futureB = BukkitUtil.toLocation(world, vec).getBlock();
Bukkit.getPluginManager().callEvent(new EvtWorldEditChange(p, b, futureB));
}
}, 1L);
}
}

View File

@@ -0,0 +1,58 @@
package me.TheBukor.SkStuff.expressions;
import java.io.File;
import java.io.IOException;
import javax.annotation.Nullable;
import org.bukkit.event.Event;
import com.sk89q.worldedit.extent.clipboard.Clipboard;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.schematic.MCEditSchematicFormat;
import com.sk89q.worldedit.world.DataException;
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 ExprAreaOfSchematic extends SimpleExpression<Integer> {
private Expression<String> schematic;
@Override
public Class<? extends Integer> getReturnType() {
return Integer.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
schematic = (Expression<String>) expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the area of the schematic from " + schematic.toString(e, false);
}
@Override
@Nullable
protected Integer[] get(Event e) {
String schem = schematic.getSingle(e);
File schemFile = new File((schem.endsWith(".schematic") ? schem : (schem + ".schematic")));
Region region = null;
try {
region = ((Clipboard) MCEditSchematicFormat.getFormat(schemFile).load(schemFile)).getRegion();
} catch (DataException | IOException ex) {
return null;
}
return new Integer[] { region.getWidth() * region.getLength() };
}
}

View File

@@ -0,0 +1,51 @@
package me.TheBukor.SkStuff.expressions;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldedit.bukkit.selections.Selection;
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 ExprAreaOfSelection extends SimpleExpression<Integer> {
private Expression<Player> player;
@Override
public Class<? extends Integer> getReturnType() {
return Integer.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
player = (Expression<Player>) expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the area of the WorldEdit selection of " + player.toString(e, false);
}
@Override
@Nullable
protected Integer[] get(Event e) {
WorldEditPlugin we = (WorldEditPlugin) Bukkit.getServer().getPluginManager().getPlugin("WorldEdit");
Selection sel = we.getSelection(player.getSingle(e));
if (sel == null)
return null;
return new Integer[] { sel.getWidth() * sel.getLength() };
}
}

View File

@@ -0,0 +1,46 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.event.Event;
import com.sk89q.worldedit.EditSession;
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 ExprChangedBlocksSession extends SimpleExpression<Integer> {
private Expression<EditSession> editSession;
@Override
public Class<? extends Integer> getReturnType() {
return Integer.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
editSession = (Expression<EditSession>) expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the number of changed blocks in an edit session";
}
@Override
@Nullable
protected Integer[] get(Event e) {
EditSession session = editSession.getSingle(e);
if (session == null)
return null;
return new Integer[] { session.getBlockChangeCount() };
}
}

View File

@@ -0,0 +1,76 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Bukkit;
import org.bukkit.event.Event;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import ch.njol.skript.classes.Changer.ChangeMode;
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;
import ch.njol.util.coll.CollectionUtils;
public class ExprEditSessionLimit extends SimpleExpression<Integer> {
private Expression<EditSession> editSession;
private WorldEditPlugin we = (WorldEditPlugin) Bukkit.getServer().getPluginManager().getPlugin("WorldEdit");
@Override
public Class<? extends Integer> getReturnType() {
return Integer.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
editSession = (Expression<EditSession>) expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the block change limit of an edit session";
}
@Override
@Nullable
protected Integer[] get(Event e) {
EditSession session = editSession.getSingle(e);
if (session == null)
return null;
return new Integer[] { session.getBlockChangeLimit() };
}
@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(Integer.valueOf(newLimit));
} else if (mode == ChangeMode.RESET) {
session.setBlockChangeLimit(Integer.valueOf(we.getLocalConfiguration().defaultChangeLimit));
}
}
@SuppressWarnings("unchecked")
@Override
@Nullable
public Class<?>[] acceptChange(ChangeMode mode) {
if (mode == ChangeMode.SET || mode == ChangeMode.RESET || mode == ChangeMode.DELETE) {
return CollectionUtils.array(Integer.class);
}
return null;
}
}

View File

@@ -0,0 +1,123 @@
package me.TheBukor.SkStuff.expressions;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipException;
import javax.annotation.Nullable;
import org.bukkit.event.Event;
import ch.njol.skript.classes.Changer.ChangeMode;
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;
import ch.njol.util.coll.CollectionUtils;
import net.minecraft.server.v1_8_R1.MojangsonParser;
import net.minecraft.server.v1_8_R1.NBTCompressedStreamTools;
import net.minecraft.server.v1_8_R1.NBTTagCompound;
public class ExprFileNBTv1_8_R1 extends SimpleExpression<NBTTagCompound> {
private Expression<String> input;
@Override
public Class<? extends NBTTagCompound> getReturnType() {
return NBTTagCompound.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
input = (Expression<String>) expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the NBT of file from file " + input.toString(e, false);
}
@Override
@Nullable
protected NBTTagCompound[] get(Event e) {
NBTTagCompound NBT = null;
File file = new File(input.getSingle(e));
if (file.exists()) {
try {
InputStream fis = new FileInputStream(file);
NBT = NBTCompressedStreamTools.a(fis);
fis.close();
} catch (EOFException ex) {
//End of file, no error.
} catch (ZipException ex) {
return null; //Not a valid file (not compressed in GZIP format)
} catch (IOException ex) {
ex.printStackTrace();
}
} else {
return null; // Specified file doesn't exist
}
return new NBTTagCompound[] { NBT };
}
@Override
public void change(Event e, @Nullable Object[] delta, ChangeMode mode) {
File file = new File(input.getSingle(e));
String tags = (String) delta[0];
if (mode == ChangeMode.ADD) {
try {
InputStream fis = new FileInputStream(file);
NBTTagCompound NBT = NBTCompressedStreamTools.a(fis);
OutputStream os = new FileOutputStream(file);
NBTTagCompound NBT1 = MojangsonParser.parse(tags);
NBT.a(NBT1);
NBTCompressedStreamTools.a(NBT, os);
fis.close();
os.close();
} catch (EOFException ex) {
//End of file, no error.
} catch (ZipException ex) {
return; //Not a valid file (not compressed in GZIP format)
} catch (IOException ex) {
ex.printStackTrace();
}
} else if (mode == ChangeMode.REMOVE) {
try {
InputStream fis = new FileInputStream(file);
NBTTagCompound NBT = NBTCompressedStreamTools.a(fis);
OutputStream os = new FileOutputStream(file);
NBT.remove(tags);
NBTCompressedStreamTools.a(NBT, os);
fis.close();
os.close();
} catch (EOFException ex) {
//End of file, no error.
} catch (ZipException ex) {
return; //Not a valid file (not compressed in GZIP format)
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
@SuppressWarnings("unchecked")
@Override
@Nullable
public Class<?>[] acceptChange(ChangeMode mode) {
if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) {
return CollectionUtils.array(String.class);
}
return null;
}
}

View File

@@ -0,0 +1,127 @@
package me.TheBukor.SkStuff.expressions;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipException;
import javax.annotation.Nullable;
import org.bukkit.event.Event;
import ch.njol.skript.Skript;
import ch.njol.skript.classes.Changer.ChangeMode;
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;
import ch.njol.util.coll.CollectionUtils;
import net.minecraft.server.v1_8_R2.MojangsonParseException;
import net.minecraft.server.v1_8_R2.MojangsonParser;
import net.minecraft.server.v1_8_R2.NBTCompressedStreamTools;
import net.minecraft.server.v1_8_R2.NBTTagCompound;
public class ExprFileNBTv1_8_R2 extends SimpleExpression<NBTTagCompound> {
private Expression<String> input;
@Override
public Class<? extends NBTTagCompound> getReturnType() {
return NBTTagCompound.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
input = (Expression<String>) expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the NBT of file from file " + input.toString(e, false);
}
@Override
@Nullable
protected NBTTagCompound[] get(Event e) {
NBTTagCompound NBT = null;
File file = new File(input.getSingle(e));
if (file.exists()) {
try {
InputStream fis = new FileInputStream(file);
NBT = NBTCompressedStreamTools.a(fis);
fis.close();
} catch (EOFException ex) {
//End of file, no error.
} catch (ZipException ex) {
return null; //Not a valid file (not compressed in GZIP format)
} catch (IOException ex) {
ex.printStackTrace();
}
} else {
return null; // Specified file doesn't exist
}
return new NBTTagCompound[] { NBT };
}
@Override
public void change(Event e, @Nullable Object[] delta, ChangeMode mode) {
File file = new File(input.getSingle(e));
String tags = (String) delta[0];
if (mode == ChangeMode.ADD) {
try {
InputStream fis = new FileInputStream(file);
NBTTagCompound NBT = NBTCompressedStreamTools.a(fis);
OutputStream os = new FileOutputStream(file);
NBTTagCompound NBT1 = MojangsonParser.parse(tags);
NBT.a(NBT1);
NBTCompressedStreamTools.a(NBT, os);
fis.close();
os.close();
} catch (EOFException ex) {
//End of file, no error.
} catch (ZipException ex) {
return; //Not a valid file (not compressed in GZIP format)
} catch (IOException ex) {
ex.printStackTrace();
} catch (MojangsonParseException ex) {
Skript.warning("Error when parsing NBT - " + ex.getMessage());
}
} else if (mode == ChangeMode.REMOVE) {
try {
InputStream fis = new FileInputStream(file);
NBTTagCompound NBT = NBTCompressedStreamTools.a(fis);
OutputStream os = new FileOutputStream(file);
NBT.remove(tags);
NBTCompressedStreamTools.a(NBT, os);
fis.close();
os.close();
} catch (EOFException ex) {
//End of file, no error.
} catch (ZipException ex) {
return; //Not a valid file (not compressed in GZIP format)
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
@SuppressWarnings("unchecked")
@Override
@Nullable
public Class<?>[] acceptChange(ChangeMode mode) {
if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) {
return CollectionUtils.array(String.class);
}
return null;
}
}

View File

@@ -0,0 +1,131 @@
package me.TheBukor.SkStuff.expressions;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipException;
import javax.annotation.Nullable;
import org.bukkit.Bukkit;
import org.bukkit.event.Event;
import ch.njol.skript.Skript;
import ch.njol.skript.classes.Changer.ChangeMode;
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;
import ch.njol.util.coll.CollectionUtils;
import net.minecraft.server.v1_8_R3.MojangsonParseException;
import net.minecraft.server.v1_8_R3.MojangsonParser;
import net.minecraft.server.v1_8_R3.NBTCompressedStreamTools;
import net.minecraft.server.v1_8_R3.NBTTagCompound;
public class ExprFileNBTv1_8_R3 extends SimpleExpression<NBTTagCompound> {
private Expression<String> input;
@Override
public Class<? extends NBTTagCompound> getReturnType() {
return NBTTagCompound.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
input = (Expression<String>) expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the NBT of file from file " + input.toString(e, false);
}
@Override
@Nullable
protected NBTTagCompound[] get(Event e) {
NBTTagCompound NBT = null;
File file = new File(input.getSingle(e));
if (file.exists()) {
try {
InputStream fis = new FileInputStream(file);
NBT = NBTCompressedStreamTools.a(fis);
fis.close();
} catch (EOFException ex) {
//End of file, no error.
} catch (ZipException ex) {
return null; //Not a valid file (not compressed in GZIP format)
} catch (IOException ex) {
ex.printStackTrace();
}
} else {
return null; // Specified file doesn't exist
}
return new NBTTagCompound[] { NBT };
}
@Override
public void change(Event e, @Nullable Object[] delta, ChangeMode mode) {
File file = new File(input.getSingle(e));
String tags = (String) delta[0];
if (mode == ChangeMode.ADD) {
try {
InputStream fis = new FileInputStream(file);
NBTTagCompound NBT = NBTCompressedStreamTools.a(fis);
OutputStream os = new FileOutputStream(file);
NBTTagCompound NBT1 = MojangsonParser.parse(tags);
NBT.a(NBT1);
NBTCompressedStreamTools.a(NBT, os);
Bukkit.broadcastMessage("First - " + NBT.toString() + "\n\nSecond: " + NBT1.toString());
fis.close();
os.close();
} catch (EOFException ex) {
//End of file, no error.
} catch (ZipException ex) {
return; //Not a valid file (not compressed in GZIP format)
} catch (IOException ex) {
ex.printStackTrace();
} catch (MojangsonParseException ex) {
Skript.warning("Error when parsing NBT - " + ex.getMessage());
}
} else if (mode == ChangeMode.REMOVE) {
try {
InputStream fis = new FileInputStream(file);
NBTTagCompound NBT = NBTCompressedStreamTools.a(fis);
Bukkit.broadcastMessage("First - " + NBT.toString());
OutputStream os = new FileOutputStream(file);
NBT.remove(tags);
NBTCompressedStreamTools.a(NBT, os);
Bukkit.broadcastMessage("\n\nSecond: " + NBT.toString());
fis.close();
os.close();
} catch (EOFException ex) {
//End of file, no error.
} catch (ZipException ex) {
return; //Not a valid file (not compressed in GZIP format)
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
@SuppressWarnings("unchecked")
@Override
@Nullable
public Class<?>[] acceptChange(ChangeMode mode) {
if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) {
return CollectionUtils.array(String.class);
}
return null;
}
}

View File

@@ -0,0 +1,57 @@
package me.TheBukor.SkStuff.expressions;
import java.io.File;
import java.io.IOException;
import javax.annotation.Nullable;
import org.bukkit.event.Event;
import com.sk89q.worldedit.extent.clipboard.Clipboard;
import com.sk89q.worldedit.schematic.MCEditSchematicFormat;
import com.sk89q.worldedit.world.DataException;
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 ExprHeightOfSchematic extends SimpleExpression<Integer> {
private Expression<String> schematic;
@Override
public Class<? extends Integer> getReturnType() {
return Integer.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
schematic = (Expression<String>) expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the height of the schematic from " + schematic.toString(e, false);
}
@Override
@Nullable
protected Integer[] get(Event e) {
String schem = schematic.getSingle(e);
File schemFile = new File((schem.endsWith(".schematic") ? schem : (schem + ".schematic")));
Integer h = null;
try {
h = ((Clipboard) MCEditSchematicFormat.getFormat(schemFile).load(schemFile)).getRegion().getHeight();
} catch (DataException | IOException ex) {
return null;
}
return new Integer[] { h };
}
}

View File

@@ -0,0 +1,51 @@
package me.TheBukor.SkStuff.expressions;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldedit.bukkit.selections.Selection;
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 ExprHeightOfSelection extends SimpleExpression<Integer> {
private Expression<Player> player;
@Override
public Class<? extends Integer> getReturnType() {
return Integer.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
player = (Expression<Player>) expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the height of the WorldEdit selection of " + player.toString(e, false);
}
@Override
@Nullable
protected Integer[] get(Event e) {
WorldEditPlugin we = (WorldEditPlugin) Bukkit.getServer().getPluginManager().getPlugin("WorldEdit");
Selection sel = we.getSelection(player.getSingle(e));
if (sel == null)
return null;
return new Integer[] { sel.getHeight() };
}
}

View File

@@ -0,0 +1,61 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_7_R1.inventory.CraftItemStack;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
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;
import net.minecraft.server.v1_7_R1.MojangsonParser;
import net.minecraft.server.v1_7_R1.NBTTagCompound;
public class ExprItemNBTv1_7_R1 extends SimpleExpression<ItemStack> {
private Expression<ItemStack> itemStack;
private Expression<String> string;
@Override
public Class<? extends ItemStack> getReturnType() {
return ItemStack.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
itemStack = (Expression<ItemStack>) expr[0];
string = (Expression<String>) expr[1];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return itemStack.toString(e, false) + " with custom NBT";
}
@Override
@Nullable
public ItemStack[] get(Event e) {
ItemStack item = itemStack.getSingle(e);
String newTags = string.getSingle(e);
if (item.getType() == Material.AIR || item == null) {
return null;
}
net.minecraft.server.v1_7_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
NBTTagCompound NBT = (NBTTagCompound) MojangsonParser.a(newTags);
if (NBT == null || NBT.isEmpty()) {
return new ItemStack[] { item };
}
nmsItem.setTag(NBT);
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
return new ItemStack[] { newItem };
}
}

View File

@@ -0,0 +1,61 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_7_R2.inventory.CraftItemStack;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
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;
import net.minecraft.server.v1_7_R2.MojangsonParser;
import net.minecraft.server.v1_7_R2.NBTTagCompound;
public class ExprItemNBTv1_7_R2 extends SimpleExpression<ItemStack> {
private Expression<ItemStack> itemStack;
private Expression<String> string;
@Override
public Class<? extends ItemStack> getReturnType() {
return ItemStack.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
itemStack = (Expression<ItemStack>) expr[0];
string = (Expression<String>) expr[1];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return itemStack.toString(e, false) + " with custom NBT";
}
@Override
@Nullable
public ItemStack[] get(Event e) {
ItemStack item = itemStack.getSingle(e);
String newTags = string.getSingle(e);
if (item.getType() == Material.AIR || item == null) {
return null;
}
net.minecraft.server.v1_7_R2.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
NBTTagCompound NBT = (NBTTagCompound) MojangsonParser.parse(newTags);
if (NBT == null || NBT.isEmpty()) {
return new ItemStack[] { item };
}
nmsItem.setTag(NBT);
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
return new ItemStack[] { newItem };
}
}

View File

@@ -0,0 +1,61 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_7_R3.inventory.CraftItemStack;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
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;
import net.minecraft.server.v1_7_R3.MojangsonParser;
import net.minecraft.server.v1_7_R3.NBTTagCompound;
public class ExprItemNBTv1_7_R3 extends SimpleExpression<ItemStack> {
private Expression<ItemStack> itemStack;
private Expression<String> string;
@Override
public Class<? extends ItemStack> getReturnType() {
return ItemStack.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
itemStack = (Expression<ItemStack>) expr[0];
string = (Expression<String>) expr[1];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return itemStack.toString(e, false) + " with custom NBT";
}
@Override
@Nullable
public ItemStack[] get(Event e) {
ItemStack item = itemStack.getSingle(e);
String newTags = string.getSingle(e);
if (item.getType() == Material.AIR || item == null) {
return null;
}
net.minecraft.server.v1_7_R3.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
NBTTagCompound NBT = (NBTTagCompound) MojangsonParser.parse(newTags);
if (NBT == null || NBT.isEmpty()) {
return new ItemStack[] { item };
}
nmsItem.setTag(NBT);
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
return new ItemStack[] { newItem };
}
}

View File

@@ -0,0 +1,61 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftItemStack;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
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;
import net.minecraft.server.v1_7_R4.MojangsonParser;
import net.minecraft.server.v1_7_R4.NBTTagCompound;
public class ExprItemNBTv1_7_R4 extends SimpleExpression<ItemStack> {
private Expression<ItemStack> itemStack;
private Expression<String> string;
@Override
public Class<? extends ItemStack> getReturnType() {
return ItemStack.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
itemStack = (Expression<ItemStack>) expr[0];
string = (Expression<String>) expr[1];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return itemStack.toString(e, false) + " with custom NBT";
}
@Override
@Nullable
public ItemStack[] get(Event e) {
ItemStack item = itemStack.getSingle(e);
String newTags = string.getSingle(e);
if (item.getType() == Material.AIR || item == null) {
return null;
}
net.minecraft.server.v1_7_R4.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
NBTTagCompound NBT = (NBTTagCompound) MojangsonParser.parse(newTags);
if (NBT == null || NBT.isEmpty()) {
return new ItemStack[] { item };
}
nmsItem.setTag(NBT);
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
return new ItemStack[] { newItem };
}
}

View File

@@ -0,0 +1,61 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_8_R1.inventory.CraftItemStack;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
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;
import net.minecraft.server.v1_8_R1.MojangsonParser;
import net.minecraft.server.v1_8_R1.NBTTagCompound;
public class ExprItemNBTv1_8_R1 extends SimpleExpression<ItemStack> {
private Expression<ItemStack> itemStack;
private Expression<String> string;
@Override
public Class<? extends ItemStack> getReturnType() {
return ItemStack.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
itemStack = (Expression<ItemStack>) expr[0];
string = (Expression<String>) expr[1];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return itemStack.toString(e, false) + " with custom NBT";
}
@Override
@Nullable
public ItemStack[] get(Event e) {
ItemStack item = itemStack.getSingle(e);
String newTags = string.getSingle(e);
if (item.getType() == Material.AIR || item == null) {
return null;
}
net.minecraft.server.v1_8_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
NBTTagCompound NBT = MojangsonParser.parse(newTags);
if (NBT == null || NBT.isEmpty()) {
return new ItemStack[] { item };
}
nmsItem.setTag(NBT);
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
return new ItemStack[] { newItem };
}
}

View File

@@ -0,0 +1,68 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_8_R2.inventory.CraftItemStack;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
import ch.njol.skript.Skript;
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;
import net.minecraft.server.v1_8_R2.MojangsonParseException;
import net.minecraft.server.v1_8_R2.MojangsonParser;
import net.minecraft.server.v1_8_R2.NBTTagCompound;
public class ExprItemNBTv1_8_R2 extends SimpleExpression<ItemStack> {
private Expression<ItemStack> itemStack;
private Expression<String> string;
@Override
public Class<? extends ItemStack> getReturnType() {
return ItemStack.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
itemStack = (Expression<ItemStack>) expr[0];
string = (Expression<String>) expr[1];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return itemStack.toString(e, false) + " with custom NBT";
}
@Override
@Nullable
public ItemStack[] get(Event e) {
ItemStack item = itemStack.getSingle(e);
String newTags = string.getSingle(e);
if (item.getType() == Material.AIR || item == null) {
return null;
}
net.minecraft.server.v1_8_R2.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
try {
NBTTagCompound NBT = MojangsonParser.parse(newTags);
if (NBT == null || NBT.isEmpty()) {
return new ItemStack[] { item };
}
nmsItem.setTag(NBT);
} catch (MojangsonParseException ex) {
Skript.warning(ChatColor.RED + "Error when parsing NBT - " + ex.getMessage());
}
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
return new ItemStack[] { newItem };
}
}

View File

@@ -0,0 +1,68 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
import ch.njol.skript.Skript;
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;
import net.minecraft.server.v1_8_R3.MojangsonParseException;
import net.minecraft.server.v1_8_R3.MojangsonParser;
import net.minecraft.server.v1_8_R3.NBTTagCompound;
public class ExprItemNBTv1_8_R3 extends SimpleExpression<ItemStack> {
private Expression<ItemStack> itemStack;
private Expression<String> string;
@Override
public Class<? extends ItemStack> getReturnType() {
return ItemStack.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
itemStack = (Expression<ItemStack>) expr[0];
string = (Expression<String>) expr[1];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return itemStack.toString(e, false) + " with custom NBT";
}
@Override
@Nullable
public ItemStack[] get(Event e) {
ItemStack item = itemStack.getSingle(e);
String newTags = string.getSingle(e);
if (item.getType() == Material.AIR || item == null) {
return null;
}
net.minecraft.server.v1_8_R3.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
try {
NBTTagCompound NBT = MojangsonParser.parse(newTags);
if (NBT == null || NBT.isEmpty()) {
return new ItemStack[] { item };
}
nmsItem.setTag(NBT);
} catch (MojangsonParseException ex) {
Skript.warning(ChatColor.RED + "Error when parsing NBT - " + ex.getMessage());
}
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
return new ItemStack[] { newItem };
}
}

View File

@@ -0,0 +1,57 @@
package me.TheBukor.SkStuff.expressions;
import java.io.File;
import java.io.IOException;
import javax.annotation.Nullable;
import org.bukkit.event.Event;
import com.sk89q.worldedit.extent.clipboard.Clipboard;
import com.sk89q.worldedit.schematic.MCEditSchematicFormat;
import com.sk89q.worldedit.world.DataException;
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 ExprLengthOfSchematic extends SimpleExpression<Integer> {
private Expression<String> schematic;
@Override
public Class<? extends Integer> getReturnType() {
return Integer.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
schematic = (Expression<String>) expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the length of the schematic from " + schematic.toString(e, false);
}
@Override
@Nullable
protected Integer[] get(Event e) {
String schem = schematic.getSingle(e);
File schemFile = new File((schem.endsWith(".schematic") ? schem : (schem + ".schematic")));
Integer l = null;
try {
l = ((Clipboard) MCEditSchematicFormat.getFormat(schemFile).load(schemFile)).getRegion().getLength();
} catch (DataException | IOException ex) {
return null;
}
return new Integer[] { l };
}
}

View File

@@ -0,0 +1,51 @@
package me.TheBukor.SkStuff.expressions;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldedit.bukkit.selections.Selection;
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 ExprLengthOfSelection extends SimpleExpression<Integer> {
private Expression<Player> player;
@Override
public Class<? extends Integer> getReturnType() {
return Integer.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
player = (Expression<Player>) expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the length of the WorldEdit selection of " + player.toString(e, false);
}
@Override
@Nullable
protected Integer[] get(Event e) {
WorldEditPlugin we = (WorldEditPlugin) Bukkit.getServer().getPluginManager().getPlugin("WorldEdit");
Selection sel = we.getSelection(player.getSingle(e));
if (sel == null)
return null;
return new Integer[] { sel.getLength() };
}
}

View File

@@ -0,0 +1,194 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.craftbukkit.v1_7_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_7_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_7_R1.inventory.CraftItemStack;
import org.bukkit.entity.Entity;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
import ch.njol.skript.classes.Changer.ChangeMode;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.lang.util.SimpleExpression;
import ch.njol.skript.util.Slot;
import ch.njol.util.Kleenean;
import ch.njol.util.coll.CollectionUtils;
import net.minecraft.server.v1_7_R1.MojangsonParser;
import net.minecraft.server.v1_7_R1.NBTTagCompound;
import net.minecraft.server.v1_7_R1.TileEntity;
public class ExprNBTv1_7_R1 extends SimpleExpression<NBTTagCompound> {
private Expression<?> target;
private NBTTagCompound[] returned;
@Override
public Class<? extends NBTTagCompound> getReturnType() {
return NBTTagCompound.class;
}
@Override
public boolean isSingle() {
return true;
}
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
target = expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the NBT of " + target.toString(e, false);
}
@Override
@Nullable
public NBTTagCompound[] get(Event e) {
Object tar = target.getSingle(e);
if (tar instanceof Entity) {
CraftEntity ent = (CraftEntity) tar;
NBTTagCompound NBT = new NBTTagCompound();
ent.getHandle().e(NBT);
returned = new NBTTagCompound[] { NBT };
} else if (tar instanceof Block) {
Block block = (Block) tar;
NBTTagCompound NBT = new NBTTagCompound();
TileEntity tileEntity = ((CraftWorld) block.getWorld()).getHandle().getTileEntity(block.getX(), block.getY(), block.getZ());
if (tileEntity == null) {
return null;
}
tileEntity.b(NBT);
returned = new NBTTagCompound[] { NBT };
} else if (tar instanceof ItemStack) {
ItemStack item = (ItemStack) tar;
if (item.getType() == Material.AIR) {
return null;
}
NBTTagCompound NBT = CraftItemStack.asNMSCopy(item).getTag();
if (NBT == null || NBT.isEmpty()) {
return null;
}
returned = new NBTTagCompound[] { NBT };
}
return returned;
}
@Override
public void change(Event e, Object[] delta, ChangeMode mode) {
Object tar = target.getSingle(e);
if (tar instanceof Entity) {
CraftEntity ent = (CraftEntity) tar;
NBTTagCompound NBT = new NBTTagCompound();
ent.getHandle().e(NBT);
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
NBTTagCompound NBT1 = (NBTTagCompound) MojangsonParser.a(newTags);
NBT1.remove("UUIDMost");
NBT1.remove("UUIDLeast");
NBT1.remove("WorldUUIDLeast");
NBT1.remove("WorldUUIDMost");
NBT1.remove("Bukkit.updateLevel");
NBT.set("", NBT1);
ent.getHandle().f(NBT);
} else if (mode == ChangeMode.REMOVE) {
ent.getHandle().e(NBT);
for (Object s : delta) {
if (s != "UUIDMost" || s != "UUIDLeast" || s != "WorldUUIDMost" || s != "WorldUUIDLeast"
|| s != "Bukkit.updateLevel") {
NBT.remove((String) s);
ent.getHandle().f(NBT);
}
}
}
} else if (tar instanceof Block) {
Block block = (Block) tar;
NBTTagCompound NBT = new NBTTagCompound();
TileEntity tileEntity = ((CraftWorld) block.getWorld()).getHandle().getTileEntity(block.getX(), block.getY(), block.getZ());
if (tileEntity == null) {
return;
}
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
tileEntity.b(NBT);
NBTTagCompound NBT1 = (NBTTagCompound) MojangsonParser.a(newTags);
NBT.set("", NBT1);;
NBT.setInt("x", block.getX());
NBT.setInt("y", block.getY());
NBT.setInt("z", block.getZ());
tileEntity.a(NBT);
tileEntity.update();
((CraftWorld) block.getWorld()).getHandle().notify(tileEntity.x, tileEntity.y, tileEntity.z);;
} else if (mode == ChangeMode.REMOVE) {
tileEntity.b(NBT);
for (Object s : delta) {
if (s != "x" || s != "y" || s != "z" || s != "id") {
NBT.remove((String) s);
tileEntity.a(NBT);
tileEntity.update();
((CraftWorld) block.getWorld()).getHandle().notify(tileEntity.x, tileEntity.y, tileEntity.z);
}
}
}
} else if (tar instanceof ItemStack) {
ItemStack item = (ItemStack) tar;
if (item.getType() == Material.AIR) {
return;
}
net.minecraft.server.v1_7_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
NBTTagCompound NBT = nmsItem.getTag();
if (NBT == null) {
NBT = new NBTTagCompound();
}
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
NBTTagCompound NBT1 = (NBTTagCompound) MojangsonParser.a(newTags);
NBT.set("", NBT1);
nmsItem.setTag(NBT);
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
if (!(slot[0] instanceof Slot)) {
return;
}
((Slot) slot[0]).setItem(newItem);
} else if (mode == ChangeMode.REMOVE) {
NBT = nmsItem.getTag();
if (NBT == null || NBT.isEmpty()) {
return;
}
for (Object s : delta) {
NBT.remove((String) s);
}
nmsItem.setTag(NBT);
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
((Slot) slot[0]).setItem(newItem);
} else if (mode == ChangeMode.DELETE || mode == ChangeMode.RESET) {
nmsItem.setTag(new NBTTagCompound());
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
if (!(slot[0] instanceof Slot)) {
return;
}
((Slot) slot[0]).setItem(newItem);
}
}
}
@SuppressWarnings("unchecked")
@Override
public Class<?>[] acceptChange(final ChangeMode mode) {
if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE || mode == ChangeMode.DELETE
|| mode == ChangeMode.RESET) {
return CollectionUtils.array(String.class);
}
return null;
}
}

View File

@@ -0,0 +1,194 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.craftbukkit.v1_7_R2.CraftWorld;
import org.bukkit.craftbukkit.v1_7_R2.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_7_R2.inventory.CraftItemStack;
import org.bukkit.entity.Entity;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
import ch.njol.skript.classes.Changer.ChangeMode;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.lang.util.SimpleExpression;
import ch.njol.skript.util.Slot;
import ch.njol.util.Kleenean;
import ch.njol.util.coll.CollectionUtils;
import net.minecraft.server.v1_7_R2.MojangsonParser;
import net.minecraft.server.v1_7_R2.NBTTagCompound;
import net.minecraft.server.v1_7_R2.TileEntity;
public class ExprNBTv1_7_R2 extends SimpleExpression<NBTTagCompound> {
private Expression<?> target;
private NBTTagCompound[] returned;
@Override
public Class<? extends NBTTagCompound> getReturnType() {
return NBTTagCompound.class;
}
@Override
public boolean isSingle() {
return true;
}
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
target = expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the NBT of " + target.toString(e, false);
}
@Override
@Nullable
public NBTTagCompound[] get(Event e) {
Object tar = target.getSingle(e);
if (tar instanceof Entity) {
CraftEntity ent = (CraftEntity) tar;
NBTTagCompound NBT = new NBTTagCompound();
ent.getHandle().e(NBT);
returned = new NBTTagCompound[] { NBT };
} else if (tar instanceof Block) {
Block block = (Block) tar;
NBTTagCompound NBT = new NBTTagCompound();
TileEntity tileEntity = ((CraftWorld) block.getWorld()).getHandle().getTileEntity(block.getX(), block.getY(), block.getZ());
if (tileEntity == null) {
return null;
}
tileEntity.b(NBT);
returned = new NBTTagCompound[] { NBT };
} else if (tar instanceof ItemStack) {
ItemStack item = (ItemStack) tar;
if (item.getType() == Material.AIR) {
return null;
}
NBTTagCompound NBT = CraftItemStack.asNMSCopy(item).getTag();
if (NBT == null || NBT.isEmpty()) {
return null;
}
returned = new NBTTagCompound[] { NBT };
}
return returned;
}
@Override
public void change(Event e, Object[] delta, ChangeMode mode) {
Object tar = target.getSingle(e);
if (tar instanceof Entity) {
CraftEntity ent = (CraftEntity) tar;
NBTTagCompound NBT = new NBTTagCompound();
ent.getHandle().e(NBT);
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
NBTTagCompound NBT1 = (NBTTagCompound) MojangsonParser.parse(newTags);
NBT1.remove("UUIDMost");
NBT1.remove("UUIDLeast");
NBT1.remove("WorldUUIDLeast");
NBT1.remove("WorldUUIDMost");
NBT1.remove("Bukkit.updateLevel");
NBT.set("", NBT1);
ent.getHandle().f(NBT);
} else if (mode == ChangeMode.REMOVE) {
ent.getHandle().e(NBT);
for (Object s : delta) {
if (s != "UUIDMost" || s != "UUIDLeast" || s != "WorldUUIDMost" || s != "WorldUUIDLeast"
|| s != "Bukkit.updateLevel") {
NBT.remove((String) s);
ent.getHandle().f(NBT);
}
}
}
} else if (tar instanceof Block) {
Block block = (Block) tar;
NBTTagCompound NBT = new NBTTagCompound();
TileEntity tileEntity = ((CraftWorld) block.getWorld()).getHandle().getTileEntity(block.getX(), block.getY(), block.getZ());
if (tileEntity == null) {
return;
}
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
tileEntity.b(NBT);
NBTTagCompound NBT1 = (NBTTagCompound) MojangsonParser.parse(newTags);
NBT.set("", NBT1);;
NBT.setInt("x", block.getX());
NBT.setInt("y", block.getY());
NBT.setInt("z", block.getZ());
tileEntity.a(NBT);
tileEntity.update();
((CraftWorld) block.getWorld()).getHandle().notify(tileEntity.x, tileEntity.y, tileEntity.z);;
} else if (mode == ChangeMode.REMOVE) {
tileEntity.b(NBT);
for (Object s : delta) {
if (s != "x" || s != "y" || s != "z" || s != "id") {
NBT.remove((String) s);
tileEntity.a(NBT);
tileEntity.update();
((CraftWorld) block.getWorld()).getHandle().notify(tileEntity.x, tileEntity.y, tileEntity.z);
}
}
}
} else if (tar instanceof ItemStack) {
ItemStack item = (ItemStack) tar;
if (item.getType() == Material.AIR) {
return;
}
net.minecraft.server.v1_7_R2.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
NBTTagCompound NBT = nmsItem.getTag();
if (NBT == null) {
NBT = new NBTTagCompound();
}
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
NBTTagCompound NBT1 = (NBTTagCompound) MojangsonParser.parse(newTags);
NBT.set("", NBT1);
nmsItem.setTag(NBT);
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
if (!(slot[0] instanceof Slot)) {
return;
}
((Slot) slot[0]).setItem(newItem);
} else if (mode == ChangeMode.REMOVE) {
NBT = nmsItem.getTag();
if (NBT == null || NBT.isEmpty()) {
return;
}
for (Object s : delta) {
NBT.remove((String) s);
}
nmsItem.setTag(NBT);
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
((Slot) slot[0]).setItem(newItem);
} else if (mode == ChangeMode.DELETE || mode == ChangeMode.RESET) {
nmsItem.setTag(new NBTTagCompound());
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
if (!(slot[0] instanceof Slot)) {
return;
}
((Slot) slot[0]).setItem(newItem);
}
}
}
@SuppressWarnings("unchecked")
@Override
public Class<?>[] acceptChange(final ChangeMode mode) {
if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE || mode == ChangeMode.DELETE
|| mode == ChangeMode.RESET) {
return CollectionUtils.array(String.class);
}
return null;
}
}

View File

@@ -0,0 +1,194 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.craftbukkit.v1_7_R3.CraftWorld;
import org.bukkit.craftbukkit.v1_7_R3.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_7_R3.inventory.CraftItemStack;
import org.bukkit.entity.Entity;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
import ch.njol.skript.classes.Changer.ChangeMode;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.lang.util.SimpleExpression;
import ch.njol.skript.util.Slot;
import ch.njol.util.Kleenean;
import ch.njol.util.coll.CollectionUtils;
import net.minecraft.server.v1_7_R3.MojangsonParser;
import net.minecraft.server.v1_7_R3.NBTTagCompound;
import net.minecraft.server.v1_7_R3.TileEntity;
public class ExprNBTv1_7_R3 extends SimpleExpression<NBTTagCompound> {
private Expression<?> target;
private NBTTagCompound[] returned;
@Override
public Class<? extends NBTTagCompound> getReturnType() {
return NBTTagCompound.class;
}
@Override
public boolean isSingle() {
return true;
}
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
target = expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the NBT of " + target.toString(e, false);
}
@Override
@Nullable
public NBTTagCompound[] get(Event e) {
Object tar = target.getSingle(e);
if (tar instanceof Entity) {
CraftEntity ent = (CraftEntity) tar;
NBTTagCompound NBT = new NBTTagCompound();
ent.getHandle().e(NBT);
returned = new NBTTagCompound[] { NBT };
} else if (tar instanceof Block) {
Block block = (Block) tar;
NBTTagCompound NBT = new NBTTagCompound();
TileEntity tileEntity = ((CraftWorld) block.getWorld()).getHandle().getTileEntity(block.getX(), block.getY(), block.getZ());
if (tileEntity == null) {
return null;
}
tileEntity.b(NBT);
returned = new NBTTagCompound[] { NBT };
} else if (tar instanceof ItemStack) {
ItemStack item = (ItemStack) tar;
if (item.getType() == Material.AIR) {
return null;
}
NBTTagCompound NBT = CraftItemStack.asNMSCopy(item).getTag();
if (NBT == null || NBT.isEmpty()) {
return null;
}
returned = new NBTTagCompound[] { NBT };
}
return returned;
}
@Override
public void change(Event e, Object[] delta, ChangeMode mode) {
Object tar = target.getSingle(e);
if (tar instanceof Entity) {
CraftEntity ent = (CraftEntity) tar;
NBTTagCompound NBT = new NBTTagCompound();
ent.getHandle().e(NBT);
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
NBTTagCompound NBT1 = (NBTTagCompound) MojangsonParser.parse(newTags);
NBT1.remove("UUIDMost");
NBT1.remove("UUIDLeast");
NBT1.remove("WorldUUIDLeast");
NBT1.remove("WorldUUIDMost");
NBT1.remove("Bukkit.updateLevel");
NBT.set("", NBT1);
ent.getHandle().f(NBT);
} else if (mode == ChangeMode.REMOVE) {
ent.getHandle().e(NBT);
for (Object s : delta) {
if (s != "UUIDMost" || s != "UUIDLeast" || s != "WorldUUIDMost" || s != "WorldUUIDLeast"
|| s != "Bukkit.updateLevel") {
NBT.remove((String) s);
ent.getHandle().f(NBT);
}
}
}
} else if (tar instanceof Block) {
Block block = (Block) tar;
NBTTagCompound NBT = new NBTTagCompound();
TileEntity tileEntity = ((CraftWorld) block.getWorld()).getHandle().getTileEntity(block.getX(), block.getY(), block.getZ());
if (tileEntity == null) {
return;
}
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
tileEntity.b(NBT);
NBTTagCompound NBT1 = (NBTTagCompound) MojangsonParser.parse(newTags);
NBT.set("", NBT1);;
NBT.setInt("x", block.getX());
NBT.setInt("y", block.getY());
NBT.setInt("z", block.getZ());
tileEntity.a(NBT);
tileEntity.update();
((CraftWorld) block.getWorld()).getHandle().notify(tileEntity.x, tileEntity.y, tileEntity.z);;
} else if (mode == ChangeMode.REMOVE) {
tileEntity.b(NBT);
for (Object s : delta) {
if (s != "x" || s != "y" || s != "z" || s != "id") {
NBT.remove((String) s);
tileEntity.a(NBT);
tileEntity.update();
((CraftWorld) block.getWorld()).getHandle().notify(tileEntity.x, tileEntity.y, tileEntity.z);
}
}
}
} else if (tar instanceof ItemStack) {
ItemStack item = (ItemStack) tar;
if (item.getType() == Material.AIR) {
return;
}
net.minecraft.server.v1_7_R3.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
net.minecraft.server.v1_7_R3.NBTTagCompound NBT = nmsItem.getTag();
if (NBT == null) {
NBT = new NBTTagCompound();
}
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
NBTTagCompound NBT1 = (NBTTagCompound) MojangsonParser.parse(newTags);
NBT.set("", NBT1);
nmsItem.setTag(NBT);
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
if (!(slot[0] instanceof Slot)) {
return;
}
((Slot) slot[0]).setItem(newItem);
} else if (mode == ChangeMode.REMOVE) {
NBT = nmsItem.getTag();
if (NBT == null || NBT.isEmpty()) {
return;
}
for (Object s : delta) {
NBT.remove((String) s);
}
nmsItem.setTag(NBT);
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
((Slot) slot[0]).setItem(newItem);
} else if (mode == ChangeMode.DELETE || mode == ChangeMode.RESET) {
nmsItem.setTag(new NBTTagCompound());
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
if (!(slot[0] instanceof Slot)) {
return;
}
((Slot) slot[0]).setItem(newItem);
}
}
}
@SuppressWarnings("unchecked")
@Override
public Class<?>[] acceptChange(final ChangeMode mode) {
if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE || mode == ChangeMode.DELETE
|| mode == ChangeMode.RESET) {
return CollectionUtils.array(String.class);
}
return null;
}
}

View File

@@ -0,0 +1,194 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.craftbukkit.v1_7_R4.CraftWorld;
import org.bukkit.craftbukkit.v1_7_R4.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_7_R4.inventory.CraftItemStack;
import org.bukkit.entity.Entity;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
import ch.njol.skript.classes.Changer.ChangeMode;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.lang.util.SimpleExpression;
import ch.njol.skript.util.Slot;
import ch.njol.util.Kleenean;
import ch.njol.util.coll.CollectionUtils;
import net.minecraft.server.v1_7_R4.MojangsonParser;
import net.minecraft.server.v1_7_R4.NBTTagCompound;
import net.minecraft.server.v1_7_R4.TileEntity;
public class ExprNBTv1_7_R4 extends SimpleExpression<NBTTagCompound> {
private Expression<?> target;
private NBTTagCompound[] returned;
@Override
public Class<? extends NBTTagCompound> getReturnType() {
return NBTTagCompound.class;
}
@Override
public boolean isSingle() {
return true;
}
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
target = expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the NBT of " + target.toString(e, false);
}
@Override
@Nullable
public NBTTagCompound[] get(Event e) {
Object tar = target.getSingle(e);
if (tar instanceof Entity) {
CraftEntity ent = (CraftEntity) tar;
NBTTagCompound NBT = new NBTTagCompound();
ent.getHandle().e(NBT);
returned = new NBTTagCompound[] { NBT };
} else if (tar instanceof Block) {
Block block = (Block) tar;
NBTTagCompound NBT = new NBTTagCompound();
TileEntity tileEntity = ((CraftWorld) block.getWorld()).getHandle().getTileEntity(block.getX(), block.getY(), block.getZ());
if (tileEntity == null) {
return null;
}
tileEntity.b(NBT);
returned = new NBTTagCompound[] { NBT };
} else if (tar instanceof ItemStack) {
ItemStack item = (ItemStack) tar;
if (item.getType() == Material.AIR) {
return null;
}
NBTTagCompound NBT = CraftItemStack.asNMSCopy(item).getTag();
if (NBT == null || NBT.isEmpty()) {
return null;
}
returned = new NBTTagCompound[] { NBT };
}
return returned;
}
@Override
public void change(Event e, Object[] delta, ChangeMode mode) {
Object tar = target.getSingle(e);
if (tar instanceof Entity) {
CraftEntity ent = (CraftEntity) tar;
NBTTagCompound NBT = new NBTTagCompound();
ent.getHandle().e(NBT);
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
NBTTagCompound NBT1 = (NBTTagCompound) MojangsonParser.parse(newTags);
NBT1.remove("UUIDMost");
NBT1.remove("UUIDLeast");
NBT1.remove("WorldUUIDLeast");
NBT1.remove("WorldUUIDMost");
NBT1.remove("Bukkit.updateLevel");
NBT.set("", NBT1);
ent.getHandle().f(NBT);
} else if (mode == ChangeMode.REMOVE) {
ent.getHandle().e(NBT);
for (Object s : delta) {
if (s != "UUIDMost" || s != "UUIDLeast" || s != "WorldUUIDMost" || s != "WorldUUIDLeast"
|| s != "Bukkit.updateLevel") {
NBT.remove((String) s);
ent.getHandle().f(NBT);
}
}
}
} else if (tar instanceof Block) {
Block block = (Block) tar;
NBTTagCompound NBT = new NBTTagCompound();
TileEntity tileEntity = ((CraftWorld) block.getWorld()).getHandle().getTileEntity(block.getX(), block.getY(), block.getZ());
if (tileEntity == null) {
return;
}
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
tileEntity.b(NBT);
NBTTagCompound NBT1 = (NBTTagCompound) MojangsonParser.parse(newTags);
NBT.set("", NBT1);;
NBT.setInt("x", block.getX());
NBT.setInt("y", block.getY());
NBT.setInt("z", block.getZ());
tileEntity.a(NBT);
tileEntity.update();
((CraftWorld) block.getWorld()).getHandle().notify(tileEntity.x, tileEntity.y, tileEntity.z);;
} else if (mode == ChangeMode.REMOVE) {
tileEntity.b(NBT);
for (Object s : delta) {
if (s != "x" || s != "y" || s != "z" || s != "id") {
NBT.remove((String) s);
tileEntity.a(NBT);
tileEntity.update();
((CraftWorld) block.getWorld()).getHandle().notify(tileEntity.x, tileEntity.y, tileEntity.z);
}
}
}
} else if (tar instanceof ItemStack) {
ItemStack item = (ItemStack) tar;
if (item.getType() == Material.AIR) {
return;
}
net.minecraft.server.v1_7_R4.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
NBTTagCompound NBT = nmsItem.getTag();
if (NBT == null) {
NBT = new NBTTagCompound();
}
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
NBTTagCompound NBT1 = (NBTTagCompound) MojangsonParser.parse(newTags);
NBT.set("", NBT1);
nmsItem.setTag(NBT);
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
if (!(slot[0] instanceof Slot)) {
return;
}
((Slot) slot[0]).setItem(newItem);
} else if (mode == ChangeMode.REMOVE) {
NBT = nmsItem.getTag();
if (NBT == null || NBT.isEmpty()) {
return;
}
for (Object s : delta) {
NBT.remove((String) s);
}
nmsItem.setTag(NBT);
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
((Slot) slot[0]).setItem(newItem);
} else if (mode == ChangeMode.DELETE || mode == ChangeMode.RESET) {
nmsItem.setTag(new NBTTagCompound());
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
if (!(slot[0] instanceof Slot)) {
return;
}
((Slot) slot[0]).setItem(newItem);
}
}
}
@SuppressWarnings("unchecked")
@Override
public Class<?>[] acceptChange(final ChangeMode mode) {
if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE || mode == ChangeMode.DELETE
|| mode == ChangeMode.RESET) {
return CollectionUtils.array(String.class);
}
return null;
}
}

View File

@@ -0,0 +1,197 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.craftbukkit.v1_8_R1.CraftWorld;
import org.bukkit.craftbukkit.v1_8_R1.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_8_R1.inventory.CraftItemStack;
import org.bukkit.entity.Entity;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
import ch.njol.skript.classes.Changer.ChangeMode;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.lang.util.SimpleExpression;
import ch.njol.skript.util.Slot;
import ch.njol.util.Kleenean;
import ch.njol.util.coll.CollectionUtils;
import net.minecraft.server.v1_8_R1.BlockPosition;
import net.minecraft.server.v1_8_R1.MojangsonParser;
import net.minecraft.server.v1_8_R1.NBTTagCompound;
import net.minecraft.server.v1_8_R1.TileEntity;
public class ExprNBTv1_8_R1 extends SimpleExpression<NBTTagCompound> {
private Expression<?> target;
private NBTTagCompound[] returned;
@Override
public Class<? extends NBTTagCompound> getReturnType() {
return NBTTagCompound.class;
}
@Override
public boolean isSingle() {
return true;
}
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
target = expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the NBT of " + target.toString(e, false);
}
@Override
@Nullable
public NBTTagCompound[] get(Event e) {
Object tar = target.getSingle(e);
if (tar instanceof Entity) {
CraftEntity ent = (CraftEntity) tar;
NBTTagCompound NBT = new NBTTagCompound();
ent.getHandle().e(NBT);
returned = new NBTTagCompound[] { NBT };
} else if (tar instanceof Block) {
Block block = (Block) tar;
NBTTagCompound NBT = new NBTTagCompound();
TileEntity tileEntity = ((CraftWorld) block.getWorld()).getHandle()
.getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ()));
if (tileEntity == null) {
return null;
}
tileEntity.b(NBT);
returned = new NBTTagCompound[] { NBT };
} else if (tar instanceof ItemStack) {
ItemStack item = (ItemStack) tar;
if (item.getType() == Material.AIR) {
return null;
}
NBTTagCompound NBT = CraftItemStack.asNMSCopy(item).getTag();
if (NBT == null || NBT.isEmpty()) {
return null;
}
returned = new NBTTagCompound[] { NBT };
}
return returned;
}
@Override
public void change(Event e, Object[] delta, ChangeMode mode) {
Object tar = target.getSingle(e);
if (tar instanceof Entity) {
CraftEntity ent = (CraftEntity) tar;
NBTTagCompound NBT = new NBTTagCompound();
ent.getHandle().e(NBT);
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
NBTTagCompound NBT1 = MojangsonParser.parse(newTags);
NBT1.remove("UUIDMost");
NBT1.remove("UUIDLeast");
NBT1.remove("WorldUUIDLeast");
NBT1.remove("WorldUUIDMost");
NBT1.remove("Bukkit.updateLevel");
NBT.a(NBT1);
ent.getHandle().f(NBT);
} else if (mode == ChangeMode.REMOVE) {
ent.getHandle().e(NBT);
for (Object s : delta) {
if (s != "UUIDMost" || s != "UUIDLeast" || s != "WorldUUIDMost" || s != "WorldUUIDLeast"
|| s != "Bukkit.updateLevel") {
NBT.remove((String) s);
ent.getHandle().f(NBT);
}
}
}
} else if (tar instanceof Block) {
Block block = (Block) tar;
NBTTagCompound NBT = new NBTTagCompound();
TileEntity tileEntity = ((CraftWorld) block.getWorld()).getHandle()
.getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ()));
if (tileEntity == null) {
return;
}
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
tileEntity.b(NBT);
NBTTagCompound NBT1 = MojangsonParser.parse(newTags);
NBT.a(NBT1);
NBT1.setInt("x", block.getX());
NBT1.setInt("y", block.getY());
NBT1.setInt("z", block.getZ());
tileEntity.a(NBT);
tileEntity.update();
((CraftWorld) block.getWorld()).getHandle().notify(tileEntity.getPosition());
} else if (mode == ChangeMode.REMOVE) {
tileEntity.b(NBT);
for (Object s : delta) {
if (s != "x" || s != "y" || s != "z" || s != "id") {
NBT.remove((String) s);
tileEntity.a(NBT);
tileEntity.update();
((CraftWorld) block.getWorld()).getHandle().notify(tileEntity.getPosition());
}
}
}
} else if (tar instanceof ItemStack) {
ItemStack item = (ItemStack) tar;
if (item.getType() == Material.AIR) {
return;
}
net.minecraft.server.v1_8_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
NBTTagCompound NBT = nmsItem.getTag();
if (NBT == null) {
NBT = new NBTTagCompound();
}
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
NBTTagCompound NBT1 = MojangsonParser.parse(newTags);
NBT.a(NBT1);
nmsItem.setTag(NBT);
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
if (!(slot[0] instanceof Slot)) {
return;
}
((Slot) slot[0]).setItem(newItem);
} else if (mode == ChangeMode.REMOVE) {
NBT = nmsItem.getTag();
if (NBT == null || NBT.isEmpty()) {
return;
}
for (Object s : delta) {
NBT.remove((String) s);
}
nmsItem.setTag(NBT);
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
((Slot) slot[0]).setItem(newItem);
} else if (mode == ChangeMode.DELETE || mode == ChangeMode.RESET) {
nmsItem.setTag(new NBTTagCompound());
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
if (!(slot[0] instanceof Slot)) {
return;
}
((Slot) slot[0]).setItem(newItem);
}
}
}
@SuppressWarnings("unchecked")
@Override
public Class<?>[] acceptChange(final ChangeMode mode) {
if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE || mode == ChangeMode.DELETE
|| mode == ChangeMode.RESET) {
return CollectionUtils.array(String.class);
}
return null;
}
}

View File

@@ -0,0 +1,211 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.craftbukkit.v1_8_R2.CraftWorld;
import org.bukkit.craftbukkit.v1_8_R2.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_8_R2.inventory.CraftItemStack;
import org.bukkit.entity.Entity;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
import ch.njol.skript.Skript;
import ch.njol.skript.classes.Changer.ChangeMode;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.lang.util.SimpleExpression;
import ch.njol.skript.util.Slot;
import ch.njol.util.Kleenean;
import ch.njol.util.coll.CollectionUtils;
import net.minecraft.server.v1_8_R2.BlockPosition;
import net.minecraft.server.v1_8_R2.MojangsonParseException;
import net.minecraft.server.v1_8_R2.MojangsonParser;
import net.minecraft.server.v1_8_R2.NBTTagCompound;
import net.minecraft.server.v1_8_R2.TileEntity;
public class ExprNBTv1_8_R2 extends SimpleExpression<NBTTagCompound> {
private Expression<?> target;
private NBTTagCompound[] returned;
@Override
public Class<? extends NBTTagCompound> getReturnType() {
return NBTTagCompound.class;
}
@Override
public boolean isSingle() {
return true;
}
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
target = expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the NBT of " + target.toString(e, false);
}
@Override
@Nullable
public NBTTagCompound[] get(Event e) {
Object tar = target.getSingle(e);
if (tar instanceof Entity) {
CraftEntity ent = (CraftEntity) tar;
NBTTagCompound NBT = new NBTTagCompound();
ent.getHandle().e(NBT);
returned = new NBTTagCompound[] { NBT };
} else if (tar instanceof Block) {
Block block = (Block) tar;
NBTTagCompound NBT = new NBTTagCompound();
TileEntity tileEntity = ((CraftWorld) block.getWorld()).getHandle()
.getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ()));
if (tileEntity == null) {
return null;
}
tileEntity.b(NBT);
returned = new NBTTagCompound[] { NBT };
} else if (tar instanceof ItemStack) {
ItemStack item = (ItemStack) tar;
if (item.getType() == Material.AIR) {
return null;
}
NBTTagCompound NBT = CraftItemStack.asNMSCopy(item).getTag();
if (NBT == null || NBT.isEmpty()) {
return null;
}
returned = new NBTTagCompound[] { NBT };
}
return returned;
}
@Override
public void change(Event e, Object[] delta, ChangeMode mode) {
Object tar = target.getSingle(e);
if (tar instanceof Entity) {
CraftEntity ent = (CraftEntity) tar;
NBTTagCompound NBT = new NBTTagCompound();
ent.getHandle().e(NBT);
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
try {
NBTTagCompound NBT1 = MojangsonParser.parse(newTags);
NBT1.remove("UUIDMost");
NBT1.remove("UUIDLeast");
NBT1.remove("WorldUUIDLeast");
NBT1.remove("WorldUUIDMost");
NBT1.remove("Bukkit.updateLevel");
NBT.a(NBT1);
ent.getHandle().f(NBT);
} catch (MojangsonParseException ex) {
Skript.warning("Error when parsing NBT - " + ex.getMessage());
}
} else if (mode == ChangeMode.REMOVE) {
ent.getHandle().e(NBT);
for (Object s : delta) {
if (s != "UUIDMost" || s != "UUIDLeast" || s != "WorldUUIDMost" || s != "WorldUUIDLeast"
|| s != "Bukkit.updateLevel") {
NBT.remove((String) s);
ent.getHandle().f(NBT);
}
}
}
} else if (tar instanceof Block) {
Block block = (Block) tar;
NBTTagCompound NBT = new NBTTagCompound();
TileEntity tileEntity = ((CraftWorld) block.getWorld()).getHandle()
.getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ()));
if (tileEntity == null) {
return;
}
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
tileEntity.b(NBT);
try {
NBTTagCompound NBT1 = MojangsonParser.parse(newTags);
NBT.a(NBT1);
NBT1.setInt("x", block.getX());
NBT1.setInt("y", block.getY());
NBT1.setInt("z", block.getZ());
tileEntity.a(NBT);
tileEntity.update();
((CraftWorld) block.getWorld()).getHandle().notify(tileEntity.getPosition());
} catch (MojangsonParseException ex) {
Skript.warning("Error when parsing NBT - " + ex.getMessage());
}
} else if (mode == ChangeMode.REMOVE) {
tileEntity.b(NBT);
for (Object s : delta) {
if (s != "x" || s != "y" || s != "z" || s != "id") {
NBT.remove((String) s);
tileEntity.a(NBT);
tileEntity.update();
((CraftWorld) block.getWorld()).getHandle().notify(tileEntity.getPosition());
}
}
}
} else if (tar instanceof ItemStack) {
ItemStack item = (ItemStack) tar;
if (item.getType() == Material.AIR) {
return;
}
net.minecraft.server.v1_8_R2.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
NBTTagCompound NBT = nmsItem.getTag();
if (NBT == null) {
NBT = new NBTTagCompound();
}
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
try {
NBTTagCompound NBT1 = MojangsonParser.parse(newTags);
NBT.a(NBT1);
nmsItem.setTag(NBT);
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
if (!(slot[0] instanceof Slot)) {
return;
}
((Slot) slot[0]).setItem(newItem);
} catch (MojangsonParseException ex) {
Skript.warning("Error when parsing NBT - " + ex.getMessage());
}
} else if (mode == ChangeMode.REMOVE) {
NBT = nmsItem.getTag();
if (NBT == null || NBT.isEmpty()) {
return;
}
for (Object s : delta) {
NBT.remove((String) s);
}
nmsItem.setTag(NBT);
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
((Slot) slot[0]).setItem(newItem);
} else if (mode == ChangeMode.DELETE || mode == ChangeMode.RESET) {
nmsItem.setTag(new NBTTagCompound());
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
if (!(slot[0] instanceof Slot)) {
return;
}
((Slot) slot[0]).setItem(newItem);
}
}
}
@SuppressWarnings("unchecked")
@Override
public Class<?>[] acceptChange(final ChangeMode mode) {
if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE || mode == ChangeMode.DELETE
|| mode == ChangeMode.RESET) {
return CollectionUtils.array(String.class);
}
return null;
}
}

View File

@@ -0,0 +1,211 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.craftbukkit.v1_8_R3.CraftWorld;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack;
import org.bukkit.entity.Entity;
import org.bukkit.event.Event;
import org.bukkit.inventory.ItemStack;
import ch.njol.skript.Skript;
import ch.njol.skript.classes.Changer.ChangeMode;
import ch.njol.skript.lang.Expression;
import ch.njol.skript.lang.SkriptParser.ParseResult;
import ch.njol.skript.lang.util.SimpleExpression;
import ch.njol.skript.util.Slot;
import ch.njol.util.Kleenean;
import ch.njol.util.coll.CollectionUtils;
import net.minecraft.server.v1_8_R3.BlockPosition;
import net.minecraft.server.v1_8_R3.MojangsonParseException;
import net.minecraft.server.v1_8_R3.MojangsonParser;
import net.minecraft.server.v1_8_R3.NBTTagCompound;
import net.minecraft.server.v1_8_R3.TileEntity;
public class ExprNBTv1_8_R3 extends SimpleExpression<NBTTagCompound> {
private Expression<?> target;
private NBTTagCompound[] returned;
@Override
public Class<? extends NBTTagCompound> getReturnType() {
return NBTTagCompound.class;
}
@Override
public boolean isSingle() {
return true;
}
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
target = expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the NBT of " + target.toString(e, false);
}
@Override
@Nullable
public NBTTagCompound[] get(Event e) {
Object tar = target.getSingle(e);
if (tar instanceof Entity) {
CraftEntity ent = (CraftEntity) tar;
NBTTagCompound NBT = new NBTTagCompound();
ent.getHandle().e(NBT);
returned = new NBTTagCompound[] { NBT };
} else if (tar instanceof Block) {
Block block = (Block) tar;
NBTTagCompound NBT = new NBTTagCompound();
TileEntity tileEntity = ((CraftWorld) block.getWorld()).getHandle()
.getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ()));
if (tileEntity == null) {
return null;
}
tileEntity.b(NBT);
returned = new NBTTagCompound[] { NBT };
} else if (tar instanceof ItemStack) {
ItemStack item = (ItemStack) tar;
if (item.getType() == Material.AIR) {
return null;
}
NBTTagCompound NBT = CraftItemStack.asNMSCopy(item).getTag();
if (NBT == null || NBT.isEmpty()) {
return null;
}
returned = new NBTTagCompound[] { NBT };
}
return returned;
}
@Override
public void change(Event e, Object[] delta, ChangeMode mode) {
Object tar = target.getSingle(e);
if (tar instanceof Entity) {
CraftEntity ent = (CraftEntity) tar;
NBTTagCompound NBT = new NBTTagCompound();
ent.getHandle().e(NBT);
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
try {
NBTTagCompound NBT1 = MojangsonParser.parse(newTags);
NBT1.remove("UUIDMost");
NBT1.remove("UUIDLeast");
NBT1.remove("WorldUUIDLeast");
NBT1.remove("WorldUUIDMost");
NBT1.remove("Bukkit.updateLevel");
NBT.a(NBT1);
ent.getHandle().f(NBT);
} catch (MojangsonParseException ex) {
Skript.warning("Error when parsing NBT - " + ex.getMessage());
}
} else if (mode == ChangeMode.REMOVE) {
ent.getHandle().e(NBT);
for (Object s : delta) {
if (s != "UUIDMost" || s != "UUIDLeast" || s != "WorldUUIDMost" || s != "WorldUUIDLeast"
|| s != "Bukkit.updateLevel") {
NBT.remove((String) s);
ent.getHandle().f(NBT);
}
}
}
} else if (tar instanceof Block) {
Block block = (Block) tar;
NBTTagCompound NBT = new NBTTagCompound();
TileEntity tileEntity = ((CraftWorld) block.getWorld()).getHandle()
.getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ()));
if (tileEntity == null) {
return;
}
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
tileEntity.b(NBT);
try {
NBTTagCompound NBT1 = MojangsonParser.parse(newTags);
NBT.a(NBT1);
NBT1.setInt("x", block.getX());
NBT1.setInt("y", block.getY());
NBT1.setInt("z", block.getZ());
tileEntity.a(NBT);
tileEntity.update();
((CraftWorld) block.getWorld()).getHandle().notify(tileEntity.getPosition());
} catch (MojangsonParseException ex) {
Skript.warning("Error when parsing NBT - " + ex.getMessage());
}
} else if (mode == ChangeMode.REMOVE) {
tileEntity.b(NBT);
for (Object s : delta) {
if (s != "x" || s != "y" || s != "z" || s != "id") {
NBT.remove((String) s);
tileEntity.a(NBT);
tileEntity.update();
((CraftWorld) block.getWorld()).getHandle().notify(tileEntity.getPosition());
}
}
}
} else if (tar instanceof ItemStack) {
ItemStack item = (ItemStack) tar;
if (item.getType() == Material.AIR) {
return;
}
net.minecraft.server.v1_8_R3.ItemStack nmsItem = CraftItemStack.asNMSCopy(item);
NBTTagCompound NBT = nmsItem.getTag();
if (NBT == null) {
NBT = new NBTTagCompound();
}
if (mode == ChangeMode.ADD) {
String newTags = (String) (delta[0]);
try {
NBTTagCompound NBT1 = MojangsonParser.parse(newTags);
NBT.a(NBT1);
nmsItem.setTag(NBT);
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
if (!(slot[0] instanceof Slot)) {
return;
}
((Slot) slot[0]).setItem(newItem);
} catch (MojangsonParseException ex) {
Skript.warning("Error when parsing NBT - " + ex.getMessage());
}
} else if (mode == ChangeMode.REMOVE) {
NBT = nmsItem.getTag();
if (NBT == null || NBT.isEmpty()) {
return;
}
for (Object s : delta) {
NBT.remove((String) s);
}
nmsItem.setTag(NBT);
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
((Slot) slot[0]).setItem(newItem);
} else if (mode == ChangeMode.DELETE || mode == ChangeMode.RESET) {
nmsItem.setTag(new NBTTagCompound());
ItemStack newItem = CraftItemStack.asCraftMirror(nmsItem);
Object[] slot = target.getSource().getAll(e);
if (!(slot[0] instanceof Slot)) {
return;
}
((Slot) slot[0]).setItem(newItem);
}
}
}
@SuppressWarnings("unchecked")
@Override
public Class<?>[] acceptChange(final ChangeMode mode) {
if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE || mode == ChangeMode.DELETE
|| mode == ChangeMode.RESET) {
return CollectionUtils.array(String.class);
}
return null;
}
}

View File

@@ -0,0 +1,54 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.event.Event;
import com.sk89q.worldedit.EditSession;
import com.sk89q.worldedit.bukkit.BukkitUtil;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
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 ExprNewEditSession extends SimpleExpression<EditSession> {
private Expression<World> world;
private Expression<Integer> blockLimit;
@Override
public Class<? extends EditSession> getReturnType() {
return EditSession.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
world = (Expression<World>) expr[0];
blockLimit = (Expression<Integer>) expr[1];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "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) {
WorldEditPlugin we = (WorldEditPlugin) Bukkit.getServer().getPluginManager().getPlugin("WorldEdit");
World w = world.getSingle(e);
Integer limit = blockLimit.getSingle(e);
com.sk89q.worldedit.world.World weWorld = BukkitUtil.getLocalWorld(w);
return new EditSession[] { we.getWorldEdit().getEditSessionFactory().getEditSession(weWorld, limit) };
}
}

View File

@@ -0,0 +1,90 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import com.sk89q.worldedit.IncompleteRegionException;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.bukkit.BukkitUtil;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldedit.regions.CuboidRegion;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.world.World;
import ch.njol.skript.classes.Changer.ChangeMode;
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;
import ch.njol.util.coll.CollectionUtils;
public class ExprSelectionOfPlayer extends SimpleExpression<Location> {
private Expression<Player> player;
private WorldEditPlugin we = (WorldEditPlugin) Bukkit.getServer().getPluginManager().getPlugin("WorldEdit");;
@Override
public Class<? extends Location> getReturnType() {
return Location.class;
}
@Override
public boolean isSingle() {
return false;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
player = (Expression<Player>) expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the WorldEdit selection of " + player.toString(e, false);
}
@Override
@Nullable
protected Location[] get(Event e) {
Player p = player.getSingle(e);
Region region = null;
try {
region = we.getSession(p).getSelection((World) BukkitUtil.getLocalWorld(we.getSelection(p).getWorld()));
} catch (IncompleteRegionException ex) {
return null;
}
if (!(region instanceof CuboidRegion)) {
return null;
}
CuboidRegion cuboid = (CuboidRegion) region;
Vector pos1Vec = cuboid.getPos1();
Vector pos2Vec = cuboid.getPos2();
Location pos1 = new Location(we.getSelection(p).getWorld(), pos1Vec.getX(), pos1Vec.getY(), pos1Vec.getZ());
Location pos2 = new Location(we.getSelection(p).getWorld(), pos2Vec.getX(), pos2Vec.getY(), pos2Vec.getZ());
return new Location[] { pos1, pos2 };
}
@Override
public void change(Event e, @Nullable Object[] delta, ChangeMode mode) {
Player p = player.getSingle(e);
if (mode == ChangeMode.DELETE || mode == ChangeMode.RESET) {
if (we.getSelection(p) == null)
return;
we.getSession(p).getRegionSelector((World) BukkitUtil.getLocalWorld(we.getSelection(p).getWorld())).clear();
}
}
@SuppressWarnings("unchecked")
@Override
@Nullable
public Class<?>[] acceptChange(ChangeMode mode) {
if (mode == ChangeMode.DELETE || mode == ChangeMode.RESET) {
return CollectionUtils.array(Location.class);
}
return null;
}
}

View File

@@ -0,0 +1,97 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import com.sk89q.worldedit.IncompleteRegionException;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.bukkit.BukkitUtil;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldedit.regions.CuboidRegion;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.regions.selector.CuboidRegionSelector;
import com.sk89q.worldedit.world.World;
import ch.njol.skript.classes.Changer.ChangeMode;
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;
import ch.njol.util.coll.CollectionUtils;
public class ExprSelectionPos1 extends SimpleExpression<Location> {
private Expression<Player> player;
private WorldEditPlugin we = (WorldEditPlugin) Bukkit.getServer().getPluginManager().getPlugin("WorldEdit");
@Override
public Class<? extends Location> getReturnType() {
return Location.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
player = (Expression<Player>) expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the WorldEdit point 1 selection of " + player.toString(e, false);
}
@Override
@Nullable
protected Location[] get(Event e) {
Player p = player.getSingle(e);
Region region = null;
try {
region = we.getSession(p).getSelection((World) BukkitUtil.getLocalWorld(we.getSelection(p).getWorld()));
} catch (IncompleteRegionException ex) {
return null;
}
if (!(region instanceof CuboidRegion))
return null; //Who uses polygonal and other selection types anyways?
CuboidRegion cuboid = (CuboidRegion) region;
Vector pos = cuboid.getPos1();
return new Location[] { BukkitUtil.toLocation(we.getSelection(p).getWorld(), pos) };
}
@Override
public void change(Event e, @Nullable Object[] delta, ChangeMode mode) {
Player p = player.getSingle(e);
Location newLoc = (Location) delta[0];
if (mode == ChangeMode.SET) {
Region region = null;
try {
region = we.getSession(p).getSelection((World) BukkitUtil.getLocalWorld(we.getSelection(p).getWorld()));
} catch (IncompleteRegionException | NullPointerException ex) {
CuboidRegionSelector cuboidregion = new CuboidRegionSelector(BukkitUtil.getLocalWorld((org.bukkit.World) newLoc.getWorld()), BukkitUtil.toVector(newLoc), BukkitUtil.toVector(newLoc));
we.getSession(p).setRegionSelector((World) BukkitUtil.getLocalWorld(p.getWorld()), cuboidregion);
}
if (!(region instanceof CuboidRegion))
return; //Who uses polygonal and other selection types anyways?
CuboidRegion cuboid = (CuboidRegion) region;
cuboid.setPos1(BukkitUtil.toVector(newLoc));
}
}
@SuppressWarnings("unchecked")
@Override
@Nullable
public Class<?>[] acceptChange(ChangeMode mode) {
if (mode == ChangeMode.SET) {
return CollectionUtils.array(Location.class);
}
return null;
}
}

View File

@@ -0,0 +1,97 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import com.sk89q.worldedit.IncompleteRegionException;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.bukkit.BukkitUtil;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldedit.regions.CuboidRegion;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.regions.selector.CuboidRegionSelector;
import com.sk89q.worldedit.world.World;
import ch.njol.skript.classes.Changer.ChangeMode;
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;
import ch.njol.util.coll.CollectionUtils;
public class ExprSelectionPos2 extends SimpleExpression<Location> {
private Expression<Player> player;
private WorldEditPlugin we = (WorldEditPlugin) Bukkit.getServer().getPluginManager().getPlugin("WorldEdit");
@Override
public Class<? extends Location> getReturnType() {
return Location.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
player = (Expression<Player>) expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the WorldEdit point 2 selection of " + player.toString(e, false);
}
@Override
@Nullable
protected Location[] get(Event e) {
Player p = player.getSingle(e);
Region region = null;
try {
region = we.getSession(p).getSelection((World) BukkitUtil.getLocalWorld(we.getSelection(p).getWorld()));
} catch (IncompleteRegionException ex) {
return null;
}
if (!(region instanceof CuboidRegion))
return null; //Who uses polygonal and other selection types anyways?
CuboidRegion cuboid = (CuboidRegion) region;
Vector pos = cuboid.getPos2();
return new Location[] { BukkitUtil.toLocation(we.getSelection(p).getWorld(), pos) };
}
@Override
public void change(Event e, @Nullable Object[] delta, ChangeMode mode) {
Player p = player.getSingle(e);
Location newLoc = (Location) delta[0];
if (mode == ChangeMode.SET) {
Region region = null;
try {
region = we.getSession(p).getSelection((World) BukkitUtil.getLocalWorld(we.getSelection(p).getWorld()));
} catch (IncompleteRegionException | NullPointerException ex) {
CuboidRegionSelector cuboidregion = new CuboidRegionSelector(BukkitUtil.getLocalWorld((org.bukkit.World) newLoc.getWorld()), BukkitUtil.toVector(newLoc), BukkitUtil.toVector(newLoc));
we.getSession(p).setRegionSelector((World) BukkitUtil.getLocalWorld(p.getWorld()), cuboidregion);
}
if (!(region instanceof CuboidRegion))
return; //Who uses polygonal and other selection types anyways?
CuboidRegion cuboid = (CuboidRegion) region;
cuboid.setPos2(BukkitUtil.toVector(newLoc));
}
}
@SuppressWarnings("unchecked")
@Override
@Nullable
public Class<?>[] acceptChange(ChangeMode mode) {
if (mode == ChangeMode.SET) {
return CollectionUtils.array(Location.class);
}
return null;
}
}

View File

@@ -0,0 +1,167 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Bukkit;
import org.bukkit.event.Event;
import ch.njol.skript.classes.Changer.ChangeMode;
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;
import ch.njol.util.coll.CollectionUtils;
import net.minecraft.server.v1_7_R1.NBTTagCompound;
public class ExprTagOfv1_7_R1 extends SimpleExpression<Object> {
private Expression<String> string;
private Expression<NBTTagCompound> compound;
private Object[] returned;
@Override
public Class<? extends Object> getReturnType() {
return Object.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int arg1, Kleenean arg2, ParseResult arg3) {
string = (Expression<String>) expr[0];
compound = (Expression<NBTTagCompound>) expr[1];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the tag " + string.toString(e, false) + " of compound";
}
@Override
@Nullable
protected Object[] get(Event e) {
NBTTagCompound NBT = compound.getSingle(e);
if (NBT == null || NBT.isEmpty()) return null; //The NBT can be empty/inexistant for items
String tag = string.getSingle(e);
if (NBT.get(tag) == null) return null; //The tag doesn't exist? Return <none>.
Byte id = NBT.get(tag).getTypeId();
switch (id) {
case 1:
returned = new Byte[] { NBT.getByte(tag) };
break;
case 2:
returned = new Short[] { NBT.getShort(tag) };
break;
case 3:
returned = new Integer[] { NBT.getInt(tag) };
break;
case 4:
returned = new Long[] { NBT.getLong(tag) };
break;
case 5:
returned = new Float[] { NBT.getFloat(tag) };
break;
case 6:
returned = new Double[] { NBT.getDouble(tag) };
break;
case 7: //Byte array, never seen this kind of tag (where is it used?)
break;
case 8:
returned = new String[] { NBT.getString(tag) };
break;
case 9: //List, will need to make a new type if getCompound() doesn't work here
Bukkit.broadcastMessage("LIST!");
returned = new Object[] { NBT.getList(tag, 0).toString() }; //Is the int argument the type ID?
break;
case 10:
returned = new NBTTagCompound[] { NBT.getCompound(tag) };
break;
case 11: //Integer array, this one is only used on the chunk files I believe
break;
default:
break;
}
return returned;
}
@Override
public void change(Event e, @Nullable Object[] delta, ChangeMode mode) {
NBTTagCompound NBT = compound.getSingle(e);
if (NBT == null) NBT = new NBTTagCompound(); //If the NBT isn't set, create an empty one
String tag = string.getSingle(e);
Object newValue = delta[0];
if (mode == ChangeMode.SET) {
if (newValue instanceof Byte) {
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
NBT.setInt(tag, (int) newValue);;
} else if (newValue instanceof Long) {
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
NBT.setDouble(tag, (double) newValue);
} else if (newValue instanceof String) {
NBT.setString(tag, (String) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
} else if (mode == ChangeMode.ADD) {
if (newValue instanceof Byte) {
newValue = NBT.getByte(tag) + (byte) newValue;
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
newValue = NBT.getShort(tag) + (short) newValue;
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
newValue = NBT.getInt(tag) + (int) newValue;
NBT.setInt(tag, (int) newValue);
} else if (newValue instanceof Long) {
newValue = NBT.getLong(tag) + (long) newValue;
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
newValue = NBT.getFloat(tag) + (float) newValue;
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
newValue = NBT.getDouble(tag) + (double) newValue;
NBT.setDouble(tag, (double) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
} else if (mode == ChangeMode.REMOVE) {
if (newValue instanceof Byte) {
newValue = NBT.getByte(tag) - (byte) newValue;
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
newValue = NBT.getShort(tag) - (short) newValue;
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
newValue = NBT.getInt(tag) - (int) newValue;
NBT.setInt(tag, (int) newValue);
} else if (newValue instanceof Long) {
newValue = NBT.getLong(tag) - (long) newValue;
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
newValue = NBT.getFloat(tag) - (float) newValue;
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
newValue = NBT.getDouble(tag) - (double) newValue;
NBT.setDouble(tag, (double) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
}
}
@SuppressWarnings("unchecked")
@Override
@Nullable
public Class<?>[] acceptChange(ChangeMode mode) {
if (mode == ChangeMode.SET || mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) {
return CollectionUtils.array(Object.class);
}
return null;
}
}

View File

@@ -0,0 +1,167 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Bukkit;
import org.bukkit.event.Event;
import ch.njol.skript.classes.Changer.ChangeMode;
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;
import ch.njol.util.coll.CollectionUtils;
import net.minecraft.server.v1_7_R2.NBTTagCompound;
public class ExprTagOfv1_7_R2 extends SimpleExpression<Object> {
private Expression<String> string;
private Expression<NBTTagCompound> compound;
private Object[] returned;
@Override
public Class<? extends Object> getReturnType() {
return Object.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int arg1, Kleenean arg2, ParseResult arg3) {
string = (Expression<String>) expr[0];
compound = (Expression<NBTTagCompound>) expr[1];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the tag " + string.toString(e, false) + " of compound";
}
@Override
@Nullable
protected Object[] get(Event e) {
NBTTagCompound NBT = compound.getSingle(e);
if (NBT == null || NBT.isEmpty()) return null; //The NBT can be empty/inexistant for items
String tag = string.getSingle(e);
if (NBT.get(tag) == null) return null; //The tag doesn't exist? Return <none>.
Byte id = NBT.get(tag).getTypeId();
switch (id) {
case 1:
returned = new Byte[] { NBT.getByte(tag) };
break;
case 2:
returned = new Short[] { NBT.getShort(tag) };
break;
case 3:
returned = new Integer[] { NBT.getInt(tag) };
break;
case 4:
returned = new Long[] { NBT.getLong(tag) };
break;
case 5:
returned = new Float[] { NBT.getFloat(tag) };
break;
case 6:
returned = new Double[] { NBT.getDouble(tag) };
break;
case 7: //Byte array, never seen this kind of tag (where is it used?)
break;
case 8:
returned = new String[] { NBT.getString(tag) };
break;
case 9: //List, will need to make a new type if getCompound() doesn't work here
Bukkit.broadcastMessage("LIST!");
returned = new Object[] { NBT.getList(tag, 0).toString() }; //Is the int argument the type ID?
break;
case 10:
returned = new NBTTagCompound[] { NBT.getCompound(tag) };
break;
case 11: //Integer array, this one is only used on the chunk files I believe
break;
default:
break;
}
return returned;
}
@Override
public void change(Event e, @Nullable Object[] delta, ChangeMode mode) {
NBTTagCompound NBT = compound.getSingle(e);
if (NBT == null) NBT = new NBTTagCompound(); //If the NBT isn't set, create an empty one
String tag = string.getSingle(e);
Object newValue = delta[0];
if (mode == ChangeMode.SET) {
if (newValue instanceof Byte) {
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
NBT.setInt(tag, (int) newValue);;
} else if (newValue instanceof Long) {
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
NBT.setDouble(tag, (double) newValue);
} else if (newValue instanceof String) {
NBT.setString(tag, (String) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
} else if (mode == ChangeMode.ADD) {
if (newValue instanceof Byte) {
newValue = NBT.getByte(tag) + (byte) newValue;
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
newValue = NBT.getShort(tag) + (short) newValue;
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
newValue = NBT.getInt(tag) + (int) newValue;
NBT.setInt(tag, (int) newValue);
} else if (newValue instanceof Long) {
newValue = NBT.getLong(tag) + (long) newValue;
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
newValue = NBT.getFloat(tag) + (float) newValue;
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
newValue = NBT.getDouble(tag) + (double) newValue;
NBT.setDouble(tag, (double) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
} else if (mode == ChangeMode.REMOVE) {
if (newValue instanceof Byte) {
newValue = NBT.getByte(tag) - (byte) newValue;
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
newValue = NBT.getShort(tag) - (short) newValue;
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
newValue = NBT.getInt(tag) - (int) newValue;
NBT.setInt(tag, (int) newValue);
} else if (newValue instanceof Long) {
newValue = NBT.getLong(tag) - (long) newValue;
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
newValue = NBT.getFloat(tag) - (float) newValue;
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
newValue = NBT.getDouble(tag) - (double) newValue;
NBT.setDouble(tag, (double) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
}
}
@SuppressWarnings("unchecked")
@Override
@Nullable
public Class<?>[] acceptChange(ChangeMode mode) {
if (mode == ChangeMode.SET || mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) {
return CollectionUtils.array(Object.class);
}
return null;
}
}

View File

@@ -0,0 +1,167 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Bukkit;
import org.bukkit.event.Event;
import ch.njol.skript.classes.Changer.ChangeMode;
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;
import ch.njol.util.coll.CollectionUtils;
import net.minecraft.server.v1_7_R3.NBTTagCompound;
public class ExprTagOfv1_7_R3 extends SimpleExpression<Object> {
private Expression<String> string;
private Expression<NBTTagCompound> compound;
private Object[] returned;
@Override
public Class<? extends Object> getReturnType() {
return Object.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int arg1, Kleenean arg2, ParseResult arg3) {
string = (Expression<String>) expr[0];
compound = (Expression<NBTTagCompound>) expr[1];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the tag " + string.toString(e, false) + " of compound";
}
@Override
@Nullable
protected Object[] get(Event e) {
NBTTagCompound NBT = compound.getSingle(e);
if (NBT == null || NBT.isEmpty()) return null; //The NBT can be empty/inexistant for items
String tag = string.getSingle(e);
if (NBT.get(tag) == null) return null; //The tag doesn't exist? Return <none>.
Byte id = NBT.get(tag).getTypeId();
switch (id) {
case 1:
returned = new Byte[] { NBT.getByte(tag) };
break;
case 2:
returned = new Short[] { NBT.getShort(tag) };
break;
case 3:
returned = new Integer[] { NBT.getInt(tag) };
break;
case 4:
returned = new Long[] { NBT.getLong(tag) };
break;
case 5:
returned = new Float[] { NBT.getFloat(tag) };
break;
case 6:
returned = new Double[] { NBT.getDouble(tag) };
break;
case 7: //Byte array, never seen this kind of tag (where is it used?)
break;
case 8:
returned = new String[] { NBT.getString(tag) };
break;
case 9: //List, will need to make a new type if getCompound() doesn't work here
Bukkit.broadcastMessage("LIST!");
returned = new Object[] { NBT.getList(tag, 0).toString() }; //Is the int argument the type ID?
break;
case 10:
returned = new NBTTagCompound[] { NBT.getCompound(tag) };
break;
case 11: //Integer array, this one is only used on the chunk files I believe
break;
default:
break;
}
return returned;
}
@Override
public void change(Event e, @Nullable Object[] delta, ChangeMode mode) {
NBTTagCompound NBT = compound.getSingle(e);
if (NBT == null) NBT = new NBTTagCompound(); //If the NBT isn't set, create an empty one
String tag = string.getSingle(e);
Object newValue = delta[0];
if (mode == ChangeMode.SET) {
if (newValue instanceof Byte) {
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
NBT.setInt(tag, (int) newValue);;
} else if (newValue instanceof Long) {
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
NBT.setDouble(tag, (double) newValue);
} else if (newValue instanceof String) {
NBT.setString(tag, (String) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
} else if (mode == ChangeMode.ADD) {
if (newValue instanceof Byte) {
newValue = NBT.getByte(tag) + (byte) newValue;
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
newValue = NBT.getShort(tag) + (short) newValue;
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
newValue = NBT.getInt(tag) + (int) newValue;
NBT.setInt(tag, (int) newValue);
} else if (newValue instanceof Long) {
newValue = NBT.getLong(tag) + (long) newValue;
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
newValue = NBT.getFloat(tag) + (float) newValue;
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
newValue = NBT.getDouble(tag) + (double) newValue;
NBT.setDouble(tag, (double) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
} else if (mode == ChangeMode.REMOVE) {
if (newValue instanceof Byte) {
newValue = NBT.getByte(tag) - (byte) newValue;
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
newValue = NBT.getShort(tag) - (short) newValue;
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
newValue = NBT.getInt(tag) - (int) newValue;
NBT.setInt(tag, (int) newValue);
} else if (newValue instanceof Long) {
newValue = NBT.getLong(tag) - (long) newValue;
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
newValue = NBT.getFloat(tag) - (float) newValue;
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
newValue = NBT.getDouble(tag) - (double) newValue;
NBT.setDouble(tag, (double) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
}
}
@SuppressWarnings("unchecked")
@Override
@Nullable
public Class<?>[] acceptChange(ChangeMode mode) {
if (mode == ChangeMode.SET || mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) {
return CollectionUtils.array(Object.class);
}
return null;
}
}

View File

@@ -0,0 +1,167 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Bukkit;
import org.bukkit.event.Event;
import ch.njol.skript.classes.Changer.ChangeMode;
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;
import ch.njol.util.coll.CollectionUtils;
import net.minecraft.server.v1_7_R4.NBTTagCompound;
public class ExprTagOfv1_7_R4 extends SimpleExpression<Object> {
private Expression<String> string;
private Expression<NBTTagCompound> compound;
private Object[] returned;
@Override
public Class<? extends Object> getReturnType() {
return Object.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int arg1, Kleenean arg2, ParseResult arg3) {
string = (Expression<String>) expr[0];
compound = (Expression<NBTTagCompound>) expr[1];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the tag " + string.toString(e, false) + " of compound";
}
@Override
@Nullable
protected Object[] get(Event e) {
NBTTagCompound NBT = compound.getSingle(e);
if (NBT == null || NBT.isEmpty()) return null; //The NBT can be empty/inexistant for items
String tag = string.getSingle(e);
if (NBT.get(tag) == null) return null; //The tag doesn't exist? Return <none>.
Byte id = NBT.get(tag).getTypeId();
switch (id) {
case 1:
returned = new Byte[] { NBT.getByte(tag) };
break;
case 2:
returned = new Short[] { NBT.getShort(tag) };
break;
case 3:
returned = new Integer[] { NBT.getInt(tag) };
break;
case 4:
returned = new Long[] { NBT.getLong(tag) };
break;
case 5:
returned = new Float[] { NBT.getFloat(tag) };
break;
case 6:
returned = new Double[] { NBT.getDouble(tag) };
break;
case 7: //Byte array, never seen this kind of tag (where is it used?)
break;
case 8:
returned = new String[] { NBT.getString(tag) };
break;
case 9: //List, will need to make a new type if getCompound() doesn't work here
Bukkit.broadcastMessage("LIST!");
returned = new Object[] { NBT.getList(tag, 0).toString() }; //Is the int argument the type ID?
break;
case 10:
returned = new NBTTagCompound[] { NBT.getCompound(tag) };
break;
case 11: //Integer array, this one is only used on the chunk files I believe
break;
default:
break;
}
return returned;
}
@Override
public void change(Event e, @Nullable Object[] delta, ChangeMode mode) {
NBTTagCompound NBT = compound.getSingle(e);
if (NBT == null) NBT = new NBTTagCompound(); //If the NBT isn't set, create an empty one
String tag = string.getSingle(e);
Object newValue = delta[0];
if (mode == ChangeMode.SET) {
if (newValue instanceof Byte) {
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
NBT.setInt(tag, (int) newValue);;
} else if (newValue instanceof Long) {
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
NBT.setDouble(tag, (double) newValue);
} else if (newValue instanceof String) {
NBT.setString(tag, (String) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
} else if (mode == ChangeMode.ADD) {
if (newValue instanceof Byte) {
newValue = NBT.getByte(tag) + (byte) newValue;
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
newValue = NBT.getShort(tag) + (short) newValue;
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
newValue = NBT.getInt(tag) + (int) newValue;
NBT.setInt(tag, (int) newValue);
} else if (newValue instanceof Long) {
newValue = NBT.getLong(tag) + (long) newValue;
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
newValue = NBT.getFloat(tag) + (float) newValue;
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
newValue = NBT.getDouble(tag) + (double) newValue;
NBT.setDouble(tag, (double) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
} else if (mode == ChangeMode.REMOVE) {
if (newValue instanceof Byte) {
newValue = NBT.getByte(tag) - (byte) newValue;
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
newValue = NBT.getShort(tag) - (short) newValue;
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
newValue = NBT.getInt(tag) - (int) newValue;
NBT.setInt(tag, (int) newValue);
} else if (newValue instanceof Long) {
newValue = NBT.getLong(tag) - (long) newValue;
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
newValue = NBT.getFloat(tag) - (float) newValue;
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
newValue = NBT.getDouble(tag) - (double) newValue;
NBT.setDouble(tag, (double) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
}
}
@SuppressWarnings("unchecked")
@Override
@Nullable
public Class<?>[] acceptChange(ChangeMode mode) {
if (mode == ChangeMode.SET || mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) {
return CollectionUtils.array(Object.class);
}
return null;
}
}

View File

@@ -0,0 +1,167 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Bukkit;
import org.bukkit.event.Event;
import ch.njol.skript.classes.Changer.ChangeMode;
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;
import ch.njol.util.coll.CollectionUtils;
import net.minecraft.server.v1_8_R1.NBTTagCompound;
public class ExprTagOfv1_8_R1 extends SimpleExpression<Object> {
private Expression<String> string;
private Expression<NBTTagCompound> compound;
private Object[] returned;
@Override
public Class<? extends Object> getReturnType() {
return Object.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int arg1, Kleenean arg2, ParseResult arg3) {
string = (Expression<String>) expr[0];
compound = (Expression<NBTTagCompound>) expr[1];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the tag " + string.toString(e, false) + " of compound";
}
@Override
@Nullable
protected Object[] get(Event e) {
NBTTagCompound NBT = compound.getSingle(e);
if (NBT == null || NBT.isEmpty()) return null; //The NBT can be empty/inexistant for items
String tag = string.getSingle(e);
if (NBT.get(tag) == null) return null; //The tag doesn't exist? Return <none>.
Byte id = NBT.get(tag).getTypeId();
switch (id) {
case 1:
returned = new Byte[] { NBT.getByte(tag) };
break;
case 2:
returned = new Short[] { NBT.getShort(tag) };
break;
case 3:
returned = new Integer[] { NBT.getInt(tag) };
break;
case 4:
returned = new Long[] { NBT.getLong(tag) };
break;
case 5:
returned = new Float[] { NBT.getFloat(tag) };
break;
case 6:
returned = new Double[] { NBT.getDouble(tag) };
break;
case 7: //Byte array, never seen this kind of tag (where is it used?)
break;
case 8:
returned = new String[] { NBT.getString(tag) };
break;
case 9: //List, will need to make a new type if getCompound() doesn't work here
Bukkit.broadcastMessage("LIST!");
returned = new Object[] { NBT.getList(tag, 0).toString() }; //Is the int argument the type ID?
break;
case 10:
returned = new NBTTagCompound[] { NBT.getCompound(tag) };
break;
case 11: //Integer array, this one is only used on the chunk files I believe
break;
default:
break;
}
return returned;
}
@Override
public void change(Event e, @Nullable Object[] delta, ChangeMode mode) {
NBTTagCompound NBT = compound.getSingle(e);
if (NBT == null) NBT = new NBTTagCompound(); //If the NBT isn't set, create an empty one
String tag = string.getSingle(e);
Object newValue = delta[0];
if (mode == ChangeMode.SET) {
if (newValue instanceof Byte) {
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
NBT.setInt(tag, (int) newValue);;
} else if (newValue instanceof Long) {
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
NBT.setDouble(tag, (double) newValue);
} else if (newValue instanceof String) {
NBT.setString(tag, (String) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
} else if (mode == ChangeMode.ADD) {
if (newValue instanceof Byte) {
newValue = NBT.getByte(tag) + (byte) newValue;
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
newValue = NBT.getShort(tag) + (short) newValue;
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
newValue = NBT.getInt(tag) + (int) newValue;
NBT.setInt(tag, (int) newValue);
} else if (newValue instanceof Long) {
newValue = NBT.getLong(tag) + (long) newValue;
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
newValue = NBT.getFloat(tag) + (float) newValue;
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
newValue = NBT.getDouble(tag) + (double) newValue;
NBT.setDouble(tag, (double) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
} else if (mode == ChangeMode.REMOVE) {
if (newValue instanceof Byte) {
newValue = NBT.getByte(tag) - (byte) newValue;
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
newValue = NBT.getShort(tag) - (short) newValue;
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
newValue = NBT.getInt(tag) - (int) newValue;
NBT.setInt(tag, (int) newValue);
} else if (newValue instanceof Long) {
newValue = NBT.getLong(tag) - (long) newValue;
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
newValue = NBT.getFloat(tag) - (float) newValue;
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
newValue = NBT.getDouble(tag) - (double) newValue;
NBT.setDouble(tag, (double) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
}
}
@SuppressWarnings("unchecked")
@Override
@Nullable
public Class<?>[] acceptChange(ChangeMode mode) {
if (mode == ChangeMode.SET || mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) {
return CollectionUtils.array(Object.class);
}
return null;
}
}

View File

@@ -0,0 +1,167 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Bukkit;
import org.bukkit.event.Event;
import ch.njol.skript.classes.Changer.ChangeMode;
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;
import ch.njol.util.coll.CollectionUtils;
import net.minecraft.server.v1_8_R2.NBTTagCompound;
public class ExprTagOfv1_8_R2 extends SimpleExpression<Object> {
private Expression<String> string;
private Expression<NBTTagCompound> compound;
private Object[] returned;
@Override
public Class<? extends Object> getReturnType() {
return Object.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int arg1, Kleenean arg2, ParseResult arg3) {
string = (Expression<String>) expr[0];
compound = (Expression<NBTTagCompound>) expr[1];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the tag " + string.toString(e, false) + " of compound";
}
@Override
@Nullable
protected Object[] get(Event e) {
NBTTagCompound NBT = compound.getSingle(e);
if (NBT == null || NBT.isEmpty()) return null; //The NBT can be empty/inexistant for items
String tag = string.getSingle(e);
if (NBT.get(tag) == null) return null; //The tag doesn't exist? Return <none>.
Byte id = NBT.get(tag).getTypeId();
switch (id) {
case 1:
returned = new Byte[] { NBT.getByte(tag) };
break;
case 2:
returned = new Short[] { NBT.getShort(tag) };
break;
case 3:
returned = new Integer[] { NBT.getInt(tag) };
break;
case 4:
returned = new Long[] { NBT.getLong(tag) };
break;
case 5:
returned = new Float[] { NBT.getFloat(tag) };
break;
case 6:
returned = new Double[] { NBT.getDouble(tag) };
break;
case 7: //Byte array, never seen this kind of tag (where is it used?)
break;
case 8:
returned = new String[] { NBT.getString(tag) };
break;
case 9: //List, will need to make a new type if getCompound() doesn't work here
Bukkit.broadcastMessage("LIST!");
returned = new Object[] { NBT.getList(tag, 0).toString() }; //Is the int argument the type ID?
break;
case 10:
returned = new NBTTagCompound[] { NBT.getCompound(tag) };
break;
case 11: //Integer array, this one is only used on the chunk files I believe
break;
default:
break;
}
return returned;
}
@Override
public void change(Event e, @Nullable Object[] delta, ChangeMode mode) {
NBTTagCompound NBT = compound.getSingle(e);
if (NBT == null) NBT = new NBTTagCompound(); //If the NBT isn't set, create an empty one
String tag = string.getSingle(e);
Object newValue = delta[0];
if (mode == ChangeMode.SET) {
if (newValue instanceof Byte) {
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
NBT.setInt(tag, (int) newValue);;
} else if (newValue instanceof Long) {
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
NBT.setDouble(tag, (double) newValue);
} else if (newValue instanceof String) {
NBT.setString(tag, (String) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
} else if (mode == ChangeMode.ADD) {
if (newValue instanceof Byte) {
newValue = NBT.getByte(tag) + (byte) newValue;
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
newValue = NBT.getShort(tag) + (short) newValue;
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
newValue = NBT.getInt(tag) + (int) newValue;
NBT.setInt(tag, (int) newValue);
} else if (newValue instanceof Long) {
newValue = NBT.getLong(tag) + (long) newValue;
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
newValue = NBT.getFloat(tag) + (float) newValue;
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
newValue = NBT.getDouble(tag) + (double) newValue;
NBT.setDouble(tag, (double) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
} else if (mode == ChangeMode.REMOVE) {
if (newValue instanceof Byte) {
newValue = NBT.getByte(tag) - (byte) newValue;
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
newValue = NBT.getShort(tag) - (short) newValue;
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
newValue = NBT.getInt(tag) - (int) newValue;
NBT.setInt(tag, (int) newValue);
} else if (newValue instanceof Long) {
newValue = NBT.getLong(tag) - (long) newValue;
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
newValue = NBT.getFloat(tag) - (float) newValue;
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
newValue = NBT.getDouble(tag) - (double) newValue;
NBT.setDouble(tag, (double) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
}
}
@SuppressWarnings("unchecked")
@Override
@Nullable
public Class<?>[] acceptChange(ChangeMode mode) {
if (mode == ChangeMode.SET || mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) {
return CollectionUtils.array(Object.class);
}
return null;
}
}

View File

@@ -0,0 +1,167 @@
package me.TheBukor.SkStuff.expressions;
import javax.annotation.Nullable;
import org.bukkit.Bukkit;
import org.bukkit.event.Event;
import ch.njol.skript.classes.Changer.ChangeMode;
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;
import ch.njol.util.coll.CollectionUtils;
import net.minecraft.server.v1_8_R3.NBTTagCompound;
public class ExprTagOfv1_8_R3 extends SimpleExpression<Object> {
private Expression<String> string;
private Expression<NBTTagCompound> compound;
private Object[] returned;
@Override
public Class<? extends Object> getReturnType() {
return Object.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int arg1, Kleenean arg2, ParseResult arg3) {
string = (Expression<String>) expr[0];
compound = (Expression<NBTTagCompound>) expr[1];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the tag " + string.toString(e, false) + " of compound";
}
@Override
@Nullable
protected Object[] get(Event e) {
NBTTagCompound NBT = compound.getSingle(e);
if (NBT == null || NBT.isEmpty()) return null; //The NBT can be empty/inexistant for items
String tag = string.getSingle(e);
if (NBT.get(tag) == null) return null; //The tag doesn't exist? Return <none>.
Byte id = NBT.get(tag).getTypeId();
switch (id) {
case 1:
returned = new Byte[] { NBT.getByte(tag) };
break;
case 2:
returned = new Short[] { NBT.getShort(tag) };
break;
case 3:
returned = new Integer[] { NBT.getInt(tag) };
break;
case 4:
returned = new Long[] { NBT.getLong(tag) };
break;
case 5:
returned = new Float[] { NBT.getFloat(tag) };
break;
case 6:
returned = new Double[] { NBT.getDouble(tag) };
break;
case 7: //Byte array, never seen this kind of tag (where is it used?)
break;
case 8:
returned = new String[] { NBT.getString(tag) };
break;
case 9: //List, will need to make a new type if getCompound() doesn't work here
Bukkit.broadcastMessage("LIST!");
returned = new Object[] { NBT.getList(tag, 0).toString() }; //Is the int argument the type ID?
break;
case 10:
returned = new NBTTagCompound[] { NBT.getCompound(tag) };
break;
case 11: //Integer array, this one is only used on the chunk files I believe
break;
default:
break;
}
return returned;
}
@Override
public void change(Event e, @Nullable Object[] delta, ChangeMode mode) {
NBTTagCompound NBT = compound.getSingle(e);
if (NBT == null) NBT = new NBTTagCompound(); //If the NBT isn't set, create an empty one
String tag = string.getSingle(e);
Object newValue = delta[0];
if (mode == ChangeMode.SET) {
if (newValue instanceof Byte) {
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
NBT.setInt(tag, (int) newValue);;
} else if (newValue instanceof Long) {
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
NBT.setDouble(tag, (double) newValue);
} else if (newValue instanceof String) {
NBT.setString(tag, (String) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
} else if (mode == ChangeMode.ADD) {
if (newValue instanceof Byte) {
newValue = NBT.getByte(tag) + (byte) newValue;
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
newValue = NBT.getShort(tag) + (short) newValue;
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
newValue = NBT.getInt(tag) + (int) newValue;
NBT.setInt(tag, (int) newValue);
} else if (newValue instanceof Long) {
newValue = NBT.getLong(tag) + (long) newValue;
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
newValue = NBT.getFloat(tag) + (float) newValue;
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
newValue = NBT.getDouble(tag) + (double) newValue;
NBT.setDouble(tag, (double) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
} else if (mode == ChangeMode.REMOVE) {
if (newValue instanceof Byte) {
newValue = NBT.getByte(tag) - (byte) newValue;
NBT.setByte(tag, (byte) newValue);
} else if (newValue instanceof Short) {
newValue = NBT.getShort(tag) - (short) newValue;
NBT.setShort(tag, (short) newValue);
} else if (newValue instanceof Integer) {
newValue = NBT.getInt(tag) - (int) newValue;
NBT.setInt(tag, (int) newValue);
} else if (newValue instanceof Long) {
newValue = NBT.getLong(tag) - (long) newValue;
NBT.setLong(tag, (long) newValue);
} else if (newValue instanceof Float) {
newValue = NBT.getFloat(tag) - (float) newValue;
NBT.setFloat(tag, (float) newValue);
} else if (newValue instanceof Double) {
newValue = NBT.getDouble(tag) - (double) newValue;
NBT.setDouble(tag, (double) newValue);
} else {
return; //Non-supported type or maybe an error occured?
}
}
}
@SuppressWarnings("unchecked")
@Override
@Nullable
public Class<?>[] acceptChange(ChangeMode mode) {
if (mode == ChangeMode.SET || mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) {
return CollectionUtils.array(Object.class);
}
return null;
}
}

View File

@@ -0,0 +1,57 @@
package me.TheBukor.SkStuff.expressions;
import java.io.File;
import java.io.IOException;
import javax.annotation.Nullable;
import org.bukkit.event.Event;
import com.sk89q.worldedit.extent.clipboard.Clipboard;
import com.sk89q.worldedit.schematic.MCEditSchematicFormat;
import com.sk89q.worldedit.world.DataException;
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 ExprVolumeOfSchematic extends SimpleExpression<Integer> {
private Expression<String> schematic;
@Override
public Class<? extends Integer> getReturnType() {
return Integer.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
schematic = (Expression<String>) expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the volume of the schematic from " + schematic.toString(e, false);
}
@Override
@Nullable
protected Integer[] get(Event e) {
String schem = schematic.getSingle(e);
File schemFile = new File((schem.endsWith(".schematic") ? schem : (schem + ".schematic")));
Integer v = null;
try {
v = ((Clipboard) MCEditSchematicFormat.getFormat(schemFile).load(schemFile)).getRegion().getArea();
} catch (DataException | IOException ex) {
return null;
}
return new Integer[] { v };
}
}

View File

@@ -0,0 +1,51 @@
package me.TheBukor.SkStuff.expressions;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldedit.bukkit.selections.Selection;
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 ExprVolumeOfSelection extends SimpleExpression<Integer> {
private Expression<Player> player;
@Override
public Class<? extends Integer> getReturnType() {
return Integer.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
player = (Expression<Player>) expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the width of the WorldEdit selection of " + player.toString(e, false);
}
@Override
@Nullable
protected Integer[] get(Event e) {
WorldEditPlugin we = (WorldEditPlugin) Bukkit.getServer().getPluginManager().getPlugin("WorldEdit");
Selection sel = we.getSelection(player.getSingle(e));
if (sel == null)
return null;
return new Integer[] { sel.getArea() };
}
}

View File

@@ -0,0 +1,57 @@
package me.TheBukor.SkStuff.expressions;
import java.io.File;
import java.io.IOException;
import javax.annotation.Nullable;
import org.bukkit.event.Event;
import com.sk89q.worldedit.extent.clipboard.Clipboard;
import com.sk89q.worldedit.schematic.MCEditSchematicFormat;
import com.sk89q.worldedit.world.DataException;
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 ExprWidthOfSchematic extends SimpleExpression<Integer> {
private Expression<String> schematic;
@Override
public Class<? extends Integer> getReturnType() {
return Integer.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
schematic = (Expression<String>) expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the height of the schematic from " + schematic.toString(e, false);
}
@Override
@Nullable
protected Integer[] get(Event e) {
String schem = schematic.getSingle(e);
File schemFile = new File((schem.endsWith(".schematic") ? schem : (schem + ".schematic")));
Integer w = null;
try {
w = ((Clipboard) MCEditSchematicFormat.getFormat(schemFile).load(schemFile)).getRegion().getWidth();
} catch (DataException | IOException ex) {
return null;
}
return new Integer[] { w };
}
}

View File

@@ -0,0 +1,51 @@
package me.TheBukor.SkStuff.expressions;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import com.sk89q.worldedit.bukkit.selections.Selection;
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 ExprWidthOfSelection extends SimpleExpression<Integer> {
private Expression<Player> player;
@Override
public Class<? extends Integer> getReturnType() {
return Integer.class;
}
@Override
public boolean isSingle() {
return true;
}
@SuppressWarnings("unchecked")
@Override
public boolean init(Expression<?>[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) {
player = (Expression<Player>) expr[0];
return true;
}
@Override
public String toString(@Nullable Event e, boolean arg1) {
return "the width of the WorldEdit selection of " + player.toString(e, false);
}
@Override
@Nullable
protected Integer[] get(Event e) {
WorldEditPlugin we = (WorldEditPlugin) Bukkit.getServer().getPluginManager().getPlugin("WorldEdit");
Selection sel = we.getSelection(player.getSingle(e));
if (sel == null)
return null;
return new Integer[] { sel.getWidth() };
}
}