From bf9514c322791340c046fc0bb7571aebebe52f7e Mon Sep 17 00:00:00 2001 From: Govindass Date: Mon, 18 Nov 2019 14:51:31 +0200 Subject: [PATCH] 1.13 & 1.14 Update, removal of old stuff 1.13 & 1.14 Update, removed worldedit, nbt, vanishnopacket stuff and old version stuff --- .../conditions/CondSelectionContains.java | 49 -- .../SkStuff/effects/EffDrainLiquid.java | 52 -- .../SkStuff/effects/EffDrawLineWE.java | 70 -- .../SkStuff/effects/EffMakeCylinder.java | 76 -- .../SkStuff/effects/EffMakePyramid.java | 70 -- .../SkStuff/effects/EffMakeSphere.java | 76 -- .../SkStuff/effects/EffMakeWalls.java | 69 -- .../SkStuff/effects/EffNaturalize.java | 54 -- .../SkStuff/effects/EffPasteSchematic.java | 65 -- .../SkStuff/effects/EffRememberChanges.java | 42 - .../SkStuff/effects/EffReplaceBlocksWE.java | 81 -- .../SkStuff/effects/EffSetBlocksWE.java | 69 -- .../SkStuff/effects/EffSimulateSnow.java | 52 -- .../SkStuff/effects/EffToggleVanish.java | 47 -- .../SkStuff/effects/EffUndoRedoSession.java | 43 - .../SkStuff/events/EvtWorldEditChange.java | 46 -- .../events/WorldEditChangeHandler.java | 24 - .../SkStuff/events/WorldEditExtent.java | 34 - .../expressions/ExprChangedBlocksSession.java | 46 -- .../expressions/ExprEndermanBlocks.java | 162 ---- .../SkStuff/expressions/ExprFileNBT.java | 93 --- .../expressions/ExprFlagOfWGRegion.java | 110 --- .../expressions/ExprFlagsOfWGRegion.java | 67 -- .../SkStuff/expressions/ExprItemNBT.java | 56 -- .../SkStuff/expressions/ExprLastLocation.java | 49 -- .../SkStuff/expressions/ExprMCIdOf.java | 52 -- .../SkStuff/expressions/ExprMCIdToItem.java | 49 -- .../expressions/ExprNBTListContents.java | 74 -- .../SkStuff/expressions/ExprNBTListIndex.java | 83 -- .../SkStuff/expressions/ExprNBTOf.java | 137 ---- .../expressions/ExprNewEditSession.java | 54 -- .../ExprRegionsWithinLocation.java | 62 -- .../expressions/ExprSchematicArea.java | 85 -- .../expressions/ExprSelectionArea.java | 77 -- .../expressions/ExprSelectionOfPlayer.java | 90 --- .../SkStuff/expressions/ExprSelectionPos.java | 110 --- .../SkStuff/expressions/ExprStepLength.java | 80 -- .../SkStuff/expressions/ExprSuperPickaxe.java | 82 -- .../SkStuff/expressions/ExprTagOf.java | 82 -- .../SkStuff/expressions/ExprVanishState.java | 48 -- .../expressions/ExprWGMemberOwner.java | 111 --- .../PathfinderGoalFollow_v1_8_R3.java | 75 -- .../PathfinderGoalFollow_v1_9_R1.java | 77 -- .../TheBukor/SkStuff/util/NMS_v1_10_R1.java | 732 ------------------ .../TheBukor/SkStuff/util/NMS_v1_11_R1.java | 732 ------------------ .../TheBukor/SkStuff/util/NMS_v1_12_R1.java | 732 ------------------ src/me/TheBukor/SkStuff/util/NMS_v1_7_R4.java | 684 ---------------- src/me/TheBukor/SkStuff/util/NMS_v1_8_R3.java | 693 ----------------- src/me/TheBukor/SkStuff/util/NMS_v1_9_R1.java | 732 ------------------ src/me/TheBukor/SkStuff/util/NMS_v1_9_R2.java | 732 ------------------ 50 files changed, 8067 deletions(-) delete mode 100644 src/me/TheBukor/SkStuff/conditions/CondSelectionContains.java delete mode 100644 src/me/TheBukor/SkStuff/effects/EffDrainLiquid.java delete mode 100644 src/me/TheBukor/SkStuff/effects/EffDrawLineWE.java delete mode 100644 src/me/TheBukor/SkStuff/effects/EffMakeCylinder.java delete mode 100644 src/me/TheBukor/SkStuff/effects/EffMakePyramid.java delete mode 100644 src/me/TheBukor/SkStuff/effects/EffMakeSphere.java delete mode 100644 src/me/TheBukor/SkStuff/effects/EffMakeWalls.java delete mode 100644 src/me/TheBukor/SkStuff/effects/EffNaturalize.java delete mode 100644 src/me/TheBukor/SkStuff/effects/EffPasteSchematic.java delete mode 100644 src/me/TheBukor/SkStuff/effects/EffRememberChanges.java delete mode 100644 src/me/TheBukor/SkStuff/effects/EffReplaceBlocksWE.java delete mode 100644 src/me/TheBukor/SkStuff/effects/EffSetBlocksWE.java delete mode 100644 src/me/TheBukor/SkStuff/effects/EffSimulateSnow.java delete mode 100644 src/me/TheBukor/SkStuff/effects/EffToggleVanish.java delete mode 100644 src/me/TheBukor/SkStuff/effects/EffUndoRedoSession.java delete mode 100644 src/me/TheBukor/SkStuff/events/EvtWorldEditChange.java delete mode 100644 src/me/TheBukor/SkStuff/events/WorldEditChangeHandler.java delete mode 100644 src/me/TheBukor/SkStuff/events/WorldEditExtent.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprChangedBlocksSession.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprEndermanBlocks.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprFileNBT.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprFlagOfWGRegion.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprFlagsOfWGRegion.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprItemNBT.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprLastLocation.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprMCIdOf.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprMCIdToItem.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprNBTListContents.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprNBTListIndex.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprNBTOf.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprNewEditSession.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprRegionsWithinLocation.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprSchematicArea.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprSelectionArea.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprSelectionOfPlayer.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprSelectionPos.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprStepLength.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprSuperPickaxe.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprTagOf.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprVanishState.java delete mode 100644 src/me/TheBukor/SkStuff/expressions/ExprWGMemberOwner.java delete mode 100644 src/me/TheBukor/SkStuff/pathfinders/PathfinderGoalFollow_v1_8_R3.java delete mode 100644 src/me/TheBukor/SkStuff/pathfinders/PathfinderGoalFollow_v1_9_R1.java delete mode 100644 src/me/TheBukor/SkStuff/util/NMS_v1_10_R1.java delete mode 100644 src/me/TheBukor/SkStuff/util/NMS_v1_11_R1.java delete mode 100644 src/me/TheBukor/SkStuff/util/NMS_v1_12_R1.java delete mode 100644 src/me/TheBukor/SkStuff/util/NMS_v1_7_R4.java delete mode 100644 src/me/TheBukor/SkStuff/util/NMS_v1_8_R3.java delete mode 100644 src/me/TheBukor/SkStuff/util/NMS_v1_9_R1.java delete mode 100644 src/me/TheBukor/SkStuff/util/NMS_v1_9_R2.java diff --git a/src/me/TheBukor/SkStuff/conditions/CondSelectionContains.java b/src/me/TheBukor/SkStuff/conditions/CondSelectionContains.java deleted file mode 100644 index 9153a53..0000000 --- a/src/me/TheBukor/SkStuff/conditions/CondSelectionContains.java +++ /dev/null @@ -1,49 +0,0 @@ -package me.TheBukor.SkStuff.conditions; - -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.bukkit.WorldEditPlugin; - -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; - private Expression loc; - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) { - player = (Expression) expr[0]; - loc = (Expression) expr[1]; - setNegated(matchedPattern == 2 || matchedPattern == 3); - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "if WorldEdit selection of " + player.toString(e, debug) + (isNegated() ? " doesn't contain " : " contains ") + loc.toString(e, debug); - } - - @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() { - @Override - public boolean check(Player p) { - return we.getSelection(p).contains(loc.getSingle(e)); - } - }, isNegated()); - } -} diff --git a/src/me/TheBukor/SkStuff/effects/EffDrainLiquid.java b/src/me/TheBukor/SkStuff/effects/EffDrainLiquid.java deleted file mode 100644 index 26e3554..0000000 --- a/src/me/TheBukor/SkStuff/effects/EffDrainLiquid.java +++ /dev/null @@ -1,52 +0,0 @@ -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; - private Expression radius; - private Expression editSession; - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - location = (Expression) expr[0]; - radius = (Expression) expr[1]; - editSession = (Expression) expr[2]; - return true; - } - @Override - public String toString(@Nullable Event e, boolean debug) { - return "drain liquids at " + location.toString(e, debug) + " in a radius of " + radius.toString(e, debug); - } - - @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(); - } - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/effects/EffDrawLineWE.java b/src/me/TheBukor/SkStuff/effects/EffDrawLineWE.java deleted file mode 100644 index 2ea0861..0000000 --- a/src/me/TheBukor/SkStuff/effects/EffDrawLineWE.java +++ /dev/null @@ -1,70 +0,0 @@ -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 location1; - private Expression location2; - private Expression editSession; - private Expression blockList; - private Expression thickness; - private boolean filled = true; - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - location1 = (Expression) expr[0]; - location2 = (Expression) expr[1]; - editSession = (Expression) expr[2]; - blockList = (Expression) expr[3]; - thickness = (Expression) expr[4]; - if (result.mark == 1) - filled = false; - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "draw a line from " + location1.toString(e, debug) + " to " + location2.toString(e, debug) + " using an edit session with " + blockList.toString(e, debug) + " and thickness " + thickness.toString(e, debug); - } - - @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; - } - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/effects/EffMakeCylinder.java b/src/me/TheBukor/SkStuff/effects/EffMakeCylinder.java deleted file mode 100644 index 7fc0295..0000000 --- a/src/me/TheBukor/SkStuff/effects/EffMakeCylinder.java +++ /dev/null @@ -1,76 +0,0 @@ -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; - private Expression radius1; - private Expression radius2; - private Expression height; - private Expression editSession; - private Expression blockList; - private boolean filled = true; - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - location = (Expression) expr[0]; - radius1 = (Expression) expr[1]; - height = (Expression) expr[2]; - radius2 = (Expression) expr[3]; - editSession = (Expression) expr[4]; - blockList = (Expression) expr[5]; - if (result.mark == 1) - filled = false; - return true; - } - @Override - public String toString(@Nullable Event e, boolean debug) { - return "create a cylinder at " + location.toString(e, debug) + " with a radius of " + radius1.toString(e, debug) + " " + height.toString(e, debug) + " " + radius2.toString(e, debug) + " using an edit session with " + blockList.toString(e, debug); - } - - @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(); - } - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/effects/EffMakePyramid.java b/src/me/TheBukor/SkStuff/effects/EffMakePyramid.java deleted file mode 100644 index 55e2f03..0000000 --- a/src/me/TheBukor/SkStuff/effects/EffMakePyramid.java +++ /dev/null @@ -1,70 +0,0 @@ -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; - private Expression radius; - private Expression editSession; - private Expression blockList; - private boolean filled = true; - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - location = (Expression) expr[0]; - radius = (Expression) expr[1]; - editSession = (Expression) expr[2]; - blockList = (Expression) expr[3]; - if (result.mark == 1) - filled = false; - return true; - } - @Override - public String toString(@Nullable Event e, boolean debug) { - return "create a pyramid at " + location.toString(e, debug) + " with a radius of " + radius.toString(e, debug) + " using an edit session with " + blockList.toString(e, debug); - } - - @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(); - } - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/effects/EffMakeSphere.java b/src/me/TheBukor/SkStuff/effects/EffMakeSphere.java deleted file mode 100644 index b65264a..0000000 --- a/src/me/TheBukor/SkStuff/effects/EffMakeSphere.java +++ /dev/null @@ -1,76 +0,0 @@ -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; - private Expression radius1; - private Expression radius2; - private Expression radius3; - private Expression editSession; - private Expression blockList; - private boolean filled = true; - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - location = (Expression) expr[0]; - radius1 = (Expression) expr[1]; - radius2 = (Expression) expr[2]; - radius3 = (Expression) expr[3]; - editSession = (Expression) expr[4]; - blockList = (Expression) expr[5]; - if (result.mark == 1) - filled = false; - return true; - } - @Override - public String toString(@Nullable Event e, boolean debug) { - return "create a sphere centered at " + location.toString(e, debug) + " with a radius of " + radius1.toString(e, debug) + " " + radius2.toString(e, debug) + " " + radius3.toString(e, debug) + " using an edit session with " + blockList.toString(e, debug); - } - - @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(); - } - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/effects/EffMakeWalls.java b/src/me/TheBukor/SkStuff/effects/EffMakeWalls.java deleted file mode 100644 index 1f6c331..0000000 --- a/src/me/TheBukor/SkStuff/effects/EffMakeWalls.java +++ /dev/null @@ -1,69 +0,0 @@ -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 location1; - private Expression location2; - private Expression editSession; - private Expression blockList; - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - location1 = (Expression) expr[0]; - location2 = (Expression) expr[1]; - editSession = (Expression) expr[2]; - blockList = (Expression) expr[3]; - return true; - } - @Override - public String toString(@Nullable Event e, boolean debug) { - return "make walls from " + location1.toString(e, debug) + " to " + location2.toString(e, debug) + " using an edit session with " + blockList.toString(e, debug); - } - - @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(); - } - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/effects/EffNaturalize.java b/src/me/TheBukor/SkStuff/effects/EffNaturalize.java deleted file mode 100644 index 93eeb3a..0000000 --- a/src/me/TheBukor/SkStuff/effects/EffNaturalize.java +++ /dev/null @@ -1,54 +0,0 @@ -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 location1; - private Expression location2; - private Expression editSession; - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - location1 = (Expression) expr[0]; - location2 = (Expression) expr[1]; - editSession = (Expression) expr[2]; - return true; - } - @Override - public String toString(@Nullable Event e, boolean debug) { - return "naturalize all blocks from " + location1.toString(e, debug) + " to " + location2.toString(e, debug); - } - - @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(); - } - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/effects/EffPasteSchematic.java b/src/me/TheBukor/SkStuff/effects/EffPasteSchematic.java deleted file mode 100644 index 0db6cbf..0000000 --- a/src/me/TheBukor/SkStuff/effects/EffPasteSchematic.java +++ /dev/null @@ -1,65 +0,0 @@ -package me.TheBukor.SkStuff.effects; - -import java.io.File; -import java.io.IOException; - -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.Vector; -import com.sk89q.worldedit.bukkit.BukkitUtil; -import com.sk89q.worldedit.data.DataException; -import com.sk89q.worldedit.schematic.SchematicFormat; - -import ch.njol.skript.lang.Effect; -import ch.njol.skript.lang.Expression; -import ch.njol.skript.lang.SkriptParser.ParseResult; -import ch.njol.util.Kleenean; - -@SuppressWarnings("deprecation") -public class EffPasteSchematic extends Effect { - private Expression schematic; - private Expression location; - private Expression editSession; - - private int mark; - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - mark = result.mark; - schematic = (Expression) expr[0]; - location = (Expression) expr[1]; - editSession = (Expression) expr[2]; - return true; - } - @Override - public String toString(@Nullable Event e, boolean debug) { - return "paste schematic " + schematic.toString(e, debug) + " at " + location.toString(e, debug) + " using edit session" + (mark == 1 ? " ignoring air" : ""); - } - - @Override - protected void execute(Event e) { - String schem = schematic.getSingle(e); - Location loc = location.getSingle(e); - EditSession session = editSession.getSingle(e); - Vector origin = BukkitUtil.toVector(loc); - boolean noAir = false; - if (mark == 1) - noAir = true; - File schemFile = new File((schem.endsWith(".schematic") ? schem : (schem + ".schematic"))); - if (!schemFile.exists() || session == null) - return; - try { - SchematicFormat.getFormat(schemFile).load(schemFile).paste(session, origin, noAir); - } catch (MaxChangedBlocksException | DataException | IOException ex) { - if (ex instanceof MaxChangedBlocksException) - return; - ex.printStackTrace(); - } - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/effects/EffRememberChanges.java b/src/me/TheBukor/SkStuff/effects/EffRememberChanges.java deleted file mode 100644 index 4bf3f03..0000000 --- a/src/me/TheBukor/SkStuff/effects/EffRememberChanges.java +++ /dev/null @@ -1,42 +0,0 @@ -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; - private Expression editSession; - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) { - player = (Expression) expr[0]; - editSession = (Expression) expr[1]; - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "make " + player.toString(e, debug) + " 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); - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/effects/EffReplaceBlocksWE.java b/src/me/TheBukor/SkStuff/effects/EffReplaceBlocksWE.java deleted file mode 100644 index 67a1cc8..0000000 --- a/src/me/TheBukor/SkStuff/effects/EffReplaceBlocksWE.java +++ /dev/null @@ -1,81 +0,0 @@ -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 blockList1; - private Expression location1; - private Expression location2; - private Expression blockList2; - private Expression editSession; - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - blockList1 = (Expression) expr[0]; - location1 = (Expression) expr[1]; - location2 = (Expression) expr[2]; - blockList2 = (Expression) expr[3]; - editSession = (Expression) expr[4]; - return true; - } - @Override - public String toString(@Nullable Event e, boolean debug) { - return "replace all " + blockList1.toString(e, debug) + " from " + location1.toString(e, debug) + " to " + location2.toString(e, debug) + " with " + blockList1.toString(e, debug) + " 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 blocksToReplace = new HashSet(); - 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(); - } - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/effects/EffSetBlocksWE.java b/src/me/TheBukor/SkStuff/effects/EffSetBlocksWE.java deleted file mode 100644 index be266c5..0000000 --- a/src/me/TheBukor/SkStuff/effects/EffSetBlocksWE.java +++ /dev/null @@ -1,69 +0,0 @@ -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 location1; - private Expression location2; - private Expression blockList; - private Expression editSession; - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - location1 = (Expression) expr[0]; - location2 = (Expression) expr[1]; - blockList = (Expression) expr[2]; - editSession = (Expression) expr[3]; - return true; - } - @Override - public String toString(@Nullable Event e, boolean debug) { - return "set all blocks from " + location1.toString(e, debug) + " to " + location2.toString(e, debug) + " to " + blockList.toString(e, debug) + " 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(); - } - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/effects/EffSimulateSnow.java b/src/me/TheBukor/SkStuff/effects/EffSimulateSnow.java deleted file mode 100644 index 3eec489..0000000 --- a/src/me/TheBukor/SkStuff/effects/EffSimulateSnow.java +++ /dev/null @@ -1,52 +0,0 @@ -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; - private Expression radius; - private Expression editSession; - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - location = (Expression) expr[0]; - radius = (Expression) expr[1]; - editSession = (Expression) expr[2]; - return true; - } - @Override - public String toString(@Nullable Event e, boolean debug) { - return "make " + location.toString(e, debug) + " snowy in a radius of " + radius.toString(e, debug); - } - - @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(); - } - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/effects/EffToggleVanish.java b/src/me/TheBukor/SkStuff/effects/EffToggleVanish.java deleted file mode 100644 index a3fe3d6..0000000 --- a/src/me/TheBukor/SkStuff/effects/EffToggleVanish.java +++ /dev/null @@ -1,47 +0,0 @@ -package me.TheBukor.SkStuff.effects; - -import javax.annotation.Nullable; - -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.Event; -import org.bukkit.plugin.Plugin; -import org.kitteh.vanish.VanishPlugin; - -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 EffToggleVanish extends Effect { - private Expression player; - private Plugin vanishPlugin = Bukkit.getPluginManager().getPlugin("VanishNoPacket"); - private boolean silent = false; - private String toStringMark = ""; - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - player = (Expression) expr[0]; - if (result.mark == 1) { - toStringMark = " silently"; - silent = true; - } - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "toggle vanished state of " + player.toString(e, debug) + toStringMark; - } - - @Override - protected void execute(Event e) { - Player p = player.getSingle(e); - if (silent) { - ((VanishPlugin) vanishPlugin).getManager().toggleVanishQuiet(p, false); - } else { - ((VanishPlugin) vanishPlugin).getManager().toggleVanish(p); - } - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/effects/EffUndoRedoSession.java b/src/me/TheBukor/SkStuff/effects/EffUndoRedoSession.java deleted file mode 100644 index 796c67e..0000000 --- a/src/me/TheBukor/SkStuff/effects/EffUndoRedoSession.java +++ /dev/null @@ -1,43 +0,0 @@ -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; - private boolean redo = false; - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - editSession = (Expression) expr[0]; - if (result.mark == 1) - redo = true; - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - 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(); - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/events/EvtWorldEditChange.java b/src/me/TheBukor/SkStuff/events/EvtWorldEditChange.java deleted file mode 100644 index a677590..0000000 --- a/src/me/TheBukor/SkStuff/events/EvtWorldEditChange.java +++ /dev/null @@ -1,46 +0,0 @@ -package me.TheBukor.SkStuff.events; - -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.event.Cancellable; -import org.bukkit.event.Event; -import org.bukkit.event.HandlerList; - -public class EvtWorldEditChange extends Event implements Cancellable { - private static Player player; - private static Block block; - private boolean cancelled; - private static final HandlerList handlers = new HandlerList(); - - EvtWorldEditChange(Player player, Block block) { - EvtWorldEditChange.player = player; - EvtWorldEditChange.block = block; - this.cancelled = false; - } - - public static Player getPlayer() { - return player; - } - - public static Block getBlock() { - return block; - } - - public HandlerList getHandlers() { - return handlers; - } - - public static HandlerList getHandlerList() { - return handlers; - } - - @Override - public boolean isCancelled() { - return this.cancelled; - } - - @Override - public void setCancelled(boolean bool) { - this.cancelled = bool; - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/events/WorldEditChangeHandler.java b/src/me/TheBukor/SkStuff/events/WorldEditChangeHandler.java deleted file mode 100644 index 34d67ea..0000000 --- a/src/me/TheBukor/SkStuff/events/WorldEditChangeHandler.java +++ /dev/null @@ -1,24 +0,0 @@ -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 (actor != null && world instanceof BukkitWorld) { - event.setExtent(new WorldEditExtent(actor, world, event.getExtent())); - } - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/events/WorldEditExtent.java b/src/me/TheBukor/SkStuff/events/WorldEditExtent.java deleted file mode 100644 index 5db5314..0000000 --- a/src/me/TheBukor/SkStuff/events/WorldEditExtent.java +++ /dev/null @@ -1,34 +0,0 @@ -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; - -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()); - EvtWorldEditChange event = new EvtWorldEditChange(p, b); - Bukkit.getPluginManager().callEvent(event); - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/expressions/ExprChangedBlocksSession.java b/src/me/TheBukor/SkStuff/expressions/ExprChangedBlocksSession.java deleted file mode 100644 index 34d65f6..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprChangedBlocksSession.java +++ /dev/null @@ -1,46 +0,0 @@ -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 { - private Expression editSession; - @Override - public Class 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) expr[0]; - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - 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() }; - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/expressions/ExprEndermanBlocks.java b/src/me/TheBukor/SkStuff/expressions/ExprEndermanBlocks.java deleted file mode 100644 index eddb731..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprEndermanBlocks.java +++ /dev/null @@ -1,162 +0,0 @@ -package me.TheBukor.SkStuff.expressions; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Set; - -import javax.annotation.Nullable; - -import org.bukkit.Material; -import org.bukkit.craftbukkit.v1_8_R3.inventory.CraftItemStack; -import org.bukkit.entity.Enderman; -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.util.Kleenean; -import ch.njol.util.coll.CollectionUtils; -import me.TheBukor.SkStuff.util.ReflectionUtils; - -public class ExprEndermanBlocks extends SimpleExpression { - private Expression entity; - - private Class nmsBlockClass = ReflectionUtils.getNMSClass("Block"); - private Class endermanClass = ReflectionUtils.getNMSClass("EntityEnderman"); - private Class nmsIBlockData = ReflectionUtils.getNMSClass("IBlockData"); - private Class nmsItemClass = ReflectionUtils.getNMSClass("ItemStack"); - private Class craftEntClass = ReflectionUtils.getOBCClass("entity.CraftEntity"); - private Class craftItemClass = ReflectionUtils.getOBCClass("inventory.CraftItemStack"); - - @Override - public Class getReturnType() { - return ItemStack.class; - } - - @Override - public boolean isSingle() { - return false; - } - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - entity = (Expression) expr[0]; - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "blocks that " + entity.toString(e, debug) + " can carry"; - } - - @SuppressWarnings("unchecked") - @Override - @Nullable - protected ItemStack[] get(Event e) { - Entity ent = entity.getSingle(e); - if (ent == null || !(ent instanceof Enderman)) - return null; - Object nmsEnt = null; - try { - nmsEnt = craftEntClass.cast(ent).getClass().getMethod("getHandle").invoke(ent); - } catch (Exception ex) { - ex.printStackTrace(); - } - Set nmsBlocks = (Set) ReflectionUtils.getField("c", endermanClass, nmsEnt); - List items = new ArrayList(); - for (Object nmsBlock : nmsBlocks) { - Object nmsBlockData; - try { - nmsBlockData = nmsBlockClass.getMethod("getBlockData").invoke(nmsBlock); - int dataValue = (int) nmsBlockClass.getMethod("toLegacyData", nmsIBlockData).invoke(nmsBlock, - nmsBlockData); - Object nmsItem = nmsItemClass.getConstructor(nmsBlockClass, int.class, int.class).newInstance(nmsBlock, - 1, dataValue); - ItemStack bukkitItem = (ItemStack) craftItemClass.getMethod("asCraftMirror", nmsItemClass).invoke(null, - nmsItem); - items.add(bukkitItem); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - return Arrays.copyOf(items.toArray(), items.size(), ItemStack[].class); - } - - @SuppressWarnings({ "unused", "unchecked" }) - @Override - public void change(Event e, @Nullable Object[] delta, ChangeMode mode) { - Entity ent = entity.getSingle(e); - if (ent == null || !(ent instanceof Enderman)) - return; - Object nmsEnt = null; - try { - nmsEnt = craftEntClass.cast(ent).getClass().getMethod("getHandle").invoke(ent); - } catch (Exception ex) { - ex.printStackTrace(); - } - Set enderBlocks = (Set) ReflectionUtils.getField("c", endermanClass, nmsEnt); - if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE || mode == ChangeMode.SET) { - ItemStack[] deltaItems = Arrays.copyOf(delta, delta.length, ItemStack[].class); - if (mode == ChangeMode.SET) { - enderBlocks.clear(); - } - for (ItemStack itemStack : deltaItems) { - if (itemStack.getType() == Material.AIR || itemStack == null) - continue; - Object nmsItemStack = CraftItemStack.asNMSCopy(itemStack); - Object nmsItem = null; - try { - nmsItem = nmsItemStack.getClass().getMethod("getItem").invoke(nmsItemStack); - } catch (Exception ex) { - ex.printStackTrace(); - } - if (mode == ChangeMode.ADD || mode == ChangeMode.SET) - enderBlocks.add(nmsItem); - else //ChangeMode.REMOVE - enderBlocks.remove(nmsItem); - } - } else if (mode == ChangeMode.RESET) { - ItemStack grass = new ItemStack(Material.GRASS); - ItemStack dirt = new ItemStack(Material.DIRT); - ItemStack sand = new ItemStack(Material.SAND); - ItemStack gravel = new ItemStack(Material.GRAVEL); - ItemStack dandelion = new ItemStack(Material.YELLOW_FLOWER); - ItemStack poppy = new ItemStack(Material.RED_ROSE); - ItemStack brownShroom = new ItemStack(Material.BROWN_MUSHROOM); - ItemStack redShroom = new ItemStack(Material.RED_MUSHROOM); - ItemStack tnt = new ItemStack(Material.TNT); - ItemStack cactus = new ItemStack(Material.CACTUS); - ItemStack clay = new ItemStack(Material.CLAY); - ItemStack pumpkin = new ItemStack(Material.PUMPKIN); - ItemStack melon = new ItemStack(Material.MELON_BLOCK); - ItemStack mycellium = new ItemStack(Material.MYCEL); - ItemStack[] defaultItems = new ItemStack[] { grass, dirt, gravel, dandelion, poppy, brownShroom, redShroom, tnt, cactus, clay, pumpkin, melon, mycellium }; - enderBlocks.clear(); - for (ItemStack itemStack : defaultItems) { - Object nmsItemStack = CraftItemStack.asNMSCopy(itemStack); - Object nmsItem = null; - try { - nmsItem = nmsItemStack.getClass().getMethod("getItem").invoke(nmsItemStack); - } catch (Exception ex) { - ex.printStackTrace(); - } - enderBlocks.add(nmsItem); - } - } - } - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE || mode == ChangeMode.RESET|| mode == ChangeMode.SET) { - return CollectionUtils.array(ItemStack[].class); - } - return null; - } -} diff --git a/src/me/TheBukor/SkStuff/expressions/ExprFileNBT.java b/src/me/TheBukor/SkStuff/expressions/ExprFileNBT.java deleted file mode 100644 index 9670e63..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprFileNBT.java +++ /dev/null @@ -1,93 +0,0 @@ -package me.TheBukor.SkStuff.expressions; - -import java.io.File; - -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 me.TheBukor.SkStuff.SkStuff; -import me.TheBukor.SkStuff.util.ReflectionUtils; - -public class ExprFileNBT extends SimpleExpression { - private Expression input; - - private Class nbtClass = ReflectionUtils.getNMSClass("NBTTagCompound"); - - @Override - public Class getReturnType() { - return nbtClass; - } - - @Override - public boolean isSingle() { - return true; - } - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) { - input = (Expression) expr[0]; - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "the NBT from file " + input.toString(e, debug); - } - - @Override - @Nullable - public Object[] get(Event e) { - String fileName = input.getSingle(e); - fileName = !fileName.endsWith(".dat") ? fileName + ".dat" : fileName; - File file = new File(fileName); - if (!file.exists()) - return null; - return new Object[] { SkStuff.getNMSMethods().getFileNBT(file) }; - } - - @Override - public void change(Event e, @Nullable Object[] delta, ChangeMode mode) { - String fileName = input.getSingle(e); - fileName = !fileName.endsWith(".dat") ? fileName + ".dat" : fileName; - File file = new File(fileName); - if (!file.exists()) - return; - Object fileNBT = SkStuff.getNMSMethods().getFileNBT(file); - if (fileNBT == null) { - try { - fileNBT = nbtClass.newInstance(); - } catch (InstantiationException | IllegalAccessException ex) { - ex.printStackTrace(); - } - } - if (mode == ChangeMode.ADD) { - Object parsedNBT = null; - parsedNBT = SkStuff.getNMSMethods().parseRawNBT((String) delta[0]); - SkStuff.getNMSMethods().addToCompound(fileNBT, parsedNBT); - SkStuff.getNMSMethods().setFileNBT(file, fileNBT); - } else if (mode == ChangeMode.REMOVE) { - for (Object s : delta) { - SkStuff.getNMSMethods().removeFromCompound(fileNBT, (String) s); - } - SkStuff.getNMSMethods().setFileNBT(file, fileNBT); - } - } - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) { - return CollectionUtils.array(String.class); - } - return null; - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/expressions/ExprFlagOfWGRegion.java b/src/me/TheBukor/SkStuff/expressions/ExprFlagOfWGRegion.java deleted file mode 100644 index 58ae4a8..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprFlagOfWGRegion.java +++ /dev/null @@ -1,110 +0,0 @@ -package me.TheBukor.SkStuff.expressions; - -import org.bukkit.craftbukkit.libs.jline.internal.Nullable; -import org.bukkit.event.Event; - -import com.sk89q.worldguard.protection.flags.BooleanFlag; -import com.sk89q.worldguard.protection.flags.Flag; -import com.sk89q.worldguard.protection.flags.StateFlag; -import com.sk89q.worldguard.protection.flags.StateFlag.State; -import com.sk89q.worldguard.protection.flags.StringFlag; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; - -import ch.njol.skript.Skript; -import ch.njol.skript.classes.Changer.ChangeMode; -import ch.njol.skript.entity.EntityData; -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 ExprFlagOfWGRegion extends SimpleExpression { - private Expression> flag; - private Expression region; - - @SuppressWarnings("unchecked") - @Override - public boolean init(final Expression[] expr, final int matchedPattern, final Kleenean isDelayed, final ParseResult parseResult) { - flag = (Expression>) expr[0]; - region = (Expression) expr[1]; - return true; - } - - @Override - protected String[] get(final Event e) { - ProtectedRegion region = this.region.getSingle(e); - Flag flag = this.flag.getSingle(e); - return new String[] { region.getFlag(flag).toString() }; - } - - @Override - public boolean isSingle() { - return true; - } - - @Override - public Class getReturnType() { - return String.class; - } - - @Override - public String toString(final @Nullable Event e, final boolean debug) { - return "worldguard flag " + flag.toString(e, debug) + " of " + region.toString(e, debug); - } - - @Override - public void change(Event e, Object[] delta, ChangeMode mode) { - ProtectedRegion region = this.region.getSingle(e); - Flag flag = this.flag.getSingle(e); - if (region == null) - return; - if (mode == ChangeMode.SET) { - if (flag instanceof StateFlag && delta[0] instanceof Boolean) { - boolean allow = (boolean) delta[0]; - State newState = State.DENY; - if (allow) { - newState = State.ALLOW; - } - region.setFlag((StateFlag) flag, newState); - } else if (flag instanceof StringFlag && delta[0] instanceof String) { - String newValue = (String) delta[0]; - region.setFlag((StringFlag) flag, newValue); - } else if (flag instanceof BooleanFlag && delta[0] instanceof Boolean) { - boolean newValue = (boolean) delta[0]; - region.setFlag((BooleanFlag) flag, newValue); - /* - } else if (flag instanceof SetFlag) { - if (delta instanceof EntityData[]) { - if (((SetFlag) flag).getType() instanceof EntityTypeFlag) { - Set newSet = new HashSet(); - for (Object entData : delta) { - EntityType toAdd = null; - for (EntityType entType : EntityType.values()) { //A weird workaround I've thought to get the entity type from a Skript entity data - if (((EntityData) entData).getType() == entType.getEntityClass()) { - toAdd = entType; - } - } - if (toAdd != null) { - newSet.add(toAdd); - } - } - region.setFlag((SetFlag) flag, newSet); - */ - } else { - Skript.error("Sorry, this flag type isn't supported yet! Flag type: " + flag.getClass().getSimpleName()); - } - } else if (mode == ChangeMode.RESET || mode == ChangeMode.DELETE) { - region.setFlag(flag, null); - } - } - - @SuppressWarnings("unchecked") - @Override - public Class[] acceptChange(final ChangeMode mode) { - if (mode == ChangeMode.SET || mode == ChangeMode.RESET || mode == ChangeMode.DELETE) { - return CollectionUtils.array(String.class, Boolean.class, EntityData[].class); - } - return null; - } -} diff --git a/src/me/TheBukor/SkStuff/expressions/ExprFlagsOfWGRegion.java b/src/me/TheBukor/SkStuff/expressions/ExprFlagsOfWGRegion.java deleted file mode 100644 index 10fb408..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprFlagsOfWGRegion.java +++ /dev/null @@ -1,67 +0,0 @@ -package me.TheBukor.SkStuff.expressions; - -import org.bukkit.craftbukkit.libs.jline.internal.Nullable; -import org.bukkit.event.Event; - -import com.sk89q.worldguard.protection.flags.Flag; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; - -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; - -@SuppressWarnings("rawtypes") -public class ExprFlagsOfWGRegion extends SimpleExpression { - private Expression region; - - @SuppressWarnings("unchecked") - @Override - public boolean init(final Expression[] expr, final int matchedPattern, final Kleenean isDelayed, final ParseResult parseResult) { - region = (Expression) expr[0]; - return true; - } - - @Override - protected Flag[] get(final Event e) { - ProtectedRegion region = this.region.getSingle(e); - if (region != null) { - return region.getFlags().keySet().toArray(new Flag[region.getFlags().size()]); - } - return null; - } - - @Override - public boolean isSingle() { - return false; - } - - @Override - public Class getReturnType() { - return Flag.class; - } - - @Override - public String toString(final @Nullable Event e, final boolean debug) { - return "all worldguard flags of " + region.toString(e, debug); - } - - @Override - public void change(Event e, Object[] delta, ChangeMode mode) { - ProtectedRegion region = this.region.getSingle(e); - if (region == null) - return; - if (mode == ChangeMode.RESET || mode == ChangeMode.DELETE) { - region.getFlags().clear(); - } - } - - @Override - public Class[] acceptChange(final ChangeMode mode) { - if (mode == ChangeMode.RESET || mode == ChangeMode.DELETE) { - return new Class[0]; - } - return null; - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/expressions/ExprItemNBT.java b/src/me/TheBukor/SkStuff/expressions/ExprItemNBT.java deleted file mode 100644 index cd525d5..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprItemNBT.java +++ /dev/null @@ -1,56 +0,0 @@ -package me.TheBukor.SkStuff.expressions; - -import javax.annotation.Nullable; - -import org.bukkit.Material; -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 me.TheBukor.SkStuff.SkStuff; - -public class ExprItemNBT extends SimpleExpression { - private Expression itemStack; - private Expression string; - - - @Override - public Class 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) expr[0]; - string = (Expression) expr[1]; - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return itemStack.toString(e, debug) + " with custom NBT " + string.toString(e, debug); - } - - @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; - } - Object parsedNBT = null; - parsedNBT = SkStuff.getNMSMethods().parseRawNBT(newTags); - ItemStack newItem = SkStuff.getNMSMethods().getItemWithNBT(item, parsedNBT); - return new ItemStack[] { newItem }; - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/expressions/ExprLastLocation.java b/src/me/TheBukor/SkStuff/expressions/ExprLastLocation.java deleted file mode 100644 index adb4320..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprLastLocation.java +++ /dev/null @@ -1,49 +0,0 @@ -package me.TheBukor.SkStuff.expressions; - -import javax.annotation.Nullable; - -import org.bukkit.Location; -import org.bukkit.entity.Entity; -import org.bukkit.event.Event; - -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 me.TheBukor.SkStuff.SkStuff; - -public class ExprLastLocation extends SimpleExpression { - private Expression entity; - - @Override - public boolean isSingle() { - return true; - } - - @Override - public Class getReturnType() { - return Location.class; - } - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { - entity = (Expression) expr[0]; - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "last location of " + entity.toString(e, debug); - } - - @Override - @Nullable - protected Location[] get(Event e) { - Entity ent = entity.getSingle(e); - if (ent == null) { - return null; - } - return new Location[] { SkStuff.getNMSMethods().getLastLocation(ent) }; - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/expressions/ExprMCIdOf.java b/src/me/TheBukor/SkStuff/expressions/ExprMCIdOf.java deleted file mode 100644 index b048a9d..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprMCIdOf.java +++ /dev/null @@ -1,52 +0,0 @@ -package me.TheBukor.SkStuff.expressions; - -import javax.annotation.Nullable; - -import org.bukkit.event.Event; -import org.bukkit.inventory.ItemStack; - -import ch.njol.skript.aliases.ItemType; -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 me.TheBukor.SkStuff.SkStuff; - -public class ExprMCIdOf extends SimpleExpression { - private Expression itemType; - - @Override - public boolean isSingle() { - return true; - } - - @Override - public Class getReturnType() { - return String.class; - } - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { - itemType = (Expression) expr[0]; - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "minecraft id of " + itemType.toString(e, debug); - } - - @SuppressWarnings("deprecation") - @Override - @Nullable - protected String[] get(Event e) { - ItemType type = itemType.getSingle(e); - if (type == null) { - return null; - } - ItemStack item = new ItemStack(type.getTypes().get(0).getId()); - return new String[] { SkStuff.getNMSMethods().getMCId(item) }; - } - -} diff --git a/src/me/TheBukor/SkStuff/expressions/ExprMCIdToItem.java b/src/me/TheBukor/SkStuff/expressions/ExprMCIdToItem.java deleted file mode 100644 index b043c89..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprMCIdToItem.java +++ /dev/null @@ -1,49 +0,0 @@ -package me.TheBukor.SkStuff.expressions; - -import javax.annotation.Nullable; - -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 me.TheBukor.SkStuff.SkStuff; - -public class ExprMCIdToItem extends SimpleExpression { - private Expression mcId; - - @Override - public boolean isSingle() { - return true; - } - - @Override - public Class getReturnType() { - return ItemStack.class; - } - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { - mcId = (Expression) expr[0]; - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "item from minecraft id " + mcId.toString(e, debug); - } - - @Override - @Nullable - protected ItemStack[] get(Event e) { - String id = mcId.getSingle(e); - if (id == null) { - return null; - } - return new ItemStack[] { SkStuff.getNMSMethods().getItemFromMcId(id) }; - } - -} diff --git a/src/me/TheBukor/SkStuff/expressions/ExprNBTListContents.java b/src/me/TheBukor/SkStuff/expressions/ExprNBTListContents.java deleted file mode 100644 index 097a56d..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprNBTListContents.java +++ /dev/null @@ -1,74 +0,0 @@ -package me.TheBukor.SkStuff.expressions; - -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 me.TheBukor.SkStuff.SkStuff; -import me.TheBukor.SkStuff.util.ReflectionUtils; - -public class ExprNBTListContents extends SimpleExpression { - private Expression nbtList; - - private Class nbtBaseClass = ReflectionUtils.getNMSClass("NBTBase"); - - @Override - public Class getReturnType() { - return Object.class; - } - - @Override - public boolean isSingle() { - return false; - } - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - nbtList = (Expression) expr[0]; - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "contents from NBT list " + nbtList.toString(e, debug); - } - - @Override - @Nullable - protected Object[] get(Event e) { - Object list = nbtList.getSingle(e); - return SkStuff.getNMSMethods().getContents(list); - } - - @Override - public void change(Event e, @Nullable Object[] delta, ChangeMode mode) { - Object list = nbtList.getSingle(e); - if (mode == ChangeMode.ADD) { - if (nbtBaseClass.isAssignableFrom(delta[0].getClass())) - SkStuff.getNMSMethods().addToList(list, delta[0]); - else if (delta[0] instanceof Number) - SkStuff.getNMSMethods().addToList(list, SkStuff.getNMSMethods().convertToNBT((Number) delta[0])); - else if (delta[0] instanceof String) - SkStuff.getNMSMethods().addToList(list, SkStuff.getNMSMethods().convertToNBT((String) delta[0])); - } else if (mode == ChangeMode.REMOVE || mode == ChangeMode.REMOVE_ALL) { - // TODO Code to remove a single or all objects of some value in an NBT array. - } - } - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE || mode == ChangeMode.REMOVE_ALL) { - return CollectionUtils.array(Object.class); - } - return null; - } -} diff --git a/src/me/TheBukor/SkStuff/expressions/ExprNBTListIndex.java b/src/me/TheBukor/SkStuff/expressions/ExprNBTListIndex.java deleted file mode 100644 index e0b3116..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprNBTListIndex.java +++ /dev/null @@ -1,83 +0,0 @@ -package me.TheBukor.SkStuff.expressions; - -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 me.TheBukor.SkStuff.SkStuff; -import me.TheBukor.SkStuff.util.ReflectionUtils; - -public class ExprNBTListIndex extends SimpleExpression { - private Expression nbtList; - private Expression index; - - private Class nbtBaseClass = ReflectionUtils.getNMSClass("NBTBase"); - - @Override - public Class getReturnType() { - return Object.class; - } - - @Override - public boolean isSingle() { - return true; - } - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - if (matchedPattern == 0) { - nbtList = (Expression) expr[0]; - index = (Expression) expr[1]; - } else { - index = (Expression) expr[0]; - nbtList = (Expression) expr[1]; - } - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "index " + index.toString(e, debug) + " from nbt list " + nbtList.toString(e, debug); - } - - @Override - @Nullable - protected Object[] get(Event e) { - int i = index.getSingle(e).intValue(); - i--; - Object list = nbtList.getSingle(e); - return new Object[] { SkStuff.getNMSMethods().getIndex(list, i) }; - } - - @Override - public void change(Event e, @Nullable Object[] delta, ChangeMode mode) { - int i = index.getSingle(e).intValue(); - i--; - Object list = nbtList.getSingle(e); - if (mode == ChangeMode.SET) { - if (!(delta[0] instanceof Number || delta[0] instanceof String || nbtBaseClass.isAssignableFrom(delta[0].getClass()))) - //All NBTTags extends NBTBase, so it will check if delta[0] is instance of NBTTagList or NBTTagCompound, because these are the only NBTTagX classes registered in this addon. - return; //NBT can only store numbers, strings, lists or compounds. - SkStuff.getNMSMethods().setIndex(list, i, delta[0]); - } else if (mode == ChangeMode.DELETE) { - SkStuff.getNMSMethods().removeFromList(list, i); - } - } - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.SET || mode == ChangeMode.DELETE) { - return CollectionUtils.array(Object.class); - } - return null; - } -} diff --git a/src/me/TheBukor/SkStuff/expressions/ExprNBTOf.java b/src/me/TheBukor/SkStuff/expressions/ExprNBTOf.java deleted file mode 100644 index d32e63f..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprNBTOf.java +++ /dev/null @@ -1,137 +0,0 @@ -package me.TheBukor.SkStuff.expressions; - -import java.util.Arrays; - -import javax.annotation.Nullable; - -import org.bukkit.block.Block; -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.log.ErrorQuality; -import ch.njol.skript.util.Slot; -import ch.njol.util.Kleenean; -import ch.njol.util.coll.CollectionUtils; -import me.TheBukor.SkStuff.SkStuff; -import me.TheBukor.SkStuff.util.ReflectionUtils; - -public class ExprNBTOf extends SimpleExpression { - private Expression target; - - private Class nbtClass = ReflectionUtils.getNMSClass("NBTTagCompound"); - - @Override - public Class getReturnType() { - return nbtClass; - } - - @Override - public boolean isSingle() { - return true; - } - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - target = (Expression) expr[0]; - Class type = target.getReturnType(); - if (type != Entity.class || type != Block.class || type != ItemStack.class || type != Slot.class) { - Skript.error(target.toString() + " is neither an entity, a block nor an itemstack.", ErrorQuality.SEMANTIC_ERROR); - } - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "the NBT of " + target.toString(e, debug); - } - - @Override - @Nullable - public Object[] get(Event e) { - Object tar = target.getSingle(e); - if (tar instanceof Entity) { - return new Object[] { SkStuff.getNMSMethods().getEntityNBT((Entity) tar) }; - } else if (tar instanceof Block) { - return new Object[] { SkStuff.getNMSMethods().getTileNBT((Block) tar) }; - } else if (tar instanceof ItemStack) { - return new Object[] { SkStuff.getNMSMethods().getItemNBT((ItemStack) tar) }; - } else if (tar instanceof Slot) { - return new Object[] { SkStuff.getNMSMethods().getItemNBT(((Slot) tar).getItem()) }; - } - return null; - } - - @Override - public void change(Event e, Object[] delta, ChangeMode mode) { - Object tar = target.getSingle(e); - Object parsedNBT = null; - if (delta != null) { - parsedNBT = SkStuff.getNMSMethods().parseRawNBT((String) delta[0]); - } - if (tar instanceof Entity) { - Object entNBT = SkStuff.getNMSMethods().getEntityNBT((Entity) tar); - if (mode == ChangeMode.ADD) { - SkStuff.getNMSMethods().removeFromCompound(parsedNBT, "UUIDMost", "UUIDLeast", "WorldUUDMost", "WorldUUIDLeast", "Bukkit.updateLevel"); - SkStuff.getNMSMethods().addToCompound(entNBT, parsedNBT); - SkStuff.getNMSMethods().setEntityNBT((Entity) tar, entNBT); - } else if (mode == ChangeMode.REMOVE) { - for (Object s : delta) { - if (s != "UUIDMost" || s != "UUIDLeast" || s != "WorldUUIDMost" || s != "WorldUUIDLeast" || s != "Bukkit.updateLevel") { // Prevent crucial data from being modified - SkStuff.getNMSMethods().removeFromCompound(entNBT, (String) s); - } - } - SkStuff.getNMSMethods().setEntityNBT((Entity) tar, entNBT); - } - } else if (tar instanceof Block) { - Object blockNBT = SkStuff.getNMSMethods().getTileNBT((Block) tar); - if (mode == ChangeMode.ADD) { - SkStuff.getNMSMethods().removeFromCompound(parsedNBT, "x", "y", "z", "id"); - SkStuff.getNMSMethods().addToCompound(blockNBT, parsedNBT); - SkStuff.getNMSMethods().setTileNBT((Block) tar, blockNBT); - } else if (mode == ChangeMode.REMOVE) { - for (Object s : delta) { - if (s != "x" || s != "y" || s != "z" || s != "id") { - SkStuff.getNMSMethods().removeFromCompound(blockNBT, (String) s); - } - } - SkStuff.getNMSMethods().setTileNBT((Block) tar, blockNBT); - } - } else if (tar instanceof ItemStack) { - if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE || mode == ChangeMode.DELETE || mode == ChangeMode.RESET) { - Skript.warning("Failed to change the NBT of an item: Itemstack didn't have any slot attached to it."); - } - } else if (tar instanceof Slot) { - ItemStack slotItem = ((Slot) tar).getItem(); - Object itemNBT = SkStuff.getNMSMethods().getItemNBT(slotItem); - if (mode == ChangeMode.ADD) { - SkStuff.getNMSMethods().addToCompound(itemNBT, parsedNBT); - ItemStack newItem = SkStuff.getNMSMethods().getItemWithNBT(slotItem, itemNBT); - ((Slot) tar).setItem(newItem); - } else if (mode == ChangeMode.REMOVE) { - String[] toRemove = Arrays.copyOf(delta, delta.length, String[].class); - SkStuff.getNMSMethods().removeFromCompound(itemNBT, toRemove); - ItemStack newItem = SkStuff.getNMSMethods().getItemWithNBT(slotItem, itemNBT); - ((Slot) tar).setItem(newItem); - } else if (mode == ChangeMode.DELETE || mode == ChangeMode.RESET) { - ItemStack newItem = SkStuff.getNMSMethods().getItemWithNBT(slotItem, null); - ((Slot) tar).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; - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/expressions/ExprNewEditSession.java b/src/me/TheBukor/SkStuff/expressions/ExprNewEditSession.java deleted file mode 100644 index 1ba7c24..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprNewEditSession.java +++ /dev/null @@ -1,54 +0,0 @@ -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 { - private Expression world; - private Expression blockLimit; - - @Override - public Class 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) expr[0]; - blockLimit = (Expression) expr[1]; - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "new edit session in world " + world.toString(e, debug) + " with maximum block change limit of " + blockLimit.toString(e, debug); - } - - @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) }; - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/expressions/ExprRegionsWithinLocation.java b/src/me/TheBukor/SkStuff/expressions/ExprRegionsWithinLocation.java deleted file mode 100644 index 72460e1..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprRegionsWithinLocation.java +++ /dev/null @@ -1,62 +0,0 @@ -package me.TheBukor.SkStuff.expressions; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import javax.annotation.Nullable; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.event.Event; - -import com.sk89q.worldedit.Vector; -import com.sk89q.worldguard.bukkit.WorldGuardPlugin; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; - -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 ExprRegionsWithinLocation extends SimpleExpression { - private Expression location; - - @Override - public boolean isSingle() { - return false; - } - - @Override - public Class getReturnType() { - return ProtectedRegion.class; - } - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { - location = (Expression) expr[0]; - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "all the regions containing " + location.toString(e, debug); - } - - @Override - @Nullable - protected ProtectedRegion[] get(Event e) { - WorldGuardPlugin wg = (WorldGuardPlugin) Bukkit.getPluginManager().getPlugin("WorldGuard"); - Location loc = location.getSingle(e); - Vector vec = new Vector(loc.getX(), loc.getY(), loc.getZ()); - Map regions = wg.getRegionManager(loc.getWorld()).getRegions(); - List regionsInside = new ArrayList(); - for (ProtectedRegion region : regions.values()) { - if (region.contains(vec)) { - regionsInside.add(region); - } - } - return regionsInside.toArray(new ProtectedRegion[0]); - } -} diff --git a/src/me/TheBukor/SkStuff/expressions/ExprSchematicArea.java b/src/me/TheBukor/SkStuff/expressions/ExprSchematicArea.java deleted file mode 100644 index 73dc4ee..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprSchematicArea.java +++ /dev/null @@ -1,85 +0,0 @@ -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.Vector; -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 ExprSchematicArea extends SimpleExpression { - private Expression schematic; - - private int parseMark; - private String toStringMark; - - @Override - public Class getReturnType() { - return Integer.class; - } - - @Override - public boolean isSingle() { - return true; - } - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - schematic = (Expression) expr[0]; - parseMark = result.mark; - if (parseMark == 0) { - toStringMark = "volume"; - } else if (parseMark == 1) { - toStringMark = "width (x-size)"; - } else if (parseMark == 2) { - toStringMark = "height (y-size)"; - } else if (parseMark == 3) { - toStringMark = "length (z-size)"; - } else if (parseMark == 4) { - toStringMark = "area"; - } - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "the " + toStringMark + " of the schematic from " + schematic.toString(e, debug); - } - - @SuppressWarnings("deprecation") - @Override - @Nullable - protected Integer[] get(Event e) { - String schem = schematic.getSingle(e); - File schemFile = new File((schem.endsWith(".schematic") ? schem : (schem + ".schematic"))); - Vector size = null; - try { - size = MCEditSchematicFormat.getFormat(schemFile).load(schemFile).getSize(); - } catch (DataException | IOException ex) { - return null; - } - Number result = null; - if (parseMark == 0) { - result = (size.getX() * size.getY() * size.getZ()); - } else if (parseMark == 1) { - result = size.getX(); - } else if (parseMark == 2) { - result = size.getY(); - } else if (parseMark == 3) { - result = size.getZ(); - } else if (parseMark == 4) { - result = (size.getX() * size.getZ()); - } - return new Integer[] { result.intValue() }; - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/expressions/ExprSelectionArea.java b/src/me/TheBukor/SkStuff/expressions/ExprSelectionArea.java deleted file mode 100644 index 8e90c61..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprSelectionArea.java +++ /dev/null @@ -1,77 +0,0 @@ -package me.TheBukor.SkStuff.expressions; - -import javax.annotation.Nullable; - -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 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 ExprSelectionArea extends SimpleExpression { - private Expression player; - private Integer parseMark; - private String toStringMark; - - @Override - public Class getReturnType() { - return Integer.class; - } - - @Override - public boolean isSingle() { - return true; - } - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - player = (Expression) expr[0]; - parseMark = result.mark; - if (parseMark == 0) { - toStringMark = "volume"; - } else if (parseMark == 1) { - toStringMark = "width (x-size)"; - } else if (parseMark == 2) { - toStringMark = "height (y-size)"; - } else if (parseMark == 3) { - toStringMark = "length (z-size)"; - } else if (parseMark == 4) { - toStringMark = "area"; - } - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "the " + toStringMark + " of the WorldEdit selection of " + player.toString(e, debug); - } - - @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; - Integer result = null; - if (parseMark == 0) { - result = sel.getArea(); - } else if (parseMark == 1) { - result = sel.getWidth(); - } else if (parseMark == 2) { - result = sel.getHeight(); - } else if (parseMark == 3) { - result = sel.getLength(); - } else if (parseMark == 4) { - result = (sel.getWidth() * sel.getLength()); - } - return new Integer[] { result }; - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/expressions/ExprSelectionOfPlayer.java b/src/me/TheBukor/SkStuff/expressions/ExprSelectionOfPlayer.java deleted file mode 100644 index 724ae0e..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprSelectionOfPlayer.java +++ /dev/null @@ -1,90 +0,0 @@ -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 { - private Expression player; - private WorldEditPlugin we = (WorldEditPlugin) Bukkit.getServer().getPluginManager().getPlugin("WorldEdit");; - - @Override - public Class 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) expr[0]; - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "the WorldEdit selection of " + player.toString(e, debug); - } - - @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; - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/expressions/ExprSelectionPos.java b/src/me/TheBukor/SkStuff/expressions/ExprSelectionPos.java deleted file mode 100644 index 09a730c..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprSelectionPos.java +++ /dev/null @@ -1,110 +0,0 @@ -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 ExprSelectionPos extends SimpleExpression { - private Expression player; - private boolean usePos2 = false; - private WorldEditPlugin we = (WorldEditPlugin) Bukkit.getServer().getPluginManager().getPlugin("WorldEdit"); - - @Override - public Class getReturnType() { - return Location.class; - } - - @Override - public boolean isSingle() { - return true; - } - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult result) { - player = (Expression) expr[0]; - if (result.mark == 1) { - usePos2 = true; - } - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "the WorldEdit point " + (usePos2 ? "2" : "1") + " selection of " + player.toString(e, debug); - } - - @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 = null; - if (usePos2 == true) { - pos = cuboid.getPos2(); - } else { - 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; - if (usePos2 == true) { - cuboid.setPos2(BukkitUtil.toVector(newLoc)); - } else { - 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; - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/expressions/ExprStepLength.java b/src/me/TheBukor/SkStuff/expressions/ExprStepLength.java deleted file mode 100644 index 890bce6..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprStepLength.java +++ /dev/null @@ -1,80 +0,0 @@ -package me.TheBukor.SkStuff.expressions; - -import javax.annotation.Nullable; - -import org.bukkit.entity.Entity; -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 me.TheBukor.SkStuff.SkStuff; - -public class ExprStepLength extends SimpleExpression { - private Expression entity; - - @Override - public boolean isSingle() { - return true; - } - - @Override - public Class getReturnType() { - return Number.class; - } - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { - entity = (Expression) expr[0]; - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "step length of " + entity.toString(e, debug); - } - - @Override - @Nullable - protected Number[] get(Event e) { - Entity ent = entity.getSingle(e); - if (ent == null) { - return null; - } - return new Number[] { SkStuff.getNMSMethods().getEntityStepLength(ent) }; - } - - @Override - public void change(Event e, @Nullable Object[] delta, ChangeMode mode) { - Entity ent = entity.getSingle(e); - if (ent == null) { - return; - } - if (mode == ChangeMode.ADD) { - float toAdd = ((Number) delta[0]).floatValue(); - float currentLength = SkStuff.getNMSMethods().getEntityStepLength(ent); - SkStuff.getNMSMethods().setEntityStepLength(ent, (currentLength + toAdd)); - } else if (mode == ChangeMode.REMOVE) { - float toRemove = ((Number) delta[0]).floatValue(); - float currentLength = SkStuff.getNMSMethods().getEntityStepLength(ent); - SkStuff.getNMSMethods().setEntityStepLength(ent, (currentLength - toRemove)); - } else if (mode == ChangeMode.SET) { - float toSet = ((Number) delta[0]).floatValue(); - SkStuff.getNMSMethods().setEntityStepLength(ent, toSet); - } - } - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE || mode == ChangeMode.SET) { - return CollectionUtils.array(Number.class); - } - return null; - } -} diff --git a/src/me/TheBukor/SkStuff/expressions/ExprSuperPickaxe.java b/src/me/TheBukor/SkStuff/expressions/ExprSuperPickaxe.java deleted file mode 100644 index 7040aaa..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprSuperPickaxe.java +++ /dev/null @@ -1,82 +0,0 @@ -package me.TheBukor.SkStuff.expressions; - -import javax.annotation.Nullable; - -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.Event; - -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 ExprSuperPickaxe extends SimpleExpression { - private Expression players; - - @Override - public boolean isSingle() { - return players.isSingle(); - } - - @Override - public Class getReturnType() { - return Boolean.class; - } - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) { - players = (Expression) expr[0]; - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "world edit super pickaxe state of " + players.toString(e, debug); - } - - @Override - @Nullable - protected Boolean[] get(Event e) { - WorldEditPlugin we = (WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit"); - Player[] ps = players.getAll(e); - Boolean[] states = new Boolean[ps.length]; - int i = 0; - for (Player p : ps) { - states[i] = we.getSession(p).hasSuperPickAxe(); - i++; - } - return states; - } - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.SET) { - return CollectionUtils.array(Boolean.class); - } - return null; - } - - @Override - public void change(Event e, @Nullable Object[] delta, ChangeMode mode) { - if (mode == ChangeMode.SET) { - WorldEditPlugin we = (WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit"); - Player[] ps = players.getAll(e); - boolean enablePick = (boolean) delta[0]; - for (Player p : ps) { - if (enablePick) { - we.getSession(p).enableSuperPickAxe(); - } else { - we.getSession(p).disableSuperPickAxe(); - } - } - } - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/expressions/ExprTagOf.java b/src/me/TheBukor/SkStuff/expressions/ExprTagOf.java deleted file mode 100644 index 21aa492..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprTagOf.java +++ /dev/null @@ -1,82 +0,0 @@ -package me.TheBukor.SkStuff.expressions; - -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 me.TheBukor.SkStuff.SkStuff; -import me.TheBukor.SkStuff.util.ReflectionUtils; - -public class ExprTagOf extends SimpleExpression { - private Expression string; - private Expression compound; - - private Class nbtBaseClass = ReflectionUtils.getNMSClass("NBTBase"); - - @Override - public Class 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) expr[0]; - compound = (Expression) expr[1]; - return true; - } - @Override - public String toString(@Nullable Event e, boolean debug) { - return "the tag " + string.toString(e, debug) + " of " + compound.toString(e, debug); - } - - @Override - @Nullable - protected Object[] get(Event e) { - Object NBT = compound.getSingle(e); - if (NBT == null || NBT.toString().equals("{}")) { // "{}" is an empty compound. - return null; //The NBT can be empty/inexistant for items - } - String stringTag = string.getSingle(e); - Object tag = SkStuff.getNMSMethods().getNBTTag(NBT, stringTag); - if (tag == null) { - return null; //The tag doesn't exist? Return . - } - byte id = SkStuff.getNMSMethods().getTypeId(tag); - return new Object[] { SkStuff.getNMSMethods().getNBTTagValue(NBT, stringTag, id) }; - } - - @Override - public void change(Event e, @Nullable Object[] delta, ChangeMode mode) { - Object NBT = compound.getSingle(e); - if (NBT == null) { - return; - } - String stringTag = string.getSingle(e); - if (mode == ChangeMode.SET) { - Object newValue = delta[0]; - SkStuff.getNMSMethods().setNBTTag(NBT, stringTag, newValue); - } else if (mode == ChangeMode.RESET || mode == ChangeMode.DELETE) { - SkStuff.getNMSMethods().removeNBTTag(NBT, stringTag); - } - } - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.SET || mode == ChangeMode.DELETE || mode == ChangeMode.RESET) { - return CollectionUtils.array(Number.class, String.class, nbtBaseClass); - } - return null; - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/expressions/ExprVanishState.java b/src/me/TheBukor/SkStuff/expressions/ExprVanishState.java deleted file mode 100644 index 834f0b2..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprVanishState.java +++ /dev/null @@ -1,48 +0,0 @@ -package me.TheBukor.SkStuff.expressions; - -import javax.annotation.Nullable; - -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.Event; -import org.bukkit.plugin.Plugin; -import org.kitteh.vanish.VanishPlugin; - -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 ExprVanishState extends SimpleExpression { - private Expression player; - private Plugin vanishPlugin = Bukkit.getPluginManager().getPlugin("VanishNoPacket"); - - @Override - public Class getReturnType() { - return Boolean.class; - } - - @Override - public boolean isSingle() { - return true; - } - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean arg2, ParseResult arg3) { - player = (Expression) expr[0]; - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - return "vanish state of " + player.toString(e, debug); - } - - @Override - @Nullable - protected Boolean[] get(Event e) { - Player p = player.getSingle(e); - return new Boolean[] { ((VanishPlugin) vanishPlugin).getManager().isVanished(p) }; - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/expressions/ExprWGMemberOwner.java b/src/me/TheBukor/SkStuff/expressions/ExprWGMemberOwner.java deleted file mode 100644 index b6ab66c..0000000 --- a/src/me/TheBukor/SkStuff/expressions/ExprWGMemberOwner.java +++ /dev/null @@ -1,111 +0,0 @@ -package me.TheBukor.SkStuff.expressions; - -import java.util.Arrays; -import java.util.Set; -import java.util.UUID; - -import javax.annotation.Nullable; - -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.event.Event; - -import com.sk89q.worldguard.domains.DefaultDomain; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; - -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 ExprWGMemberOwner extends SimpleExpression { - private Expression region; - - private int mark; - - @Override - public boolean isSingle() { - return false; - } - - @Override - public Class getReturnType() { - return OfflinePlayer.class; - } - - @SuppressWarnings("unchecked") - @Override - public boolean init(Expression[] expr, int matchedPattern, Kleenean isDelayed, ParseResult result) { - region = (Expression) expr[0]; - mark = result.mark; - return true; - } - - @Override - public String toString(@Nullable Event e, boolean debug) { - String markString = mark == 0 ? "members" : "owners"; - return "the " + markString + " of the worldguard region " + region.toString(e, debug); - } - - @Override - @Nullable - protected OfflinePlayer[] get(Event e) { - ProtectedRegion reg = region.getSingle(e); - Set uuids; - if (mark == 0) { - uuids = reg.getMembers().getUniqueIds(); - } else { - uuids = reg.getOwners().getUniqueIds(); - } - if (uuids.isEmpty()) { - return null; - } - OfflinePlayer[] offPlayers = new OfflinePlayer[uuids.size()]; - int i = 0; - for (UUID uuid : uuids) { - offPlayers[i] = Bukkit.getOfflinePlayer(uuid); - i++; - } - return offPlayers; - } - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) { - return CollectionUtils.array(OfflinePlayer[].class); - } - return null; - } - - @Override - public void change(Event e, @Nullable Object[] delta, ChangeMode mode) { - ProtectedRegion reg = region.getSingle(e); - if (mode == ChangeMode.ADD) { - OfflinePlayer[] toAdd = Arrays.copyOf(delta, delta.length, OfflinePlayer[].class); - for (OfflinePlayer offPlayer : toAdd) { - DefaultDomain domain; - if (mark == 0) { - domain = reg.getMembers(); - } else { - domain = reg.getOwners(); - } - domain.addPlayer(offPlayer.getUniqueId()); - } - } else if (mode == ChangeMode.REMOVE) { - OfflinePlayer[] toRemove = Arrays.copyOf(delta, delta.length, OfflinePlayer[].class); - for (OfflinePlayer offPlayer : toRemove) { - DefaultDomain domain; - if (mark == 0) { - domain = reg.getMembers(); - } else { - domain = reg.getOwners(); - } - domain.removePlayer(offPlayer.getUniqueId()); - } - } - } -} diff --git a/src/me/TheBukor/SkStuff/pathfinders/PathfinderGoalFollow_v1_8_R3.java b/src/me/TheBukor/SkStuff/pathfinders/PathfinderGoalFollow_v1_8_R3.java deleted file mode 100644 index 236cbe7..0000000 --- a/src/me/TheBukor/SkStuff/pathfinders/PathfinderGoalFollow_v1_8_R3.java +++ /dev/null @@ -1,75 +0,0 @@ -package me.TheBukor.SkStuff.pathfinders; - -import java.util.List; - -import net.minecraft.server.v1_8_R3.Entity; -import net.minecraft.server.v1_8_R3.EntityCreature; -import net.minecraft.server.v1_8_R3.EntityLiving; -import net.minecraft.server.v1_8_R3.PathfinderGoal; - -public class PathfinderGoalFollow_v1_8_R3 extends PathfinderGoal { - private EntityCreature follower; - private EntityLiving followed; - private Class followedClass; - private float radius; - private double speed; - private boolean isByName; - private String customName; - - public PathfinderGoalFollow_v1_8_R3(EntityCreature follower, Class followedClass, float radius, double speed, boolean isByName, String customName) { - this.follower = follower; - this.followedClass = followedClass; - this.radius = radius; - this.speed = speed; - this.isByName = isByName; - this.customName = customName; - } - - // a() is shouldExecute() - @SuppressWarnings("unchecked") - @Override - public boolean a() { - if (followed == null) { - List list = follower.world.a((Class) followedClass, follower.getBoundingBox().grow(radius, 4.0D, radius)); - if (list.isEmpty()) { - return false; - } - if (isByName) { - for (Object entity : list) { - if (((EntityLiving) entity).getCustomName().equals(customName)) { - followed = (EntityLiving) entity; - return true; - } - } - } else { - followed = (EntityLiving) list.get(0); - return true; - } - } - return true; - } - - // b() is shouldContinueExecuting() - @Override - public boolean b() { - if (followed.dead) { - followed = null; - return false; - } else if (followed.h(follower) < 9.0D || followed.h(follower) > Math.pow(radius, 2)) { // h() = distanceSquaredFrom() - return false; // if 3 blocks away or not in radius, stop moving. - //Maybe I'll add a teleport feature later. - } else if (isByName) { - if (!followed.getCustomName().equals(customName)) { - followed = null; - return false; - } - } - return follower.getNavigation().m(); // m() means hasNoPath() - } - - // c() is execute() - @Override - public void c() { - follower.getNavigation().a(followed, speed); // a() means moveTo() - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/pathfinders/PathfinderGoalFollow_v1_9_R1.java b/src/me/TheBukor/SkStuff/pathfinders/PathfinderGoalFollow_v1_9_R1.java deleted file mode 100644 index 1b85fb6..0000000 --- a/src/me/TheBukor/SkStuff/pathfinders/PathfinderGoalFollow_v1_9_R1.java +++ /dev/null @@ -1,77 +0,0 @@ -package me.TheBukor.SkStuff.pathfinders; - -import java.util.List; - -import net.minecraft.server.v1_9_R1.Entity; -import net.minecraft.server.v1_9_R1.EntityCreature; -import net.minecraft.server.v1_9_R1.EntityLiving; -import net.minecraft.server.v1_9_R1.PathfinderGoal; - -public class PathfinderGoalFollow_v1_9_R1 extends PathfinderGoal { - private EntityCreature follower; - private EntityLiving followed; - private Class followedClass; - private float radius; - private double speed; - private boolean isByName; - private String customName; - - public PathfinderGoalFollow_v1_9_R1(EntityCreature follower, Class followedClass, float radius, double speed, boolean isByName, String customName) { - this.follower = follower; - this.followedClass = followedClass; - this.radius = radius; - this.speed = speed; - this.isByName = isByName; - this.customName = customName; - } - - // a() is shouldExecute() - @SuppressWarnings("unchecked") - @Override - public boolean a() { - if (followed == null) { - List list = follower.world.a((Class) followedClass, follower.getBoundingBox().grow(radius, 4.0D, radius)); - if (list.isEmpty()) { - return false; - } - if (isByName) { - for (Object entity : list) { - if (((EntityLiving) entity).getCustomName().equals(customName)) { - followed = (EntityLiving) entity; - return true; - } - } - } else { - followed = (EntityLiving) list.get(0); - return true; - } - } - return true; - } - - // b() is shouldContinueExecuting() - @Override - public boolean b() { - if (followed.dead) { - followed = null; - return false; - } else if (followed.h(follower) < 9.0D || followed.h(follower) > Math.pow(radius, 2)) { // h() = distanceSquaredFrom() - return false; // if 3 blocks away or not in radius, stop moving. - //Maybe I'll add a teleport feature later. - } else if (isByName) { - if (!followed.getCustomName().equals(customName)) { - followed = null; - return false; - } - } - return follower.getNavigation().n(); // n() means hasNoPath() - } - - // c() is execute() - @Override - public void c() { - follower.getNavigation().a(followed, speed); // a() means moveTo() - } - - -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/util/NMS_v1_10_R1.java b/src/me/TheBukor/SkStuff/util/NMS_v1_10_R1.java deleted file mode 100644 index 699478e..0000000 --- a/src/me/TheBukor/SkStuff/util/NMS_v1_10_R1.java +++ /dev/null @@ -1,732 +0,0 @@ -package me.TheBukor.SkStuff.util; - -import java.io.EOFException; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.NotSerializableException; -import java.io.OutputStream; -import java.io.StreamCorruptedException; -import java.util.Iterator; -import java.util.LinkedHashSet; - -import javax.annotation.Nullable; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.craftbukkit.v1_10_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_10_R1.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_10_R1.inventory.CraftItemStack; -import org.bukkit.craftbukkit.v1_10_R1.entity.CraftLivingEntity; -import org.bukkit.entity.Entity; -import org.bukkit.inventory.ItemStack; - -import ch.njol.skript.Skript; -import ch.njol.skript.classes.Changer; -import ch.njol.skript.classes.ClassInfo; -import ch.njol.skript.classes.Parser; -import ch.njol.skript.classes.Serializer; -import ch.njol.skript.lang.ParseContext; -import ch.njol.skript.registrations.Classes; -import ch.njol.util.coll.CollectionUtils; -import ch.njol.yggdrasil.Fields; -import net.minecraft.server.v1_10_R1.BlockPosition; -import net.minecraft.server.v1_10_R1.EntityInsentient; -import net.minecraft.server.v1_10_R1.IBlockData; -import net.minecraft.server.v1_10_R1.Item; -import net.minecraft.server.v1_10_R1.MinecraftKey; -import net.minecraft.server.v1_10_R1.MojangsonParseException; -import net.minecraft.server.v1_10_R1.MojangsonParser; -import net.minecraft.server.v1_10_R1.NBTBase; -import net.minecraft.server.v1_10_R1.NBTCompressedStreamTools; -import net.minecraft.server.v1_10_R1.NBTTagByte; -import net.minecraft.server.v1_10_R1.NBTTagCompound; -import net.minecraft.server.v1_10_R1.NBTTagDouble; -import net.minecraft.server.v1_10_R1.NBTTagFloat; -import net.minecraft.server.v1_10_R1.NBTTagInt; -import net.minecraft.server.v1_10_R1.NBTTagList; -import net.minecraft.server.v1_10_R1.NBTTagLong; -import net.minecraft.server.v1_10_R1.NBTTagShort; -import net.minecraft.server.v1_10_R1.NBTTagString; -import net.minecraft.server.v1_10_R1.PathfinderGoal; -import net.minecraft.server.v1_10_R1.PathfinderGoalSelector; -import net.minecraft.server.v1_10_R1.TileEntity; -import net.minecraft.server.v1_10_R1.World; -import net.minecraft.server.v1_10_R1.EntityLiving; - -public class NMS_v1_10_R1 implements NMSInterface { - - @Override - public Object getNBTTag(Object compound, String tag) { - if (compound instanceof NBTTagCompound) { - return ((NBTTagCompound) compound).get(tag); - } - return null; - } - - @Override - public void setNBTTag(Object compound, String tag, Object toSet) { - if (compound instanceof NBTTagCompound && (toSet instanceof NBTBase || toSet instanceof Number || toSet instanceof String)) { - NBTBase converted = null; - if (toSet instanceof Number) { - converted = convertToNBT((Number) toSet); - } else if (toSet instanceof String) { - converted = convertToNBT((String) toSet); - } else { //Already an NBTBase - converted = (NBTBase) toSet; //No need to convert anything - } - ((NBTTagCompound) compound).set(tag, converted); - } - } - - @Override - public void removeNBTTag(Object compound, String tag) { - if (compound instanceof NBTTagCompound) { - ((NBTTagCompound) compound).remove(tag); - } - } - - @Override - public byte getTypeId(Object nbtBase) { - if (nbtBase instanceof NBTBase) { - return ((NBTBase) nbtBase).getTypeId(); - } - return 0; - } - - @Override - public Object getNBTTagValue(Object compound, String tag, byte typeId) { - if (compound instanceof NBTTagCompound) { - switch (typeId) { - case 1: - return ((NBTTagCompound) compound).getByte(tag); - case 2: - return ((NBTTagCompound) compound).getShort(tag); - case 3: - return ((NBTTagCompound) compound).getInt(tag); - case 4: - return ((NBTTagCompound) compound).getLong(tag); - case 5: - return ((NBTTagCompound) compound).getFloat(tag); - case 6: - return ((NBTTagCompound) compound).getDouble(tag); - case 7: //Byte array, only used in chunk files. Also doesn't have support for the MojangsonParser. - break; - case 8: - return ((NBTTagCompound) compound).getString(tag); - case 9: - int i; - NBTTagList list = null; - for (i = 1; i <= 11; i++) { //To get a list I need to know the type of the tags it contains inside, - //since I can't predict what type the list will have, I just loop all of the IDs until I find a non-empty list. - list = ((NBTTagCompound) compound).getList(tag, i); //Try to get the list with the ID "loop-number". - if (!list.isEmpty()) { //If list is not empty. - break; //Stop loop. - } - } - return list; //May be null - case 10: - return ((NBTTagCompound) compound).getCompound(tag); - case 11: //Integer array, this one is only used on the chunk files (and maybe schematic files?). - return ((NBTTagCompound) compound).getIntArray(tag); - default: //This should never happen, but it's better to have this just in case it spills errors everywhere. - break; - } - } - return null; - } - - @Override - public void addToCompound(Object compound, Object toAdd) { - if (compound instanceof NBTTagCompound && toAdd instanceof NBTTagCompound) { - ((NBTTagCompound) compound).a((NBTTagCompound) toAdd); - } - } - - @Override - public void removeFromCompound(Object compound, String ... toRemove) { - if (compound instanceof NBTTagCompound) { - for (String s : toRemove) { - ((NBTTagCompound) compound).remove(s); - } - } - } - - @Override - public NBTTagCompound parseRawNBT(String rawNBT) { - NBTTagCompound parsedNBT = null; - try { - parsedNBT = MojangsonParser.parse(rawNBT); - } catch (MojangsonParseException ex) { - Skript.warning("Error when parsing NBT - " + ex.getMessage()); - return null; - } - return parsedNBT; - } - - @Override - public Object[] getContents(Object nbtList) { - if (nbtList instanceof NBTTagList) { - Object[] contents = new Object[((NBTTagList) nbtList).size()]; - for (int i = 0; i < ((NBTTagList) nbtList).size(); i++) { - if (getIndex(nbtList, i) != null) { - contents[i] = getIndex(nbtList, i); - } - } - return contents; - } - return null; - } - - @Override - public void addToList(Object nbtList, Object toAdd) { - if (nbtList instanceof NBTTagList && toAdd instanceof NBTBase) { - ((NBTTagList) nbtList).add((NBTBase) toAdd); - } - } - - @Override - public void removeFromList(Object nbtList, int index) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - ((NBTTagList) nbtList).remove(index); - } - } - - @Override - public void setIndex(Object nbtList, int index, Object toSet) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - if (toSet instanceof NBTBase) { - ((NBTTagList) nbtList).a(index, (NBTBase) toSet); - } else if (toSet instanceof Number) { - ((NBTTagList) nbtList).a(index, convertToNBT((Number) toSet)); - } else if (toSet instanceof String) { - ((NBTTagList) nbtList).a(index, convertToNBT((String) toSet)); - } - } - } - - @Override - public Object getIndex(Object nbtList, int index) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - NBTBase value = ((NBTTagList) nbtList).h(index); - if (value instanceof NBTTagByte) { - return ((NBTTagByte) value).g(); //Byte stored inside a NBTNumber - } else if (value instanceof NBTTagShort) { - return ((NBTTagShort) value).f(); //Short inside a NBTNumber - } else if (value instanceof NBTTagInt) { - return ((NBTTagInt) value).e(); //Integer inside a NBTNumber - } else if (value instanceof NBTTagLong) { - return ((NBTTagLong) value).d(); //Long inside a NBTNumber - } else if (value instanceof NBTTagFloat) { - return ((NBTTagFloat) value).i(); //Float inside a NBTNumber - } else if (value instanceof NBTTagDouble) { - return ((NBTTagDouble) value).h(); //Double inside a NBTNumber - } else if (value instanceof NBTTagString) { - return ((NBTTagString) value).c_(); //String inside the NBTTagString - } else if (value instanceof NBTBase) { - return value; //No need to convert this - } - } - return null; - } - - @Override - public void clearPathfinderGoals(Entity entity) { - EntityInsentient nmsEnt = (EntityInsentient) ((CraftEntity) entity).getHandle(); - ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, nmsEnt.goalSelector)).clear(); - ((LinkedHashSet) ReflectionUtils.getField("c", PathfinderGoalSelector.class, nmsEnt.goalSelector)).clear(); - ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, nmsEnt.targetSelector)).clear(); - ((LinkedHashSet) ReflectionUtils.getField("c", PathfinderGoalSelector.class, nmsEnt.targetSelector)).clear(); - } - - @Override - public void removePathfinderGoal(Object entity, Class goalClass, boolean isTargetSelector) { - if (entity instanceof EntityInsentient) { - ((EntityInsentient) entity).setGoalTarget(null); - if (isTargetSelector) { - Iterator goals = ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, ((EntityInsentient) entity).targetSelector)).iterator(); - while (goals.hasNext()) { - Object goal = goals.next(); - if (ReflectionUtils.getField("a", goal.getClass(), goal).getClass() == goalClass) { - goals.remove(); - } - } - } else { - Iterator goals = ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, ((EntityInsentient) entity).goalSelector)).iterator(); - while (goals.hasNext()) { - Object goal = goals.next(); - if (ReflectionUtils.getField("a", goal.getClass(), goal).getClass() == goalClass) { - goals.remove(); - } - } - } - } - } - - @Override - public void addPathfinderGoal(Object entity, int priority, Object goal, boolean isTargetSelector) { - if (entity instanceof EntityInsentient && goal instanceof PathfinderGoal) { - if (isTargetSelector) - ((EntityInsentient) entity).targetSelector.a(priority, (PathfinderGoal) goal); - else - ((EntityInsentient) entity).goalSelector.a(priority, (PathfinderGoal) goal); - } - } - - @Override - public void registerCompoundClassInfo() { - Classes.registerClass(new ClassInfo(NBTTagCompound.class, "compound").user("((nbt)?( ?tag)?) ?compounds?").name("NBT Compound").changer(new Changer() { - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) { - return CollectionUtils.array(String.class, NBTTagCompound.class); - } - return null; - } - - @Override - public void change(NBTTagCompound[] NBT, @Nullable Object[] delta, ChangeMode mode) { - if (mode == ChangeMode.ADD) { - if (delta[0] instanceof String) { - NBTTagCompound parsedNBT = parseRawNBT((String) delta[0]); - addToCompound(NBT[0], parsedNBT); - } else { - addToCompound(NBT[0], delta[0]); - } - } else if (mode == ChangeMode.REMOVE) { - if (delta[0] instanceof NBTTagCompound) - return; - for (Object s : delta) { - NBT[0].remove((String) s); - } - } - } - }).parser(new Parser() { - - @Override - public String getVariableNamePattern() { - return ".+"; - } - - @Override - @Nullable - public NBTTagCompound parse(String rawNBT, ParseContext context) { - if (rawNBT.startsWith("nbt:{") && rawNBT.endsWith("}")) { - NBTTagCompound NBT = parseRawNBT(rawNBT.substring(4)); - return NBT; - } - return null; - } - - @Override - public String toString(NBTTagCompound compound, int arg1) { - return compound.toString(); - } - - @Override - public String toVariableNameString(NBTTagCompound compound) { - return compound.toString(); - } - }).serializer(new Serializer() { - - @Override - public Fields serialize(NBTTagCompound compound) throws NotSerializableException { - Fields f = new Fields(); - f.putObject("asString", compound.toString()); - return f; - } - - @Override - public void deserialize(NBTTagCompound compound, Fields f) throws StreamCorruptedException, NotSerializableException { - assert false; - } - - @Override - protected boolean canBeInstantiated() { - return false; - } - - @Override - protected NBTTagCompound deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { - String raw = fields.getObject("asString", String.class); - NBTTagCompound compound = parseRawNBT(raw); - if (compound == null) { - throw new StreamCorruptedException("Unable to parse NBT from a variable: " + raw); - } - return compound; - } - - @Override - @Nullable - public NBTTagCompound deserialize(String s) { - NBTTagCompound compound = parseRawNBT(s); - return compound; - } - - @Override - public boolean mustSyncDeserialization() { - return true; - } - })); - - } - - @Override - public void registerNBTListClassInfo() { - Classes.registerClass(new ClassInfo(NBTTagList.class, "nbtlist").user("nbt ?list ?(tag)?").name("NBT List").changer(new Changer() { - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD) { - return CollectionUtils.array(Byte.class, Short.class, Integer.class, Long.class, Float.class, Double.class, String.class, NBTTagCompound.class, NBTTagList.class); - } - return null; - } - - @Override - public void change(NBTTagList[] nbtList, @Nullable Object[] delta, ChangeMode mode) { - if (delta.length == 0) - return; - if (delta[0] instanceof Number) { - addToList(nbtList[0], convertToNBT((Number) delta[0])); - } else if (delta[0] instanceof String) { - addToList(nbtList[0], convertToNBT((String) delta[0])); - } else if (delta[0] instanceof NBTBase) { - addToList(nbtList[0], delta[0]); - } - } - }).parser(new Parser() { - - @Override - public String getVariableNamePattern() { - return ".+"; - } - - @Override - @Nullable - public NBTTagList parse(String listString, ParseContext context) { - if ((listString.startsWith("nbt:[") || listString.startsWith("nbtlist:[")) && listString.endsWith("]")) { - int substring; - if (listString.startsWith("nbt:[")) { - substring = 4; - } else { // "nbtlist:[WHATEVER]" - substring = 8; - } - NBTTagCompound tempNBT = parseRawNBT("{temp:" + listString.substring(substring) + "}"); - NBTTagList parsedList = (NBTTagList) tempNBT.get("temp"); - return parsedList; - } - return null; - } - - @Override - public String toString(NBTTagList nbtList, int arg1) { - return nbtList.toString(); - } - - @Override - public String toVariableNameString(NBTTagList nbtList) { - return nbtList.toString(); - } - }).serializer(new Serializer() { - - @Override - public Fields serialize(NBTTagList nbtList) throws NotSerializableException { - Fields f = new Fields(); - f.putObject("asString", nbtList.toString()); - return f; - } - - @Override - public void deserialize(NBTTagList nbtList, Fields f) throws StreamCorruptedException, NotSerializableException { - assert false; - } - - @Override - protected boolean canBeInstantiated() { - return false; - } - - @Override - protected NBTTagList deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { - String s = fields.getObject("asString", String.class); - NBTTagCompound tempNBT = parseRawNBT("{temp:" + s + "}"); - if (tempNBT == null || !tempNBT.hasKey("temp")) { - throw new StreamCorruptedException("Unable to parse NBT list from a variable: " + s); - } - NBTTagList nbtList = (NBTTagList) tempNBT.get("temp"); - return nbtList; - } - - @Override - @Nullable - public NBTTagList deserialize(String s) { - NBTTagCompound tempNBT = parseRawNBT("{temp:" + s + "}"); - NBTTagList nbtList = (NBTTagList) tempNBT.get("temp"); - return nbtList; - } - - @Override - public boolean mustSyncDeserialization() { - return true; - } - })); - } - - @Override - public NBTTagCompound getEntityNBT(Entity entity) { - net.minecraft.server.v1_10_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - NBTTagCompound NBT = new NBTTagCompound(); - nmsEntity.e(NBT); - return NBT; - } - - @Override - public NBTTagCompound getTileNBT(Block block) { - NBTTagCompound NBT = new NBTTagCompound(); - World nmsWorld = ((CraftWorld) block.getWorld()).getHandle(); - TileEntity tileEntity = nmsWorld.getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ())); - if (tileEntity == null) - return null; - tileEntity.save(NBT); - return NBT; - } - - @Override - public NBTTagCompound getItemNBT(ItemStack itemStack) { - if (itemStack == null || itemStack.getType() == Material.AIR) - return null; - NBTTagCompound itemNBT = CraftItemStack.asNMSCopy(itemStack).getTag(); - if (itemNBT == null) - itemNBT = new NBTTagCompound(); - return itemNBT; - } - - @Override - public void setEntityNBT(Entity entity, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - net.minecraft.server.v1_10_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.f((NBTTagCompound) newCompound); - } - } - - @Override - public void setTileNBT(Block block, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - World nmsWorld = ((CraftWorld) block.getWorld()).getHandle(); - TileEntity tileEntity = nmsWorld.getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ())); - if (tileEntity == null) - return; - tileEntity.a((NBTTagCompound) newCompound); - tileEntity.update(); - IBlockData tileEntType = nmsWorld.getType(new BlockPosition(block.getX(), block.getY(), block.getZ())); - nmsWorld.notify(tileEntity.getPosition(), tileEntType, tileEntType, 3); - } - } - - @Override - public ItemStack getItemWithNBT(ItemStack itemStack, Object compound) { - net.minecraft.server.v1_10_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); - if (compound instanceof NBTTagCompound && itemStack != null) { - if (itemStack.getType() == Material.AIR) - return null; - if (((NBTTagCompound) compound).isEmpty()) - return itemStack; - nmsItem.setTag((NBTTagCompound) compound); - ItemStack newItem = CraftItemStack.asBukkitCopy(nmsItem); - return newItem; - } else if (compound == null) { - nmsItem.setTag(null); - ItemStack newItem = CraftItemStack.asBukkitCopy(nmsItem); - return newItem; - } - return itemStack; - } - - @Override - public NBTTagCompound getFileNBT(File file) { - FileInputStream fis = null; - try { - fis = new FileInputStream(file); - } catch (FileNotFoundException ex) { - return null; //File doesn't exist. - } - NBTTagCompound fileNBT = null; - try { - fileNBT = NBTCompressedStreamTools.a(fis); - fis.close(); - } catch (IOException ex) { - if (ex instanceof EOFException) { - ; //Nothing. - } else { - ex.printStackTrace(); - } - } - return fileNBT; - } - - @Override - public void setFileNBT(File file, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - OutputStream os = null; - try { - os = new FileOutputStream(file); - } catch (FileNotFoundException ex) { - ex.printStackTrace(); - } - try { - NBTCompressedStreamTools.a((NBTTagCompound) newCompound, os); - os.close(); - } catch (IOException ex) { - if (ex instanceof EOFException) { - ; //Ignore, just end of the file - } else { - ex.printStackTrace(); - } - } - } - } - - @Override - public NBTBase convertToNBT(Number number) { - if (number instanceof Byte) { - return new NBTTagByte((byte) number); - } else if (number instanceof Short) { - return new NBTTagShort((short) number); - } else if (number instanceof Integer) { - return new NBTTagInt((int) number); - } else if (number instanceof Long) { - return new NBTTagLong((long) number); - } else if (number instanceof Float) { - return new NBTTagFloat((float) number); - } else if (number instanceof Double) { - return new NBTTagDouble((double) number); - } - return null; - } - - @Override - public NBTTagString convertToNBT(String string) { - return new NBTTagString(string); - } - - @Override - public String getMCId(ItemStack itemStack) { - net.minecraft.server.v1_10_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); - MinecraftKey mcKey = Item.REGISTRY.b(nmsItem.getItem()); - return mcKey.toString(); - } - - @Override - public ItemStack getItemFromMcId(String mcId) { - MinecraftKey mcKey = new MinecraftKey(mcId); - Item nmsItem = (Item) Item.REGISTRY.get(mcKey); - return CraftItemStack.asNewCraftStack(nmsItem); - } - - @Override - public boolean getNoClip(Entity entity) { - net.minecraft.server.v1_10_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.noclip; - } - - @Override - public void setNoClip(Entity entity, boolean noclip) { - net.minecraft.server.v1_10_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.noclip = noclip; - } - - @Override - public boolean getFireProof(Entity entity) { - net.minecraft.server.v1_10_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isFireProof(); - } - - @Override - public void setFireProof(Entity entity, boolean fireProof) { - net.minecraft.server.v1_10_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - ReflectionUtils.setField("fireProof", nmsEntity.getClass(), nmsEntity, fireProof); - } - - /* - @SuppressWarnings("unchecked") - @Override - public ItemStack[] getEndermanBlocks(Entity enderman) { - EntityEnderman nmsEnder = ((CraftEnderman) enderman).getHandle(); - Set nmsBlocks = (Set) ReflectionUtils.getField("c", EntityEnderman.class, nmsEnder); - ItemStack[] items = new ItemStack[nmsBlocks.size()]; - int i = 0; - for (net.minecraft.server.v1_10_R1.Block nmsBlock : nmsBlocks) { - IBlockData nmsBlockData = nmsBlock.getBlockData(); - int dataValue = nmsBlock.toLegacyData(nmsBlockData); - net.minecraft.server.v1_10_R1.ItemStack nmsItem = new net.minecraft.server.v1_10_R1.ItemStack(nmsBlock, 1, dataValue); - ItemStack bukkitItem = CraftItemStack.asCraftMirror(nmsItem); - items[i] = bukkitItem; - i++; - } - return items; - } - - @SuppressWarnings("unchecked") - @Override - public void setEndermanBlocks(Entity enderman, ItemStack... blocks) { - EntityEnderman nmsEnder = ((CraftEnderman) enderman).getHandle(); - Set nmsBlocks = (Set) ReflectionUtils.getField("c", EntityEnderman.class, nmsEnder); - for (ItemStack block : blocks) { - if (!block.getType().isBlock()) - return; - // TODO Figure out how to get a Blocks from a Bukkit ItemStack - // Blocks.class has a PRIVATE method to get from a MC id. - } - } - */ - - @Override - public Location getLastLocation(Entity entity) { - net.minecraft.server.v1_10_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - org.bukkit.World world = nmsEntity.world.getWorld(); - Location lastEntLoc = new Location(world, nmsEntity.M, nmsEntity.N, nmsEntity.O); - return lastEntLoc; - } - - @Override - public float getEntityStepLength(Entity entity) { - net.minecraft.server.v1_10_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.P; - } - - @Override - public void setEntityStepLength(Entity entity, float length) { - net.minecraft.server.v1_10_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.P = length; - } - - @Override - public boolean getElytraGlideState(Entity entity) { - EntityLiving nmsEntity = ((CraftLivingEntity) entity).getHandle(); - return nmsEntity.getFlag(7); - } - - public void setElytraGlideState(Entity entity, boolean glide) { - EntityLiving nmsEntity = ((CraftLivingEntity) entity).getHandle(); - nmsEntity.setFlag(7, glide); - } - - public boolean getNoGravity(Entity entity) { - net.minecraft.server.v1_10_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isNoGravity(); - } - - public void setNoGravity(Entity entity, boolean noGravity) { - net.minecraft.server.v1_10_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setNoGravity(noGravity); - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/util/NMS_v1_11_R1.java b/src/me/TheBukor/SkStuff/util/NMS_v1_11_R1.java deleted file mode 100644 index bd9a6a6..0000000 --- a/src/me/TheBukor/SkStuff/util/NMS_v1_11_R1.java +++ /dev/null @@ -1,732 +0,0 @@ -package me.TheBukor.SkStuff.util; - -import java.io.EOFException; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.NotSerializableException; -import java.io.OutputStream; -import java.io.StreamCorruptedException; -import java.util.Iterator; -import java.util.LinkedHashSet; - -import javax.annotation.Nullable; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.craftbukkit.v1_11_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_11_R1.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftItemStack; -import org.bukkit.craftbukkit.v1_11_R1.entity.CraftLivingEntity; -import org.bukkit.entity.Entity; -import org.bukkit.inventory.ItemStack; - -import ch.njol.skript.Skript; -import ch.njol.skript.classes.Changer; -import ch.njol.skript.classes.ClassInfo; -import ch.njol.skript.classes.Parser; -import ch.njol.skript.classes.Serializer; -import ch.njol.skript.lang.ParseContext; -import ch.njol.skript.registrations.Classes; -import ch.njol.util.coll.CollectionUtils; -import ch.njol.yggdrasil.Fields; -import net.minecraft.server.v1_11_R1.BlockPosition; -import net.minecraft.server.v1_11_R1.EntityInsentient; -import net.minecraft.server.v1_11_R1.IBlockData; -import net.minecraft.server.v1_11_R1.Item; -import net.minecraft.server.v1_11_R1.MinecraftKey; -import net.minecraft.server.v1_11_R1.MojangsonParseException; -import net.minecraft.server.v1_11_R1.MojangsonParser; -import net.minecraft.server.v1_11_R1.NBTBase; -import net.minecraft.server.v1_11_R1.NBTCompressedStreamTools; -import net.minecraft.server.v1_11_R1.NBTTagByte; -import net.minecraft.server.v1_11_R1.NBTTagCompound; -import net.minecraft.server.v1_11_R1.NBTTagDouble; -import net.minecraft.server.v1_11_R1.NBTTagFloat; -import net.minecraft.server.v1_11_R1.NBTTagInt; -import net.minecraft.server.v1_11_R1.NBTTagList; -import net.minecraft.server.v1_11_R1.NBTTagLong; -import net.minecraft.server.v1_11_R1.NBTTagShort; -import net.minecraft.server.v1_11_R1.NBTTagString; -import net.minecraft.server.v1_11_R1.PathfinderGoal; -import net.minecraft.server.v1_11_R1.PathfinderGoalSelector; -import net.minecraft.server.v1_11_R1.TileEntity; -import net.minecraft.server.v1_11_R1.World; -import net.minecraft.server.v1_11_R1.EntityLiving; - -public class NMS_v1_11_R1 implements NMSInterface { - - @Override - public Object getNBTTag(Object compound, String tag) { - if (compound instanceof NBTTagCompound) { - return ((NBTTagCompound) compound).get(tag); - } - return null; - } - - @Override - public void setNBTTag(Object compound, String tag, Object toSet) { - if (compound instanceof NBTTagCompound && (toSet instanceof NBTBase || toSet instanceof Number || toSet instanceof String)) { - NBTBase converted = null; - if (toSet instanceof Number) { - converted = convertToNBT((Number) toSet); - } else if (toSet instanceof String) { - converted = convertToNBT((String) toSet); - } else { //Already an NBTBase - converted = (NBTBase) toSet; //No need to convert anything - } - ((NBTTagCompound) compound).set(tag, converted); - } - } - - @Override - public void removeNBTTag(Object compound, String tag) { - if (compound instanceof NBTTagCompound) { - ((NBTTagCompound) compound).remove(tag); - } - } - - @Override - public byte getTypeId(Object nbtBase) { - if (nbtBase instanceof NBTBase) { - return ((NBTBase) nbtBase).getTypeId(); - } - return 0; - } - - @Override - public Object getNBTTagValue(Object compound, String tag, byte typeId) { - if (compound instanceof NBTTagCompound) { - switch (typeId) { - case 1: - return ((NBTTagCompound) compound).getByte(tag); - case 2: - return ((NBTTagCompound) compound).getShort(tag); - case 3: - return ((NBTTagCompound) compound).getInt(tag); - case 4: - return ((NBTTagCompound) compound).getLong(tag); - case 5: - return ((NBTTagCompound) compound).getFloat(tag); - case 6: - return ((NBTTagCompound) compound).getDouble(tag); - case 7: //Byte array, only used in chunk files. Also doesn't have support for the MojangsonParser. - break; - case 8: - return ((NBTTagCompound) compound).getString(tag); - case 9: - int i; - NBTTagList list = null; - for (i = 1; i <= 11; i++) { //To get a list I need to know the type of the tags it contains inside, - //since I can't predict what type the list will have, I just loop all of the IDs until I find a non-empty list. - list = ((NBTTagCompound) compound).getList(tag, i); //Try to get the list with the ID "loop-number". - if (!list.isEmpty()) { //If list is not empty. - break; //Stop loop. - } - } - return list; //May be null - case 10: - return ((NBTTagCompound) compound).getCompound(tag); - case 11: //Integer array, this one is only used on the chunk files (and maybe schematic files?). - return ((NBTTagCompound) compound).getIntArray(tag); - default: //This should never happen, but it's better to have this just in case it spills errors everywhere. - break; - } - } - return null; - } - - @Override - public void addToCompound(Object compound, Object toAdd) { - if (compound instanceof NBTTagCompound && toAdd instanceof NBTTagCompound) { - ((NBTTagCompound) compound).a((NBTTagCompound) toAdd); - } - } - - @Override - public void removeFromCompound(Object compound, String ... toRemove) { - if (compound instanceof NBTTagCompound) { - for (String s : toRemove) { - ((NBTTagCompound) compound).remove(s); - } - } - } - - @Override - public NBTTagCompound parseRawNBT(String rawNBT) { - NBTTagCompound parsedNBT = null; - try { - parsedNBT = MojangsonParser.parse(rawNBT); - } catch (MojangsonParseException ex) { - Skript.warning("Error when parsing NBT - " + ex.getMessage()); - return null; - } - return parsedNBT; - } - - @Override - public Object[] getContents(Object nbtList) { - if (nbtList instanceof NBTTagList) { - Object[] contents = new Object[((NBTTagList) nbtList).size()]; - for (int i = 0; i < ((NBTTagList) nbtList).size(); i++) { - if (getIndex(nbtList, i) != null) { - contents[i] = getIndex(nbtList, i); - } - } - return contents; - } - return null; - } - - @Override - public void addToList(Object nbtList, Object toAdd) { - if (nbtList instanceof NBTTagList && toAdd instanceof NBTBase) { - ((NBTTagList) nbtList).add((NBTBase) toAdd); - } - } - - @Override - public void removeFromList(Object nbtList, int index) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - ((NBTTagList) nbtList).remove(index); - } - } - - @Override - public void setIndex(Object nbtList, int index, Object toSet) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - if (toSet instanceof NBTBase) { - ((NBTTagList) nbtList).a(index, (NBTBase) toSet); - } else if (toSet instanceof Number) { - ((NBTTagList) nbtList).a(index, convertToNBT((Number) toSet)); - } else if (toSet instanceof String) { - ((NBTTagList) nbtList).a(index, convertToNBT((String) toSet)); - } - } - } - - @Override - public Object getIndex(Object nbtList, int index) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - NBTBase value = ((NBTTagList) nbtList).h(index); - if (value instanceof NBTTagByte) { - return ((NBTTagByte) value).g(); //Byte stored inside a NBTNumber - } else if (value instanceof NBTTagShort) { - return ((NBTTagShort) value).f(); //Short inside a NBTNumber - } else if (value instanceof NBTTagInt) { - return ((NBTTagInt) value).e(); //Integer inside a NBTNumber - } else if (value instanceof NBTTagLong) { - return ((NBTTagLong) value).d(); //Long inside a NBTNumber - } else if (value instanceof NBTTagFloat) { - return ((NBTTagFloat) value).i(); //Float inside a NBTNumber - } else if (value instanceof NBTTagDouble) { - return ((NBTTagDouble) value).asDouble(); //Double inside a NBTNumber - } else if (value instanceof NBTTagString) { - return ((NBTTagString) value).c_(); //String inside the NBTTagString - } else if (value instanceof NBTBase) { - return value; //No need to convert this - } - } - return null; - } - - @Override - public void clearPathfinderGoals(Entity entity) { - EntityInsentient nmsEnt = (EntityInsentient) ((CraftEntity) entity).getHandle(); - ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, nmsEnt.goalSelector)).clear(); - ((LinkedHashSet) ReflectionUtils.getField("c", PathfinderGoalSelector.class, nmsEnt.goalSelector)).clear(); - ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, nmsEnt.targetSelector)).clear(); - ((LinkedHashSet) ReflectionUtils.getField("c", PathfinderGoalSelector.class, nmsEnt.targetSelector)).clear(); - } - - @Override - public void removePathfinderGoal(Object entity, Class goalClass, boolean isTargetSelector) { - if (entity instanceof EntityInsentient) { - ((EntityInsentient) entity).setGoalTarget(null); - if (isTargetSelector) { - Iterator goals = ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, ((EntityInsentient) entity).targetSelector)).iterator(); - while (goals.hasNext()) { - Object goal = goals.next(); - if (ReflectionUtils.getField("a", goal.getClass(), goal).getClass() == goalClass) { - goals.remove(); - } - } - } else { - Iterator goals = ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, ((EntityInsentient) entity).goalSelector)).iterator(); - while (goals.hasNext()) { - Object goal = goals.next(); - if (ReflectionUtils.getField("a", goal.getClass(), goal).getClass() == goalClass) { - goals.remove(); - } - } - } - } - } - - @Override - public void addPathfinderGoal(Object entity, int priority, Object goal, boolean isTargetSelector) { - if (entity instanceof EntityInsentient && goal instanceof PathfinderGoal) { - if (isTargetSelector) - ((EntityInsentient) entity).targetSelector.a(priority, (PathfinderGoal) goal); - else - ((EntityInsentient) entity).goalSelector.a(priority, (PathfinderGoal) goal); - } - } - - @Override - public void registerCompoundClassInfo() { - Classes.registerClass(new ClassInfo(NBTTagCompound.class, "compound").user("((nbt)?( ?tag)?) ?compounds?").name("NBT Compound").changer(new Changer() { - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) { - return CollectionUtils.array(String.class, NBTTagCompound.class); - } - return null; - } - - @Override - public void change(NBTTagCompound[] NBT, @Nullable Object[] delta, ChangeMode mode) { - if (mode == ChangeMode.ADD) { - if (delta[0] instanceof String) { - NBTTagCompound parsedNBT = parseRawNBT((String) delta[0]); - addToCompound(NBT[0], parsedNBT); - } else { - addToCompound(NBT[0], delta[0]); - } - } else if (mode == ChangeMode.REMOVE) { - if (delta[0] instanceof NBTTagCompound) - return; - for (Object s : delta) { - NBT[0].remove((String) s); - } - } - } - }).parser(new Parser() { - - @Override - public String getVariableNamePattern() { - return ".+"; - } - - @Override - @Nullable - public NBTTagCompound parse(String rawNBT, ParseContext context) { - if (rawNBT.startsWith("nbt:{") && rawNBT.endsWith("}")) { - NBTTagCompound NBT = parseRawNBT(rawNBT.substring(4)); - return NBT; - } - return null; - } - - @Override - public String toString(NBTTagCompound compound, int arg1) { - return compound.toString(); - } - - @Override - public String toVariableNameString(NBTTagCompound compound) { - return compound.toString(); - } - }).serializer(new Serializer() { - - @Override - public Fields serialize(NBTTagCompound compound) throws NotSerializableException { - Fields f = new Fields(); - f.putObject("asString", compound.toString()); - return f; - } - - @Override - public void deserialize(NBTTagCompound compound, Fields f) throws StreamCorruptedException, NotSerializableException { - assert false; - } - - @Override - protected boolean canBeInstantiated() { - return false; - } - - @Override - protected NBTTagCompound deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { - String raw = fields.getObject("asString", String.class); - NBTTagCompound compound = parseRawNBT(raw); - if (compound == null) { - throw new StreamCorruptedException("Unable to parse NBT from a variable: " + raw); - } - return compound; - } - - @Override - @Nullable - public NBTTagCompound deserialize(String s) { - NBTTagCompound compound = parseRawNBT(s); - return compound; - } - - @Override - public boolean mustSyncDeserialization() { - return true; - } - })); - - } - - @Override - public void registerNBTListClassInfo() { - Classes.registerClass(new ClassInfo(NBTTagList.class, "nbtlist").user("nbt ?list ?(tag)?").name("NBT List").changer(new Changer() { - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD) { - return CollectionUtils.array(Byte.class, Short.class, Integer.class, Long.class, Float.class, Double.class, String.class, NBTTagCompound.class, NBTTagList.class); - } - return null; - } - - @Override - public void change(NBTTagList[] nbtList, @Nullable Object[] delta, ChangeMode mode) { - if (delta.length == 0) - return; - if (delta[0] instanceof Number) { - addToList(nbtList[0], convertToNBT((Number) delta[0])); - } else if (delta[0] instanceof String) { - addToList(nbtList[0], convertToNBT((String) delta[0])); - } else if (delta[0] instanceof NBTBase) { - addToList(nbtList[0], delta[0]); - } - } - }).parser(new Parser() { - - @Override - public String getVariableNamePattern() { - return ".+"; - } - - @Override - @Nullable - public NBTTagList parse(String listString, ParseContext context) { - if ((listString.startsWith("nbt:[") || listString.startsWith("nbtlist:[")) && listString.endsWith("]")) { - int substring; - if (listString.startsWith("nbt:[")) { - substring = 4; - } else { // "nbtlist:[WHATEVER]" - substring = 8; - } - NBTTagCompound tempNBT = parseRawNBT("{temp:" + listString.substring(substring) + "}"); - NBTTagList parsedList = (NBTTagList) tempNBT.get("temp"); - return parsedList; - } - return null; - } - - @Override - public String toString(NBTTagList nbtList, int arg1) { - return nbtList.toString(); - } - - @Override - public String toVariableNameString(NBTTagList nbtList) { - return nbtList.toString(); - } - }).serializer(new Serializer() { - - @Override - public Fields serialize(NBTTagList nbtList) throws NotSerializableException { - Fields f = new Fields(); - f.putObject("asString", nbtList.toString()); - return f; - } - - @Override - public void deserialize(NBTTagList nbtList, Fields f) throws StreamCorruptedException, NotSerializableException { - assert false; - } - - @Override - protected boolean canBeInstantiated() { - return false; - } - - @Override - protected NBTTagList deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { - String s = fields.getObject("asString", String.class); - NBTTagCompound tempNBT = parseRawNBT("{temp:" + s + "}"); - if (tempNBT == null || !tempNBT.hasKey("temp")) { - throw new StreamCorruptedException("Unable to parse NBT list from a variable: " + s); - } - NBTTagList nbtList = (NBTTagList) tempNBT.get("temp"); - return nbtList; - } - - @Override - @Nullable - public NBTTagList deserialize(String s) { - NBTTagCompound tempNBT = parseRawNBT("{temp:" + s + "}"); - NBTTagList nbtList = (NBTTagList) tempNBT.get("temp"); - return nbtList; - } - - @Override - public boolean mustSyncDeserialization() { - return true; - } - })); - } - - @Override - public NBTTagCompound getEntityNBT(Entity entity) { - net.minecraft.server.v1_11_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - NBTTagCompound NBT = new NBTTagCompound(); - nmsEntity.e(NBT); - return NBT; - } - - @Override - public NBTTagCompound getTileNBT(Block block) { - NBTTagCompound NBT = new NBTTagCompound(); - World nmsWorld = ((CraftWorld) block.getWorld()).getHandle(); - TileEntity tileEntity = nmsWorld.getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ())); - if (tileEntity == null) - return null; - tileEntity.save(NBT); - return NBT; - } - - @Override - public NBTTagCompound getItemNBT(ItemStack itemStack) { - if (itemStack == null || itemStack.getType() == Material.AIR) - return null; - NBTTagCompound itemNBT = CraftItemStack.asNMSCopy(itemStack).getTag(); - if (itemNBT == null) - itemNBT = new NBTTagCompound(); - return itemNBT; - } - - @Override - public void setEntityNBT(Entity entity, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - net.minecraft.server.v1_11_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.f((NBTTagCompound) newCompound); - } - } - - @Override - public void setTileNBT(Block block, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - World nmsWorld = ((CraftWorld) block.getWorld()).getHandle(); - TileEntity tileEntity = nmsWorld.getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ())); - if (tileEntity == null) - return; - tileEntity.a((NBTTagCompound) newCompound); - tileEntity.update(); - IBlockData tileEntType = nmsWorld.getType(new BlockPosition(block.getX(), block.getY(), block.getZ())); - nmsWorld.notify(tileEntity.getPosition(), tileEntType, tileEntType, 3); - } - } - - @Override - public ItemStack getItemWithNBT(ItemStack itemStack, Object compound) { - net.minecraft.server.v1_11_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); - if (compound instanceof NBTTagCompound && itemStack != null) { - if (itemStack.getType() == Material.AIR) - return null; - if (((NBTTagCompound) compound).isEmpty()) - return itemStack; - nmsItem.setTag((NBTTagCompound) compound); - ItemStack newItem = CraftItemStack.asBukkitCopy(nmsItem); - return newItem; - } else if (compound == null) { - nmsItem.setTag(null); - ItemStack newItem = CraftItemStack.asBukkitCopy(nmsItem); - return newItem; - } - return itemStack; - } - - @Override - public NBTTagCompound getFileNBT(File file) { - FileInputStream fis = null; - try { - fis = new FileInputStream(file); - } catch (FileNotFoundException ex) { - return null; //File doesn't exist. - } - NBTTagCompound fileNBT = null; - try { - fileNBT = NBTCompressedStreamTools.a(fis); - fis.close(); - } catch (IOException ex) { - if (ex instanceof EOFException) { - ; //Nothing. - } else { - ex.printStackTrace(); - } - } - return fileNBT; - } - - @Override - public void setFileNBT(File file, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - OutputStream os = null; - try { - os = new FileOutputStream(file); - } catch (FileNotFoundException ex) { - ex.printStackTrace(); - } - try { - NBTCompressedStreamTools.a((NBTTagCompound) newCompound, os); - os.close(); - } catch (IOException ex) { - if (ex instanceof EOFException) { - ; //Ignore, just end of the file - } else { - ex.printStackTrace(); - } - } - } - } - - @Override - public NBTBase convertToNBT(Number number) { - if (number instanceof Byte) { - return new NBTTagByte((byte) number); - } else if (number instanceof Short) { - return new NBTTagShort((short) number); - } else if (number instanceof Integer) { - return new NBTTagInt((int) number); - } else if (number instanceof Long) { - return new NBTTagLong((long) number); - } else if (number instanceof Float) { - return new NBTTagFloat((float) number); - } else if (number instanceof Double) { - return new NBTTagDouble((double) number); - } - return null; - } - - @Override - public NBTTagString convertToNBT(String string) { - return new NBTTagString(string); - } - - @Override - public String getMCId(ItemStack itemStack) { - net.minecraft.server.v1_11_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); - MinecraftKey mcKey = Item.REGISTRY.b(nmsItem.getItem()); - return mcKey.toString(); - } - - @Override - public ItemStack getItemFromMcId(String mcId) { - MinecraftKey mcKey = new MinecraftKey(mcId); - Item nmsItem = (Item) Item.REGISTRY.get(mcKey); - return CraftItemStack.asNewCraftStack(nmsItem); - } - - @Override - public boolean getNoClip(Entity entity) { - net.minecraft.server.v1_11_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.noclip; - } - - @Override - public void setNoClip(Entity entity, boolean noclip) { - net.minecraft.server.v1_11_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.noclip = noclip; - } - - @Override - public boolean getFireProof(Entity entity) { - net.minecraft.server.v1_11_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isFireProof(); - } - - @Override - public void setFireProof(Entity entity, boolean fireProof) { - net.minecraft.server.v1_11_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - ReflectionUtils.setField("fireProof", nmsEntity.getClass(), nmsEntity, fireProof); - } - - /* - @SuppressWarnings("unchecked") - @Override - public ItemStack[] getEndermanBlocks(Entity enderman) { - EntityEnderman nmsEnder = ((CraftEnderman) enderman).getHandle(); - Set nmsBlocks = (Set) ReflectionUtils.getField("c", EntityEnderman.class, nmsEnder); - ItemStack[] items = new ItemStack[nmsBlocks.size()]; - int i = 0; - for (net.minecraft.server.v1_11_R1.Block nmsBlock : nmsBlocks) { - IBlockData nmsBlockData = nmsBlock.getBlockData(); - int dataValue = nmsBlock.toLegacyData(nmsBlockData); - net.minecraft.server.v1_11_R1.ItemStack nmsItem = new net.minecraft.server.v1_11_R1.ItemStack(nmsBlock, 1, dataValue); - ItemStack bukkitItem = CraftItemStack.asCraftMirror(nmsItem); - items[i] = bukkitItem; - i++; - } - return items; - } - - @SuppressWarnings("unchecked") - @Override - public void setEndermanBlocks(Entity enderman, ItemStack... blocks) { - EntityEnderman nmsEnder = ((CraftEnderman) enderman).getHandle(); - Set nmsBlocks = (Set) ReflectionUtils.getField("c", EntityEnderman.class, nmsEnder); - for (ItemStack block : blocks) { - if (!block.getType().isBlock()) - return; - // TODO Figure out how to get a Blocks from a Bukkit ItemStack - // Blocks.class has a PRIVATE method to get from a MC id. - } - } - */ - - @Override - public Location getLastLocation(Entity entity) { - net.minecraft.server.v1_11_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - org.bukkit.World world = nmsEntity.world.getWorld(); - Location lastEntLoc = new Location(world, nmsEntity.M, nmsEntity.N, nmsEntity.O); - return lastEntLoc; - } - - @Override - public float getEntityStepLength(Entity entity) { - net.minecraft.server.v1_11_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.P; - } - - @Override - public void setEntityStepLength(Entity entity, float length) { - net.minecraft.server.v1_11_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.P = length; - } - - @Override - public boolean getElytraGlideState(Entity entity) { - EntityLiving nmsEntity = ((CraftLivingEntity) entity).getHandle(); - return nmsEntity.getFlag(7); - } - - public void setElytraGlideState(Entity entity, boolean glide) { - EntityLiving nmsEntity = ((CraftLivingEntity) entity).getHandle(); - nmsEntity.setFlag(7, glide); - } - - public boolean getNoGravity(Entity entity) { - net.minecraft.server.v1_11_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isNoGravity(); - } - - public void setNoGravity(Entity entity, boolean noGravity) { - net.minecraft.server.v1_11_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setNoGravity(noGravity); - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/util/NMS_v1_12_R1.java b/src/me/TheBukor/SkStuff/util/NMS_v1_12_R1.java deleted file mode 100644 index bf95c68..0000000 --- a/src/me/TheBukor/SkStuff/util/NMS_v1_12_R1.java +++ /dev/null @@ -1,732 +0,0 @@ -package me.TheBukor.SkStuff.util; - -import java.io.EOFException; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.NotSerializableException; -import java.io.OutputStream; -import java.io.StreamCorruptedException; -import java.util.Iterator; -import java.util.LinkedHashSet; - -import javax.annotation.Nullable; - -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.craftbukkit.v1_12_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_12_R1.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_12_R1.inventory.CraftItemStack; -import org.bukkit.craftbukkit.v1_12_R1.entity.CraftLivingEntity; -import org.bukkit.entity.Entity; -import org.bukkit.inventory.ItemStack; - -import ch.njol.skript.Skript; -import ch.njol.skript.classes.Changer; -import ch.njol.skript.classes.ClassInfo; -import ch.njol.skript.classes.Parser; -import ch.njol.skript.classes.Serializer; -import ch.njol.skript.lang.ParseContext; -import ch.njol.skript.registrations.Classes; -import ch.njol.util.coll.CollectionUtils; -import ch.njol.yggdrasil.Fields; -import net.minecraft.server.v1_12_R1.BlockPosition; -import net.minecraft.server.v1_12_R1.EntityInsentient; -import net.minecraft.server.v1_12_R1.IBlockData; -import net.minecraft.server.v1_12_R1.Item; -import net.minecraft.server.v1_12_R1.MinecraftKey; -import net.minecraft.server.v1_12_R1.MojangsonParseException; -import net.minecraft.server.v1_12_R1.MojangsonParser; -import net.minecraft.server.v1_12_R1.NBTBase; -import net.minecraft.server.v1_12_R1.NBTCompressedStreamTools; -import net.minecraft.server.v1_12_R1.NBTTagByte; -import net.minecraft.server.v1_12_R1.NBTTagCompound; -import net.minecraft.server.v1_12_R1.NBTTagDouble; -import net.minecraft.server.v1_12_R1.NBTTagFloat; -import net.minecraft.server.v1_12_R1.NBTTagInt; -import net.minecraft.server.v1_12_R1.NBTTagList; -import net.minecraft.server.v1_12_R1.NBTTagLong; -import net.minecraft.server.v1_12_R1.NBTTagShort; -import net.minecraft.server.v1_12_R1.NBTTagString; -import net.minecraft.server.v1_12_R1.PathfinderGoal; -import net.minecraft.server.v1_12_R1.PathfinderGoalSelector; -import net.minecraft.server.v1_12_R1.TileEntity; -import net.minecraft.server.v1_12_R1.World; -import net.minecraft.server.v1_12_R1.EntityLiving; - -public class NMS_v1_12_R1 implements NMSInterface { - - @Override - public Object getNBTTag(Object compound, String tag) { - if (compound instanceof NBTTagCompound) { - return ((NBTTagCompound) compound).get(tag); - } - return null; - } - - @Override - public void setNBTTag(Object compound, String tag, Object toSet) { - if (compound instanceof NBTTagCompound && (toSet instanceof NBTBase || toSet instanceof Number || toSet instanceof String)) { - NBTBase converted = null; - if (toSet instanceof Number) { - converted = convertToNBT((Number) toSet); - } else if (toSet instanceof String) { - converted = convertToNBT((String) toSet); - } else { //Already an NBTBase - converted = (NBTBase) toSet; //No need to convert anything - } - ((NBTTagCompound) compound).set(tag, converted); - } - } - - @Override - public void removeNBTTag(Object compound, String tag) { - if (compound instanceof NBTTagCompound) { - ((NBTTagCompound) compound).remove(tag); - } - } - - @Override - public byte getTypeId(Object nbtBase) { - if (nbtBase instanceof NBTBase) { - return ((NBTBase) nbtBase).getTypeId(); - } - return 0; - } - - @Override - public Object getNBTTagValue(Object compound, String tag, byte typeId) { - if (compound instanceof NBTTagCompound) { - switch (typeId) { - case 1: - return ((NBTTagCompound) compound).getByte(tag); - case 2: - return ((NBTTagCompound) compound).getShort(tag); - case 3: - return ((NBTTagCompound) compound).getInt(tag); - case 4: - return ((NBTTagCompound) compound).getLong(tag); - case 5: - return ((NBTTagCompound) compound).getFloat(tag); - case 6: - return ((NBTTagCompound) compound).getDouble(tag); - case 7: //Byte array, only used in chunk files. Also doesn't have support for the MojangsonParser. - break; - case 8: - return ((NBTTagCompound) compound).getString(tag); - case 9: - int i; - NBTTagList list = null; - for (i = 1; i <= 11; i++) { //To get a list I need to know the type of the tags it contains inside, - //since I can't predict what type the list will have, I just loop all of the IDs until I find a non-empty list. - list = ((NBTTagCompound) compound).getList(tag, i); //Try to get the list with the ID "loop-number". - if (!list.isEmpty()) { //If list is not empty. - break; //Stop loop. - } - } - return list; //May be null - case 10: - return ((NBTTagCompound) compound).getCompound(tag); - case 11: //Integer array, this one is only used on the chunk files (and maybe schematic files?). - return ((NBTTagCompound) compound).getIntArray(tag); - default: //This should never happen, but it's better to have this just in case it spills errors everywhere. - break; - } - } - return null; - } - - @Override - public void addToCompound(Object compound, Object toAdd) { - if (compound instanceof NBTTagCompound && toAdd instanceof NBTTagCompound) { - ((NBTTagCompound) compound).a((NBTTagCompound) toAdd); - } - } - - @Override - public void removeFromCompound(Object compound, String ... toRemove) { - if (compound instanceof NBTTagCompound) { - for (String s : toRemove) { - ((NBTTagCompound) compound).remove(s); - } - } - } - - @Override - public NBTTagCompound parseRawNBT(String rawNBT) { - NBTTagCompound parsedNBT = null; - try { - parsedNBT = MojangsonParser.parse(rawNBT); - } catch (MojangsonParseException ex) { - Skript.warning("Error when parsing NBT - " + ex.getMessage()); - return null; - } - return parsedNBT; - } - - @Override - public Object[] getContents(Object nbtList) { - if (nbtList instanceof NBTTagList) { - Object[] contents = new Object[((NBTTagList) nbtList).size()]; - for (int i = 0; i < ((NBTTagList) nbtList).size(); i++) { - if (getIndex(nbtList, i) != null) { - contents[i] = getIndex(nbtList, i); - } - } - return contents; - } - return null; - } - - @Override - public void addToList(Object nbtList, Object toAdd) { - if (nbtList instanceof NBTTagList && toAdd instanceof NBTBase) { - ((NBTTagList) nbtList).add((NBTBase) toAdd); - } - } - - @Override - public void removeFromList(Object nbtList, int index) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - ((NBTTagList) nbtList).remove(index); - } - } - - @Override - public void setIndex(Object nbtList, int index, Object toSet) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - if (toSet instanceof NBTBase) { - ((NBTTagList) nbtList).a(index, (NBTBase) toSet); - } else if (toSet instanceof Number) { - ((NBTTagList) nbtList).a(index, convertToNBT((Number) toSet)); - } else if (toSet instanceof String) { - ((NBTTagList) nbtList).a(index, convertToNBT((String) toSet)); - } - } - } - - @Override - public Object getIndex(Object nbtList, int index) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - NBTBase value = ((NBTTagList) nbtList).i(index); - if (value instanceof NBTTagByte) { - return ((NBTTagByte) value).g(); //Byte stored inside a NBTNumber - } else if (value instanceof NBTTagShort) { - return ((NBTTagShort) value).f(); //Short inside a NBTNumber - } else if (value instanceof NBTTagInt) { - return ((NBTTagInt) value).e(); //Integer inside a NBTNumber - } else if (value instanceof NBTTagLong) { - return ((NBTTagLong) value).d(); //Long inside a NBTNumber - } else if (value instanceof NBTTagFloat) { - return ((NBTTagFloat) value).i(); //Float inside a NBTNumber - } else if (value instanceof NBTTagDouble) { - return ((NBTTagDouble) value).asDouble(); //Double inside a NBTNumber - } else if (value instanceof NBTTagString) { - return ((NBTTagString) value).c_(); //String inside the NBTTagString - } else if (value instanceof NBTBase) { - return value; //No need to convert this - } - } - return null; - } - - @Override - public void clearPathfinderGoals(Entity entity) { - EntityInsentient nmsEnt = (EntityInsentient) ((CraftEntity) entity).getHandle(); - ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, nmsEnt.goalSelector)).clear(); - ((LinkedHashSet) ReflectionUtils.getField("c", PathfinderGoalSelector.class, nmsEnt.goalSelector)).clear(); - ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, nmsEnt.targetSelector)).clear(); - ((LinkedHashSet) ReflectionUtils.getField("c", PathfinderGoalSelector.class, nmsEnt.targetSelector)).clear(); - } - - @Override - public void removePathfinderGoal(Object entity, Class goalClass, boolean isTargetSelector) { - if (entity instanceof EntityInsentient) { - ((EntityInsentient) entity).setGoalTarget(null); - if (isTargetSelector) { - Iterator goals = ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, ((EntityInsentient) entity).targetSelector)).iterator(); - while (goals.hasNext()) { - Object goal = goals.next(); - if (ReflectionUtils.getField("a", goal.getClass(), goal).getClass() == goalClass) { - goals.remove(); - } - } - } else { - Iterator goals = ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, ((EntityInsentient) entity).goalSelector)).iterator(); - while (goals.hasNext()) { - Object goal = goals.next(); - if (ReflectionUtils.getField("a", goal.getClass(), goal).getClass() == goalClass) { - goals.remove(); - } - } - } - } - } - - @Override - public void addPathfinderGoal(Object entity, int priority, Object goal, boolean isTargetSelector) { - if (entity instanceof EntityInsentient && goal instanceof PathfinderGoal) { - if (isTargetSelector) - ((EntityInsentient) entity).targetSelector.a(priority, (PathfinderGoal) goal); - else - ((EntityInsentient) entity).goalSelector.a(priority, (PathfinderGoal) goal); - } - } - - @Override - public void registerCompoundClassInfo() { - Classes.registerClass(new ClassInfo(NBTTagCompound.class, "compound").user("((nbt)?( ?tag)?) ?compounds?").name("NBT Compound").changer(new Changer() { - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) { - return CollectionUtils.array(String.class, NBTTagCompound.class); - } - return null; - } - - @Override - public void change(NBTTagCompound[] NBT, @Nullable Object[] delta, ChangeMode mode) { - if (mode == ChangeMode.ADD) { - if (delta[0] instanceof String) { - NBTTagCompound parsedNBT = parseRawNBT((String) delta[0]); - addToCompound(NBT[0], parsedNBT); - } else { - addToCompound(NBT[0], delta[0]); - } - } else if (mode == ChangeMode.REMOVE) { - if (delta[0] instanceof NBTTagCompound) - return; - for (Object s : delta) { - NBT[0].remove((String) s); - } - } - } - }).parser(new Parser() { - - @Override - public String getVariableNamePattern() { - return ".+"; - } - - @Override - @Nullable - public NBTTagCompound parse(String rawNBT, ParseContext context) { - if (rawNBT.startsWith("nbt:{") && rawNBT.endsWith("}")) { - NBTTagCompound NBT = parseRawNBT(rawNBT.substring(4)); - return NBT; - } - return null; - } - - @Override - public String toString(NBTTagCompound compound, int arg1) { - return compound.toString(); - } - - @Override - public String toVariableNameString(NBTTagCompound compound) { - return compound.toString(); - } - }).serializer(new Serializer() { - - @Override - public Fields serialize(NBTTagCompound compound) throws NotSerializableException { - Fields f = new Fields(); - f.putObject("asString", compound.toString()); - return f; - } - - @Override - public void deserialize(NBTTagCompound compound, Fields f) throws StreamCorruptedException, NotSerializableException { - assert false; - } - - @Override - protected boolean canBeInstantiated() { - return false; - } - - @Override - protected NBTTagCompound deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { - String raw = fields.getObject("asString", String.class); - NBTTagCompound compound = parseRawNBT(raw); - if (compound == null) { - throw new StreamCorruptedException("Unable to parse NBT from a variable: " + raw); - } - return compound; - } - - @Override - @Nullable - public NBTTagCompound deserialize(String s) { - NBTTagCompound compound = parseRawNBT(s); - return compound; - } - - @Override - public boolean mustSyncDeserialization() { - return true; - } - })); - - } - - @Override - public void registerNBTListClassInfo() { - Classes.registerClass(new ClassInfo(NBTTagList.class, "nbtlist").user("nbt ?list ?(tag)?").name("NBT List").changer(new Changer() { - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD) { - return CollectionUtils.array(Byte.class, Short.class, Integer.class, Long.class, Float.class, Double.class, String.class, NBTTagCompound.class, NBTTagList.class); - } - return null; - } - - @Override - public void change(NBTTagList[] nbtList, @Nullable Object[] delta, ChangeMode mode) { - if (delta.length == 0) - return; - if (delta[0] instanceof Number) { - addToList(nbtList[0], convertToNBT((Number) delta[0])); - } else if (delta[0] instanceof String) { - addToList(nbtList[0], convertToNBT((String) delta[0])); - } else if (delta[0] instanceof NBTBase) { - addToList(nbtList[0], delta[0]); - } - } - }).parser(new Parser() { - - @Override - public String getVariableNamePattern() { - return ".+"; - } - - @Override - @Nullable - public NBTTagList parse(String listString, ParseContext context) { - if ((listString.startsWith("nbt:[") || listString.startsWith("nbtlist:[")) && listString.endsWith("]")) { - int substring; - if (listString.startsWith("nbt:[")) { - substring = 4; - } else { // "nbtlist:[WHATEVER]" - substring = 8; - } - NBTTagCompound tempNBT = parseRawNBT("{temp:" + listString.substring(substring) + "}"); - NBTTagList parsedList = (NBTTagList) tempNBT.get("temp"); - return parsedList; - } - return null; - } - - @Override - public String toString(NBTTagList nbtList, int arg1) { - return nbtList.toString(); - } - - @Override - public String toVariableNameString(NBTTagList nbtList) { - return nbtList.toString(); - } - }).serializer(new Serializer() { - - @Override - public Fields serialize(NBTTagList nbtList) throws NotSerializableException { - Fields f = new Fields(); - f.putObject("asString", nbtList.toString()); - return f; - } - - @Override - public void deserialize(NBTTagList nbtList, Fields f) throws StreamCorruptedException, NotSerializableException { - assert false; - } - - @Override - protected boolean canBeInstantiated() { - return false; - } - - @Override - protected NBTTagList deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { - String s = fields.getObject("asString", String.class); - NBTTagCompound tempNBT = parseRawNBT("{temp:" + s + "}"); - if (tempNBT == null || !tempNBT.hasKey("temp")) { - throw new StreamCorruptedException("Unable to parse NBT list from a variable: " + s); - } - NBTTagList nbtList = (NBTTagList) tempNBT.get("temp"); - return nbtList; - } - - @Override - @Nullable - public NBTTagList deserialize(String s) { - NBTTagCompound tempNBT = parseRawNBT("{temp:" + s + "}"); - NBTTagList nbtList = (NBTTagList) tempNBT.get("temp"); - return nbtList; - } - - @Override - public boolean mustSyncDeserialization() { - return true; - } - })); - } - - @Override - public NBTTagCompound getEntityNBT(Entity entity) { - net.minecraft.server.v1_12_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - NBTTagCompound NBT = new NBTTagCompound(); - nmsEntity.save(NBT); - return NBT; - } - - @Override - public NBTTagCompound getTileNBT(Block block) { - NBTTagCompound NBT = new NBTTagCompound(); - World nmsWorld = ((CraftWorld) block.getWorld()).getHandle(); - TileEntity tileEntity = nmsWorld.getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ())); - if (tileEntity == null) - return null; - tileEntity.save(NBT); - return NBT; - } - - @Override - public NBTTagCompound getItemNBT(ItemStack itemStack) { - if (itemStack == null || itemStack.getType() == Material.AIR) - return null; - NBTTagCompound itemNBT = CraftItemStack.asNMSCopy(itemStack).getTag(); - if (itemNBT == null) - itemNBT = new NBTTagCompound(); - return itemNBT; - } - - @Override - public void setEntityNBT(Entity entity, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - net.minecraft.server.v1_12_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.f((NBTTagCompound) newCompound); - } - } - - @Override - public void setTileNBT(Block block, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - World nmsWorld = ((CraftWorld) block.getWorld()).getHandle(); - TileEntity tileEntity = nmsWorld.getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ())); - if (tileEntity == null) - return; - tileEntity.a((NBTTagCompound) newCompound); - tileEntity.update(); - IBlockData tileEntType = nmsWorld.getType(new BlockPosition(block.getX(), block.getY(), block.getZ())); - nmsWorld.notify(tileEntity.getPosition(), tileEntType, tileEntType, 3); - } - } - - @Override - public ItemStack getItemWithNBT(ItemStack itemStack, Object compound) { - net.minecraft.server.v1_12_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); - if (compound instanceof NBTTagCompound && itemStack != null) { - if (itemStack.getType() == Material.AIR) - return null; - if (((NBTTagCompound) compound).isEmpty()) - return itemStack; - nmsItem.setTag((NBTTagCompound) compound); - ItemStack newItem = CraftItemStack.asBukkitCopy(nmsItem); - return newItem; - } else if (compound == null) { - nmsItem.setTag(null); - ItemStack newItem = CraftItemStack.asBukkitCopy(nmsItem); - return newItem; - } - return itemStack; - } - - @Override - public NBTTagCompound getFileNBT(File file) { - FileInputStream fis = null; - try { - fis = new FileInputStream(file); - } catch (FileNotFoundException ex) { - return null; //File doesn't exist. - } - NBTTagCompound fileNBT = null; - try { - fileNBT = NBTCompressedStreamTools.a(fis); - fis.close(); - } catch (IOException ex) { - if (ex instanceof EOFException) { - ; //Nothing. - } else { - ex.printStackTrace(); - } - } - return fileNBT; - } - - @Override - public void setFileNBT(File file, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - OutputStream os = null; - try { - os = new FileOutputStream(file); - } catch (FileNotFoundException ex) { - ex.printStackTrace(); - } - try { - NBTCompressedStreamTools.a((NBTTagCompound) newCompound, os); - os.close(); - } catch (IOException ex) { - if (ex instanceof EOFException) { - ; //Ignore, just end of the file - } else { - ex.printStackTrace(); - } - } - } - } - - @Override - public NBTBase convertToNBT(Number number) { - if (number instanceof Byte) { - return new NBTTagByte((byte) number); - } else if (number instanceof Short) { - return new NBTTagShort((short) number); - } else if (number instanceof Integer) { - return new NBTTagInt((int) number); - } else if (number instanceof Long) { - return new NBTTagLong((long) number); - } else if (number instanceof Float) { - return new NBTTagFloat((float) number); - } else if (number instanceof Double) { - return new NBTTagDouble((double) number); - } - return null; - } - - @Override - public NBTTagString convertToNBT(String string) { - return new NBTTagString(string); - } - - @Override - public String getMCId(ItemStack itemStack) { - net.minecraft.server.v1_12_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); - MinecraftKey mcKey = Item.REGISTRY.b(nmsItem.getItem()); - return mcKey.toString(); - } - - @Override - public ItemStack getItemFromMcId(String mcId) { - MinecraftKey mcKey = new MinecraftKey(mcId); - Item nmsItem = (Item) Item.REGISTRY.get(mcKey); - return CraftItemStack.asNewCraftStack(nmsItem); - } - - @Override - public boolean getNoClip(Entity entity) { - net.minecraft.server.v1_12_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.noclip; - } - - @Override - public void setNoClip(Entity entity, boolean noclip) { - net.minecraft.server.v1_12_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.noclip = noclip; - } - - @Override - public boolean getFireProof(Entity entity) { - net.minecraft.server.v1_12_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isFireProof(); - } - - @Override - public void setFireProof(Entity entity, boolean fireProof) { - net.minecraft.server.v1_12_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - ReflectionUtils.setField("fireProof", nmsEntity.getClass(), nmsEntity, fireProof); - } - - /* - @SuppressWarnings("unchecked") - @Override - public ItemStack[] getEndermanBlocks(Entity enderman) { - EntityEnderman nmsEnder = ((CraftEnderman) enderman).getHandle(); - Set nmsBlocks = (Set) ReflectionUtils.getField("c", EntityEnderman.class, nmsEnder); - ItemStack[] items = new ItemStack[nmsBlocks.size()]; - int i = 0; - for (net.minecraft.server.v1_12_R1.Block nmsBlock : nmsBlocks) { - IBlockData nmsBlockData = nmsBlock.getBlockData(); - int dataValue = nmsBlock.toLegacyData(nmsBlockData); - net.minecraft.server.v1_12_R1.ItemStack nmsItem = new net.minecraft.server.v1_12_R1.ItemStack(nmsBlock, 1, dataValue); - ItemStack bukkitItem = CraftItemStack.asCraftMirror(nmsItem); - items[i] = bukkitItem; - i++; - } - return items; - } - - @SuppressWarnings("unchecked") - @Override - public void setEndermanBlocks(Entity enderman, ItemStack... blocks) { - EntityEnderman nmsEnder = ((CraftEnderman) enderman).getHandle(); - Set nmsBlocks = (Set) ReflectionUtils.getField("c", EntityEnderman.class, nmsEnder); - for (ItemStack block : blocks) { - if (!block.getType().isBlock()) - return; - // TODO Figure out how to get a Blocks from a Bukkit ItemStack - // Blocks.class has a PRIVATE method to get from a MC id. - } - } - */ - - @Override - public Location getLastLocation(Entity entity) { - net.minecraft.server.v1_12_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - org.bukkit.World world = nmsEntity.world.getWorld(); - Location lastEntLoc = new Location(world, nmsEntity.M, nmsEntity.N, nmsEntity.O); - return lastEntLoc; - } - - @Override - public float getEntityStepLength(Entity entity) { - net.minecraft.server.v1_12_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.P; - } - - @Override - public void setEntityStepLength(Entity entity, float length) { - net.minecraft.server.v1_12_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.P = length; - } - - @Override - public boolean getElytraGlideState(Entity entity) { - EntityLiving nmsEntity = ((CraftLivingEntity) entity).getHandle(); - return nmsEntity.getFlag(7); - } - - public void setElytraGlideState(Entity entity, boolean glide) { - EntityLiving nmsEntity = ((CraftLivingEntity) entity).getHandle(); - nmsEntity.setFlag(7, glide); - } - - public boolean getNoGravity(Entity entity) { - net.minecraft.server.v1_12_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isNoGravity(); - } - - public void setNoGravity(Entity entity, boolean noGravity) { - net.minecraft.server.v1_12_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.setNoGravity(noGravity); - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/util/NMS_v1_7_R4.java b/src/me/TheBukor/SkStuff/util/NMS_v1_7_R4.java deleted file mode 100644 index 27df0ca..0000000 --- a/src/me/TheBukor/SkStuff/util/NMS_v1_7_R4.java +++ /dev/null @@ -1,684 +0,0 @@ -package me.TheBukor.SkStuff.util; - -import java.io.EOFException; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.NotSerializableException; -import java.io.OutputStream; -import java.io.StreamCorruptedException; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import javax.annotation.Nullable; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -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.inventory.ItemStack; - -import ch.njol.skript.Skript; -import ch.njol.skript.classes.Changer; -import ch.njol.skript.classes.ClassInfo; -import ch.njol.skript.classes.Parser; -import ch.njol.skript.classes.Serializer; -import ch.njol.skript.lang.ParseContext; -import ch.njol.skript.registrations.Classes; -import ch.njol.util.coll.CollectionUtils; -import ch.njol.yggdrasil.Fields; -import net.minecraft.server.v1_7_R4.Item; -import net.minecraft.server.v1_7_R4.MojangsonParser; -import net.minecraft.server.v1_7_R4.NBTBase; -import net.minecraft.server.v1_7_R4.NBTCompressedStreamTools; -import net.minecraft.server.v1_7_R4.NBTTagByte; -import net.minecraft.server.v1_7_R4.NBTTagCompound; -import net.minecraft.server.v1_7_R4.NBTTagDouble; -import net.minecraft.server.v1_7_R4.NBTTagFloat; -import net.minecraft.server.v1_7_R4.NBTTagInt; -import net.minecraft.server.v1_7_R4.NBTTagList; -import net.minecraft.server.v1_7_R4.NBTTagLong; -import net.minecraft.server.v1_7_R4.NBTTagShort; -import net.minecraft.server.v1_7_R4.NBTTagString; -import net.minecraft.server.v1_7_R4.TileEntity; -import net.minecraft.server.v1_7_R4.World; - -public class NMS_v1_7_R4 implements NMSInterface { - - @Override - public Object getNBTTag(Object compound, String tag) { - if (compound instanceof NBTTagCompound) { - return ((NBTTagCompound) compound).get(tag); - } - return null; - } - - @Override - public void setNBTTag(Object compound, String tag, Object toSet) { - if (compound instanceof NBTTagCompound && (toSet instanceof NBTBase || toSet instanceof Number || toSet instanceof String)) { - NBTBase converted = null; - if (toSet instanceof Number) { - converted = convertToNBT((Number) toSet); - } else if (toSet instanceof String) { - converted = convertToNBT((String) toSet); - } else { //Already an NBTBase - converted = (NBTBase) toSet; //No need to convert anything - } - ((NBTTagCompound) compound).set(tag, converted); - } - } - - @Override - public void removeNBTTag(Object compound, String tag) { - if (compound instanceof NBTTagCompound) { - ((NBTTagCompound) compound).remove(tag); - } - } - - @Override - public byte getTypeId(Object nbtBase) { - if (nbtBase instanceof NBTBase) { - return ((NBTBase) nbtBase).getTypeId(); - } - return 0; - } - - @Override - public Object getNBTTagValue(Object compound, String tag, byte typeId) { - if (compound instanceof NBTTagCompound) { - switch (typeId) { - case 1: - return ((NBTTagCompound) compound).getByte(tag); - case 2: - return ((NBTTagCompound) compound).getShort(tag); - case 3: - return ((NBTTagCompound) compound).getInt(tag); - case 4: - return ((NBTTagCompound) compound).getLong(tag); - case 5: - return ((NBTTagCompound) compound).getFloat(tag); - case 6: - return ((NBTTagCompound) compound).getDouble(tag); - case 7: //Byte array, only used in chunk files. Also doesn't have support for the MojangsonParser. - break; - case 8: - return ((NBTTagCompound) compound).getString(tag); - case 9: - int i; - NBTTagList list = null; - for (i = 1; i <= 11; i++) { //To get a list I need to know the type of the tags it contains inside, - //since I can't predict what type the list will have, I just loop all of the IDs until I find a non-empty list. - list = ((NBTTagCompound) compound).getList(tag, i); //Try to get the list with the ID "loop-number". - if (!list.toString().equals("[]")) { //If list is not empty. - break; //Stop loop. - } - } - return list; //May be null - case 10: - return ((NBTTagCompound) compound).getCompound(tag); - case 11: //Integer array, this one is only used on the chunk files (and maybe schematic files?). - return ((NBTTagCompound) compound).getIntArray(tag); - default: //This should never happen, but it's better to have this just in case it spills errors everywhere. - break; - } - } - return null; - } - - @SuppressWarnings("unchecked") - @Override - public void addToCompound(Object compound, Object toAdd) { - if (compound instanceof NBTTagCompound && toAdd instanceof NBTTagCompound) { - HashMap map = (HashMap) ReflectionUtils.getField("map", NBTTagCompound.class, toAdd); - Set keySet = ((NBTTagCompound) toAdd).c(); - Iterator iterator = keySet.iterator(); - - while(iterator.hasNext()) { - String string = (String) iterator.next(); - NBTBase base = (NBTBase) map.get(string); - if(base.getTypeId() == 10) { - if(((NBTTagCompound) compound).hasKeyOfType(string, 10)) { - NBTTagCompound localNBT = ((NBTTagCompound) compound).getCompound(string); - addToCompound(localNBT, (NBTTagCompound) base); - } else { - ((NBTTagCompound) compound).set(string, base.clone()); - } - } else { - ((NBTTagCompound) compound).set(string, base.clone()); - } - } - } - } - - @Override - public void removeFromCompound(Object compound, String ... toRemove) { - if (compound instanceof NBTTagCompound) { - for (String s : toRemove) { - ((NBTTagCompound) compound).remove(s); - } - } - } - - @Override - public NBTTagCompound parseRawNBT(String rawNBT) { - NBTTagCompound parsedNBT = null; - parsedNBT = (NBTTagCompound) MojangsonParser.parse(rawNBT); - return parsedNBT; - } - - @Override - public Object[] getContents(Object nbtList) { - if (nbtList instanceof NBTTagList) { - Object[] contents = new Object[((NBTTagList) nbtList).size()]; - for (int i = 0; i < ((NBTTagList) nbtList).size(); i++) { - if (getIndex(nbtList, i) != null) { - contents[i] = getIndex(nbtList, i); - } - } - return contents; - } - return null; - } - - @Override - public void addToList(Object nbtList, Object toAdd) { - if (nbtList instanceof NBTTagList && toAdd instanceof NBTBase) { - ((NBTTagList) nbtList).add((NBTBase) toAdd); - } - } - - @SuppressWarnings("unchecked") - @Override - public void removeFromList(Object nbtList, int index) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - List actualList = null; - actualList = (List) ReflectionUtils.getField("list", NBTTagList.class, nbtList); - actualList.remove(index); - } - } - - @SuppressWarnings("unchecked") - @Override - public void setIndex(Object nbtList, int index, Object toSet) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - int typeId = ((NBTTagList) nbtList).d(); //Contents ID - NBTBase toSetNBT = null; - if (toSet instanceof NBTBase) - toSetNBT = (NBTBase) toSet; - else if (toSet instanceof Number) - toSetNBT = (NBTBase) convertToNBT((Number) toSet); - else if (toSet instanceof String) - toSetNBT = convertToNBT((String) toSet); - else - return; - int toSetId = (toSetNBT).getTypeId(); - if (typeId == 0) { - ReflectionUtils.setField("type", NBTTagList.class, nbtList, toSetId); - } else if (typeId != toSetId) { - Skript.warning("Adding mismatching tag types to NBT list"); - return; - } - List actualList = (List) ReflectionUtils.getField("list", NBTTagList.class, nbtList); - actualList.set(index, toSetNBT); - } - } - - @SuppressWarnings("unchecked") - @Override - public Object getIndex(Object nbtList, int index) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - List actualList = null; - actualList = (List) ReflectionUtils.getField("list", NBTTagList.class, nbtList); - NBTBase value = (NBTBase) actualList.get(index); - return value; - } - return null; - } - - @Override - public void clearPathfinderGoals(Entity entity) { - Bukkit.getLogger().warning("Sorry, Pathfinder Goal are only supported in 1.8 and above"); - } - - @Override - public void removePathfinderGoal(Object entity, Class goalClass, boolean isTargetSelector) { - Bukkit.getLogger().warning("Sorry, Pathfinder Goals are only supported in 1.8 and above"); - } - - @Override - public void addPathfinderGoal(Object entity, int priority, Object goal, boolean isTargetSelector) { - Bukkit.getLogger().warning("Sorry, Pathfinder Goals are only supported in 1.8 and above"); - } - - @Override - public void registerCompoundClassInfo() { - Classes.registerClass(new ClassInfo(NBTTagCompound.class, "compound").user("((nbt)?( ?tag)?) ?compounds?").name("NBT Compound").changer(new Changer() { - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) { - return CollectionUtils.array(String.class, NBTTagCompound.class); - } - return null; - } - - @Override - public void change(NBTTagCompound[] NBT, @Nullable Object[] delta, ChangeMode mode) { - if (mode == ChangeMode.ADD) { - if (delta[0] instanceof String) { - NBTTagCompound parsedNBT = parseRawNBT((String) delta[0]); - addToCompound(NBT[0], parsedNBT); - } else { - addToCompound(NBT[0], delta[0]); - } - } else if (mode == ChangeMode.REMOVE) { - if (delta[0] instanceof NBTTagCompound) - return; - for (Object s : delta) { - NBT[0].remove((String) s); - } - } - } - }).parser(new Parser() { - - @Override - public String getVariableNamePattern() { - return ".+"; - } - - @Override - @Nullable - public NBTTagCompound parse(String rawNBT, ParseContext context) { - if (rawNBT.startsWith("nbt:{") && rawNBT.endsWith("}")) { - NBTTagCompound NBT = parseRawNBT(rawNBT.substring(4)); - return NBT; - } - return null; - } - - @Override - public String toString(NBTTagCompound compound, int arg1) { - return compound.toString(); - } - - @Override - public String toVariableNameString(NBTTagCompound compound) { - return compound.toString(); - } - }).serializer(new Serializer() { - - @Override - public Fields serialize(NBTTagCompound compound) throws NotSerializableException { - Fields f = new Fields(); - f.putObject("asString", compound.toString()); - return f; - } - - @Override - public void deserialize(NBTTagCompound compound, Fields f) throws StreamCorruptedException, NotSerializableException { - assert false; - } - - @Override - protected boolean canBeInstantiated() { - return false; - } - - @Override - protected NBTTagCompound deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { - String raw = fields.getObject("asString", String.class); - NBTTagCompound compound = parseRawNBT(raw); - if (compound == null) { - throw new StreamCorruptedException("Unable to parse NBT compound from a variable: " + raw); - } - return compound; - } - - @Override - @Nullable - public NBTTagCompound deserialize(String s) { - NBTTagCompound compound = parseRawNBT(s); - return compound; - } - - @Override - public boolean mustSyncDeserialization() { - return true; - } - })); - - } - - @Override - public void registerNBTListClassInfo() { - Classes.registerClass(new ClassInfo(NBTTagList.class, "nbtlist").user("nbt ?list ?(tag)?").name("NBT List").changer(new Changer() { - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD) { - return CollectionUtils.array(Byte.class, Short.class, Integer.class, Long.class, Float.class, Double.class, String.class, NBTBase.class); - } - return null; - } - - @Override - public void change(NBTTagList[] nbtList, @Nullable Object[] delta, ChangeMode mode) { - if (delta.length == 0) - return; - if (delta[0] instanceof Number) { - addToList(nbtList, convertToNBT((Number) delta[0])); - } else if (delta[0] instanceof String) { - addToList(nbtList, convertToNBT((String) delta[0])); - } else if (delta[0] instanceof NBTBase) { - addToList(nbtList, delta[0]); - } - } - }).parser(new Parser() { - - @Override - public String getVariableNamePattern() { - return ".+"; - } - - @Override - @Nullable - public NBTTagList parse(String listString, ParseContext context) { - if ((listString.startsWith("nbt:[") || listString.startsWith("nbtlist:[")) && listString.endsWith("]")) { - int substring; - if (listString.startsWith("nbt:[")) { - substring = 4; - } else { // "nbtlist:[WHATEVER]" - substring = 8; - } - NBTTagCompound tempNBT = parseRawNBT("{temp:" + listString.substring(substring) + "}"); - NBTTagList parsedList = (NBTTagList) tempNBT.get("temp"); - return parsedList; - } - return null; - } - - @Override - public String toString(NBTTagList nbtList, int arg1) { - return nbtList.toString(); - } - - @Override - public String toVariableNameString(NBTTagList nbtList) { - return nbtList.toString(); - } - }).serializer(new Serializer() { - - @Override - public Fields serialize(NBTTagList nbtList) throws NotSerializableException { - Fields f = new Fields(); - f.putObject("asString", nbtList.toString()); - return f; - } - - @Override - public void deserialize(NBTTagList nbtList, Fields f) throws StreamCorruptedException, NotSerializableException { - assert false; - } - - @Override - protected boolean canBeInstantiated() { - return false; - } - - @Override - protected NBTTagList deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { - String s = fields.getObject("asString", String.class); - NBTTagCompound tempNBT = parseRawNBT("{temp:" + s + "}"); - if (tempNBT == null || !tempNBT.hasKey("temp")) { - throw new StreamCorruptedException("Unable to parse NBT list from a variable: " + s); - } - NBTTagList nbtList = (NBTTagList) tempNBT.get("temp"); - return nbtList; - } - - @Override - @Nullable - public NBTTagList deserialize(String s) { - NBTTagCompound tempNBT = parseRawNBT("{temp:" + s + "}"); - NBTTagList nbtList = (NBTTagList) tempNBT.get("temp"); - return nbtList; - } - - @Override - public boolean mustSyncDeserialization() { - return true; - } - })); - } - - @Override - public NBTTagCompound getEntityNBT(Entity entity) { - net.minecraft.server.v1_7_R4.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - NBTTagCompound NBT = new NBTTagCompound(); - nmsEntity.e(NBT); - return NBT; - } - - @Override - public NBTTagCompound getTileNBT(Block block) { - NBTTagCompound NBT = new NBTTagCompound(); - World nmsWorld = ((CraftWorld) block.getWorld()).getHandle(); - TileEntity tileEntity = nmsWorld.getTileEntity(block.getX(), block.getY(), block.getZ()); - if (tileEntity == null) - return null; - tileEntity.b(NBT); - return NBT; - } - - @Override - public NBTTagCompound getItemNBT(ItemStack itemStack) { - if (itemStack == null || itemStack.getType() == Material.AIR) - return null; - NBTTagCompound itemNBT = CraftItemStack.asNMSCopy(itemStack).getTag(); - if (itemNBT == null) - itemNBT = new NBTTagCompound(); - return itemNBT; - } - - @Override - public void setEntityNBT(Entity entity, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - net.minecraft.server.v1_7_R4.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.f((NBTTagCompound) newCompound); - } - } - - @Override - public void setTileNBT(Block block, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - World nmsWorld = ((CraftWorld) block.getWorld()).getHandle(); - TileEntity tileEntity = nmsWorld.getTileEntity(block.getX(), block.getY(), block.getZ()); - if (tileEntity == null) - return; - tileEntity.a((NBTTagCompound) newCompound); - tileEntity.update(); - nmsWorld.notify(tileEntity.x, tileEntity.y, tileEntity.z); - } - } - - @Override - public ItemStack getItemWithNBT(ItemStack itemStack, Object compound) { - net.minecraft.server.v1_7_R4.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); - if (compound instanceof NBTTagCompound && itemStack != null) { - if (itemStack.getType() == Material.AIR) - return null; - if (((NBTTagCompound) compound).isEmpty()) - return itemStack; - nmsItem.setTag((NBTTagCompound) compound); - ItemStack newItem = CraftItemStack.asBukkitCopy(nmsItem); - return newItem; - } else if (compound == null) { - nmsItem.setTag(null); - ItemStack newItem = CraftItemStack.asBukkitCopy(nmsItem); - return newItem; - } - return itemStack; - } - - @Override - public NBTTagCompound getFileNBT(File file) { - FileInputStream fis = null; - try { - fis = new FileInputStream(file); - } catch (FileNotFoundException ex) { - return null; //File doesn't exist. - } - NBTTagCompound fileNBT = null; - try { - fileNBT = NBTCompressedStreamTools.a(fis); - fis.close(); - } catch (IOException ex) { - ex.printStackTrace(); - } finally { - try { - fis.close(); - } catch (IOException ex) { - ex.printStackTrace(); - } - } - return fileNBT; - } - - @Override - public void setFileNBT(File file, Object newCompound) { - OutputStream os = null; - try { - os = new FileOutputStream(file); - } catch (FileNotFoundException ex) { - ex.printStackTrace(); - } - try { - NBTCompressedStreamTools.a((NBTTagCompound) newCompound, os); - os.close(); - } catch (Exception ex) { - if (ex instanceof EOFException) { - ; //Ignore, just end of the file - } else { - ex.printStackTrace(); - } - } finally { - try { - os.close(); - } catch (Exception ex) { - if (ex instanceof EOFException) { - ; //Ignore. - } else { - ex.printStackTrace(); - } - } - } - } - - @Override - public NBTBase convertToNBT(Number number) { - if (number instanceof Byte) { - return new NBTTagByte((byte) number); - } else if (number instanceof Short) { - return new NBTTagShort((short) number); - } else if (number instanceof Integer) { - return new NBTTagInt((int) number); - } else if (number instanceof Long) { - return new NBTTagLong((long) number); - } else if (number instanceof Float) { - return new NBTTagFloat((float) number); - } else if (number instanceof Double) { - return new NBTTagDouble((double) number); - } - return null; - } - - @Override - public NBTTagString convertToNBT(String string) { - return new NBTTagString(string); - } - - @Override - public String getMCId(ItemStack itemStack) { - net.minecraft.server.v1_7_R4.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); - String test = Item.REGISTRY.c(nmsItem.getItem()); - return test; - } - - @Override - public ItemStack getItemFromMcId(String mcId) { - return null; //Not supported in 1.7 - } - - @Override - public boolean getNoClip(Entity entity) { - return false; //Not supported in 1.7 - } - - @Override - public void setNoClip(Entity entity, boolean noclip) { - return; //Not supported in 1.7 - } - - @Override - public boolean getFireProof(Entity entity) { - net.minecraft.server.v1_7_R4.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return (boolean) ReflectionUtils.getField("fireProof", nmsEntity.getClass(), nmsEntity); - } - - @Override - public void setFireProof(Entity entity, boolean fireProof) { - net.minecraft.server.v1_7_R4.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - ReflectionUtils.setField("fireProof", nmsEntity.getClass(), nmsEntity, fireProof); - } - - @Override - public Location getLastLocation(Entity entity) { - net.minecraft.server.v1_7_R4.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - org.bukkit.World world = nmsEntity.world.getWorld(); - Location lastEntLoc = new Location(world, nmsEntity.S, nmsEntity.T, nmsEntity.U); - return lastEntLoc; - } - - @Override - public float getEntityStepLength(Entity entity) { - net.minecraft.server.v1_7_R4.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.V; - } - - @Override - public void setEntityStepLength(Entity entity, float length) { - net.minecraft.server.v1_7_R4.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.V = length; - } - - @Override - public boolean getElytraGlideState(Entity entity) { - Bukkit.getLogger().warning("Executed \"Get elytra glide state\" code on 1.7! How the hell did this even happen!!"); - return false; - } - - public void setElytraGlideState(Entity entity, boolean glide) { - Bukkit.getLogger().warning("Executed \"Set elytra glide state\" code on 1.7! How the hell did this even happen!!"); - } - - public boolean getNoGravity(Entity entity) { - Bukkit.getLogger().warning("Executed \"Get no gravity state of entity\" code on 1.7! How the hell did this even happen!!"); - return false; - } - - public void setNoGravity(Entity entity, boolean noGravity) { - Bukkit.getLogger().warning("Executed \"Set no gravity state of entity\" code on 1.7! How the hell did this even happen!!"); - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/util/NMS_v1_8_R3.java b/src/me/TheBukor/SkStuff/util/NMS_v1_8_R3.java deleted file mode 100644 index 33eb152..0000000 --- a/src/me/TheBukor/SkStuff/util/NMS_v1_8_R3.java +++ /dev/null @@ -1,693 +0,0 @@ -package me.TheBukor.SkStuff.util; - -import java.io.EOFException; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.NotSerializableException; -import java.io.OutputStream; -import java.io.StreamCorruptedException; -import java.util.Iterator; -import java.util.List; - -import javax.annotation.Nullable; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -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.inventory.ItemStack; - -import ch.njol.skript.Skript; -import ch.njol.skript.classes.Changer; -import ch.njol.skript.classes.ClassInfo; -import ch.njol.skript.classes.Parser; -import ch.njol.skript.classes.Serializer; -import ch.njol.skript.lang.ParseContext; -import ch.njol.skript.registrations.Classes; -import ch.njol.util.coll.CollectionUtils; -import ch.njol.yggdrasil.Fields; -import net.minecraft.server.v1_8_R3.BlockPosition; -import net.minecraft.server.v1_8_R3.EntityInsentient; -import net.minecraft.server.v1_8_R3.Item; -import net.minecraft.server.v1_8_R3.MinecraftKey; -import net.minecraft.server.v1_8_R3.MojangsonParseException; -import net.minecraft.server.v1_8_R3.MojangsonParser; -import net.minecraft.server.v1_8_R3.NBTBase; -import net.minecraft.server.v1_8_R3.NBTCompressedStreamTools; -import net.minecraft.server.v1_8_R3.NBTTagByte; -import net.minecraft.server.v1_8_R3.NBTTagCompound; -import net.minecraft.server.v1_8_R3.NBTTagDouble; -import net.minecraft.server.v1_8_R3.NBTTagFloat; -import net.minecraft.server.v1_8_R3.NBTTagInt; -import net.minecraft.server.v1_8_R3.NBTTagList; -import net.minecraft.server.v1_8_R3.NBTTagLong; -import net.minecraft.server.v1_8_R3.NBTTagShort; -import net.minecraft.server.v1_8_R3.NBTTagString; -import net.minecraft.server.v1_8_R3.PathfinderGoal; -import net.minecraft.server.v1_8_R3.PathfinderGoalSelector; -import net.minecraft.server.v1_8_R3.TileEntity; -import net.minecraft.server.v1_8_R3.World; - -public class NMS_v1_8_R3 implements NMSInterface { - - @Override - public Object getNBTTag(Object compound, String tag) { - if (compound instanceof NBTTagCompound) { - return ((NBTTagCompound) compound).get(tag); - } - return null; - } - - @Override - public void setNBTTag(Object compound, String tag, Object toSet) { - if (compound instanceof NBTTagCompound && (toSet instanceof NBTBase || toSet instanceof Number || toSet instanceof String)) { - NBTBase converted = null; - if (toSet instanceof Number) { - converted = convertToNBT((Number) toSet); - } else if (toSet instanceof String) { - converted = convertToNBT((String) toSet); - } else { //Already an NBTBase - converted = (NBTBase) toSet; //No need to convert anything - } - ((NBTTagCompound) compound).set(tag, converted); - } - } - - @Override - public void removeNBTTag(Object compound, String tag) { - if (compound instanceof NBTTagCompound) { - ((NBTTagCompound) compound).remove(tag); - } - } - - @Override - public byte getTypeId(Object nbtBase) { - if (nbtBase instanceof NBTBase) { - return ((NBTBase) nbtBase).getTypeId(); - } - return 0; - } - - @Override - public Object getNBTTagValue(Object compound, String tag, byte typeId) { - if (compound instanceof NBTTagCompound) { - switch (typeId) { - case 1: - return ((NBTTagCompound) compound).getByte(tag); - case 2: - return ((NBTTagCompound) compound).getShort(tag); - case 3: - return ((NBTTagCompound) compound).getInt(tag); - case 4: - return ((NBTTagCompound) compound).getLong(tag); - case 5: - return ((NBTTagCompound) compound).getFloat(tag); - case 6: - return ((NBTTagCompound) compound).getDouble(tag); - case 7: //Byte array, only used in chunk files. Also doesn't have support for the MojangsonParser. - break; - case 8: - return ((NBTTagCompound) compound).getString(tag); - case 9: - int i; - NBTTagList list = null; - for (i = 1; i <= 11; i++) { //To get a list I need to know the type of the tags it contains inside, - //since I can't predict what type the list will have, I just loop all of the IDs until I find a non-empty list. - list = ((NBTTagCompound) compound).getList(tag, i); //Try to get the list with the ID "loop-number". - if (!list.isEmpty()) { //If list is not empty. - break; //Stop loop. - } - } - return list; //May be null - case 10: - return ((NBTTagCompound) compound).getCompound(tag); - case 11: //Integer array, this one is only used on the chunk files (and maybe schematic files?). - return ((NBTTagCompound) compound).getIntArray(tag); - default: //This should never happen, but it's better to have this just in case it spills errors everywhere. - break; - } - } - return null; - } - - @Override - public void addToCompound(Object compound, Object toAdd) { - if (compound instanceof NBTTagCompound && toAdd instanceof NBTTagCompound) { - ((NBTTagCompound) compound).a((NBTTagCompound) toAdd); - } - } - - @Override - public void removeFromCompound(Object compound, String ... toRemove) { - if (compound instanceof NBTTagCompound) { - for (String s : toRemove) { - ((NBTTagCompound) compound).remove(s); - } - } - } - - @Override - public NBTTagCompound parseRawNBT(String rawNBT) { - NBTTagCompound parsedNBT = null; - try { - parsedNBT = MojangsonParser.parse(rawNBT); - } catch (MojangsonParseException ex) { - Skript.warning("Error when parsing NBT - " + ex.getMessage()); - return null; - } - return parsedNBT; - } - - @Override - public Object[] getContents(Object nbtList) { - if (nbtList instanceof NBTTagList) { - Object[] contents = new Object[((NBTTagList) nbtList).size()]; - for (int i = 0; i < ((NBTTagList) nbtList).size(); i++) { - if (getIndex(nbtList, i) != null) { - contents[i] = getIndex(nbtList, i); - } - } - return contents; - } - return null; - } - - @Override - public void addToList(Object nbtList, Object toAdd) { - if (nbtList instanceof NBTTagList && toAdd instanceof NBTBase) { - ((NBTTagList) nbtList).add((NBTBase) toAdd); - } - } - - @Override - public void removeFromList(Object nbtList, int index) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - ((NBTTagList) nbtList).a(index); - } - } - - @Override - public void setIndex(Object nbtList, int index, Object toSet) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - if (toSet instanceof NBTBase) { - ((NBTTagList) nbtList).a(index, (NBTBase) toSet); - } else if (toSet instanceof Number) { - ((NBTTagList) nbtList).a(index, convertToNBT((Number) toSet)); - } else if (toSet instanceof String) { - ((NBTTagList) nbtList).a(index, convertToNBT((String) toSet)); - } - } - } - - @Override - public Object getIndex(Object nbtList, int index) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - NBTBase value = ((NBTTagList) nbtList).g(index); - if (value instanceof NBTTagByte) { - return ((NBTTagByte) value).f(); //Byte stored inside a NBTNumber - } else if (value instanceof NBTTagShort) { - return ((NBTTagShort) value).e(); //Short inside a NBTNumber - } else if (value instanceof NBTTagInt) { - return ((NBTTagInt) value).d(); //Integer inside a NBTNumber - } else if (value instanceof NBTTagLong) { - return ((NBTTagLong) value).c(); //Long inside a NBTNumber - } else if (value instanceof NBTTagFloat) { - return ((NBTTagFloat) value).h(); //Float inside a NBTNumber - } else if (value instanceof NBTTagDouble) { - return ((NBTTagDouble) value).g(); //Double inside a NBTNumber - } else if (value instanceof NBTTagString) { - return ((NBTTagString) value).a_(); //String inside the NBTTagString - } else if (value instanceof NBTBase) { - return value; //No need to convert this. - } - } - return null; - } - - @Override - public void clearPathfinderGoals(Entity entity) { - EntityInsentient nmsEnt = (EntityInsentient) ((CraftEntity) entity).getHandle(); - ((List) ReflectionUtils.getField("b", PathfinderGoalSelector.class, nmsEnt.goalSelector)).clear(); - ((List) ReflectionUtils.getField("c", PathfinderGoalSelector.class, nmsEnt.goalSelector)).clear(); - ((List) ReflectionUtils.getField("b", PathfinderGoalSelector.class, nmsEnt.targetSelector)).clear(); - ((List) ReflectionUtils.getField("c", PathfinderGoalSelector.class, nmsEnt.targetSelector)).clear(); - } - - @Override - public void removePathfinderGoal(Object entity, Class goalClass, boolean isTargetSelector) { - if (entity instanceof EntityInsentient) { - ((EntityInsentient) entity).setGoalTarget(null); - if (isTargetSelector) { - Iterator goals = ((List) ReflectionUtils.getField("b", PathfinderGoalSelector.class, ((EntityInsentient) entity).targetSelector)).iterator(); - while (goals.hasNext()) { - Object goal = goals.next(); - if (ReflectionUtils.getField("a", goal.getClass(), goal).getClass() == goalClass) { - goals.remove(); - } - } - } else { - Iterator goals = ((List) ReflectionUtils.getField("b", PathfinderGoalSelector.class, ((EntityInsentient) entity).goalSelector)).iterator(); - while (goals.hasNext()) { - Object goal = goals.next(); - if (ReflectionUtils.getField("a", goal.getClass(), goal).getClass() == goalClass) { - goals.remove(); - } - } - } - } - } - - @Override - public void addPathfinderGoal(Object entity, int priority, Object goal, boolean isTargetSelector) { - if (entity instanceof EntityInsentient && goal instanceof PathfinderGoal) { - if (isTargetSelector) - ((EntityInsentient) entity).targetSelector.a(priority, (PathfinderGoal) goal); - else - ((EntityInsentient) entity).goalSelector.a(priority, (PathfinderGoal) goal); - } - } - - @Override - public void registerCompoundClassInfo() { - Classes.registerClass(new ClassInfo(NBTTagCompound.class, "compound").user("((nbt)?( ?tag)?) ?compounds?").name("NBT Compound").changer(new Changer() { - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) { - return CollectionUtils.array(String.class, NBTTagCompound.class); - } - return null; - } - - @Override - public void change(NBTTagCompound[] NBT, @Nullable Object[] delta, ChangeMode mode) { - if (mode == ChangeMode.ADD) { - if (delta[0] instanceof String) { - NBTTagCompound parsedNBT = parseRawNBT((String) delta[0]); - addToCompound(NBT[0], parsedNBT); - } else { - addToCompound(NBT[0], delta[0]); - } - } else if (mode == ChangeMode.REMOVE) { - if (delta[0] instanceof NBTTagCompound) - return; - for (Object s : delta) { - NBT[0].remove((String) s); - } - } - } - }).parser(new Parser() { - - @Override - public String getVariableNamePattern() { - return ".+"; - } - - @Override - @Nullable - public NBTTagCompound parse(String rawNBT, ParseContext context) { - if (rawNBT.startsWith("nbt:{") && rawNBT.endsWith("}")) { - NBTTagCompound NBT = parseRawNBT(rawNBT.substring(4)); - return NBT; - } - return null; - } - - @Override - public String toString(NBTTagCompound compound, int arg1) { - return compound.toString(); - } - - @Override - public String toVariableNameString(NBTTagCompound compound) { - return compound.toString(); - } - }).serializer(new Serializer() { - - @Override - public Fields serialize(NBTTagCompound compound) throws NotSerializableException { - Fields f = new Fields(); - f.putObject("asString", compound.toString()); - return f; - } - - @Override - public void deserialize(NBTTagCompound compound, Fields f) throws StreamCorruptedException, NotSerializableException { - assert false; - } - - @Override - protected boolean canBeInstantiated() { - return false; - } - - @Override - protected NBTTagCompound deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { - String raw = fields.getObject("asString", String.class); - NBTTagCompound compound = parseRawNBT(raw); - if (compound == null) { - throw new StreamCorruptedException("Unable to parse NBT from a variable: " + raw); - } - return compound; - } - - @Override - @Nullable - public NBTTagCompound deserialize(String s) { - NBTTagCompound compound = parseRawNBT(s); - return compound; - } - - @Override - public boolean mustSyncDeserialization() { - return true; - } - })); - - } - - @Override - public void registerNBTListClassInfo() { - Classes.registerClass(new ClassInfo(NBTTagList.class, "nbtlist").user("nbt ?list ?(tag)?").name("NBT List").changer(new Changer() { - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD) { - return CollectionUtils.array(Byte.class, Short.class, Integer.class, Long.class, Float.class, Double.class, String.class, NBTTagCompound.class, NBTTagList.class); - } - return null; - } - - @Override - public void change(NBTTagList[] nbtList, @Nullable Object[] delta, ChangeMode mode) { - if (delta.length == 0) - return; - if (delta[0] instanceof Number) { - addToList(nbtList, convertToNBT((Number) delta[0])); - } else if (delta[0] instanceof String) { - addToList(nbtList, convertToNBT((String) delta[0])); - } else if (delta[0] instanceof NBTBase) { - addToList(nbtList, delta[0]); - } - } - }).parser(new Parser() { - - @Override - public String getVariableNamePattern() { - return ".+"; - } - - @Override - @Nullable - public NBTTagList parse(String listString, ParseContext context) { - if ((listString.startsWith("nbt:[") || listString.startsWith("nbtlist:[")) && listString.endsWith("]")) { - int substring; - if (listString.startsWith("nbt:[")) { - substring = 4; - } else { // "nbtlist:[WHATEVER]" - substring = 8; - } - NBTTagCompound tempNBT = parseRawNBT("{temp:" + listString.substring(substring) + "}"); - NBTTagList parsedList = (NBTTagList) tempNBT.get("temp"); - return parsedList; - } - return null; - } - - @Override - public String toString(NBTTagList nbtList, int arg1) { - return nbtList.toString(); - } - - @Override - public String toVariableNameString(NBTTagList nbtList) { - return nbtList.toString(); - } - }).serializer(new Serializer() { - - @Override - public Fields serialize(NBTTagList nbtList) throws NotSerializableException { - Fields f = new Fields(); - f.putObject("asString", nbtList.toString()); - return f; - } - - @Override - public void deserialize(NBTTagList nbtList, Fields f) throws StreamCorruptedException, NotSerializableException { - assert false; - } - - @Override - protected boolean canBeInstantiated() { - return false; - } - - @Override - protected NBTTagList deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { - String s = fields.getObject("asString", String.class); - NBTTagCompound tempNBT = parseRawNBT("{temp:" + s + "}"); - if (tempNBT == null || !tempNBT.hasKey("temp")) { - throw new StreamCorruptedException("Unable to parse NBT list from a variable: " + s); - } - NBTTagList nbtList = (NBTTagList) tempNBT.get("temp"); - return nbtList; - } - - @Override - @Nullable - public NBTTagList deserialize(String s) { - NBTTagCompound tempNBT = parseRawNBT("{temp:" + s + "}"); - NBTTagList nbtList = (NBTTagList) tempNBT.get("temp"); - return nbtList; - } - - @Override - public boolean mustSyncDeserialization() { - return true; - } - })); - } - - @Override - public NBTTagCompound getEntityNBT(Entity entity) { - net.minecraft.server.v1_8_R3.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - NBTTagCompound NBT = new NBTTagCompound(); - nmsEntity.e(NBT); - return NBT; - } - - @Override - public NBTTagCompound getTileNBT(Block block) { - NBTTagCompound NBT = new NBTTagCompound(); - World nmsWorld = ((CraftWorld) block.getWorld()).getHandle(); - TileEntity tileEntity = nmsWorld.getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ())); - if (tileEntity == null) - return null; - tileEntity.b(NBT); - return NBT; - } - - @Override - public NBTTagCompound getItemNBT(ItemStack itemStack) { - if (itemStack == null || itemStack.getType() == Material.AIR) - return null; - NBTTagCompound itemNBT = CraftItemStack.asNMSCopy(itemStack).getTag(); - if (itemNBT == null) - itemNBT = new NBTTagCompound(); - return itemNBT; - } - - @Override - public void setEntityNBT(Entity entity, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - net.minecraft.server.v1_8_R3.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.f((NBTTagCompound) newCompound); - } - } - - @Override - public void setTileNBT(Block block, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - World nmsWorld = ((CraftWorld) block.getWorld()).getHandle(); - TileEntity tileEntity = nmsWorld.getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ())); - if (tileEntity == null) - return; - tileEntity.a((NBTTagCompound) newCompound); - tileEntity.update(); - nmsWorld.notify(tileEntity.getPosition()); - } - } - - @Override - public ItemStack getItemWithNBT(ItemStack itemStack, Object compound) { - net.minecraft.server.v1_8_R3.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); - if (compound instanceof NBTTagCompound && itemStack != null) { - if (itemStack.getType() == Material.AIR) - return null; - if (((NBTTagCompound) compound).isEmpty()) - return itemStack; - nmsItem.setTag((NBTTagCompound) compound); - ItemStack newItem = CraftItemStack.asBukkitCopy(nmsItem); - return newItem; - } else if (compound == null) { - nmsItem.setTag(null); - ItemStack newItem = CraftItemStack.asBukkitCopy(nmsItem); - return newItem; - } - return itemStack; - } - - @Override - public NBTTagCompound getFileNBT(File file) { - FileInputStream fis = null; - try { - fis = new FileInputStream(file); - } catch (FileNotFoundException ex) { - return null; //File doesn't exist. - } - NBTTagCompound fileNBT = null; - try { - fileNBT = NBTCompressedStreamTools.a(fis); - fis.close(); - } catch (IOException ex) { - if (ex instanceof EOFException) { - ; //Nothing. - } else { - ex.printStackTrace(); - } - } - return fileNBT; - } - - @Override - public void setFileNBT(File file, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - OutputStream os = null; - try { - os = new FileOutputStream(file); - } catch (FileNotFoundException ex) { - ex.printStackTrace(); - } - try { - NBTCompressedStreamTools.a((NBTTagCompound) newCompound, os); - os.close(); - } catch (IOException ex) { - if (ex instanceof EOFException) { - ; //Ignore, just end of the file - } else { - ex.printStackTrace(); - } - } - } - } - - @Override - public NBTBase convertToNBT(Number number) { - if (number instanceof Byte) { - return new NBTTagByte((byte) number); - } else if (number instanceof Short) { - return new NBTTagShort((short) number); - } else if (number instanceof Integer) { - return new NBTTagInt((int) number); - } else if (number instanceof Long) { - return new NBTTagLong((long) number); - } else if (number instanceof Float) { - return new NBTTagFloat((float) number); - } else if (number instanceof Double) { - return new NBTTagDouble((double) number); - } - return null; - } - - public NBTTagString convertToNBT(String string) { - return new NBTTagString(string); - } - - @Override - public String getMCId(ItemStack itemStack) { - net.minecraft.server.v1_8_R3.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); - MinecraftKey mcKey = Item.REGISTRY.c(nmsItem.getItem()); - return mcKey.toString(); - } - - @Override - public ItemStack getItemFromMcId(String mcId) { - MinecraftKey mcKey = new MinecraftKey(mcId); - Item nmsItem = (Item) Item.REGISTRY.get(mcKey); - return CraftItemStack.asNewCraftStack(nmsItem); - } - - @Override - public boolean getNoClip(Entity entity) { - net.minecraft.server.v1_8_R3.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.noclip; - } - - @Override - public void setNoClip(Entity entity, boolean noclip) { - net.minecraft.server.v1_8_R3.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.noclip = noclip; - } - - @Override - public boolean getFireProof(Entity entity) { - net.minecraft.server.v1_8_R3.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isFireProof(); - } - - @Override - public void setFireProof(Entity entity, boolean fireProof) { - net.minecraft.server.v1_8_R3.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - ReflectionUtils.setField("fireProof", nmsEntity.getClass(), nmsEntity, fireProof); - } - - @Override - public Location getLastLocation(Entity entity) { - net.minecraft.server.v1_8_R3.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - org.bukkit.World world = nmsEntity.world.getWorld(); - Location lastEntLoc = new Location(world, nmsEntity.P, nmsEntity.Q, nmsEntity.R); - return lastEntLoc; - } - - @Override - public float getEntityStepLength(Entity entity) { - net.minecraft.server.v1_8_R3.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.S; - } - - @Override - public void setEntityStepLength(Entity entity, float length) { - net.minecraft.server.v1_8_R3.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.S = length; - } - - @Override - public boolean getElytraGlideState(Entity entity) { - Bukkit.getLogger().warning("Executed \"Elytra Glide State\" code on 1.8! How the hell did this even happen!!"); - return false; - } - - public void setElytraGlideState(Entity entity, boolean glide) { - Bukkit.getLogger().warning("Executed \"Elytra Glide State\" code on 1.8! How the hell did this even happen!!"); - } - - public boolean getNoGravity(Entity entity) { - Bukkit.getLogger().warning("Executed \"Get no gravity state of entity\" code on 1.8! How the hell did this even happen!!"); - return false; - } - - public void setNoGravity(Entity entity, boolean noGravity) { - Bukkit.getLogger().warning("Executed \"Set no gravity state of entity\" code on 1.8! How the hell did this even happen!!"); - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/util/NMS_v1_9_R1.java b/src/me/TheBukor/SkStuff/util/NMS_v1_9_R1.java deleted file mode 100644 index 9482381..0000000 --- a/src/me/TheBukor/SkStuff/util/NMS_v1_9_R1.java +++ /dev/null @@ -1,732 +0,0 @@ -package me.TheBukor.SkStuff.util; - -import java.io.EOFException; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.NotSerializableException; -import java.io.OutputStream; -import java.io.StreamCorruptedException; -import java.util.Iterator; -import java.util.LinkedHashSet; - -import javax.annotation.Nullable; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.craftbukkit.v1_9_R1.CraftWorld; -import org.bukkit.craftbukkit.v1_9_R1.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_9_R1.entity.CraftLivingEntity; -import org.bukkit.craftbukkit.v1_9_R1.inventory.CraftItemStack; -import org.bukkit.entity.Entity; -import org.bukkit.inventory.ItemStack; - -import ch.njol.skript.Skript; -import ch.njol.skript.classes.Changer; -import ch.njol.skript.classes.ClassInfo; -import ch.njol.skript.classes.Parser; -import ch.njol.skript.classes.Serializer; -import ch.njol.skript.lang.ParseContext; -import ch.njol.skript.registrations.Classes; -import ch.njol.util.coll.CollectionUtils; -import ch.njol.yggdrasil.Fields; -import net.minecraft.server.v1_9_R1.BlockPosition; -import net.minecraft.server.v1_9_R1.EntityInsentient; -import net.minecraft.server.v1_9_R1.EntityLiving; -import net.minecraft.server.v1_9_R1.IBlockData; -import net.minecraft.server.v1_9_R1.Item; -import net.minecraft.server.v1_9_R1.MinecraftKey; -import net.minecraft.server.v1_9_R1.MojangsonParseException; -import net.minecraft.server.v1_9_R1.MojangsonParser; -import net.minecraft.server.v1_9_R1.NBTBase; -import net.minecraft.server.v1_9_R1.NBTCompressedStreamTools; -import net.minecraft.server.v1_9_R1.NBTTagByte; -import net.minecraft.server.v1_9_R1.NBTTagCompound; -import net.minecraft.server.v1_9_R1.NBTTagDouble; -import net.minecraft.server.v1_9_R1.NBTTagFloat; -import net.minecraft.server.v1_9_R1.NBTTagInt; -import net.minecraft.server.v1_9_R1.NBTTagList; -import net.minecraft.server.v1_9_R1.NBTTagLong; -import net.minecraft.server.v1_9_R1.NBTTagShort; -import net.minecraft.server.v1_9_R1.NBTTagString; -import net.minecraft.server.v1_9_R1.PathfinderGoal; -import net.minecraft.server.v1_9_R1.PathfinderGoalSelector; -import net.minecraft.server.v1_9_R1.TileEntity; -import net.minecraft.server.v1_9_R1.World; - -public class NMS_v1_9_R1 implements NMSInterface { - - @Override - public Object getNBTTag(Object compound, String tag) { - if (compound instanceof NBTTagCompound) { - return ((NBTTagCompound) compound).get(tag); - } - return null; - } - - @Override - public void setNBTTag(Object compound, String tag, Object toSet) { - if (compound instanceof NBTTagCompound && (toSet instanceof NBTBase || toSet instanceof Number || toSet instanceof String)) { - NBTBase converted = null; - if (toSet instanceof Number) { - converted = convertToNBT((Number) toSet); - } else if (toSet instanceof String) { - converted = convertToNBT((String) toSet); - } else { //Already an NBTBase - converted = (NBTBase) toSet; //No need to convert anything - } - ((NBTTagCompound) compound).set(tag, converted); - } - } - - @Override - public void removeNBTTag(Object compound, String tag) { - if (compound instanceof NBTTagCompound) { - ((NBTTagCompound) compound).remove(tag); - } - } - - @Override - public byte getTypeId(Object nbtBase) { - if (nbtBase instanceof NBTBase) { - return ((NBTBase) nbtBase).getTypeId(); - } - return 0; - } - - @Override - public Object getNBTTagValue(Object compound, String tag, byte typeId) { - if (compound instanceof NBTTagCompound) { - switch (typeId) { - case 1: - return ((NBTTagCompound) compound).getByte(tag); - case 2: - return ((NBTTagCompound) compound).getShort(tag); - case 3: - return ((NBTTagCompound) compound).getInt(tag); - case 4: - return ((NBTTagCompound) compound).getLong(tag); - case 5: - return ((NBTTagCompound) compound).getFloat(tag); - case 6: - return ((NBTTagCompound) compound).getDouble(tag); - case 7: //Byte array, only used in chunk files. Also doesn't have support for the MojangsonParser. - break; - case 8: - return ((NBTTagCompound) compound).getString(tag); - case 9: - int i; - NBTTagList list = null; - for (i = 1; i <= 11; i++) { //To get a list I need to know the type of the tags it contains inside, - //since I can't predict what type the list will have, I just loop all of the IDs until I find a non-empty list. - list = ((NBTTagCompound) compound).getList(tag, i); //Try to get the list with the ID "loop-number". - if (!list.isEmpty()) { //If list is not empty. - break; //Stop loop. - } - } - return list; //May be null - case 10: - return ((NBTTagCompound) compound).getCompound(tag); - case 11: //Integer array, this one is only used on the chunk files (and maybe schematic files?). - return ((NBTTagCompound) compound).getIntArray(tag); - default: //This should never happen, but it's better to have this just in case it spills errors everywhere. - break; - } - } - return null; - } - - @Override - public void addToCompound(Object compound, Object toAdd) { - if (compound instanceof NBTTagCompound && toAdd instanceof NBTTagCompound) { - ((NBTTagCompound) compound).a((NBTTagCompound) toAdd); - } - } - - @Override - public void removeFromCompound(Object compound, String ... toRemove) { - if (compound instanceof NBTTagCompound) { - for (String s : toRemove) { - ((NBTTagCompound) compound).remove(s); - } - } - } - - @Override - public NBTTagCompound parseRawNBT(String rawNBT) { - NBTTagCompound parsedNBT = null; - try { - parsedNBT = MojangsonParser.parse(rawNBT); - } catch (MojangsonParseException ex) { - Skript.warning("Error when parsing NBT - " + ex.getMessage()); - return null; - } - return parsedNBT; - } - - @Override - public Object[] getContents(Object nbtList) { - if (nbtList instanceof NBTTagList) { - Object[] contents = new Object[((NBTTagList) nbtList).size()]; - for (int i = 0; i < ((NBTTagList) nbtList).size(); i++) { - if (getIndex(nbtList, i) != null) { - contents[i] = getIndex(nbtList, i); - } - } - return contents; - } - return null; - } - - @Override - public void addToList(Object nbtList, Object toAdd) { - if (nbtList instanceof NBTTagList && toAdd instanceof NBTBase) { - ((NBTTagList) nbtList).add((NBTBase) toAdd); - } - } - - @Override - public void removeFromList(Object nbtList, int index) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - ((NBTTagList) nbtList).remove(index); - } - } - - @Override - public void setIndex(Object nbtList, int index, Object toSet) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - if (toSet instanceof NBTBase) { - ((NBTTagList) nbtList).a(index, (NBTBase) toSet); - } else if (toSet instanceof Number) { - ((NBTTagList) nbtList).a(index, convertToNBT((Number) toSet)); - } else if (toSet instanceof String) { - ((NBTTagList) nbtList).a(index, convertToNBT((String) toSet)); - } - } - } - - @Override - public Object getIndex(Object nbtList, int index) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - NBTBase value = ((NBTTagList) nbtList).h(index); - if (value instanceof NBTTagByte) { - return ((NBTTagByte) value).f(); //Byte stored inside a NBTNumber - } else if (value instanceof NBTTagShort) { - return ((NBTTagShort) value).e(); //Short inside a NBTNumber - } else if (value instanceof NBTTagInt) { - return ((NBTTagInt) value).d(); //Integer inside a NBTNumber - } else if (value instanceof NBTTagLong) { - return ((NBTTagLong) value).c(); //Long inside a NBTNumber - } else if (value instanceof NBTTagFloat) { - return ((NBTTagFloat) value).h(); //Float inside a NBTNumber - } else if (value instanceof NBTTagDouble) { - return ((NBTTagDouble) value).g(); //Double inside a NBTNumber - } else if (value instanceof NBTTagString) { - return ((NBTTagString) value).a_(); //String inside the NBTTagString - } else if (value instanceof NBTBase) { - return value; //No need to convert this - } - } - return null; - } - - @Override - public void clearPathfinderGoals(Entity entity) { - EntityInsentient nmsEnt = (EntityInsentient) ((CraftEntity) entity).getHandle(); - ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, nmsEnt.goalSelector)).clear(); - ((LinkedHashSet) ReflectionUtils.getField("c", PathfinderGoalSelector.class, nmsEnt.goalSelector)).clear(); - ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, nmsEnt.targetSelector)).clear(); - ((LinkedHashSet) ReflectionUtils.getField("c", PathfinderGoalSelector.class, nmsEnt.targetSelector)).clear(); - } - - @Override - public void removePathfinderGoal(Object entity, Class goalClass, boolean isTargetSelector) { - if (entity instanceof EntityInsentient) { - ((EntityInsentient) entity).setGoalTarget(null); - if (isTargetSelector) { - Iterator goals = ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, ((EntityInsentient) entity).targetSelector)).iterator(); - while (goals.hasNext()) { - Object goal = goals.next(); - if (ReflectionUtils.getField("a", goal.getClass(), goal).getClass() == goalClass) { - goals.remove(); - } - } - } else { - Iterator goals = ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, ((EntityInsentient) entity).goalSelector)).iterator(); - while (goals.hasNext()) { - Object goal = goals.next(); - if (ReflectionUtils.getField("a", goal.getClass(), goal).getClass() == goalClass) { - goals.remove(); - } - } - } - } - } - - @Override - public void addPathfinderGoal(Object entity, int priority, Object goal, boolean isTargetSelector) { - if (entity instanceof EntityInsentient && goal instanceof PathfinderGoal) { - if (isTargetSelector) - ((EntityInsentient) entity).targetSelector.a(priority, (PathfinderGoal) goal); - else - ((EntityInsentient) entity).goalSelector.a(priority, (PathfinderGoal) goal); - } - } - - @Override - public void registerCompoundClassInfo() { - Classes.registerClass(new ClassInfo(NBTTagCompound.class, "compound").user("((nbt)?( ?tag)?) ?compounds?").name("NBT Compound").changer(new Changer() { - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) { - return CollectionUtils.array(String.class, NBTTagCompound.class); - } - return null; - } - - @Override - public void change(NBTTagCompound[] NBT, @Nullable Object[] delta, ChangeMode mode) { - if (mode == ChangeMode.ADD) { - if (delta[0] instanceof String) { - NBTTagCompound parsedNBT = parseRawNBT((String) delta[0]); - addToCompound(NBT[0], parsedNBT); - } else { - addToCompound(NBT[0], delta[0]); - } - } else if (mode == ChangeMode.REMOVE) { - if (delta[0] instanceof NBTTagCompound) - return; - for (Object s : delta) { - NBT[0].remove((String) s); - } - } - } - }).parser(new Parser() { - - @Override - public String getVariableNamePattern() { - return ".+"; - } - - @Override - @Nullable - public NBTTagCompound parse(String rawNBT, ParseContext context) { - if (rawNBT.startsWith("nbt:{") && rawNBT.endsWith("}")) { - NBTTagCompound NBT = parseRawNBT(rawNBT.substring(4)); - return NBT; - } - return null; - } - - @Override - public String toString(NBTTagCompound compound, int arg1) { - return compound.toString(); - } - - @Override - public String toVariableNameString(NBTTagCompound compound) { - return compound.toString(); - } - }).serializer(new Serializer() { - - @Override - public Fields serialize(NBTTagCompound compound) throws NotSerializableException { - Fields f = new Fields(); - f.putObject("asString", compound.toString()); - return f; - } - - @Override - public void deserialize(NBTTagCompound compound, Fields f) throws StreamCorruptedException, NotSerializableException { - assert false; - } - - @Override - protected boolean canBeInstantiated() { - return false; - } - - @Override - protected NBTTagCompound deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { - String raw = fields.getObject("asString", String.class); - NBTTagCompound compound = parseRawNBT(raw); - if (compound == null) { - throw new StreamCorruptedException("Unable to parse NBT from a variable: " + raw); - } - return compound; - } - - @Override - @Nullable - public NBTTagCompound deserialize(String s) { - NBTTagCompound compound = parseRawNBT(s); - return compound; - } - - @Override - public boolean mustSyncDeserialization() { - return true; - } - })); - - } - - @Override - public void registerNBTListClassInfo() { - Classes.registerClass(new ClassInfo(NBTTagList.class, "nbtlist").user("nbt ?list ?(tag)?").name("NBT List").changer(new Changer() { - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD) { - return CollectionUtils.array(Byte.class, Short.class, Integer.class, Long.class, Float.class, Double.class, String.class, NBTTagCompound.class, NBTTagList.class); - } - return null; - } - - @Override - public void change(NBTTagList[] nbtList, @Nullable Object[] delta, ChangeMode mode) { - if (delta.length == 0) - return; - if (delta[0] instanceof Number) { - addToList(nbtList[0], convertToNBT((Number) delta[0])); - } else if (delta[0] instanceof String) { - addToList(nbtList[0], convertToNBT((String) delta[0])); - } else if (delta[0] instanceof NBTBase) { - addToList(nbtList[0], delta[0]); - } - } - }).parser(new Parser() { - - @Override - public String getVariableNamePattern() { - return ".+"; - } - - @Override - @Nullable - public NBTTagList parse(String listString, ParseContext context) { - if ((listString.startsWith("nbt:[") || listString.startsWith("nbtlist:[")) && listString.endsWith("]")) { - int substring; - if (listString.startsWith("nbt:[")) { - substring = 4; - } else { // "nbtlist:[WHATEVER]" - substring = 8; - } - NBTTagCompound tempNBT = parseRawNBT("{temp:" + listString.substring(substring) + "}"); - NBTTagList parsedList = (NBTTagList) tempNBT.get("temp"); - return parsedList; - } - return null; - } - - @Override - public String toString(NBTTagList nbtList, int arg1) { - return nbtList.toString(); - } - - @Override - public String toVariableNameString(NBTTagList nbtList) { - return nbtList.toString(); - } - }).serializer(new Serializer() { - - @Override - public Fields serialize(NBTTagList nbtList) throws NotSerializableException { - Fields f = new Fields(); - f.putObject("asString", nbtList.toString()); - return f; - } - - @Override - public void deserialize(NBTTagList nbtList, Fields f) throws StreamCorruptedException, NotSerializableException { - assert false; - } - - @Override - protected boolean canBeInstantiated() { - return false; - } - - @Override - protected NBTTagList deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { - String s = fields.getObject("asString", String.class); - NBTTagCompound tempNBT = parseRawNBT("{temp:" + s + "}"); - if (tempNBT == null || !tempNBT.hasKey("temp")) { - throw new StreamCorruptedException("Unable to parse NBT list from a variable: " + s); - } - NBTTagList nbtList = (NBTTagList) tempNBT.get("temp"); - return nbtList; - } - - @Override - @Nullable - public NBTTagList deserialize(String s) { - NBTTagCompound tempNBT = parseRawNBT("{temp:" + s + "}"); - NBTTagList nbtList = (NBTTagList) tempNBT.get("temp"); - return nbtList; - } - - @Override - public boolean mustSyncDeserialization() { - return true; - } - })); - } - - @Override - public NBTTagCompound getEntityNBT(Entity entity) { - net.minecraft.server.v1_9_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - NBTTagCompound NBT = new NBTTagCompound(); - nmsEntity.e(NBT); - return NBT; - } - - @Override - public NBTTagCompound getTileNBT(Block block) { - NBTTagCompound NBT = new NBTTagCompound(); - World nmsWorld = ((CraftWorld) block.getWorld()).getHandle(); - TileEntity tileEntity = nmsWorld.getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ())); - if (tileEntity == null) - return null; - tileEntity.save(NBT); - return NBT; - } - - @Override - public NBTTagCompound getItemNBT(ItemStack itemStack) { - if (itemStack == null || itemStack.getType() == Material.AIR) - return null; - NBTTagCompound itemNBT = CraftItemStack.asNMSCopy(itemStack).getTag(); - if (itemNBT == null) - itemNBT = new NBTTagCompound(); - return itemNBT; - } - - @Override - public void setEntityNBT(Entity entity, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - net.minecraft.server.v1_9_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.f((NBTTagCompound) newCompound); - } - } - - @Override - public void setTileNBT(Block block, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - World nmsWorld = ((CraftWorld) block.getWorld()).getHandle(); - TileEntity tileEntity = nmsWorld.getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ())); - if (tileEntity == null) - return; - tileEntity.a((NBTTagCompound) newCompound); - tileEntity.update(); - IBlockData tileEntType = nmsWorld.getType(new BlockPosition(block.getX(), block.getY(), block.getZ())); - nmsWorld.notify(tileEntity.getPosition(), tileEntType, tileEntType, 3); - } - } - - @Override - public ItemStack getItemWithNBT(ItemStack itemStack, Object compound) { - net.minecraft.server.v1_9_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); - if (compound instanceof NBTTagCompound && itemStack != null) { - if (itemStack.getType() == Material.AIR) - return null; - if (((NBTTagCompound) compound).isEmpty()) - return itemStack; - nmsItem.setTag((NBTTagCompound) compound); - ItemStack newItem = CraftItemStack.asBukkitCopy(nmsItem); - return newItem; - } else if (compound == null) { - nmsItem.setTag(null); - ItemStack newItem = CraftItemStack.asBukkitCopy(nmsItem); - return newItem; - } - return itemStack; - } - - @Override - public NBTTagCompound getFileNBT(File file) { - FileInputStream fis = null; - try { - fis = new FileInputStream(file); - } catch (FileNotFoundException ex) { - return null; //File doesn't exist. - } - NBTTagCompound fileNBT = null; - try { - fileNBT = NBTCompressedStreamTools.a(fis); - fis.close(); - } catch (IOException ex) { - if (ex instanceof EOFException) { - ; //Nothing. - } else { - ex.printStackTrace(); - } - } - return fileNBT; - } - - @Override - public void setFileNBT(File file, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - OutputStream os = null; - try { - os = new FileOutputStream(file); - } catch (FileNotFoundException ex) { - ex.printStackTrace(); - } - try { - NBTCompressedStreamTools.a((NBTTagCompound) newCompound, os); - os.close(); - } catch (IOException ex) { - if (ex instanceof EOFException) { - ; //Ignore, just end of the file - } else { - ex.printStackTrace(); - } - } - } - } - - @Override - public NBTBase convertToNBT(Number number) { - if (number instanceof Byte) { - return new NBTTagByte((byte) number); - } else if (number instanceof Short) { - return new NBTTagShort((short) number); - } else if (number instanceof Integer) { - return new NBTTagInt((int) number); - } else if (number instanceof Long) { - return new NBTTagLong((long) number); - } else if (number instanceof Float) { - return new NBTTagFloat((float) number); - } else if (number instanceof Double) { - return new NBTTagDouble((double) number); - } - return null; - } - - @Override - public NBTTagString convertToNBT(String string) { - return new NBTTagString(string); - } - - @Override - public String getMCId(ItemStack itemStack) { - net.minecraft.server.v1_9_R1.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); - MinecraftKey mcKey = Item.REGISTRY.b(nmsItem.getItem()); - return mcKey.toString(); - } - - @Override - public ItemStack getItemFromMcId(String mcId) { - MinecraftKey mcKey = new MinecraftKey(mcId); - Item nmsItem = (Item) Item.REGISTRY.get(mcKey); - return CraftItemStack.asNewCraftStack(nmsItem); - } - - @Override - public boolean getNoClip(Entity entity) { - net.minecraft.server.v1_9_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.noclip; - } - - @Override - public void setNoClip(Entity entity, boolean noclip) { - net.minecraft.server.v1_9_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.noclip = noclip; - } - - @Override - public boolean getFireProof(Entity entity) { - net.minecraft.server.v1_9_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isFireProof(); - } - - @Override - public void setFireProof(Entity entity, boolean fireProof) { - net.minecraft.server.v1_9_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - ReflectionUtils.setField("fireProof", nmsEntity.getClass(), nmsEntity, fireProof); - } - - /* - @SuppressWarnings("unchecked") - @Override - public ItemStack[] getEndermanBlocks(Entity enderman) { - EntityEnderman nmsEnder = ((CraftEnderman) enderman).getHandle(); - Set nmsBlocks = (Set) ReflectionUtils.getField("c", EntityEnderman.class, nmsEnder); - ItemStack[] items = new ItemStack[nmsBlocks.size()]; - int i = 0; - for (net.minecraft.server.v1_9_R1.Block nmsBlock : nmsBlocks) { - IBlockData nmsBlockData = nmsBlock.getBlockData(); - int dataValue = nmsBlock.toLegacyData(nmsBlockData); - net.minecraft.server.v1_9_R1.ItemStack nmsItem = new net.minecraft.server.v1_9_R1.ItemStack(nmsBlock, 1, dataValue); - ItemStack bukkitItem = CraftItemStack.asCraftMirror(nmsItem); - items[i] = bukkitItem; - i++; - } - return items; - } - - @SuppressWarnings("unchecked") - @Override - public void setEndermanBlocks(Entity enderman, ItemStack... blocks) { - EntityEnderman nmsEnder = ((CraftEnderman) enderman).getHandle(); - Set nmsBlocks = (Set) ReflectionUtils.getField("c", EntityEnderman.class, nmsEnder); - for (ItemStack block : blocks) { - if (!block.getType().isBlock()) - return; - // TODO Figure out how to get a Blocks from a Bukkit ItemStack - // Blocks.class has a PRIVATE method to get from a MC id. - } - } - */ - - @Override - public Location getLastLocation(Entity entity) { - net.minecraft.server.v1_9_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - org.bukkit.World world = nmsEntity.world.getWorld(); - Location lastEntLoc = new Location(world, nmsEntity.M, nmsEntity.N, nmsEntity.O); - return lastEntLoc; - } - - @Override - public float getEntityStepLength(Entity entity) { - net.minecraft.server.v1_9_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.P; - } - - @Override - public void setEntityStepLength(Entity entity, float length) { - net.minecraft.server.v1_9_R1.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.P = length; - } - - @Override - public boolean getElytraGlideState(Entity entity) { - EntityLiving nmsEntity = ((CraftLivingEntity) entity).getHandle(); - return nmsEntity.getFlag(7); - } - - public void setElytraGlideState(Entity entity, boolean glide) { - EntityLiving nmsEntity = ((CraftLivingEntity) entity).getHandle(); - nmsEntity.setFlag(7, glide); - } - - public boolean getNoGravity(Entity entity) { - Bukkit.getLogger().warning("Executed \"Get no gravity state of entity\" code on 1.9! How the hell did this even happen!!"); - return false; - } - - public void setNoGravity(Entity entity, boolean noGravity) { - Bukkit.getLogger().warning("Executed \"Set no gravity state of entity\" code on 1.9! How the hell did this even happen!!"); - } -} \ No newline at end of file diff --git a/src/me/TheBukor/SkStuff/util/NMS_v1_9_R2.java b/src/me/TheBukor/SkStuff/util/NMS_v1_9_R2.java deleted file mode 100644 index 8854c75..0000000 --- a/src/me/TheBukor/SkStuff/util/NMS_v1_9_R2.java +++ /dev/null @@ -1,732 +0,0 @@ -package me.TheBukor.SkStuff.util; - -import java.io.EOFException; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.NotSerializableException; -import java.io.OutputStream; -import java.io.StreamCorruptedException; -import java.util.Iterator; -import java.util.LinkedHashSet; - -import javax.annotation.Nullable; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.craftbukkit.v1_9_R2.entity.CraftLivingEntity; -import org.bukkit.craftbukkit.v1_9_R2.CraftWorld; -import org.bukkit.craftbukkit.v1_9_R2.entity.CraftEntity; -import org.bukkit.craftbukkit.v1_9_R2.inventory.CraftItemStack; -import org.bukkit.entity.Entity; -import org.bukkit.inventory.ItemStack; - -import ch.njol.skript.Skript; -import ch.njol.skript.classes.Changer; -import ch.njol.skript.classes.ClassInfo; -import ch.njol.skript.classes.Parser; -import ch.njol.skript.classes.Serializer; -import ch.njol.skript.lang.ParseContext; -import ch.njol.skript.registrations.Classes; -import ch.njol.util.coll.CollectionUtils; -import ch.njol.yggdrasil.Fields; -import net.minecraft.server.v1_9_R2.EntityLiving; -import net.minecraft.server.v1_9_R2.BlockPosition; -import net.minecraft.server.v1_9_R2.EntityInsentient; -import net.minecraft.server.v1_9_R2.IBlockData; -import net.minecraft.server.v1_9_R2.Item; -import net.minecraft.server.v1_9_R2.MinecraftKey; -import net.minecraft.server.v1_9_R2.MojangsonParseException; -import net.minecraft.server.v1_9_R2.MojangsonParser; -import net.minecraft.server.v1_9_R2.NBTBase; -import net.minecraft.server.v1_9_R2.NBTCompressedStreamTools; -import net.minecraft.server.v1_9_R2.NBTTagByte; -import net.minecraft.server.v1_9_R2.NBTTagCompound; -import net.minecraft.server.v1_9_R2.NBTTagDouble; -import net.minecraft.server.v1_9_R2.NBTTagFloat; -import net.minecraft.server.v1_9_R2.NBTTagInt; -import net.minecraft.server.v1_9_R2.NBTTagList; -import net.minecraft.server.v1_9_R2.NBTTagLong; -import net.minecraft.server.v1_9_R2.NBTTagShort; -import net.minecraft.server.v1_9_R2.NBTTagString; -import net.minecraft.server.v1_9_R2.PathfinderGoal; -import net.minecraft.server.v1_9_R2.PathfinderGoalSelector; -import net.minecraft.server.v1_9_R2.TileEntity; -import net.minecraft.server.v1_9_R2.World; - -public class NMS_v1_9_R2 implements NMSInterface { - - @Override - public Object getNBTTag(Object compound, String tag) { - if (compound instanceof NBTTagCompound) { - return ((NBTTagCompound) compound).get(tag); - } - return null; - } - - @Override - public void setNBTTag(Object compound, String tag, Object toSet) { - if (compound instanceof NBTTagCompound && (toSet instanceof NBTBase || toSet instanceof Number || toSet instanceof String)) { - NBTBase converted = null; - if (toSet instanceof Number) { - converted = convertToNBT((Number) toSet); - } else if (toSet instanceof String) { - converted = convertToNBT((String) toSet); - } else { //Already an NBTBase - converted = (NBTBase) toSet; //No need to convert anything - } - ((NBTTagCompound) compound).set(tag, converted); - } - } - - @Override - public void removeNBTTag(Object compound, String tag) { - if (compound instanceof NBTTagCompound) { - ((NBTTagCompound) compound).remove(tag); - } - } - - @Override - public byte getTypeId(Object nbtBase) { - if (nbtBase instanceof NBTBase) { - return ((NBTBase) nbtBase).getTypeId(); - } - return 0; - } - - @Override - public Object getNBTTagValue(Object compound, String tag, byte typeId) { - if (compound instanceof NBTTagCompound) { - switch (typeId) { - case 1: - return ((NBTTagCompound) compound).getByte(tag); - case 2: - return ((NBTTagCompound) compound).getShort(tag); - case 3: - return ((NBTTagCompound) compound).getInt(tag); - case 4: - return ((NBTTagCompound) compound).getLong(tag); - case 5: - return ((NBTTagCompound) compound).getFloat(tag); - case 6: - return ((NBTTagCompound) compound).getDouble(tag); - case 7: //Byte array, only used in chunk files. Also doesn't have support for the MojangsonParser. - break; - case 8: - return ((NBTTagCompound) compound).getString(tag); - case 9: - int i; - NBTTagList list = null; - for (i = 1; i <= 11; i++) { //To get a list I need to know the type of the tags it contains inside, - //since I can't predict what type the list will have, I just loop all of the IDs until I find a non-empty list. - list = ((NBTTagCompound) compound).getList(tag, i); //Try to get the list with the ID "loop-number". - if (!list.isEmpty()) { //If list is not empty. - break; //Stop loop. - } - } - return list; //May be null - case 10: - return ((NBTTagCompound) compound).getCompound(tag); - case 11: //Integer array, this one is only used on the chunk files (and maybe schematic files?). - return ((NBTTagCompound) compound).getIntArray(tag); - default: //This should never happen, but it's better to have this just in case it spills errors everywhere. - break; - } - } - return null; - } - - @Override - public void addToCompound(Object compound, Object toAdd) { - if (compound instanceof NBTTagCompound && toAdd instanceof NBTTagCompound) { - ((NBTTagCompound) compound).a((NBTTagCompound) toAdd); - } - } - - @Override - public void removeFromCompound(Object compound, String ... toRemove) { - if (compound instanceof NBTTagCompound) { - for (String s : toRemove) { - ((NBTTagCompound) compound).remove(s); - } - } - } - - @Override - public NBTTagCompound parseRawNBT(String rawNBT) { - NBTTagCompound parsedNBT = null; - try { - parsedNBT = MojangsonParser.parse(rawNBT); - } catch (MojangsonParseException ex) { - Skript.warning("Error when parsing NBT - " + ex.getMessage()); - return null; - } - return parsedNBT; - } - - @Override - public Object[] getContents(Object nbtList) { - if (nbtList instanceof NBTTagList) { - Object[] contents = new Object[((NBTTagList) nbtList).size()]; - for (int i = 0; i < ((NBTTagList) nbtList).size(); i++) { - if (getIndex(nbtList, i) != null) { - contents[i] = getIndex(nbtList, i); - } - } - return contents; - } - return null; - } - - @Override - public void addToList(Object nbtList, Object toAdd) { - if (nbtList instanceof NBTTagList && toAdd instanceof NBTBase) { - ((NBTTagList) nbtList).add((NBTBase) toAdd); - } - } - - @Override - public void removeFromList(Object nbtList, int index) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - ((NBTTagList) nbtList).remove(index); - } - } - - @Override - public void setIndex(Object nbtList, int index, Object toSet) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - if (toSet instanceof NBTBase) { - ((NBTTagList) nbtList).a(index, (NBTBase) toSet); - } else if (toSet instanceof Number) { - ((NBTTagList) nbtList).a(index, convertToNBT((Number) toSet)); - } else if (toSet instanceof String) { - ((NBTTagList) nbtList).a(index, convertToNBT((String) toSet)); - } - } - } - - @Override - public Object getIndex(Object nbtList, int index) { - if (nbtList instanceof NBTTagList && index >= 0 && index < ((NBTTagList) nbtList).size()) { - NBTBase value = ((NBTTagList) nbtList).h(index); - if (value instanceof NBTTagByte) { - return ((NBTTagByte) value).f(); //Byte stored inside a NBTNumber - } else if (value instanceof NBTTagShort) { - return ((NBTTagShort) value).e(); //Short inside a NBTNumber - } else if (value instanceof NBTTagInt) { - return ((NBTTagInt) value).d(); //Integer inside a NBTNumber - } else if (value instanceof NBTTagLong) { - return ((NBTTagLong) value).c(); //Long inside a NBTNumber - } else if (value instanceof NBTTagFloat) { - return ((NBTTagFloat) value).h(); //Float inside a NBTNumber - } else if (value instanceof NBTTagDouble) { - return ((NBTTagDouble) value).g(); //Double inside a NBTNumber - } else if (value instanceof NBTTagString) { - return ((NBTTagString) value).a_(); //String inside the NBTTagString - } else if (value instanceof NBTBase) { - return value; //No need to convert this - } - } - return null; - } - - @Override - public void clearPathfinderGoals(Entity entity) { - EntityInsentient nmsEnt = (EntityInsentient) ((CraftEntity) entity).getHandle(); - ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, nmsEnt.goalSelector)).clear(); - ((LinkedHashSet) ReflectionUtils.getField("c", PathfinderGoalSelector.class, nmsEnt.goalSelector)).clear(); - ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, nmsEnt.targetSelector)).clear(); - ((LinkedHashSet) ReflectionUtils.getField("c", PathfinderGoalSelector.class, nmsEnt.targetSelector)).clear(); - } - - @Override - public void removePathfinderGoal(Object entity, Class goalClass, boolean isTargetSelector) { - if (entity instanceof EntityInsentient) { - ((EntityInsentient) entity).setGoalTarget(null); - if (isTargetSelector) { - Iterator goals = ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, ((EntityInsentient) entity).targetSelector)).iterator(); - while (goals.hasNext()) { - Object goal = goals.next(); - if (ReflectionUtils.getField("a", goal.getClass(), goal).getClass() == goalClass) { - goals.remove(); - } - } - } else { - Iterator goals = ((LinkedHashSet) ReflectionUtils.getField("b", PathfinderGoalSelector.class, ((EntityInsentient) entity).goalSelector)).iterator(); - while (goals.hasNext()) { - Object goal = goals.next(); - if (ReflectionUtils.getField("a", goal.getClass(), goal).getClass() == goalClass) { - goals.remove(); - } - } - } - } - } - - @Override - public void addPathfinderGoal(Object entity, int priority, Object goal, boolean isTargetSelector) { - if (entity instanceof EntityInsentient && goal instanceof PathfinderGoal) { - if (isTargetSelector) - ((EntityInsentient) entity).targetSelector.a(priority, (PathfinderGoal) goal); - else - ((EntityInsentient) entity).goalSelector.a(priority, (PathfinderGoal) goal); - } - } - - @Override - public void registerCompoundClassInfo() { - Classes.registerClass(new ClassInfo(NBTTagCompound.class, "compound").user("((nbt)?( ?tag)?) ?compounds?").name("NBT Compound").changer(new Changer() { - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD || mode == ChangeMode.REMOVE) { - return CollectionUtils.array(String.class, NBTTagCompound.class); - } - return null; - } - - @Override - public void change(NBTTagCompound[] NBT, @Nullable Object[] delta, ChangeMode mode) { - if (mode == ChangeMode.ADD) { - if (delta[0] instanceof String) { - NBTTagCompound parsedNBT = parseRawNBT((String) delta[0]); - addToCompound(NBT[0], parsedNBT); - } else { - addToCompound(NBT[0], delta[0]); - } - } else if (mode == ChangeMode.REMOVE) { - if (delta[0] instanceof NBTTagCompound) - return; - for (Object s : delta) { - NBT[0].remove((String) s); - } - } - } - }).parser(new Parser() { - - @Override - public String getVariableNamePattern() { - return ".+"; - } - - @Override - @Nullable - public NBTTagCompound parse(String rawNBT, ParseContext context) { - if (rawNBT.startsWith("nbt:{") && rawNBT.endsWith("}")) { - NBTTagCompound NBT = parseRawNBT(rawNBT.substring(4)); - return NBT; - } - return null; - } - - @Override - public String toString(NBTTagCompound compound, int arg1) { - return compound.toString(); - } - - @Override - public String toVariableNameString(NBTTagCompound compound) { - return compound.toString(); - } - }).serializer(new Serializer() { - - @Override - public Fields serialize(NBTTagCompound compound) throws NotSerializableException { - Fields f = new Fields(); - f.putObject("asString", compound.toString()); - return f; - } - - @Override - public void deserialize(NBTTagCompound compound, Fields f) throws StreamCorruptedException, NotSerializableException { - assert false; - } - - @Override - protected boolean canBeInstantiated() { - return false; - } - - @Override - protected NBTTagCompound deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { - String raw = fields.getObject("asString", String.class); - NBTTagCompound compound = parseRawNBT(raw); - if (compound == null) { - throw new StreamCorruptedException("Unable to parse NBT from a variable: " + raw); - } - return compound; - } - - @Override - @Nullable - public NBTTagCompound deserialize(String s) { - NBTTagCompound compound = parseRawNBT(s); - return compound; - } - - @Override - public boolean mustSyncDeserialization() { - return true; - } - })); - - } - - @Override - public void registerNBTListClassInfo() { - Classes.registerClass(new ClassInfo(NBTTagList.class, "nbtlist").user("nbt ?list ?(tag)?").name("NBT List").changer(new Changer() { - - @SuppressWarnings("unchecked") - @Override - @Nullable - public Class[] acceptChange(ChangeMode mode) { - if (mode == ChangeMode.ADD) { - return CollectionUtils.array(Byte.class, Short.class, Integer.class, Long.class, Float.class, Double.class, String.class, NBTTagCompound.class, NBTTagList.class); - } - return null; - } - - @Override - public void change(NBTTagList[] nbtList, @Nullable Object[] delta, ChangeMode mode) { - if (delta.length == 0) - return; - if (delta[0] instanceof Number) { - addToList(nbtList[0], convertToNBT((Number) delta[0])); - } else if (delta[0] instanceof String) { - addToList(nbtList[0], convertToNBT((String) delta[0])); - } else if (delta[0] instanceof NBTBase) { - addToList(nbtList[0], delta[0]); - } - } - }).parser(new Parser() { - - @Override - public String getVariableNamePattern() { - return ".+"; - } - - @Override - @Nullable - public NBTTagList parse(String listString, ParseContext context) { - if ((listString.startsWith("nbt:[") || listString.startsWith("nbtlist:[")) && listString.endsWith("]")) { - int substring; - if (listString.startsWith("nbt:[")) { - substring = 4; - } else { // "nbtlist:[WHATEVER]" - substring = 8; - } - NBTTagCompound tempNBT = parseRawNBT("{temp:" + listString.substring(substring) + "}"); - NBTTagList parsedList = (NBTTagList) tempNBT.get("temp"); - return parsedList; - } - return null; - } - - @Override - public String toString(NBTTagList nbtList, int arg1) { - return nbtList.toString(); - } - - @Override - public String toVariableNameString(NBTTagList nbtList) { - return nbtList.toString(); - } - }).serializer(new Serializer() { - - @Override - public Fields serialize(NBTTagList nbtList) throws NotSerializableException { - Fields f = new Fields(); - f.putObject("asString", nbtList.toString()); - return f; - } - - @Override - public void deserialize(NBTTagList nbtList, Fields f) throws StreamCorruptedException, NotSerializableException { - assert false; - } - - @Override - protected boolean canBeInstantiated() { - return false; - } - - @Override - protected NBTTagList deserialize(Fields fields) throws StreamCorruptedException, NotSerializableException { - String s = fields.getObject("asString", String.class); - NBTTagCompound tempNBT = parseRawNBT("{temp:" + s + "}"); - if (tempNBT == null || !tempNBT.hasKey("temp")) { - throw new StreamCorruptedException("Unable to parse NBT list from a variable: " + s); - } - NBTTagList nbtList = (NBTTagList) tempNBT.get("temp"); - return nbtList; - } - - @Override - @Nullable - public NBTTagList deserialize(String s) { - NBTTagCompound tempNBT = parseRawNBT("{temp:" + s + "}"); - NBTTagList nbtList = (NBTTagList) tempNBT.get("temp"); - return nbtList; - } - - @Override - public boolean mustSyncDeserialization() { - return true; - } - })); - } - - @Override - public NBTTagCompound getEntityNBT(Entity entity) { - net.minecraft.server.v1_9_R2.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - NBTTagCompound NBT = new NBTTagCompound(); - nmsEntity.e(NBT); - return NBT; - } - - @Override - public NBTTagCompound getTileNBT(Block block) { - NBTTagCompound NBT = new NBTTagCompound(); - World nmsWorld = ((CraftWorld) block.getWorld()).getHandle(); - TileEntity tileEntity = nmsWorld.getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ())); - if (tileEntity == null) - return null; - tileEntity.save(NBT); - return NBT; - } - - @Override - public NBTTagCompound getItemNBT(ItemStack itemStack) { - if (itemStack == null || itemStack.getType() == Material.AIR) - return null; - NBTTagCompound itemNBT = CraftItemStack.asNMSCopy(itemStack).getTag(); - if (itemNBT == null) - itemNBT = new NBTTagCompound(); - return itemNBT; - } - - @Override - public void setEntityNBT(Entity entity, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - net.minecraft.server.v1_9_R2.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.f((NBTTagCompound) newCompound); - } - } - - @Override - public void setTileNBT(Block block, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - World nmsWorld = ((CraftWorld) block.getWorld()).getHandle(); - TileEntity tileEntity = nmsWorld.getTileEntity(new BlockPosition(block.getX(), block.getY(), block.getZ())); - if (tileEntity == null) - return; - tileEntity.a((NBTTagCompound) newCompound); - tileEntity.update(); - IBlockData tileEntType = nmsWorld.getType(new BlockPosition(block.getX(), block.getY(), block.getZ())); - nmsWorld.notify(tileEntity.getPosition(), tileEntType, tileEntType, 3); - } - } - - @Override - public ItemStack getItemWithNBT(ItemStack itemStack, Object compound) { - net.minecraft.server.v1_9_R2.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); - if (compound instanceof NBTTagCompound && itemStack != null) { - if (itemStack.getType() == Material.AIR) - return null; - if (((NBTTagCompound) compound).isEmpty()) - return itemStack; - nmsItem.setTag((NBTTagCompound) compound); - ItemStack newItem = CraftItemStack.asBukkitCopy(nmsItem); - return newItem; - } else if (compound == null) { - nmsItem.setTag(null); - ItemStack newItem = CraftItemStack.asBukkitCopy(nmsItem); - return newItem; - } - return itemStack; - } - - @Override - public NBTTagCompound getFileNBT(File file) { - FileInputStream fis = null; - try { - fis = new FileInputStream(file); - } catch (FileNotFoundException ex) { - return null; //File doesn't exist. - } - NBTTagCompound fileNBT = null; - try { - fileNBT = NBTCompressedStreamTools.a(fis); - fis.close(); - } catch (IOException ex) { - if (ex instanceof EOFException) { - ; //Nothing. - } else { - ex.printStackTrace(); - } - } - return fileNBT; - } - - @Override - public void setFileNBT(File file, Object newCompound) { - if (newCompound instanceof NBTTagCompound) { - OutputStream os = null; - try { - os = new FileOutputStream(file); - } catch (FileNotFoundException ex) { - ex.printStackTrace(); - } - try { - NBTCompressedStreamTools.a((NBTTagCompound) newCompound, os); - os.close(); - } catch (IOException ex) { - if (ex instanceof EOFException) { - ; //Ignore, just end of the file - } else { - ex.printStackTrace(); - } - } - } - } - - @Override - public NBTBase convertToNBT(Number number) { - if (number instanceof Byte) { - return new NBTTagByte((byte) number); - } else if (number instanceof Short) { - return new NBTTagShort((short) number); - } else if (number instanceof Integer) { - return new NBTTagInt((int) number); - } else if (number instanceof Long) { - return new NBTTagLong((long) number); - } else if (number instanceof Float) { - return new NBTTagFloat((float) number); - } else if (number instanceof Double) { - return new NBTTagDouble((double) number); - } - return null; - } - - @Override - public NBTTagString convertToNBT(String string) { - return new NBTTagString(string); - } - - @Override - public String getMCId(ItemStack itemStack) { - net.minecraft.server.v1_9_R2.ItemStack nmsItem = CraftItemStack.asNMSCopy(itemStack); - MinecraftKey mcKey = Item.REGISTRY.b(nmsItem.getItem()); - return mcKey.toString(); - } - - @Override - public ItemStack getItemFromMcId(String mcId) { - MinecraftKey mcKey = new MinecraftKey(mcId); - Item nmsItem = (Item) Item.REGISTRY.get(mcKey); - return CraftItemStack.asNewCraftStack(nmsItem); - } - - @Override - public boolean getNoClip(Entity entity) { - net.minecraft.server.v1_9_R2.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.noclip; - } - - @Override - public void setNoClip(Entity entity, boolean noclip) { - net.minecraft.server.v1_9_R2.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.noclip = noclip; - } - - @Override - public boolean getFireProof(Entity entity) { - net.minecraft.server.v1_9_R2.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.isFireProof(); - } - - @Override - public void setFireProof(Entity entity, boolean fireProof) { - net.minecraft.server.v1_9_R2.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - ReflectionUtils.setField("fireProof", nmsEntity.getClass(), nmsEntity, fireProof); - } - - /* - @SuppressWarnings("unchecked") - @Override - public ItemStack[] getEndermanBlocks(Entity enderman) { - EntityEnderman nmsEnder = ((CraftEnderman) enderman).getHandle(); - Set nmsBlocks = (Set) ReflectionUtils.getField("c", EntityEnderman.class, nmsEnder); - ItemStack[] items = new ItemStack[nmsBlocks.size()]; - int i = 0; - for (net.minecraft.server.v1_9_R2.Block nmsBlock : nmsBlocks) { - IBlockData nmsBlockData = nmsBlock.getBlockData(); - int dataValue = nmsBlock.toLegacyData(nmsBlockData); - net.minecraft.server.v1_9_R2.ItemStack nmsItem = new net.minecraft.server.v1_9_R1.ItemStack(nmsBlock, 1, dataValue); - ItemStack bukkitItem = CraftItemStack.asCraftMirror(nmsItem); - items[i] = bukkitItem; - i++; - } - return items; - } - - @SuppressWarnings("unchecked") - @Override - public void setEndermanBlocks(Entity enderman, ItemStack... blocks) { - EntityEnderman nmsEnder = ((CraftEnderman) enderman).getHandle(); - Set nmsBlocks = (Set) ReflectionUtils.getField("c", EntityEnderman.class, nmsEnder); - for (ItemStack block : blocks) { - if (!block.getType().isBlock()) - return; - // TODO Figure out how to get a Blocks from a Bukkit ItemStack - // Blocks.class has a PRIVATE method to get from a MC id. - } - } - */ - - @Override - public Location getLastLocation(Entity entity) { - net.minecraft.server.v1_9_R2.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - org.bukkit.World world = nmsEntity.world.getWorld(); - Location lastEntLoc = new Location(world, nmsEntity.M, nmsEntity.N, nmsEntity.O); - return lastEntLoc; - } - - @Override - public float getEntityStepLength(Entity entity) { - net.minecraft.server.v1_9_R2.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - return nmsEntity.P; - } - - @Override - public void setEntityStepLength(Entity entity, float length) { - net.minecraft.server.v1_9_R2.Entity nmsEntity = ((CraftEntity) entity).getHandle(); - nmsEntity.P = length; - } - - @Override - public boolean getElytraGlideState(Entity entity) { - EntityLiving nmsEntity = ((CraftLivingEntity) entity).getHandle(); - return nmsEntity.getFlag(7); - } - - public void setElytraGlideState(Entity entity, boolean glide) { - EntityLiving nmsEntity = ((CraftLivingEntity) entity).getHandle(); - nmsEntity.setFlag(7, glide); - } - - public boolean getNoGravity(Entity entity) { - Bukkit.getLogger().warning("Executed \"Get no gravity state of entity\" code on 1.9! How the hell did this even happen!!"); - return false; - } - - public void setNoGravity(Entity entity, boolean noGravity) { - Bukkit.getLogger().warning("Executed \"Set no gravity state of entity\" code on 1.9! How the hell did this even happen!!"); - } -} \ No newline at end of file