diff --git a/.classpath b/.classpath index ab5fb2e..b866b22 100644 --- a/.classpath +++ b/.classpath @@ -17,4 +17,12 @@ + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index ea2100d..9b143a6 100644 --- a/pom.xml +++ b/pom.xml @@ -71,6 +71,18 @@ 1.6.4 provided + + com.sk89q.worldedit + worldedit-core + 6.0.0-SNAPSHOT + provided + + + com.sk89q.worldguard + worldguard-legacy + 6.2 + provided + @@ -80,5 +92,9 @@ spigot-repo https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + sk89q-repo + http://maven.sk89q.com/repo/ + \ No newline at end of file diff --git a/resources/plugin.yml b/resources/plugin.yml index 96dd17e..014be65 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -4,6 +4,7 @@ version: 0.0.1 api-version: 1.12 author: ericek111 website: https://git.lixko.eu/MarwLand/MarwCore +softdepend: [WorldGuard] commands: first: description: First command. diff --git a/src/cz/marwland/mc/essentials/features/RandomTeleport.java b/src/cz/marwland/mc/essentials/features/RandomTeleport.java index 73f1637..6fe81f1 100644 --- a/src/cz/marwland/mc/essentials/features/RandomTeleport.java +++ b/src/cz/marwland/mc/essentials/features/RandomTeleport.java @@ -2,22 +2,25 @@ package cz.marwland.mc.essentials.features; import java.util.Arrays; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; +import org.bukkit.block.Block; import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; import org.bukkit.command.defaults.BukkitCommand; import org.bukkit.entity.Player; +import org.bukkit.event.block.BlockCanBuildEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import cz.marwland.mc.core.MarwCore; import cz.marwland.mc.core.features.Feature; import net.md_5.bungee.api.ChatColor; public class RandomTeleport extends Feature { - public RandomTeleport(MarwCore plugin) { - super(plugin, null); + private int MAX_TRIES = 100; + + public RandomTeleport() { + super(); this.addCommand(new BukkitCommand( "rtp", "Teleport player to random location in the current world.", @@ -36,7 +39,7 @@ public class RandomTeleport extends Feature { Player p = (Player) sender; if (args.length >= 1) { - p = plugin.getServer().getPlayer(args[0]); + p = Bukkit.getServer().getPlayer(args[0]); if (p != sender && !permissionMissingCheck(sender, this.getPermission() + ".others")) { return true; } else if (p == null) { @@ -47,7 +50,7 @@ public class RandomTeleport extends Feature { World w = p.getWorld(); if (args.length >= 2) { - w = plugin.getServer().getWorld(args[1]); + w = Bukkit.getServer().getWorld(args[1]); if (w != p.getWorld() && !permissionMissingCheck(sender, this.getPermission() + ".world." + w.getName()) ) { return true; } else if (w == null) { @@ -56,7 +59,6 @@ public class RandomTeleport extends Feature { } } - sender.sendMessage("teleporting..."); randomTeleport(w, p); return true; @@ -64,12 +66,24 @@ public class RandomTeleport extends Feature { @Override public String getPermission() { - return getPermissionPath() + "." + this.getName().toLowerCase(); + return getPermissionPath(); } }); } - public static void randomTeleport(World w, Player p) { + public void randomTeleport(World w, Player p) { + Location loc = null; + for (int i = 0; i < MAX_TRIES && loc == null; i++) { + p.sendMessage("Generating #" + i); + loc = generateLoc(w); + if (!canTeleportHere(loc, p)) + loc = null; + } + if (loc != null) + p.teleport(loc, TeleportCause.COMMAND); + } + + public Location generateLoc(World w) { int wboff = 16; Location loc = w.getWorldBorder().getCenter(); int radius = (int) w.getWorldBorder().getSize() / 2; @@ -86,7 +100,29 @@ public class RandomTeleport extends Feature { Location targetloc = w.getHighestBlockAt(finx, finz).getLocation(); targetloc.setYaw((float) (Math.random() * 360f)); targetloc.add(0.5d, 1d, 0.5d); - p.teleport(targetloc, TeleportCause.COMMAND); + + return targetloc; + } + + public boolean canTeleportHere(Location loc, Player p) { + Block block = loc.getWorld().getBlockAt(loc); + p.sendMessage(block.getType().name()); + BlockCanBuildEvent canBuildEvent = new BlockCanBuildEvent(block, block.getData(), true); + Bukkit.getServer().getPluginManager().callEvent(canBuildEvent); + if(!canBuildEvent.isBuildable()) + return false; + + try { + p.sendMessage("trying"); + if (!com.sk89q.worldguard.bukkit.WGBukkit.getPlugin().canBuild(p, block)) { + p.sendMessage("cannot"); + return false; + } + } catch (NoClassDefFoundError e) { + } + + p.sendMessage("can"); + return true; } }