WorldEdit block change event, still in test. Also fixed package names.
This commit is contained in:
476
src/me/TheBukor/SkStuff/SkStuff.java
Normal file
476
src/me/TheBukor/SkStuff/SkStuff.java
Normal 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.");
|
||||
}
|
||||
}
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
52
src/me/TheBukor/SkStuff/effects/EffDrainLiquid.java
Normal file
52
src/me/TheBukor/SkStuff/effects/EffDrainLiquid.java
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
69
src/me/TheBukor/SkStuff/effects/EffDrawLineWE.java
Normal file
69
src/me/TheBukor/SkStuff/effects/EffDrawLineWE.java
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
75
src/me/TheBukor/SkStuff/effects/EffMakeCylinder.java
Normal file
75
src/me/TheBukor/SkStuff/effects/EffMakeCylinder.java
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
69
src/me/TheBukor/SkStuff/effects/EffMakePyramid.java
Normal file
69
src/me/TheBukor/SkStuff/effects/EffMakePyramid.java
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
75
src/me/TheBukor/SkStuff/effects/EffMakeSphere.java
Normal file
75
src/me/TheBukor/SkStuff/effects/EffMakeSphere.java
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
69
src/me/TheBukor/SkStuff/effects/EffMakeWalls.java
Normal file
69
src/me/TheBukor/SkStuff/effects/EffMakeWalls.java
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
54
src/me/TheBukor/SkStuff/effects/EffNaturalize.java
Normal file
54
src/me/TheBukor/SkStuff/effects/EffNaturalize.java
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
42
src/me/TheBukor/SkStuff/effects/EffRememberChanges.java
Normal file
42
src/me/TheBukor/SkStuff/effects/EffRememberChanges.java
Normal 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);
|
||||
}
|
||||
}
|
||||
81
src/me/TheBukor/SkStuff/effects/EffReplaceBlocksWE.java
Normal file
81
src/me/TheBukor/SkStuff/effects/EffReplaceBlocksWE.java
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
69
src/me/TheBukor/SkStuff/effects/EffSetBlocksWE.java
Normal file
69
src/me/TheBukor/SkStuff/effects/EffSetBlocksWE.java
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
52
src/me/TheBukor/SkStuff/effects/EffSimulateSnow.java
Normal file
52
src/me/TheBukor/SkStuff/effects/EffSimulateSnow.java
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
42
src/me/TheBukor/SkStuff/effects/EffUndoRedoSession.java
Normal file
42
src/me/TheBukor/SkStuff/effects/EffUndoRedoSession.java
Normal 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();
|
||||
}
|
||||
}
|
||||
40
src/me/TheBukor/SkStuff/events/EvtWorldEditChange.java
Normal file
40
src/me/TheBukor/SkStuff/events/EvtWorldEditChange.java
Normal 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;
|
||||
}
|
||||
}
|
||||
24
src/me/TheBukor/SkStuff/events/WorldEditChangeHandler.java
Normal file
24
src/me/TheBukor/SkStuff/events/WorldEditChangeHandler.java
Normal 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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
41
src/me/TheBukor/SkStuff/events/WorldEditExtent.java
Normal file
41
src/me/TheBukor/SkStuff/events/WorldEditExtent.java
Normal 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);
|
||||
}
|
||||
}
|
||||
58
src/me/TheBukor/SkStuff/expressions/ExprAreaOfSchematic.java
Normal file
58
src/me/TheBukor/SkStuff/expressions/ExprAreaOfSchematic.java
Normal 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() };
|
||||
}
|
||||
}
|
||||
51
src/me/TheBukor/SkStuff/expressions/ExprAreaOfSelection.java
Normal file
51
src/me/TheBukor/SkStuff/expressions/ExprAreaOfSelection.java
Normal 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() };
|
||||
}
|
||||
}
|
||||
@@ -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() };
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
123
src/me/TheBukor/SkStuff/expressions/ExprFileNBTv1_8_R1.java
Normal file
123
src/me/TheBukor/SkStuff/expressions/ExprFileNBTv1_8_R1.java
Normal 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;
|
||||
}
|
||||
}
|
||||
127
src/me/TheBukor/SkStuff/expressions/ExprFileNBTv1_8_R2.java
Normal file
127
src/me/TheBukor/SkStuff/expressions/ExprFileNBTv1_8_R2.java
Normal 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;
|
||||
}
|
||||
}
|
||||
131
src/me/TheBukor/SkStuff/expressions/ExprFileNBTv1_8_R3.java
Normal file
131
src/me/TheBukor/SkStuff/expressions/ExprFileNBTv1_8_R3.java
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -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 };
|
||||
}
|
||||
}
|
||||
@@ -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() };
|
||||
}
|
||||
}
|
||||
61
src/me/TheBukor/SkStuff/expressions/ExprItemNBTv1_7_R1.java
Normal file
61
src/me/TheBukor/SkStuff/expressions/ExprItemNBTv1_7_R1.java
Normal 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 };
|
||||
}
|
||||
}
|
||||
61
src/me/TheBukor/SkStuff/expressions/ExprItemNBTv1_7_R2.java
Normal file
61
src/me/TheBukor/SkStuff/expressions/ExprItemNBTv1_7_R2.java
Normal 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 };
|
||||
}
|
||||
}
|
||||
61
src/me/TheBukor/SkStuff/expressions/ExprItemNBTv1_7_R3.java
Normal file
61
src/me/TheBukor/SkStuff/expressions/ExprItemNBTv1_7_R3.java
Normal 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 };
|
||||
}
|
||||
}
|
||||
61
src/me/TheBukor/SkStuff/expressions/ExprItemNBTv1_7_R4.java
Normal file
61
src/me/TheBukor/SkStuff/expressions/ExprItemNBTv1_7_R4.java
Normal 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 };
|
||||
}
|
||||
}
|
||||
61
src/me/TheBukor/SkStuff/expressions/ExprItemNBTv1_8_R1.java
Normal file
61
src/me/TheBukor/SkStuff/expressions/ExprItemNBTv1_8_R1.java
Normal 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 };
|
||||
}
|
||||
}
|
||||
68
src/me/TheBukor/SkStuff/expressions/ExprItemNBTv1_8_R2.java
Normal file
68
src/me/TheBukor/SkStuff/expressions/ExprItemNBTv1_8_R2.java
Normal 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 };
|
||||
}
|
||||
}
|
||||
68
src/me/TheBukor/SkStuff/expressions/ExprItemNBTv1_8_R3.java
Normal file
68
src/me/TheBukor/SkStuff/expressions/ExprItemNBTv1_8_R3.java
Normal 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 };
|
||||
}
|
||||
}
|
||||
@@ -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 };
|
||||
}
|
||||
}
|
||||
@@ -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() };
|
||||
}
|
||||
}
|
||||
194
src/me/TheBukor/SkStuff/expressions/ExprNBTv1_7_R1.java
Normal file
194
src/me/TheBukor/SkStuff/expressions/ExprNBTv1_7_R1.java
Normal 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;
|
||||
}
|
||||
}
|
||||
194
src/me/TheBukor/SkStuff/expressions/ExprNBTv1_7_R2.java
Normal file
194
src/me/TheBukor/SkStuff/expressions/ExprNBTv1_7_R2.java
Normal 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;
|
||||
}
|
||||
}
|
||||
194
src/me/TheBukor/SkStuff/expressions/ExprNBTv1_7_R3.java
Normal file
194
src/me/TheBukor/SkStuff/expressions/ExprNBTv1_7_R3.java
Normal 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;
|
||||
}
|
||||
}
|
||||
194
src/me/TheBukor/SkStuff/expressions/ExprNBTv1_7_R4.java
Normal file
194
src/me/TheBukor/SkStuff/expressions/ExprNBTv1_7_R4.java
Normal 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;
|
||||
}
|
||||
}
|
||||
197
src/me/TheBukor/SkStuff/expressions/ExprNBTv1_8_R1.java
Normal file
197
src/me/TheBukor/SkStuff/expressions/ExprNBTv1_8_R1.java
Normal 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;
|
||||
}
|
||||
}
|
||||
211
src/me/TheBukor/SkStuff/expressions/ExprNBTv1_8_R2.java
Normal file
211
src/me/TheBukor/SkStuff/expressions/ExprNBTv1_8_R2.java
Normal 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;
|
||||
}
|
||||
}
|
||||
211
src/me/TheBukor/SkStuff/expressions/ExprNBTv1_8_R3.java
Normal file
211
src/me/TheBukor/SkStuff/expressions/ExprNBTv1_8_R3.java
Normal 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;
|
||||
}
|
||||
}
|
||||
54
src/me/TheBukor/SkStuff/expressions/ExprNewEditSession.java
Normal file
54
src/me/TheBukor/SkStuff/expressions/ExprNewEditSession.java
Normal 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) };
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
97
src/me/TheBukor/SkStuff/expressions/ExprSelectionPos1.java
Normal file
97
src/me/TheBukor/SkStuff/expressions/ExprSelectionPos1.java
Normal 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;
|
||||
}
|
||||
}
|
||||
97
src/me/TheBukor/SkStuff/expressions/ExprSelectionPos2.java
Normal file
97
src/me/TheBukor/SkStuff/expressions/ExprSelectionPos2.java
Normal 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;
|
||||
}
|
||||
}
|
||||
167
src/me/TheBukor/SkStuff/expressions/ExprTagOfv1_7_R1.java
Normal file
167
src/me/TheBukor/SkStuff/expressions/ExprTagOfv1_7_R1.java
Normal 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;
|
||||
}
|
||||
}
|
||||
167
src/me/TheBukor/SkStuff/expressions/ExprTagOfv1_7_R2.java
Normal file
167
src/me/TheBukor/SkStuff/expressions/ExprTagOfv1_7_R2.java
Normal 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;
|
||||
}
|
||||
}
|
||||
167
src/me/TheBukor/SkStuff/expressions/ExprTagOfv1_7_R3.java
Normal file
167
src/me/TheBukor/SkStuff/expressions/ExprTagOfv1_7_R3.java
Normal 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;
|
||||
}
|
||||
}
|
||||
167
src/me/TheBukor/SkStuff/expressions/ExprTagOfv1_7_R4.java
Normal file
167
src/me/TheBukor/SkStuff/expressions/ExprTagOfv1_7_R4.java
Normal 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;
|
||||
}
|
||||
}
|
||||
167
src/me/TheBukor/SkStuff/expressions/ExprTagOfv1_8_R1.java
Normal file
167
src/me/TheBukor/SkStuff/expressions/ExprTagOfv1_8_R1.java
Normal 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;
|
||||
}
|
||||
}
|
||||
167
src/me/TheBukor/SkStuff/expressions/ExprTagOfv1_8_R2.java
Normal file
167
src/me/TheBukor/SkStuff/expressions/ExprTagOfv1_8_R2.java
Normal 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;
|
||||
}
|
||||
}
|
||||
167
src/me/TheBukor/SkStuff/expressions/ExprTagOfv1_8_R3.java
Normal file
167
src/me/TheBukor/SkStuff/expressions/ExprTagOfv1_8_R3.java
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -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 };
|
||||
}
|
||||
}
|
||||
@@ -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() };
|
||||
}
|
||||
}
|
||||
@@ -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 };
|
||||
}
|
||||
}
|
||||
@@ -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() };
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user