diff options
author | David Panić <david@panic.tk> | 2018-12-16 01:54:38 +0100 |
---|---|---|
committer | David Panić <david@panic.tk> | 2018-12-16 01:54:38 +0100 |
commit | 563573392277297862d7b8ded22571c705d51d02 (patch) | |
tree | c5e891aba55a836a48ba5cd6a05cfe3e250eba4c | |
parent | cf34444d8b385ff5d4c08828da2e5769c7ff94dd (diff) |
Fixed misc
-rw-r--r-- | src/main/java/com/redstoner/modules/misc/Misc.cmd | 119 | ||||
-rw-r--r-- | src/main/java/com/redstoner/modules/misc/Misc.java | 425 | ||||
-rw-r--r-- | src/main/java/com/redstoner/modules/misc/MiscUtil.java | 55 |
3 files changed, 325 insertions, 274 deletions
diff --git a/src/main/java/com/redstoner/modules/misc/Misc.cmd b/src/main/java/com/redstoner/modules/misc/Misc.cmd index de3b5a3..545030d 100644 --- a/src/main/java/com/redstoner/modules/misc/Misc.cmd +++ b/src/main/java/com/redstoner/modules/misc/Misc.cmd @@ -1,72 +1,91 @@ -command tempadd { - perm pex; - [string:user] [string:group] { - help Adds a user to a group for 1w.; - run tempadddef user group; - } - [string:user] [string:group] [string:duration] { - help Adds a user to a group for a specified duration.; - run tempadd user group duration; - } -} +command tempadd { + perm pex; + + [string:user] [string:group] { + help Adds a user to a group for 1w.; + run tempadddef user group; + } + + [string:user] [string:group] [string:duration] { + help Adds a user to a group for a specified duration.; + run tempadd user group duration; + } +} + command echo { - perm utils.misc.echo; - [string:text...] { - help Echoes back to you.; - run echo text; - } -} -command ping { - perm utils.misc.ping - [empty] { - help Pongs :D; - run ping; - } - [string:password] { - help Pongs :D; - run ping2 password; - } -} -command sudo { - perm utils.misc.sudo; - [string:name] [string:command...] { - help Sudo'es another user (or console); - run sudo name command; - } -} + perm utils.misc.echo; + + [string:text...] { + help Echoes back to you.; + run echo text; + } +} + +command ping { + perm utils.misc.ping; + + [empty] { + help Pongs :D; + run ping; + } + + [string:player] { + help Gets the specified player's ping.; + run ping_player player; + } +} + +command sudo { + perm utils.misc.sudo; + + [string:name] [string:command...] { + help Sudo'es another user (or console); + run sudo name command; + } +} + command hasperm { perm utils.misc.hasperm; - [flag:-f] [string:name] [string:node] { - perm utils.hasperm; + + [flag:-f] [string:name] [string:node] { + help Checks if a player has a given permission node or not. Returns \"true/false\" in chat. When -f is set, it returns it unformatted.; run hasperm -f name node; - help Checks if a player has a given permission node or not. Returns \"true/false\" in chat. When -f is set, it returns it unformatted.; - } + } } + command nightvision { - alias nv; + alias nv; + alias illuminate; + perm utils.misc.nightvision; + + type player; + [empty] { - run illuminate; - type player; - help Gives the player infinte night vision; - perm utils.illuminate; - } + help Gives the player infinte night vision; + run illuminate; + } } + command minecart { alias cart; + perm utils.misc.spawncart; + type player; - default [string:variation] { - run minecart_default variation; + default [string:variation] { help Sets a default minecart variation.; + run minecart_default variation; } + [string:variation] { - run minecart_variation variation; help Spawns a certain minecart; + run minecart_variation variation; } + [empty] { - run minecart; help Spawns a minecart; - } + run minecart; + } }
\ No newline at end of file diff --git a/src/main/java/com/redstoner/modules/misc/Misc.java b/src/main/java/com/redstoner/modules/misc/Misc.java index 2412d45..74b3657 100644 --- a/src/main/java/com/redstoner/modules/misc/Misc.java +++ b/src/main/java/com/redstoner/modules/misc/Misc.java @@ -1,10 +1,17 @@ package com.redstoner.modules.misc; -import java.lang.reflect.InvocationTargetException; -import java.util.UUID; - +import com.nemez.cmdmgr.Command; +import com.redstoner.annotations.AutoRegisterListener; +import com.redstoner.annotations.Commands; +import com.redstoner.annotations.Version; +import com.redstoner.misc.CommandHolderType; +import com.redstoner.misc.Utils; +import com.redstoner.modules.Module; +import com.redstoner.modules.datamanager.DataManager; +import net.nemez.chatapi.ChatAPI; +import net.nemez.chatapi.click.Message; import org.bukkit.Bukkit; -import org.bukkit.Location; +import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.command.CommandSender; import org.bukkit.entity.EntityType; @@ -12,349 +19,319 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import org.json.simple.JSONArray; -import org.json.simple.JSONObject; -import com.nemez.cmdmgr.Command; -import com.redstoner.annotations.AutoRegisterListener; -import com.redstoner.annotations.Commands; -import com.redstoner.annotations.Version; -import com.redstoner.misc.CommandHolderType; -import com.redstoner.misc.Utils; -import com.redstoner.modules.Module; -import com.redstoner.modules.datamanager.DataManager; - -import net.nemez.chatapi.ChatAPI; -import net.nemez.chatapi.click.Message; +import java.util.UUID; -@Commands(CommandHolderType.File) +@Commands (CommandHolderType.File) @AutoRegisterListener -@Version(major = 4, minor = 1, revision = 0, compatible = 4) -public class Misc implements Module, Listener -{ - private final String[] sudoBlacklist = new String[] {"(.*:)?e?sudo", "(.*:)?script.*", "(.*:)?stop", - "(.*:)?modules", "(.*:)?sayn", "(.*:)?pex", "(.*:)?console_.*", "(.*:)?op", "(.*:)?login", "(.*:)?register", - "(.*:)?.*pass"}; - JSONObject config; - JSONArray unprotectedRegions; - +@Version (major = 4, minor = 1, revision = 0, compatible = 4) +public class Misc implements Module, Listener { + private static final String[] SUDO_BLACKLIST = new String[] { + "(.*:)?e?sudo", + "(.*:)?script.*", + "(.*:)?stop", + "(.*:)?modules", + "(.*:)?sayn", + "(.*:)?pex", + "(.*:)?console_.*", + "(.*:)?op", + "(.*:)?login", + "(.*:)?register", + "(.*:)?.*pass" + }; + + private static final String[] WELCOME_MSG = new String[] { + "&4 Welcome to the Redstoner Server!\n", + "&6 Before you ask us things, take a quick look at &a&nredstoner.com/info\n", + "&6 Thank you and happy playing ;)\n\n" + }; + + private static final PotionEffect NIGHT_VISION = new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 0, false, false); + @EventHandler - public void onFirstJoin(PlayerJoinEvent event) - { + public void onFirstJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); - if (!player.hasPlayedBefore()) - { - Utils.broadcast("", "\n§a§lPlease welcome §f" + player.getDisplayName() + " §a§lto Redstoner!\n", null); - String[] message = new String[] {" \n \n \n \n \n \n \n \n \n \n \n \n ", - " &4Welcome to the Redstoner Server!", " &6Before you ask us things, take a quick", - " &6look at &a&nredstoner.com/info", " \n&6thank you and happy playing ;)", " \n \n"}; - getLogger().message(player, message); + + if (!player.hasPlayedBefore()) { + Utils.broadcast("", "\n§a§lPlease welcome §f" + player.getDisplayName() + " §a§lto Redstoner!\n", recipient -> !recipient.equals(player)); + + getLogger().message(player, WELCOME_MSG); } + Material spawnBlock = player.getLocation().getBlock().getType(); - if (spawnBlock == Material.END_PORTAL || spawnBlock == Material.NETHER_PORTAL) - { + + if (spawnBlock == Material.END_PORTAL || spawnBlock == Material.NETHER_PORTAL) { getLogger().message(player, "&4Looks like you spawned in a portal... Let me help you out"); getLogger().message(player, "&6You can use /back if you &nreally&6 want to go back"); + player.teleport(player.getWorld().getSpawnLocation()); } } - + // Disables spectator teleportation - @EventHandler(priority = EventPriority.LOWEST) - public void onTeleport(PlayerTeleportEvent event) - { + @EventHandler (priority = EventPriority.LOWEST) + public void onTeleport(PlayerTeleportEvent event) { Player player = event.getPlayer(); - if (!event.isCancelled() && event.getCause() == TeleportCause.SPECTATE && !player.hasPermission("utils.tp")) - { - event.setCancelled(true); + + if (!event.isCancelled() && event.getCause() == TeleportCause.SPECTATE && !player.hasPermission("utils.tp")) { getLogger().message(event.getPlayer(), true, "Spectator teleportation is disabled!"); + + event.setCancelled(true); } } - + // Disables water and lava breaking stuff @EventHandler - public void onLiquidFlow(BlockFromToEvent event) - { + public void onLiquidFlow(BlockFromToEvent event) { Material m = event.getToBlock().getType(); - switch (m) - { + + switch (m) { case AIR: case WATER: case LAVA: return; - default: - { + default: { event.setCancelled(true); } } } - - @Command(hook = "tempadddef") - public boolean tempAddDef(CommandSender sender, String user, String group) - { - return tempAdd(sender, user, group, "604800"); + + @Command (hook = "tempadddef") + public boolean tempAddDef(CommandSender sender, String user, String group) { + return tempAdd(sender, user, group, "7d"); } - - @Command(hook = "tempadd") - public boolean tempAdd(CommandSender sender, String user, String group, String duration) - { - // Use it to make a proper duration output later. Too lazy rn. - @SuppressWarnings("unused") - int i = 0; - try - { - i = Integer.valueOf(duration); - } - catch (NumberFormatException e) - { - getLogger().message(sender, true, "That is not a valid number!"); + + @Command (hook = "tempadd") + public boolean tempAdd(CommandSender sender, String user, String group, String duration) { + int parsed = MiscUtil.parseDuration(duration); + + if (parsed == -1) { + getLogger().message(sender, true, "That is not a valid duration! (format: 1y2m3d4h5m6s)"); return true; } - Bukkit.dispatchCommand(sender, "pex user " + user + " group add " + group + " * " + duration); - getLogger().message(sender, "Added to group " + group + "for " + duration + " seconds."); + + Bukkit.dispatchCommand(sender, "pex user " + user + " group add " + group + " * " + parsed); + getLogger().message(sender, "User " + user + " added to group " + group + " for " + duration); + return true; } - - @Command(hook = "echo") - public boolean echo(CommandSender sender, String text) - { + + @Command (hook = "echo") + public boolean echo(CommandSender sender, String text) { sender.sendMessage(ChatAPI.colorify(null, text)); + return true; } - - @Command(hook = "ping") - public boolean ping(CommandSender sender) - { - if (sender instanceof Player) - { - int ping = getPing((Player) sender); + + @Command (hook = "ping") + public boolean ping(CommandSender sender) { + if (sender instanceof Player) { + int ping = MiscUtil.getPing((Player) sender); if (ping == -1) { getLogger().message(sender, "An error occured while getting your ping! Please message a staff member."); } else { getLogger().message(sender, "Your ping is " + ping + "ms."); } + } else { + sender.sendMessage("That's not how this works... <insert facepalm emoji here>"); } - else - { - sender.sendMessage("Pong!"); - } - return true; - } - - @Command(hook = "ping2") - public boolean ping(CommandSender sender, String password) - { - if (password.equals("pong")) - if (sender instanceof Player) - { - int ping = getPing((Player) sender); - - if (ping == -1) { - getLogger().message(sender, "An error occured while getting your ping! Please message a staff member."); - } else { - getLogger().message(sender, new String[] {"Your ping is " + ping + "ms.", ping < 20 - ? "&aThat's gr8 m8 r8 8/8" - : (ping < 50 ? "F&eair enough you cunt!" - : (ping < 100 ? "&eShite, but not shite enough." - : "&cLooks like the server is about two months ahead of you. GET A NEW FRIGGIN' ISP ALREADY"))}); - } - } - else - getLogger().message(sender, true, - "M8 you shitty cunt are not supposed to run this shit it's for players only!!!"); - else - getLogger().message(sender, true, "&4WRONG PASSWORD, 4/3 ATTEMPTS FAILED! BAN COMMENCING!"); + return true; } - - public int getPing(Player player) - { - try { - Object entityPlayer = player.getClass().getMethod("getHandle").invoke(player); - int ping = (int) entityPlayer.getClass().getField("ping").get(entityPlayer); - return ping; - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException | NoSuchFieldException e) { - e.printStackTrace(); + + @Command (hook = "ping_player") + public boolean ping(CommandSender sender, String player) { + Player playerObj = Bukkit.getPlayer(player); + + if (playerObj == null) { + getLogger().message(sender, "That player is not online!"); + return true; + } + + int ping = MiscUtil.getPing(playerObj); + + if (ping == -1) { + getLogger().message(sender, "An error occured while getting that player's ping! Please message a staff member."); + } else { + getLogger().message(sender, ChatColor.GRAY + playerObj.getDisplayName() + ChatColor.GRAY + "'s ping is " + ping + "ms."); } - return -1; + return true; } - - @Command(hook = "sudo") - public boolean sudo(CommandSender sender, String name, String command) - { + + @Command (hook = "sudo") + public boolean sudo(CommandSender sender, String name, String command) { CommandSender target; - if (name.equalsIgnoreCase("console")) - { + + if (name.equalsIgnoreCase("console")) { target = Bukkit.getConsoleSender(); - } - else + } else { target = Bukkit.getPlayer(name); - if (target == null) - { + } + + if (target == null) { getLogger().message(sender, false, "That player couldn't be found!"); return true; } - if (command.startsWith("/") || target.equals(Bukkit.getConsoleSender())) - { + + if (command.startsWith("/") || target.equals(Bukkit.getConsoleSender())) { String[] args = command.split(" "); - for (String regex : sudoBlacklist) - { - if (args[0].matches((target.equals(Bukkit.getConsoleSender()) ? "" : "\\/") + regex)) - { + + for (String regex : SUDO_BLACKLIST) { + if (args[0].matches((target.equals(Bukkit.getConsoleSender()) ? "" : "\\/") + regex)) { getLogger().message(sender, true, "You can't sudo anyone into using that command!"); return true; } } + Bukkit.dispatchCommand(target, command.replaceFirst("/", "")); getLogger().message(sender, "Sudoed " + Utils.getName(target) + "&7 into running " + command); - } - else - { + } else { ((Player) target).chat(command); getLogger().message(sender, "Sudoed " + Utils.getName(target) + "&7 into saying " + command); } + return true; } - - @Command(hook = "hasperm") - public boolean hasPerm(CommandSender sender, boolean noformat, String name, String node) - { + + @Command (hook = "hasperm") + public boolean hasPerm(CommandSender sender, boolean noformat, String name, String node) { Player p; - if (name.contains("-")) - try - { + + if (name.contains("-")) { + try { p = Bukkit.getPlayer(UUID.fromString(name)); - } - catch (Exception e) - { - if (noformat) + } catch (Exception e) { + if (noformat) { sender.sendMessage("ERR: Invalid UUID"); - else + } else { getLogger().message(sender, "That UUID is not valid!"); + } + return true; } - else + } else { p = Bukkit.getPlayer(name); - if (p == null) - { - if (noformat) - { + } + + if (p == null) { + if (noformat) { Message m = new Message(sender, null); m.appendText("ERR: Invalid player"); m.send(); - } - else - { + } else { getLogger().message(sender, "That player couldn't be found!"); } + return true; } - - if (noformat) - { + + if (noformat) { Message m = new Message(sender, null); m.appendText("" + p.hasPermission(node)); m.send(); + } else { + getLogger().message(sender, ChatColor.GRAY + p.getDisplayName() + ChatColor.GRAY + ( + p.hasPermission(node) + ? " has that permission." + : " does not have that permission." + )); } - else - { - getLogger().message(sender, "" + p.hasPermission(node)); - } - + return true; } - - public boolean canBuild(Player player, Location location) - { - BlockBreakEvent event = new BlockBreakEvent(location.getBlock(), player); - Bukkit.getPluginManager().callEvent(event); - return event.isCancelled(); - } - - PotionEffect nightvision = new PotionEffect(PotionEffectType.NIGHT_VISION, Integer.MAX_VALUE, 0, false, false); - - @Command(hook = "illuminate") - public void illuminate(CommandSender sender) - { + + @Command (hook = "illuminate") + public void illuminate(CommandSender sender) { Player player = (Player) sender; - if (player.hasPotionEffect(PotionEffectType.NIGHT_VISION)) - { + if (player.hasPotionEffect(PotionEffectType.NIGHT_VISION)) { player.removePotionEffect(PotionEffectType.NIGHT_VISION); getLogger().message(sender, "Night Vision Disabled."); - } - else - { - player.addPotionEffect(nightvision, true); + } else { + player.addPotionEffect(NIGHT_VISION, true); getLogger().message(sender, "Night Vision Enabled."); } } - - @Command(hook = "minecart") + + @Command (hook = "minecart") public void minecart(CommandSender sender) { String type = (String) DataManager.getOrDefault(sender, "minecart_default", "normal"); minecartType(sender, type); } - - @Command(hook = "minecart_variation") + + @Command (hook = "minecart_variation") public boolean minecartType(CommandSender sender, String type) { - if (type.equals("help") || type.equals("h") || type.equals("?")) - return false; - + if (type.equals("help") || type.equals("h") || type.equals("?")) return false; + Player p = (Player) sender; - if (!canBuild(p, p.getLocation())) { + + if (!MiscUtil.canBuild(p, p.getLocation())) { getLogger().message(sender, true, "You do not have permission to build here!"); return true; } - - EntityType typeE = convertMinecartTypeString(type); - + + EntityType typeE = convertMinecartTypeString(type.toLowerCase()); + if (typeE != null) { p.getWorld().spawnEntity(p.getLocation(), typeE); getLogger().message(sender, "Minecart Spawned!"); - } - else + } else { getLogger().message(sender, true, "The type of Minecart you've requested does not exist."); + } + return false; } - - @Command(hook = "minecart_default") + + @Command (hook = "minecart_default") public boolean minecartDefault(CommandSender sender, String type) { - EntityType typeE = convertMinecartTypeString(type); - - if (type.equals("help") || type.equals("h") || type.equals("?")) - return false; - + EntityType typeE = convertMinecartTypeString(type.toLowerCase()); + + if (type.equals("help") || type.equals("h") || type.equals("?")) return false; + if (typeE != null) { DataManager.setData(sender, "minecart_default", type); - getLogger().message(sender, "Minecart Spawned!"); - } - else + getLogger().message(sender, "Set your default minecart to: " + type.toLowerCase()); + } else { getLogger().message(sender, true, "The type of Minecart you've requested does not exist."); + } + return true; } - + public EntityType convertMinecartTypeString(String type) { EntityType typeE = null; - + switch (type) { - case "normal": typeE = EntityType.MINECART; break; - case "chest": typeE = EntityType.MINECART_CHEST; break; - case "furnace": typeE = EntityType.MINECART_FURNACE; break; - case "hopper": typeE = EntityType.MINECART_HOPPER; break; - case "tnt": typeE = EntityType.MINECART_TNT; break; - case "command": typeE = EntityType.MINECART_COMMAND; break; - case "spawner": typeE = EntityType.MINECART_MOB_SPAWNER; break; + case "normal": + typeE = EntityType.MINECART; + break; + case "chest": + typeE = EntityType.MINECART_CHEST; + break; + case "furnace": + typeE = EntityType.MINECART_FURNACE; + break; + case "hopper": + typeE = EntityType.MINECART_HOPPER; + break; + case "tnt": + typeE = EntityType.MINECART_TNT; + break; + case "command": + typeE = EntityType.MINECART_COMMAND; + break; + case "spawner": + typeE = EntityType.MINECART_MOB_SPAWNER; + break; } - + return typeE; } }
\ No newline at end of file diff --git a/src/main/java/com/redstoner/modules/misc/MiscUtil.java b/src/main/java/com/redstoner/modules/misc/MiscUtil.java new file mode 100644 index 0000000..f2fde6f --- /dev/null +++ b/src/main/java/com/redstoner/modules/misc/MiscUtil.java @@ -0,0 +1,55 @@ +package com.redstoner.modules.misc; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.block.BlockBreakEvent; + +import java.lang.reflect.InvocationTargetException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class MiscUtil { + private static final Pattern durationPattern = Pattern.compile("^(?:(?:(\\d*)y)?(?:(\\d*)m)?(?:(\\d*)d)?(?:(\\d*)h)?(?:(\\d*)m)?(?:(\\d*)s)?){1}$"); + + private static int getIntGroup(Matcher matcher, int group) { + String strGroup = matcher.group(group); + return Integer.parseInt(strGroup == null ? "0" : strGroup); + } + + protected static int parseDuration(String duration) { + Matcher m = durationPattern.matcher(duration); + + if (m.matches()) { + int years = getIntGroup(m, 1); + int months = getIntGroup(m, 2); + int days = getIntGroup(m, 3); + int hours = getIntGroup(m, 4); + int minutes = getIntGroup(m, 5); + int seconds = getIntGroup(m, 6); + + return (years * 31557600) + (months * 2629800) + (days * 86400) + (hours * 3600) + (minutes * 60) + seconds; + } else { + return -1; + } + } + + protected static int getPing(Player player) { + try { + Object entityPlayer = player.getClass().getMethod("getHandle").invoke(player); + + int ping = (int) entityPlayer.getClass().getField("ping").get(entityPlayer); + return ping; + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException | NoSuchFieldException e) { + e.printStackTrace(); + } + + return -1; + } + + protected static boolean canBuild(Player player, Location location) { + BlockBreakEvent event = new BlockBreakEvent(location.getBlock(), player); + Bukkit.getPluginManager().callEvent(event); + return !event.isCancelled(); + } +} |