diff options
author | jomo <github@jomo.tv> | 2015-01-06 23:38:42 +0100 |
---|---|---|
committer | jomo <github@jomo.tv> | 2015-01-06 23:38:42 +0100 |
commit | 9a916ed2cd9440d46079f9b7db421a7b9fcbf6ee (patch) | |
tree | 3af33b3ddc2fa3159f9243b0ade09b3e3cc96425 | |
parent | 3435e994326b14f700777741a76dd990a2bc703f (diff) |
change indentation from 2 spaces to 4, fix #5
-rw-r--r-- | abot.py | 80 | ||||
-rw-r--r-- | adminchat.py | 64 | ||||
-rw-r--r-- | badges.py | 202 | ||||
-rw-r--r-- | calc.py | 92 | ||||
-rw-r--r-- | chatgroups.py | 128 | ||||
-rw-r--r-- | check.py | 66 | ||||
-rw-r--r-- | cycle.py | 90 | ||||
-rw-r--r-- | damnspam.py | 238 | ||||
-rw-r--r-- | forcefield.py | 276 | ||||
-rw-r--r-- | friends.py | 238 | ||||
-rw-r--r-- | helpers.py | 274 | ||||
-rw-r--r-- | imout.py | 36 | ||||
-rw-r--r-- | lagchunks.py | 76 | ||||
-rw-r--r-- | main.py | 60 | ||||
-rw-r--r-- | mentio.py | 220 | ||||
-rw-r--r-- | misc.py | 188 | ||||
-rw-r--r-- | motd.py | 32 | ||||
-rw-r--r-- | plotter.py | 10 | ||||
-rw-r--r-- | reports.py | 186 | ||||
-rw-r--r-- | saylol.py | 146 | ||||
-rw-r--r-- | skullclick.py | 20 | ||||
-rw-r--r-- | spawnplayer.py | 76 | ||||
-rw-r--r-- | tilehelper.py | 208 | ||||
-rw-r--r-- | webtoken.py | 136 |
24 files changed, 1571 insertions, 1571 deletions
@@ -5,59 +5,59 @@ answers = [] def load_answers(): - global answers - answers = open_json_file("abot", []) + global answers + answers = open_json_file("abot", []) - # compile answers - for answer in answers: - answer["regex"] = [reg_compile(reg.lower()) for reg in answer["regex"]] + # compile answers + for answer in answers: + answer["regex"] = [reg_compile(reg.lower()) for reg in answer["regex"]] def list_answers(sender): - for answer in answers: - msg(sender, "&e{") - msg(sender, " &eregex:") - for regex in answer["regex"]: - msg(sender, " " + regex.pattern, basecolor="a", usecolor = False) - msg(sender, " &epermission:") - msg(sender, " " + str(answer["hide-perm"]), basecolor="a", usecolor = False) - msg(sender, " &emessage:") - msg(sender, " " + "\n ".join(answer["message"].split("\n"))) - msg(sender, "&e}") + for answer in answers: + msg(sender, "&e{") + msg(sender, " &eregex:") + for regex in answer["regex"]: + msg(sender, " " + regex.pattern, basecolor="a", usecolor = False) + msg(sender, " &epermission:") + msg(sender, " " + str(answer["hide-perm"]), basecolor="a", usecolor = False) + msg(sender, " &emessage:") + msg(sender, " " + "\n ".join(answer["message"].split("\n"))) + msg(sender, "&e}") @hook.command("abot") def on_abot_command(sender, args): - plugin_header(sender, "AnswerBot") - if sender.hasPermission("utils.abot.admin"): - if not args: - msg(sender, "&2/abot list &eList all answers and their regex") - msg(sender, "&2/abot reload &eReload the config file") - elif args[0] == "list": - list_answers(sender) - elif args[0] == "reload": - load_answers() - msg(sender, "&2Reloaded!") + plugin_header(sender, "AnswerBot") + if sender.hasPermission("utils.abot.admin"): + if not args: + msg(sender, "&2/abot list &eList all answers and their regex") + msg(sender, "&2/abot reload &eReload the config file") + elif args[0] == "list": + list_answers(sender) + elif args[0] == "reload": + load_answers() + msg(sender, "&2Reloaded!") + else: + msg(sender) else: - msg(sender) - else: - noperm(sender) - return True + noperm(sender) + return True @hook.event("player.AsyncPlayerChatEvent", "low") def on_chat(event): - sender = event.getPlayer() - message = event.getMessage().lower() - for answer in answers: - for regex in answer["regex"]: - if regex.search(message): - if not answer["hide-perm"] or not sender.hasPermission(answer["hide-perm"]): - plugin_header(sender, "AnswerBot") - msg(sender, answer["message"] + "\n ") - event.setCancelled(True) - info("(hidden) %s: '%s'" % (sender.getName(), message)) - break + sender = event.getPlayer() + message = event.getMessage().lower() + for answer in answers: + for regex in answer["regex"]: + if regex.search(message): + if not answer["hide-perm"] or not sender.hasPermission(answer["hide-perm"]): + plugin_header(sender, "AnswerBot") + msg(sender, answer["message"] + "\n ") + event.setCancelled(True) + info("(hidden) %s: '%s'" % (sender.getName(), message)) + break load_answers()
\ No newline at end of file diff --git a/adminchat.py b/adminchat.py index 2955564..cb4c36a 100644 --- a/adminchat.py +++ b/adminchat.py @@ -7,49 +7,49 @@ ac_toggle_list = [] ac_prefix = "&8[&cAC&8]" def adminchat(sender, msg): - name = "&7{unknown}" - try: - name = sender.getDisplayName() - except AttributeError: - name = sender.getName() - broadcast(ac_permission, "%s &9%s&8: &b%s" % (ac_prefix, name, msg)) + name = "&7{unknown}" + try: + name = sender.getDisplayName() + except AttributeError: + name = sender.getName() + broadcast(ac_permission, "%s &9%s&8: &b%s" % (ac_prefix, name, msg)) # ac toggle @hook.command("act") def on_act_command(sender, args): - if sender.hasPermission(ac_permission): - p = sender.getName() - if p in ac_toggle_list: - ac_toggle_list.remove(p) - msg(sender, "%s &aAC toggle: off" % ac_prefix) + if sender.hasPermission(ac_permission): + p = sender.getName() + if p in ac_toggle_list: + ac_toggle_list.remove(p) + msg(sender, "%s &aAC toggle: off" % ac_prefix) + else: + ac_toggle_list.append(p) + msg(sender, "%s &aAC toggle: on" % ac_prefix) else: - ac_toggle_list.append(p) - msg(sender, "%s &aAC toggle: on" % ac_prefix) - else: - noperm(sender) - return True + noperm(sender) + return True @hook.command("ac") def on_ac_command(sender, args): - if sender.hasPermission(ac_permission): - if not checkargs(sender, args, 1, -1): - return True - adminchat(sender, " ".join(args)) - else: - noperm(sender) - return True + if sender.hasPermission(ac_permission): + if not checkargs(sender, args, 1, -1): + return True + adminchat(sender, " ".join(args)) + else: + noperm(sender) + return True @hook.event("player.AsyncPlayerChatEvent", "low") def on_chat(event): - sender = event.getPlayer() - msg = event.getMessage() - if sender.hasPermission(ac_permission) and not event.isCancelled(): - if msg[:len(ac_key)] == ac_key: - adminchat(sender, msg[1:]) - event.setCancelled(True) - elif sender.getName() in ac_toggle_list: - adminchat(sender, msg) - event.setCancelled(True) + sender = event.getPlayer() + msg = event.getMessage() + if sender.hasPermission(ac_permission) and not event.isCancelled(): + if msg[:len(ac_key)] == ac_key: + adminchat(sender, msg[1:]) + event.setCancelled(True) + elif sender.getName() in ac_toggle_list: + adminchat(sender, msg) + event.setCancelled(True) @@ -2,136 +2,136 @@ from helpers import * badges = open_json_file("badges", {}) badges_available = { - "helpful" : "A very helpful player", - "expert_minecraft" : "An expert in Minecraft", - "expert_coder" : "A good coder", - "oldtimer" : "A long time player", - "good_builder" : "A very good builder", - "friendly" : "Many think that this player is friendly", - "very_active" : "A very active player", - "trustworthy" : "This player is very trustworthy", + "helpful" : "A very helpful player", + "expert_minecraft" : "An expert in Minecraft", + "expert_coder" : "A good coder", + "oldtimer" : "A long time player", + "good_builder" : "A very good builder", + "friendly" : "Many think that this player is friendly", + "very_active" : "A very active player", + "trustworthy" : "This player is very trustworthy", } badges_perm_add = "utils.badges.add" badges_perm_del = "utils.badges.delete" def save_badges(): - save_json_file("badges", badges) + save_json_file("badges", badges) def get_badges(player): - sender_id = uid(player) - return badges.get(sender_id, []) + sender_id = uid(player) + return badges.get(sender_id, []) def show_badges(sender, player): - player_badges = get_badges(player) - if player_badges: - msg(sender, "&6Badges of " + player.getName()) - for key in player_badges: - msg(sender, "&b> &3&o%s" % badges_available[key]) - else: - msg(sender, "&eThis player has no badges yet") + player_badges = get_badges(player) + if player_badges: + msg(sender, "&6Badges of " + player.getName()) + for key in player_badges: + msg(sender, "&b> &3&o%s" % badges_available[key]) + else: + msg(sender, "&eThis player has no badges yet") def new_badge_event(player, badge): - msg(player, "") - msg(player, "&6Wow! You just received a badge!") - msg(player, "&b-> &3%s" % badges_available[badge]) - msg(player, "&7Type /badge to see all your badges!") - msg(player, "") - player.playSound(player.getLocation(), "random.orb", 1, 1) + msg(player, "") + msg(player, "&6Wow! You just received a badge!") + msg(player, "&b-> &3%s" % badges_available[badge]) + msg(player, "&7Type /badge to see all your badges!") + msg(player, "") + player.playSound(player.getLocation(), "random.orb", 1, 1) def del_badge_event(player, badge): - msg(player, "&cWe took your badge \"%s\"." % badges_available[badge]) + msg(player, "&cWe took your badge \"%s\"." % badges_available[badge]) def list_badges(sender): - if badges_available: - for key in badges_available.keys(): - msg(sender, "&b> &3%s &7&o\"%s\"" % (key, badges_available[key])) - else: - msg(sender, "&cThere are currently no badges available") + if badges_available: + for key in badges_available.keys(): + msg(sender, "&b> &3%s &7&o\"%s\"" % (key, badges_available[key])) + else: + msg(sender, "&cThere are currently no badges available") def add_badge(sender, target, badge): - if badge in badges_available: - player_badges = get_badges(target) - if badge in player_badges: - msg(sender, "&cThis player got this badge already!") - return - player_badges.append(badge) - if player_badges: - badges[uid(target)] = player_badges - msg(sender, "&aYou just gave %s a new badge!" % target.getName()) - new_badge_event(target, badge) - save_badges() - else: - msg(sender, "&cThere is no badge called %s. Check /badge list!" % badge) + if badge in badges_available: + player_badges = get_badges(target) + if badge in player_badges: + msg(sender, "&cThis player got this badge already!") + return + player_badges.append(badge) + if player_badges: + badges[uid(target)] = player_badges + msg(sender, "&aYou just gave %s a new badge!" % target.getName()) + new_badge_event(target, badge) + save_badges() + else: + msg(sender, "&cThere is no badge called %s. Check /badge list!" % badge) def del_badge(sender, target, badge): - if badge in badges_available.keys(): - player_badges = get_badges(target) - if badge in player_badges: - player_badges.remove(badge) - badges[uid(target)] = player_badges - msg(sender, "&aYou just took %s from %s!" % (badge, target.getName())) - save_badges() - del_badge_event(target, badge) - return - msg(sender, "&c%s doesn't have this badge!" % target.getName()) - else: - msg(sender, "&cThere is no badge called %s. Check /badge list!" % badge) + if badge in badges_available.keys(): + player_badges = get_badges(target) + if badge in player_badges: + player_badges.remove(badge) + badges[uid(target)] = player_badges + msg(sender, "&aYou just took %s from %s!" % (badge, target.getName())) + save_badges() + del_badge_event(target, badge) + return + msg(sender, "&c%s doesn't have this badge!" % target.getName()) + else: + msg(sender, "&cThere is no badge called %s. Check /badge list!" % badge) @hook.command("badge", aliases=["badges", "rewards"]) def on_badge_command(sender, args): - argnum = int(len(args)) - - # No arguments - if argnum is 0: - show_badges(sender, sender) - - # Length of arguments is 1 - if argnum == 1: - - # If only argument is "list" - if args[0].lower() == "list": - list_badges(sender) - return True - - # If only argument is a player name - target = server.getPlayer(args[0]) - if is_player(target): - show_badges(sender, target) - return True - else: - msg(sender, "&cThere is no player called %s online." % args[0]) - return True - - msg(sender, "&cUnknown syntax: /badge <playername> &o&c /badge list") - return True - - # Length of arguments is 3 - if argnum == 3: - cmd = args[0].lower() - target = server.getPlayer(args[1]) - new_badge = args[2].lower() - - if cmd == "add": - if not sender.hasPermission(badges_perm_add): - noperm(sender) - return True - add_badge(sender, target, new_badge) - return True - - if cmd == "take" or cmd == "del": - if not sender.hasPermission(badges_perm_del): - noperm(sender) + argnum = int(len(args)) + + # No arguments + if argnum is 0: + show_badges(sender, sender) + + # Length of arguments is 1 + if argnum == 1: + + # If only argument is "list" + if args[0].lower() == "list": + list_badges(sender) + return True + + # If only argument is a player name + target = server.getPlayer(args[0]) + if is_player(target): + show_badges(sender, target) + return True + else: + msg(sender, "&cThere is no player called %s online." % args[0]) + return True + + msg(sender, "&cUnknown syntax: /badge <playername> &o&c /badge list") return True - del_badge(sender, target, new_badge) - return True - msg(sender, "&cUnknown syntax: /badge <add|take> <playername> <badge>") - return True
\ No newline at end of file + # Length of arguments is 3 + if argnum == 3: + cmd = args[0].lower() + target = server.getPlayer(args[1]) + new_badge = args[2].lower() + + if cmd == "add": + if not sender.hasPermission(badges_perm_add): + noperm(sender) + return True + add_badge(sender, target, new_badge) + return True + + if cmd == "take" or cmd == "del": + if not sender.hasPermission(badges_perm_del): + noperm(sender) + return True + del_badge(sender, target, new_badge) + return True + + msg(sender, "&cUnknown syntax: /badge <add|take> <playername> <badge>") + return True
\ No newline at end of file @@ -1,65 +1,65 @@ from helpers import * -calc_users = open_json_file("calc", []) +calc_users = open_json_file("calc", []) math_operators = ["+", "-", "*", "/", "&", "|"] ignore_operators = ["**", "&&", "||"] # ** may be too intensive, the others cause syntax errors calc_perm = "utils.calc" def calc(text): - """ - extracts a mathematical expression from `text` - returns (expression, result) or None - """ - expression = "" - should_calc = False - for char in text: - if char.isdigit() or (should_calc and char in [".", " "]): - expression += char - elif char in math_operators: - # calculation must include at least 1 operator - should_calc = True - expression += char - elif should_calc and char.isalpha(): - # don't include any more text in the calculation - break - if should_calc and not any(op in expression for op in ignore_operators): - try: - result = str(eval(expression)) # pylint: disable = W0123 - except: # pylint: disable = W0702 - # we can run into all kinds of errors here - # most probably SyntaxError - return None - return (expression, result) - return None + """ + extracts a mathematical expression from `text` + returns (expression, result) or None + """ + expression = "" + should_calc = False + for char in text: + if char.isdigit() or (should_calc and char in [".", " "]): + expression += char + elif char in math_operators: + # calculation must include at least 1 operator + should_calc = True + expression += char + elif should_calc and char.isalpha(): + # don't include any more text in the calculation + break + if should_calc and not any(op in expression for op in ignore_operators): + try: + result = str(eval(expression)) # pylint: disable = W0123 + except: # pylint: disable = W0702 + # we can run into all kinds of errors here + # most probably SyntaxError + return None + return (expression, result) + return None @hook.event("player.AsyncPlayerChatEvent", "monitor") def on_calc_chat(event): - sender = event.getPlayer() - message = event.getMessage() - if not event.isCancelled() and uid(sender) in calc_users and sender.hasPermission(calc_perm): - output = calc(message) - if output: - msg(sender, "&2=== Calc: &e" + output[0] + " &2= &c" + output[1]) + sender = event.getPlayer() + message = event.getMessage() + if not event.isCancelled() and uid(sender) in calc_users and sender.hasPermission(calc_perm): + output = calc(message) + if output: + msg(sender, "&2=== Calc: &e" + output[0] + " &2= &c" + output[1]) @hook.command("calc", description="Toggles chat calculations") def on_calc_command(sender, args): - plugin_header(sender, "Chat Calculator") - if not sender.hasPermission(calc_perm): - noperm(sender) - return True - if not checkargs(sender, args, 0, 1): - return True - if not is_player(sender): - msg(sender, "&cYou are not a player!" % sender) - return True + plugin_header(sender, "Chat Calculator") + if not sender.hasPermission(calc_perm): + noperm(sender) + return True + if not checkargs(sender, args, 0, 1): + return True + if not is_player(sender): + msg(sender, "&cYou are not a player!" % sender) + return True - toggle(sender, calc_users, name = "Calc") - save_json_file("calc", calc_users) + toggle(sender, calc_users, name = "Calc") + save_json_file("calc", calc_users) - status = "enabled" if uid(sender) in calc_users else "disabled" - msg(sender, "&6We just &e%s&6 Chat Calculator for you!" % status) + status = "enabled" if uid(sender) in calc_users else "disabled" + msg(sender, "&6We just &e%s&6 Chat Calculator for you!" % status) - return True
\ No newline at end of file + return True
\ No newline at end of file diff --git a/chatgroups.py b/chatgroups.py index 9012cc9..d4e9777 100644 --- a/chatgroups.py +++ b/chatgroups.py @@ -10,83 +10,83 @@ cg_toggle_list = [] @hook.command("chatgroup") def on_chatgroup_command(sender, args): - plugin_header(sender, "ChatGroups") - sender_id = uid(sender) - if len(args) == 1 and args[0] == "leave": - if sender_id in groups.keys(): - groupchat(sender, "left the group", True) - group = groups[sender_id] - del(groups[sender_id]) - save_groups() - else: - msg(sender, "&aYou can't leave no group, derp!") - elif len(args) == 1 and args[0] == "info": - if sender_id in groups.keys(): - group = groups[sender_id] - msg(sender, "&aCurrent chatgroup: %s" % group) - users = [] - for uuid, ugroup in groups.iteritems(): - if ugroup == group: - usr = server.getPlayer(juuid(uuid)) - if usr: - users.append(usr.getDisplayName()) - msg(sender, "&aUsers in this group:") - msg(sender, "&a%s" % ", ".join(users)) + plugin_header(sender, "ChatGroups") + sender_id = uid(sender) + if len(args) == 1 and args[0] == "leave": + if sender_id in groups.keys(): + groupchat(sender, "left the group", True) + group = groups[sender_id] + del(groups[sender_id]) + save_groups() + else: + msg(sender, "&aYou can't leave no group, derp!") + elif len(args) == 1 and args[0] == "info": + if sender_id in groups.keys(): + group = groups[sender_id] + msg(sender, "&aCurrent chatgroup: %s" % group) + users = [] + for uuid, ugroup in groups.iteritems(): + if ugroup == group: + usr = server.getPlayer(juuid(uuid)) + if usr: + users.append(usr.getDisplayName()) + msg(sender, "&aUsers in this group:") + msg(sender, "&a%s" % ", ".join(users)) + else: + msg(sender, "&aYou're in no chatgroup.") + elif len(args) == 2 and args[0] == "join": + groups[sender_id] = args[1] + groupchat(sender, "joined the group", True) + save_groups() + msg(sender, "&aYour chatgroup is set to '%s'" % args[1]) + msg(sender, "&aUse chat like '&e%s<message>' to send messages to this group." % cg_key) else: - msg(sender, "&aYou're in no chatgroup.") - elif len(args) == 2 and args[0] == "join": - groups[sender_id] = args[1] - groupchat(sender, "joined the group", True) - save_groups() - msg(sender, "&aYour chatgroup is set to '%s'" % args[1]) - msg(sender, "&aUse chat like '&e%s<message>' to send messages to this group." % cg_key) - else: - msg(sender, "&e/chatgroup join <name>") - msg(sender, "&e/chatgroup leave") - msg(sender, "&e/chatgroup info") + msg(sender, "&e/chatgroup join <name>") + msg(sender, "&e/chatgroup leave") + msg(sender, "&e/chatgroup info") @hook.command("cgt") def on_cgt_command(sender, args): - p = uid(sender) - if p in cg_toggle_list: - cg_toggle_list.remove(p) - msg(sender, "&8[&bCG&8] &e&oCG toggle: off") - else: - cg_toggle_list.append(p) - msg(sender, "&8[&bCG&8] &e&oCG toggle: on") - return True + p = uid(sender) + if p in cg_toggle_list: + cg_toggle_list.remove(p) + msg(sender, "&8[&bCG&8] &e&oCG toggle: off") + else: + cg_toggle_list.append(p) + msg(sender, "&8[&bCG&8] &e&oCG toggle: on") + return True def groupchat(sender, message, ann = False): - group = groups.get(uid(sender)) - if group == None: - msg(sender, "&cYou are not in a group!") - return - name = sender.getDisplayName() - if ann: - mesg = "&8[&bCG&8] &e&o%s&e&o %s" % (name, message) - else: - mesg = "&8[&bCG&8] &f%s&f: &6%s" % (name, message) - info("[ChatGroups] %s (%s): %s" % (sender.getDisplayName(), group, message)) - for receiver in server.getOnlinePlayers(): - groups.get(uid(receiver)) == group and msg(receiver, mesg) + group = groups.get(uid(sender)) + if group == None: + msg(sender, "&cYou are not in a group!") + return + name = sender.getDisplayName() + if ann: + mesg = "&8[&bCG&8] &e&o%s&e&o %s" % (name, message) + else: + mesg = "&8[&bCG&8] &f%s&f: &6%s" % (name, message) + info("[ChatGroups] %s (%s): %s" % (sender.getDisplayName(), group, message)) + for receiver in server.getOnlinePlayers(): + groups.get(uid(receiver)) == group and msg(receiver, mesg) def save_groups(): - save_json_file("chatgroups", groups) + save_json_file("chatgroups", groups) @hook.event("player.AsyncPlayerChatEvent", "normal") def on_chat(event): - sender = event.getPlayer() - msge = event.getMessage() - if not event.isCancelled(): - sender_id = uid(sender) - if msge[:len(cg_key)] == cg_key and sender_id in groups.keys(): - groupchat(sender, msge[1:]) - event.setCancelled(True) - elif sender_id in cg_toggle_list: - groupchat(sender, msge) - event.setCancelled(True) + sender = event.getPlayer() + msge = event.getMessage() + if not event.isCancelled(): + sender_id = uid(sender) + if msge[:len(cg_key)] == cg_key and sender_id in groups.keys(): + groupchat(sender, msge[1:]) + event.setCancelled(True) + elif sender_id in cg_toggle_list: + groupchat(sender, msge) + event.setCancelled(True) @@ -6,59 +6,59 @@ from helpers import * # receive info based on the user's IP. information provided by ipinfo.io def ip_info(player): - data = json.load(urllib2.urlopen("http://ipinfo.io%s/json" % str(player.getAddress().getAddress()))) - return data + data = json.load(urllib2.urlopen("http://ipinfo.io%s/json" % str(player.getAddress().getAddress()))) + return data # receive first join date based on the player data (may not be accurate) def get_first_join(player): - first_join = int(player.getFirstPlayed()) - dt = datetime.datetime.fromtimestamp(first_join/1000.0) - return "%s-%s-%s %s:%s:%s" % (str(dt.year), str(dt.month), str(dt.day), str(dt.hour), str(dt.minute), str(dt.second)) + first_join = int(player.getFirstPlayed()) + dt = datetime.datetime.fromtimestamp(first_join/1000.0) + return "%s-%s-%s %s:%s:%s" % (str(dt.year), str(dt.month), str(dt.day), str(dt.hour), str(dt.minute), str(dt.second)) # receive country based on the user's IP def get_country(data): - return str(data.get("country")) + return str(data.get("country")) def get_all_names(player): - uuid = str(player.getUniqueId()).replace("-", "") - names = json.load(urllib2.urlopen("https://api.mojang.com/user/profiles/%s/names" % uuid)) - return ", ".join(names) + uuid = str(player.getUniqueId()).replace("-", "") + names = json.load(urllib2.urlopen("https://api.mojang.com/user/profiles/%s/names" % uuid)) + return ", ".join(names) # combines data def get_all_data(sender, player): - data = ip_info(player) + data = ip_info(player) - msg(sender, "") - - try: - msg(sender, "&7 -- Data provided by Redstoner") - msg(sender, "&6> UUID: &e%s" % str(player.getUniqueId())) - msg(sender, "&6> First joined: &7(y-m-d h:m:s) &e%s" % get_first_join(player)) msg(sender, "") - msg(sender, "&7 -- Data provided by ipinfo.io") - msg(sender, "&6> Country: &e%s" % get_country(data)) - msg(sender, "&7 -- Data provided by Mojang") - msg(sender, "&6> All ingame names used so far: &e%s" % get_all_names(player)) - except Exception as e: - # can throw exceptions such as timeouts when Mojang API is down - warn(e) + + try: + msg(sender, "&7 -- Data provided by Redstoner") + msg(sender, "&6> UUID: &e%s" % str(player.getUniqueId())) + msg(sender, "&6> First joined: &7(y-m-d h:m:s) &e%s" % get_first_join(player)) + msg(sender, "") + msg(sender, "&7 -- Data provided by ipinfo.io") + msg(sender, "&6> Country: &e%s" % get_country(data)) + msg(sender, "&7 -- Data provided by Mojang") + msg(sender, "&6> All ingame names used so far: &e%s" % get_all_names(player)) + except Exception as e: + # can throw exceptions such as timeouts when Mojang API is down + warn(e) @hook.command("check", description="Displays useful stuff about a user", usage="/check <player>") def on_hook_command(sender, args): - if sender.hasPermission("utils.check"): - plugin_header(sender, "Check") - msg(sender, "&7Please notice that the data may not be fully accurate!") + if sender.hasPermission("utils.check"): + plugin_header(sender, "Check") + msg(sender, "&7Please notice that the data may not be fully accurate!") - player = server.getPlayer(args[0]) if len(args) > 0 else None - if player is not None and is_player(player): - get_all_data(sender, player) + player = server.getPlayer(args[0]) if len(args) > 0 else None + if player is not None and is_player(player): + get_all_data(sender, player) + else: + msg(sender, "&cLooks like this player is not online.") else: - msg(sender, "&cLooks like this player is not online.") - else: - msg(sender, "&4You don't have the required permissions to execute this command!") - return True
\ No newline at end of file + msg(sender, "&4You don't have the required permissions to execute this command!") + return True
\ No newline at end of file @@ -5,46 +5,46 @@ no_cyclers = open_json_file("cycle", []) @hook.command("cycle") def on_cycler_command(sender, args): - plugin_header(sender, "Cycle") - if not is_player(sender): - msg(sender, "&conly players can do this") - return True - if not len(args) == 1: - msg(sender, "&cUsage: /cycle <on|off>") - return True + plugin_header(sender, "Cycle") + if not is_player(sender): + msg(sender, "&conly players can do this") + return True + if not len(args) == 1: + msg(sender, "&cUsage: /cycle <on|off>") + return True - cmd = args[0].lower() - pid = uid(sender) - nop = pid in no_cyclers - if cmd == "on": - if nop: - no_cyclers.remove(pid) - save_cyclers() - msg(sender, "&aTurned &2on&a inventory cycling!") + cmd = args[0].lower() + pid = uid(sender) + nop = pid in no_cyclers + if cmd == "on": + if nop: + no_cyclers.remove(pid) + save_cyclers() + msg(sender, "&aTurned &2on&a inventory cycling!") + else: + msg(sender, "&aAlready turned on.") + elif cmd == "off": + if not nop: + no_cyclers.append(pid) + save_cyclers() + msg(sender, "&aTurned &coff&a inventory cycling!") + else: + msg(sender, "&aAlready turned off.") else: - msg(sender, "&aAlready turned on.") - elif cmd == "off": - if not nop: - no_cyclers.append(pid) - save_cyclers() - msg(sender, "&aTurned &coff&a inventory cycling!") - else: - msg(sender, "&aAlready turned off.") - else: - msg(sender, "&cUsage: /cycle <on|off>") - return True + msg(sender, "&cUsage: /cycle <on|off>") + return True @hook.event("player.PlayerItemHeldEvent", "normal") def on_slot_change(event): - player = event.getPlayer() - if is_creative(player) and uid(player) not in no_cyclers and not player.isSneaking(): - prev_slot = event.getPreviousSlot() - new_slot = event.getNewSlot() - if (prev_slot == 0 and new_slot == 8): # left -> right - do_cycle(player, True) - elif (prev_slot == 8 and new_slot == 0): # right -> left - do_cycle(player, False) + player = event.getPlayer() + if is_creative(player) and uid(player) not in no_cyclers and not player.isSneaking(): + prev_slot = event.getPreviousSlot() + new_slot = event.getNewSlot() + if (prev_slot == 0 and new_slot == 8): # left -> right + do_cycle(player, True) + elif (prev_slot == 8 and new_slot == 0): # right -> left + do_cycle(player, False) # ITEM SLOTS # #_____________________________ @@ -55,16 +55,16 @@ def on_slot_change(event): # | 0| 1| 2| 3| 4| 5| 6| 7| 8| def do_cycle(player, down): - inv = player.getInventory() - items = inv.getContents() - shift = -9 if down else 9 - shift = shift % len(items) - for _ in range(4): - items = items[shift:] + items[:shift] # shift "around" - uniq_items = sorted(set(list(items)[:9])) # get unique inventory - if uniq_items != [None]: # row not empty - break - inv.setContents(items) + inv = player.getInventory() + items = inv.getContents() + shift = -9 if down else 9 + shift = shift % len(items) + for _ in range(4): + items = items[shift:] + items[:shift] # shift "around" + uniq_items = sorted(set(list(items)[:9])) # get unique inventory + if uniq_items != [None]: # row not empty + break + inv.setContents(items) def save_cyclers(): - save_json_file("cycle", no_cyclers)
\ No newline at end of file + save_json_file("cycle", no_cyclers)
\ No newline at end of file diff --git a/damnspam.py b/damnspam.py index c259aa0..75b985d 100644 --- a/damnspam.py +++ b/damnspam.py @@ -10,145 +10,145 @@ removing_input = False def save_inputs(): - save_json_file("damnspam", inputs) + save_json_file("damnspam", inputs) def location_str(block): - return ";".join([block.getWorld().getName(), str(block.getX()), str(block.getY()), str(block.getZ())]) + return ";".join([block.getWorld().getName(), str(block.getX()), str(block.getY()), str(block.getZ())]) def add_input(creator, block, timeout_off, timeout_on): - inputs[location_str(block)] = { - "creator" : uid(creator), - "timeout_off" : timeout_off, - "timeout_on" : timeout_on, - "last_time" : 0 - } + inputs[location_str(block)] = { + "creator" : uid(creator), + "timeout_off" : timeout_off, + "timeout_on" : timeout_on, + "last_time" : 0 + } @hook.command("damnspam") def on_dammnspam_command(sender, args): - global changing_input - - plugin_header(sender, "DamnSpam") - if not checkargs(sender, args, 1, 2): - msg(sender, "&c/damnspam <seconds> &e(Buttons/Levers)") - msg(sender, "&c/damnspam <seconds after off> <seconds after on> &e(Levers only)") - return True - - if not is_creative(sender): - msg(sender, "&cYou can only do this in Creative mode.") - return True - - # /damnspam <secs> - if len(args) == 1: - timeout_on = args[0] - try: - timeout_on = round(float(timeout_on), 2) - timeout_off = timeout_on - if 60 >= timeout_on <= -2 or timeout_on == 0: - timeout_on = False - if timeout_on == False: - msg(sender, "&cThe timeout must be within 0-60 or -1.") - return True - except ValueError: - msg(sender, "&cThe timeout must be a number") - return True + global changing_input - # /damnspam <off> <on> - elif len(args) == 2: - timeout_on = args[0] - timeout_off = args[1] - try: - timeout_on = round(float(timeout_on), 2) - timeout_off = round(float(timeout_off), 2) - if 60 >= timeout_on <= -2 or timeout_on == 0: - timeout_on = False - if 60 >= timeout_off <= -2 or timeout_off == 0: - timeout_off = False - if timeout_on == False or timeout_off == False: - msg(sender, "&cThe timeout must be within 0-60 or -1.") - return True - except ValueError: - msg(sender, "&cThe timeout must be a number") + plugin_header(sender, "DamnSpam") + if not checkargs(sender, args, 1, 2): + msg(sender, "&c/damnspam <seconds> &e(Buttons/Levers)") + msg(sender, "&c/damnspam <seconds after off> <seconds after on> &e(Levers only)") return True - # get the block we're looking at - target = sender.getTargetBlock(None, 10) - ttype = str(target.getType()) - if ttype not in accepted_inputs: - msg(sender, "&cPlease look at a button or lever while executing this command!") - return True - - if location_str(target) in inputs: - changing_input = True # this input already has a timeout - # test if player is allowed to build here - test_event = BlockBreakEvent(target, sender) - server.getPluginManager().callEvent(test_event) - changing_input = False - if test_event.isCancelled(): - msg(sender, "&cYou are not allowed to modify this %s" % str(target.getType()).lower()) - return True - - # add block to inputs - add_input(sender, target, timeout_off, timeout_on) - save_inputs() - msg(sender, "&aSuccessfully set a timeout for this %s." % ttype.lower().replace("_", " ")) - return True - - -@hook.event("block.BlockBreakEvent", "normal") -def on_block_break(event): - global removing_input - - if removing_input: - return True - sender = event.getPlayer() - block = event.getBlock() - btype = str(block.getType()).lower() - if str(block.getType()) in accepted_inputs and not event.isCancelled(): - pos_str = location_str(block) - if inputs.get(pos_str): - plugin_header(sender, "DamnSpam") - if sender.isSneaking(): + if not is_creative(sender): + msg(sender, "&cYou can only do this in Creative mode.") + return True + + # /damnspam <secs> + if len(args) == 1: + timeout_on = args[0] + try: + timeout_on = round(float(timeout_on), 2) + timeout_off = timeout_on + if 60 >= timeout_on <= -2 or timeout_on == 0: + timeout_on = False + if timeout_on == False: + msg(sender, "&cThe timeout must be within 0-60 or -1.") + return True + except ValueError: + msg(sender, "&cThe timeout must be a number") + return True + + # /damnspam <off> <on> + elif len(args) == 2: + timeout_on = args[0] + timeout_off = args[1] + try: + timeout_on = round(float(timeout_on), 2) + timeout_off = round(float(timeout_off), 2) + if 60 >= timeout_on <= -2 or timeout_on == 0: + timeout_on = False + if 60 >= timeout_off <= -2 or timeout_off == 0: + timeout_off = False + if timeout_on == False or timeout_off == False: + msg(sender, "&cThe timeout must be within 0-60 or -1.") + return True + except ValueError: + msg(sender, "&cThe timeout must be a number") + return True + + # get the block we're looking at + target = sender.getTargetBlock(None, 10) + ttype = str(target.getType()) + if ttype not in accepted_inputs: + msg(sender, "&cPlease look at a button or lever while executing this command!") + return True + + if location_str(target) in inputs: + changing_input = True # this input already has a timeout # test if player is allowed to build here - removing_input = True - test_event = BlockBreakEvent(block, sender) + test_event = BlockBreakEvent(target, sender) server.getPluginManager().callEvent(test_event) - removing_input = False + changing_input = False if test_event.isCancelled(): - event.setCancelled(True) - msg(sender, "&cYou are not allowed to remove this %s" % btype) - return True - inputs.pop(pos_str) # remove + msg(sender, "&cYou are not allowed to modify this %s" % str(target.getType()).lower()) + return True + + # add block to inputs + add_input(sender, target, timeout_off, timeout_on) save_inputs() - msg(sender, "&eSuccessfully removed this %s!" % btype) + msg(sender, "&aSuccessfully set a timeout for this %s." % ttype.lower().replace("_", " ")) return True - elif not changing_input: - event.setCancelled(True) - msg(sender, "&cYou cannot destroy this %s!" % btype) - msg(sender, "&c&nSneak&c and break if you want to remove it.") + + +@hook.event("block.BlockBreakEvent", "normal") +def on_block_break(event): + global removing_input + + if removing_input: return True + sender = event.getPlayer() + block = event.getBlock() + btype = str(block.getType()).lower() + if str(block.getType()) in accepted_inputs and not event.isCancelled(): + pos_str = location_str(block) + if inputs.get(pos_str): + plugin_header(sender, "DamnSpam") + if sender.isSneaking(): + # test if player is allowed to build here + removing_input = True + test_event = BlockBreakEvent(block, sender) + server.getPluginManager().callEvent(test_event) + removing_input = False + if test_event.isCancelled(): + event.setCancelled(True) + msg(sender, "&cYou are not allowed to remove this %s" % btype) + return True + inputs.pop(pos_str) # remove + save_inputs() + msg(sender, "&eSuccessfully removed this %s!" % btype) + return True + elif not changing_input: + event.setCancelled(True) + msg(sender, "&cYou cannot destroy this %s!" % btype) + msg(sender, "&c&nSneak&c and break if you want to remove it.") + return True @hook.event("player.PlayerInteractEvent", "normal") def on_interact(event): - if (str(event.getAction()) == "RIGHT_CLICK_BLOCK") and not event.isCancelled(): - sender = event.getPlayer() - block = event.getClickedBlock() - btype = str(block.getType()).lower() - powered = (block.getData() & 0x8) == 0x8 if btype == "lever" else False # data > 7, but this is how bukkit does it - pos_str = location_str(block) - data = inputs.get(pos_str) - if data: - checktime = data["timeout_on"] if powered else data["timeout_off"] - if checktime == -1: - event.setCancelled(True) - plugin_header(sender, "DamnSpam") - msg(sender, "&cThis %s is locked permanently." % (btype)) - elif data["last_time"] + checktime > now(): - event.setCancelled(True) - plugin_header(sender, "DamnSpam") - msg(sender, "&cThis %s has a timeout of %ss." % (btype, checktime)) - else: - inputs[pos_str]["last_time"] = round(now(), 2) + if (str(event.getAction()) == "RIGHT_CLICK_BLOCK") and not event.isCancelled(): + sender = event.getPlayer() + block = event.getClickedBlock() + btype = str(block.getType()).lower() + powered = (block.getData() & 0x8) == 0x8 if btype == "lever" else False # data > 7, but this is how bukkit does it + pos_str = location_str(block) + data = inputs.get(pos_str) + if data: + checktime = data["timeout_on"] if powered else data["timeout_off"] + if checktime == -1: + event.setCancelled(True) + plugin_header(sender, "DamnSpam") + msg(sender, "&cThis %s is locked permanently." % (btype)) + elif data["last_time"] + checktime > now(): + event.setCancelled(True) + plugin_header(sender, "DamnSpam") + msg(sender, "&cThis %s has a timeout of %ss." % (btype, checktime)) + else: + inputs[pos_str]["last_time"] = round(now(), 2) diff --git a/forcefield.py b/forcefield.py index 497c853..f76f873 100644 --- a/forcefield.py +++ b/forcefield.py @@ -18,130 +18,130 @@ whitelists = {} # {ff_owner_id: [white, listed, ids]} (Adding file usage later, @hook.command("forcefield") def on_forcefield_command(sender, args): - if not is_player(sender) or not sender.hasPermission(ff_perm): - noperm(sender) - return True - - if not args or args[0].upper() in ["ON", "OFF"]: # Toggle - forcefield_toggle(sender, args[:1]) - return True + if not is_player(sender) or not sender.hasPermission(ff_perm): + noperm(sender) + return True + + if not args or args[0].upper() in ["ON", "OFF"]: # Toggle + forcefield_toggle(sender, args[:1]) + return True + + args[0] = args[0].upper() # If it gets to this point, there are argument(s). + if args[0] in ["WHITELIST", "WL", "WLIST"]: # Whitelist commands + if not args[1:] or args[1].upper() == "LIST": + thread.start_new_thread(whitelist_list, (sender,)) + return True + + args[1] = args[1].upper() # If it gets too this point, there is a second argument. + if args[1] == "CLEAR": + whitelist_clear(sender) + elif args[1] in ["ADD", "+"]: + change_whitelist(sender, True, args[2:]) + elif args[1] in ["REMOVE", "DELETE", "REM", "DEL", "-"]: + change_whitelist(sender, False, args[2:]) + else: + forcefield_header(sender, "&cInvalid syntax. Use &e/ff ? &cfor info.") - args[0] = args[0].upper() # If it gets to this point, there are argument(s). - if args[0] in ["WHITELIST", "WL", "WLIST"]: # Whitelist commands - if not args[1:] or args[1].upper() == "LIST": - thread.start_new_thread(whitelist_list, (sender,)) - return True - - args[1] = args[1].upper() # If it gets too this point, there is a second argument. - if args[1] == "CLEAR": - whitelist_clear(sender) - elif args[1] in ["ADD", "+"]: - change_whitelist(sender, True, args[2:]) - elif args[1] in ["REMOVE", "DELETE", "REM", "DEL", "-"]: - change_whitelist(sender, False, args[2:]) + elif args[0] in ["HELP", "?"]: # /forcefield help + forcefield_help(sender) else: - forcefield_header(sender, "&cInvalid syntax. Use &e/ff ? &cfor info.") - - elif args[0] in ["HELP", "?"]: # /forcefield help - forcefield_help(sender) - else: - forcefield_header(sender, "&cInvalid syntax. Use &e/ff ? &cfor info.") - return True + forcefield_header(sender, "&cInvalid syntax. Use &e/ff ? &cfor info.") + return True def change_whitelist(sender, add, names): #Add names if add == True else Remove names. - if names: - sender_id = uid(sender) - if sender_id not in whitelists: - whitelists[sender_id] = [] - - for name in names: - player = server.getPlayer(name) - if player: - player_id = uid(player) - pname = player.getName() - sname = stripcolors(sender.getDisplayName()) - - # add player to whitelist if not already added - if add and player_id not in whitelists[sender_id]: - if sender != player: - whitelists[sender_id].append(player_id) - forcefield_header(sender, "&bAdded &f%s &bto your forcefield whitelist." % pname) - forcefield_header(player, "&f%s &badded you to his forcefield whitelist." % sname) - else: - forcefield_header(sender, "&cYou can't whitelist yourself.") - - # remove player from whitelist if whitelisted - elif not add and player_id in whitelists[sender_id]: - whitelists[sender_id].remove(player_id) - forcefield_header(sender, "&cRemoved &f%s &cfrom your forcefield whitelist." % pname) - forcefield_header(player, "&f%s &cremoved you from his forcefield whitelist." % sname) - - # player was already / not added to whitelist - else: - var = "already" if add == True else "not" - forcefield_header(sender, "&f%s &cwas %s in your forcefield whitelist!" % (pname, var)) - - else: - forcefield_header(sender, "&cplayer &f%s &cwas not found (must be online)." % name) - else: - forcefield_header(sender, "&cGive space-separated playernames.") + if names: + sender_id = uid(sender) + if sender_id not in whitelists: + whitelists[sender_id] = [] + + for name in names: + player = server.getPlayer(name) + if player: + player_id = uid(player) + pname = player.getName() + sname = stripcolors(sender.getDisplayName()) + + # add player to whitelist if not already added + if add and player_id not in whitelists[sender_id]: + if sender != player: + whitelists[sender_id].append(player_id) + forcefield_header(sender, "&bAdded &f%s &bto your forcefield whitelist." % pname) + forcefield_header(player, "&f%s &badded you to his forcefield whitelist." % sname) + else: + forcefield_header(sender, "&cYou can't whitelist yourself.") + + # remove player from whitelist if whitelisted + elif not add and player_id in whitelists[sender_id]: + whitelists[sender_id].remove(player_id) + forcefield_header(sender, "&cRemoved &f%s &cfrom your forcefield whitelist." % pname) + forcefield_header(player, "&f%s &cremoved you from his forcefield whitelist." % sname) + + # player was already / not added to whitelist + else: + var = "already" if add == True else "not" + forcefield_header(sender, "&f%s &cwas %s in your forcefield whitelist!" % (pname, var)) + + else: + forcefield_header(sender, "&cplayer &f%s &cwas not found (must be online)." % name) + else: + forcefield_header(sender, "&cGive space-separated playernames.") def whitelist_list(player): - try: - player_id = uid(player) - count = 0 - forcefield_header(player, "&bForcefield whitelist:") - for user_id in whitelists.get(player_id, []): - count += 1 - pname = retrieve_player(user_id).getName() - msg(player, "&b %s. &f%s" % (count, pname)) - if count == 0: - msg(player, "&c Your whitelist has no entries.") - except: - warn("Unable to finish whitelist_list process") + try: + player_id = uid(player) + count = 0 + forcefield_header(player, "&bForcefield whitelist:") + for user_id in whitelists.get(player_id, []): + count += 1 + pname = retrieve_player(user_id).getName() + msg(player, "&b %s. &f%s" % (count, pname)) + if count == 0: + msg(player, "&c Your whitelist has no entries.") + except: + warn("Unable to finish whitelist_list process") def whitelist_clear(player): - player_id = uid(player) - if whitelists.get(player_id): - whitelists.pop(player_id) - forcefield_header(player, "&bForcefield whitelist cleared.") - else: - forcefield_header(player, "&cYou had no players whitelisted.") + player_id = uid(player) + if whitelists.get(player_id): + whitelists.pop(player_id) + forcefield_header(player, "&bForcefield whitelist cleared.") + else: + forcefield_header(player, "&cYou had no players whitelisted.") def forcefield_help(player): - msg(player, " ") - forcefield_header(player, "&b&l/Forcefield help: Your forcefield is %s" % ("&2&lON" if uid(player) in ff_users else "&c&lOFF")) - msg(player, "&b You can use the forcefield to keep players on distance.") - msg(player, "&b Commands:") - msg(player, "&b 1. &6/ff &ohelp &b aliases: &6?") - msg(player, "&b 2. &6/ff &o(on off)") - msg(player, "&b 3. &6/ff &owhitelist (list) &b aliases: &6wlist, wl") - msg(player, "&b 4. &6/ff wl &oclear") - msg(player, "&b 5. &6/ff wl &oadd <players> &b aliases: &6+") - msg(player, "&b 6. &6/ff wl &oremove <players> &b aliases: &6delete, rem, del, -") - msg(player, " ") + msg(player, " ") + forcefield_header(player, "&b&l/Forcefield help: Your forcefield is %s" % ("&2&lON" if uid(player) in ff_users else "&c&lOFF")) + msg(player, "&b You can use the forcefield to keep players on distance.") + msg(player, "&b Commands:") + msg(player, "&b 1. &6/ff &ohelp &b aliases: &6?") + msg(player, "&b 2. &6/ff &o(on off)") + msg(player, "&b 3. &6/ff &owhitelist (list) &b aliases: &6wlist, wl") + msg(player, "&b 4. &6/ff wl &oclear") + msg(player, "&b 5. &6/ff wl &oadd <players> &b aliases: &6+") + msg(player, "&b 6. &6/ff wl &oremove <players> &b aliases: &6delete, rem, del, -") + msg(player, " ") def forcefield_toggle(player, arg): # arg is a list with max 1 string - player_id = uid(player) - enabled = player_id in ff_users - argoff = arg[0].upper() == "OFF" if arg else False - if enabled and (not arg or argoff): # 3 possibilities for arg: [], ["OFF"], ["ON"]. This is the most efficient way. (Case insensitive) - ff_users.remove(player_id) - forcefield_header(player, "&bForcefield toggle: &c&lOFF") - elif not enabled and not argoff: - ff_users.append(player_id) - forcefield_header(player, "&bForcefield toggle: &2&lON") - else: - forcefield_header(player, "&cYour forcefield is already %s!" % arg[0].lower()) + player_id = uid(player) + enabled = player_id in ff_users + argoff = arg[0].upper() == "OFF" if arg else False + if enabled and (not arg or argoff): # 3 possibilities for arg: [], ["OFF"], ["ON"]. This is the most efficient way. (Case insensitive) + ff_users.remove(player_id) + forcefield_header(player, "&bForcefield toggle: &c&lOFF") + elif not enabled and not argoff: + ff_users.append(player_id) + forcefield_header(player, "&bForcefield toggle: &2&lON") + else: + forcefield_header(player, "&cYour forcefield is already %s!" % arg[0].lower()) def forcefield_header(player, message): - msg(player, "%s %s" % (ff_prefix, message)) + msg(player, "%s %s" % (ff_prefix, message)) #--------------------------------------------------------------------------------------------------------# @@ -149,41 +149,41 @@ def forcefield_header(player, message): @hook.event("player.PlayerMoveEvent") def on_move(event): - if ff_users: - player = event.getPlayer() - if is_creative(player): - player_id = uid(player) - - # moving player has forcefield, nearby player should be moved away - if player_id in ff_users: - for entity in player.getNearbyEntities(fd, fd, fd): - whitelisted = (uid(entity) in whitelists.get(player_id, [])) - if is_player(entity) and not entity.hasPermission(pass_perm) and not whitelisted: - move_away(player, entity) - - # nearby player has forcefield, moving player should be moved away - if not player.hasPermission(pass_perm): - for entity in player.getNearbyEntities(fd, fd, fd): - entity_id = uid(entity) - ff_enabled = (entity_id in ff_users) - whitelisted = (player_id in whitelists.get(entity_id, [])) - if is_player(entity) and is_creative(entity) and ff_enabled and not whitelisted: - move_away(entity, player) + if ff_users: + player = event.getPlayer() + if is_creative(player): + player_id = uid(player) + + # moving player has forcefield, nearby player should be moved away + if player_id in ff_users: + for entity in player.getNearbyEntities(fd, fd, fd): + whitelisted = (uid(entity) in whitelists.get(player_id, [])) + if is_player(entity) and not entity.hasPermission(pass_perm) and not whitelisted: + move_away(player, entity) + + # nearby player has forcefield, moving player should be moved away + if not player.hasPermission(pass_perm): + for entity in player.getNearbyEntities(fd, fd, fd): + entity_id = uid(entity) + ff_enabled = (entity_id in ff_users) + whitelisted = (player_id in whitelists.get(entity_id, [])) + if is_player(entity) and is_creative(entity) and ff_enabled and not whitelisted: + move_away(entity, player) def move_away(player, entity): - # Pushes entity away from player + # Pushes entity away from player - player_loc = player.getLocation() - entity_loc = entity.getLocation() + player_loc = player.getLocation() + entity_loc = entity.getLocation() - dx = entity_loc.getX() - player_loc.getX() - vx = sin(Xv * dx) - dy = entity_loc.getY() - player_loc.getY() - vy = sin(Xv * dy) - dz = entity_loc.getZ() - player_loc.getZ() - vz = sin(Xv * dz) - entity.setVelocity(Vector(vx , vy, vz)) + dx = entity_loc.getX() - player_loc.getX() + vx = sin(Xv * dx) + dy = entity_loc.getY() - player_loc.getY() + vy = sin(Xv * dy) + dz = entity_loc.getZ() - player_loc.getZ() + vz = sin(Xv * dz) + entity.setVelocity(Vector(vx , vy, vz)) #--------------------------------------------------------------------------------------------------------# @@ -191,7 +191,7 @@ def move_away(player, entity): @hook.event("player.PlayerQuitEvent") def on_quit(event): - player = event.getPlayer() - player_id = uid(player) - if player_id in ff_users: - ff_users.remove(player_id)
\ No newline at end of file + player = event.getPlayer() + player_id = uid(player) + if player_id in ff_users: + ff_users.remove(player_id)
\ No newline at end of file @@ -8,153 +8,153 @@ friend_join_sound = "random.orb" @hook.event("player.PlayerJoinEvent", "high") # creates sound and sends a bold message on friend join def fjm(event): # friend join message - player = event.getPlayer() - player_id = uid(player) + player = event.getPlayer() + player_id = uid(player) - for onlineplayer in list(server.getOnlinePlayers()): - if player_id in friends.get(uid(onlineplayer), []): - msg(onlineplayer, "&a&l%s &ajoined!" % player.getName()) - onlineplayer.playSound(onlineplayer.getLocation(), friend_join_sound, 1, 0) + for onlineplayer in list(server.getOnlinePlayers()): + if player_id in friends.get(uid(onlineplayer), []): + msg(onlineplayer, "&a&l%s &ajoined!" % player.getName()) + onlineplayer.playSound(onlineplayer.getLocation(), friend_join_sound, 1, 0) def save_friends(): # saves to friends file - save_json_file("friends", friends) + save_json_file("friends", friends) def friendmessage(player, message): # sends a message with a prefix - msg(player, "&7[&aFriends&7] " + message) + msg(player, "&7[&aFriends&7] " + message) def ls(sender): - try: - sender_friends = friends.get(uid(sender), False) - if sender_friends: - friends_string = "" - for uuid in sender_friends: - friends_string += (retrieve_player(uuid).getName() + ", ") - friendmessage(sender, "&aYour friends list: " + friends_string[:len(friends_string)-2]) - else: - friendmessage(sender, "&cYour friends list is empty") - except: - warn("Unable to finish friends' ls process") + try: + sender_friends = friends.get(uid(sender), False) + if sender_friends: + friends_string = "" + for uuid in sender_friends: + friends_string += (retrieve_player(uuid).getName() + ", ") + friendmessage(sender, "&aYour friends list: " + friends_string[:len(friends_string)-2]) + else: + friendmessage(sender, "&cYour friends list is empty") + except: + warn("Unable to finish friends' ls process") def clear(sender): - sender_id = uid(sender) + sender_id = uid(sender) - if friends.get(sender_id, False): - friends.pop(sender_id) - friendmessage(sender, "&aFriends list cleared") - save_friends() - else: - friendmessage(sender, "&cYour friends list is already empty") + if friends.get(sender_id, False): + friends.pop(sender_id) + friendmessage(sender, "&aFriends list cleared") + save_friends() + else: + friendmessage(sender, "&cYour friends list is already empty") def add(sender, names): - sender_id = uid(sender) - added = [] - notfound = [] - friendalready = [] - - if not sender_id in friends: - friends[sender_id] = [] - - for name in names: - player = server.getPlayer(name) - if player: - player_id = uid(player) - not_yourself = player != sender - - if not player_id in friends[sender_id]: - if not_yourself: - friends[sender_id].append(player_id) - added.append(player.getName()) - friendmessage(player.getPlayer(), "&a&o%s &aadded you to their friends list" % stripcolors(sender.getDisplayName())) - else: - friendalready.append(player.getName()) + sender_id = uid(sender) + added = [] + notfound = [] + friendalready = [] + + if not sender_id in friends: + friends[sender_id] = [] + + for name in names: + player = server.getPlayer(name) + if player: + player_id = uid(player) + not_yourself = player != sender + + if not player_id in friends[sender_id]: + if not_yourself: + friends[sender_id].append(player_id) + added.append(player.getName()) + friendmessage(player.getPlayer(), "&a&o%s &aadded you to their friends list" % stripcolors(sender.getDisplayName())) + else: + friendalready.append(player.getName()) + + else: + notfound.append(name) - else: - notfound.append(name) - - save_friends() - if added: - friendmessage(sender, "&a&o%s&a added." % ", ".join(added)) - if notfound: - friendmessage(sender, "&c&o%s&c not found. (must be online)" % ", ".join(notfound)) - if friendalready: - friendmessage(sender, "&c&o%s&c is/are already your friend." % ", ".join(friendalready)) - if not not_yourself: - friendmessage(sender, "&cYou can't add yourself to your friends list.") + save_friends() + if added: + friendmessage(sender, "&a&o%s&a added." % ", ".join(added)) + if notfound: + friendmessage(sender, "&c&o%s&c not found. (must be online)" % ", ".join(notfound)) + if friendalready: + friendmessage(sender, "&c&o%s&c is/are already your friend." % ", ".join(friendalready)) + if not not_yourself: + friendmessage(sender, "&cYou can't add yourself to your friends list.") def rem(sender, names): - sender_id = uid(sender) - removed = [] - notfound = [] - notafriend = [] - - for name in names: - player = server.Player(name) - if player: - player_id = uid(player) - if player_id in friends.get(sender_id, []): - friends[sender_id].remove(player_id) - removed.append(player.getName()) - friendmessage(player.getPlayer(), "&c&o%s &cremoved you from their friends list" % stripcolors(sender.getDisplayName())) - else: - notafriend.append(player.getName()) - else: - notfound.append(name) + sender_id = uid(sender) + removed = [] + notfound = [] + notafriend = [] + + for name in names: + player = server.Player(name) + if player: + player_id = uid(player) + if player_id in friends.get(sender_id, []): + friends[sender_id].remove(player_id) + removed.append(player.getName()) + friendmessage(player.getPlayer(), "&c&o%s &cremoved you from their friends list" % stripcolors(sender.getDisplayName())) + else: + notafriend.append(player.getName()) + else: + notfound.append(name) - save_friends() - if removed: - friendmessage(sender, "&a&o%s&a removed." % ", ".join(removed)) - if notfound: - friendmessage(sender, "&c&o%s&c not found. (must be online)" % ", ".join(notfound)) - if notafriend: - friendmessage(sender, "&c&o%s&c is/are not in your friends list." % ", ".join(notafriend)) + save_friends() + if removed: + friendmessage(sender, "&a&o%s&a removed." % ", ".join(removed)) + if notfound: + friendmessage(sender, "&c&o%s&c not found. (must be online)" % ", ".join(notfound)) + if notafriend: + friendmessage(sender, "&c&o%s&c is/are not in your friends list." % ", ".join(notafriend)) def fhelp(sender): - friendmessage(sender, "&a&l/friends help") - msg(sender, "&a1. /friends &oadd <names...> &6aliases: &o+") - msg(sender, "&a2. /friends &orem <names...> &6aliases: &oremove, delete, del, -") - msg(sender, "&a3. /friends &oclear &6aliases: &o/") - msg(sender, "&a4. /friends &olist &6aliases: &olst, *") - msg(sender, "&a5. /friends &ohelp &6aliases: &o?") + friendmessage(sender, "&a&l/friends help") + msg(sender, "&a1. /friends &oadd <names...> &6aliases: &o+") + msg(sender, "&a2. /friends &orem <names...> &6aliases: &oremove, delete, del, -") + msg(sender, "&a3. /friends &oclear &6aliases: &o/") + msg(sender, "&a4. /friends &olist &6aliases: &olst, *") + msg(sender, "&a5. /friends &ohelp &6aliases: &o?") @hook.command("friends") def on_friend_command(sender, args): - if not is_player(sender): - friendmessage(sender, "&c&lYou can't have friends!") - return True - - cmd = args[0] if args else None - fargs = args[1:] - - # /friends list - if cmd in ["list", "lst", "*"]: - thread.start_new_thread(ls, (sender,)) - - # /friends clear - elif cmd in ["clear", "/"]: - clear(sender) + if not is_player(sender): + friendmessage(sender, "&c&lYou can't have friends!") + return True + + cmd = args[0] if args else None + fargs = args[1:] + + # /friends list + if cmd in ["list", "lst", "*"]: + thread.start_new_thread(ls, (sender,)) + + # /friends clear + elif cmd in ["clear", "/"]: + clear(sender) + + # /friends add <names> + elif cmd in ["add", "+"]: + if fargs: + add(sender, fargs) + else: + fhelp(sender) + + # /friends remove <names> + elif cmd in ["remove", "rem", "delete", "del", "-"]: + if fargs: + rem(sender, fargs) + else: + fhelp(sender) - # /friends add <names> - elif cmd in ["add", "+"]: - if fargs: - add(sender, fargs) else: - fhelp(sender) - - # /friends remove <names> - elif cmd in ["remove", "rem", "delete", "del", "-"]: - if fargs: - rem(sender, fargs) - else: - fhelp(sender) - - else: - fhelp(sender) - return True
\ No newline at end of file + fhelp(sender) + return True
\ No newline at end of file @@ -15,198 +15,198 @@ server = bukkit.Bukkit.getServer() def info(text): - """ - Log info to console - """ - server.getLogger().info("[RedstonerUtils] %s" % text) + """ + Log info to console + """ + server.getLogger().info("[RedstonerUtils] %s" % text) def warn(text): - """ - Log warning to console - """ - server.getLogger().warning("[RedstonerUtils] %s" % text) + """ + Log warning to console + """ + server.getLogger().warning("[RedstonerUtils] %s" % text) def error(text): - """ - Log error to console - """ - server.getLogger().severe("[RedstonerUtils] %s" % text) + """ + Log error to console + """ + server.getLogger().severe("[RedstonerUtils] %s" % text) def msg(player, text, usecolor = True, basecolor = None): - """ - send a message to player - the player may be None or offline, which this method just ignores - unless usecolor is False, &-codes are translated to real color codes - for that case, basecolor can be useful. basecolor accepts a single character as color code - """ - if player and (player == server.getConsoleSender() or player.getPlayer()): # getPlayer() returns None when offline - if basecolor: - if usecolor: - text = colorify(text) - player.sendMessage(colorify("&%s" % basecolor) + text) - else: - player.sendMessage(colorify(text) if usecolor else text) + """ + send a message to player + the player may be None or offline, which this method just ignores + unless usecolor is False, &-codes are translated to real color codes + for that case, basecolor can be useful. basecolor accepts a single character as color code + """ + if player and (player == server.getConsoleSender() or player.getPlayer()): # getPlayer() returns None when offline + if basecolor: + if usecolor: + text = colorify(text) + player.sendMessage(colorify("&%s" % basecolor) + text) + else: + player.sendMessage(colorify(text) if usecolor else text) def broadcast(perm, text): - """ - better than bukkit's broadcast. - bukkit only works with permissibles that are subscribed to perm - """ - text = colorify(text) - for recipient in list(server.getOnlinePlayers()) + [server.getConsoleSender()]: - if not perm or recipient.hasPermission(perm): - msg(recipient, text) + """ + better than bukkit's broadcast. + bukkit only works with permissibles that are subscribed to perm + """ + text = colorify(text) + for recipient in list(server.getOnlinePlayers()) + [server.getConsoleSender()]: + if not perm or recipient.hasPermission(perm): + msg(recipient, text) def colorify(text): - """ - replace &-codes with real color codes - """ - return sub("&(?=[?\\da-fk-or])", u"\u00A7", "%s" % text) + """ + replace &-codes with real color codes + """ + return sub("&(?=[?\\da-fk-or])", u"\u00A7", "%s" % text) def stripcolors(text): - """ - strips all (real) color codes from text - """ - return sub(u"\u00A7[\\da-fk-or]", "", "%s" % text) + """ + strips all (real) color codes from text + """ + return sub(u"\u00A7[\\da-fk-or]", "", "%s" % text) def safetp(player, world, x, y, z, yaw = 0, pitch = 0): - """ - teleports the player to the given Location - if the player would spawn inside blocks, the location is escalated until the location is safe - """ - tpblock = Location(world, x, y, z).getBlock() - if (tpblock.isEmpty() and tpblock.getRelative(bblock.BlockFace.UP).isEmpty()) or y > 255: - player.teleport(Location(world, x+0.5, y, z+0.5, yaw, pitch), TeleportCause.COMMAND) - else: - safetp(player, world, x, y+1, z, yaw, pitch) + """ + teleports the player to the given Location + if the player would spawn inside blocks, the location is escalated until the location is safe + """ + tpblock = Location(world, x, y, z).getBlock() + if (tpblock.isEmpty() and tpblock.getRelative(bblock.BlockFace.UP).isEmpty()) or y > 255: + player.teleport(Location(world, x+0.5, y, z+0.5, yaw, pitch), TeleportCause.COMMAND) + else: + safetp(player, world, x, y+1, z, yaw, pitch) def plugin_header(recipient = None, name="Redstoner Utils"): - """ - sends the recipient a "Plugin Header", in the format of: --=[ PluginName ]=-- - """ + """ + sends the recipient a "Plugin Header", in the format of: --=[ PluginName ]=-- + """ - head = "\n&2--=[ %s ]=--" % name - msg(recipient, head) - return head + head = "\n&2--=[ %s ]=--" % name + msg(recipient, head) + return head def noperm(player): - """ - Send the default permission failure message to the player - """ - msg(player, "&cno permission") + """ + Send the default permission failure message to the player + """ + msg(player, "&cno permission") def runas(player, cmd): - """ - run a command as player - the cmd should no be prefixed with a / - """ - server.dispatchCommand(player, cmd) + """ + run a command as player + the cmd should no be prefixed with a / + """ + server.dispatchCommand(player, cmd) def is_player(obj): - """ - return True when ob is a bukkit Player - """ - return (isinstance(obj, Player)) + """ + return True when ob is a bukkit Player + """ + return (isinstance(obj, Player)) def checkargs(sender, args, amin, amax): - """ - check if a command has a valid amount of args, otherwise notify the sender - amin is the minimum amount of args - amax is the maximum amount of args - if amax is < 0, infinite args will be accepted - return True if args has a valid length, False otherwise - """ - if not (len(args) >= amin and (amax < 0 or len(args) <= amax)): - if amin == amax: - msg(sender, "&cNeeds " + str(amin) + " arguments!") - return False - elif amax < 0: - msg(sender, "&cNeeds at least " + str(amin) + " arguments!") - return False - else: - msg(sender, "&cNeeds " + str(amin) + " to " + str(amax) + " arguments!") - return False - return True + """ + check if a command has a valid amount of args, otherwise notify the sender + amin is the minimum amount of args + amax is the maximum amount of args + if amax is < 0, infinite args will be accepted + return True if args has a valid length, False otherwise + """ + if not (len(args) >= amin and (amax < 0 or len(args) <= amax)): + if amin == amax: + msg(sender, "&cNeeds " + str(amin) + " arguments!") + return False + elif amax < 0: + msg(sender, "&cNeeds at least " + str(amin) + " arguments!") + return False + else: + msg(sender, "&cNeeds " + str(amin) + " to " + str(amax) + " arguments!") + return False + return True def is_creative(player): - """ - returns True if the player is in Creative mode - """ - return str(player.getGameMode()) == "CREATIVE" + """ + returns True if the player is in Creative mode + """ + return str(player.getGameMode()) == "CREATIVE" def uid(player): - """ - returns the player's UUID - """ - return str(player.getUniqueId()) + """ + returns the player's UUID + """ + return str(player.getUniqueId()) def retrieve_player(uuid_str): - """ - gets an offline player by UUID string - the uuid MUST contain dashes - """ - return server.getOfflinePlayer(juuid(uuid_str)) + """ + gets an offline player by UUID string + the uuid MUST contain dashes + """ + return server.getOfflinePlayer(juuid(uuid_str)) def known_player(player): - """ - to be used on OfflinePlayer (which can be online!) - returns True if the player has been on the server - this is different to HasPlayedBefore(), which will return False on first join - """ - return player.hasPlayedBefore() + """ + to be used on OfflinePlayer (which can be online!) + returns True if the player has been on the server + this is different to HasPlayedBefore(), which will return False on first join + """ + return player.hasPlayedBefore() def open_json_file(filename, default): - """ - opens the given json file and returns an object or returns None on error - filename is the path + name of the file. - """ - data = None - try: - with open("plugins/redstoner-utils.py.dir/files/%s.json" % filename) as obj: - data = json_loads(obj.read()) - except Exception, e: - error("Failed to read from %s: %s" % (filename, e)) - return (default if data is None else data) + """ + opens the given json file and returns an object or returns None on error + filename is the path + name of the file. + """ + data = None + try: + with open("plugins/redstoner-utils.py.dir/files/%s.json" % filename) as obj: + data = json_loads(obj.read()) + except Exception, e: + error("Failed to read from %s: %s" % (filename, e)) + return (default if data is None else data) def save_json_file(filename, obj): - """ - saves the given object as json into filename - filename is the path + name of the file. - """ - try: - with open("plugins/redstoner-utils.py.dir/files/%s.json" % filename, "w") as f: - f.write(json_dumps(obj)) - except Exception, e: - error("Failed to write to %s: %s" % (filename, e)) + """ + saves the given object as json into filename + filename is the path + name of the file. + """ + try: + with open("plugins/redstoner-utils.py.dir/files/%s.json" % filename, "w") as f: + f.write(json_dumps(obj)) + except Exception, e: + error("Failed to write to %s: %s" % (filename, e)) def toggle(player, ls, name = "Toggle", add = None): - """ - Toggles presence of a player's UUID in a list - If add is given, True explicitely adds it whereas False removes it - """ - pid = uid(player) - if pid in ls or add == False: - ls.remove(pid) - msg(player, "&a%s turned off!" % name) - elif add != False: - ls.append(pid) - msg(player, "&a%s turned on!" % name)
\ No newline at end of file + """ + Toggles presence of a player's UUID in a list + If add is given, True explicitely adds it whereas False removes it + """ + pid = uid(player) + if pid in ls or add == False: + ls.remove(pid) + msg(player, "&a%s turned off!" % name) + elif add != False: + ls.append(pid) + msg(player, "&a%s turned on!" % name)
\ No newline at end of file @@ -6,22 +6,22 @@ imout_toggle_list = [] @hook.command("imout") def on_imout_command(sender, args): - if sender.hasPermission("utils.imout"): - name = sender.getName() - symbol = "&a&l+" - if name in imout_toggle_list: - msg(sender, "&eWelcome back! You are no longer hidden") - msg(sender, "&6We disabled /act for you!") - if name in imout_toggle_list: - imout_toggle_list.remove(name) - if name in ac_toggle_list: - ac_toggle_list.remove(name) - else: - symbol = "&c&l-" - msg(sender, "&eYou just left... Or didn't you?") - imout_toggle_list.append(name) - if name not in ac_toggle_list: - msg(sender, "&6We enabled /act for you!") - ac_toggle_list.append(name) + if sender.hasPermission("utils.imout"): + name = sender.getName() + symbol = "&a&l+" + if name in imout_toggle_list: + msg(sender, "&eWelcome back! You are no longer hidden") + msg(sender, "&6We disabled /act for you!") + if name in imout_toggle_list: + imout_toggle_list.remove(name) + if name in ac_toggle_list: + ac_toggle_list.remove(name) + else: + symbol = "&c&l-" + msg(sender, "&eYou just left... Or didn't you?") + imout_toggle_list.append(name) + if name not in ac_toggle_list: + msg(sender, "&6We enabled /act for you!") + ac_toggle_list.append(name) - broadcast(None, "%s &7%s" % (symbol, name)) + broadcast(None, "%s &7%s" % (symbol, name)) diff --git a/lagchunks.py b/lagchunks.py index 96c3fe2..3b41add 100644 --- a/lagchunks.py +++ b/lagchunks.py @@ -6,55 +6,55 @@ lagchunks = [] def print_help(sender): - msg(sender, " &b/lagchunks <amount> &eList chunks where #entities >= <amount>") - msg(sender, " &b/lagchunks list &eShow list again") - msg(sender, " &b/lagchunks tp <num> &eTeleport to chunk <num> from list") + msg(sender, " &b/lagchunks <amount> &eList chunks where #entities >= <amount>") + msg(sender, " &b/lagchunks list &eShow list again") + msg(sender, " &b/lagchunks tp <num> &eTeleport to chunk <num> from list") def scan_chunks(amount): - global lagchunks - chunks = [] - for world in bukkit.Bukkit.getServer().getWorlds(): - for chunk in world.getLoadedChunks(): - if len(chunk.getEntities()) >= amount: - ents = chunk.getEntities() - # [0]world [1]X [2]Y [3]Z [4]amount - chunks.append([chunk.getWorld(), int(ents[-1].getLocation().getX()), int(ents[0].getLocation().getY()), int(ents[0].getLocation().getZ()), len(ents)]) - chunks.sort(key = lambda entry: entry[4], reverse = True) - lagchunks = chunks + global lagchunks + chunks = [] + for world in bukkit.Bukkit.getServer().getWorlds(): + for chunk in world.getLoadedChunks(): + if len(chunk.getEntities()) >= amount: + ents = chunk.getEntities() + # [0]world [1]X [2]Y [3]Z [4]amount + chunks.append([chunk.getWorld(), int(ents[-1].getLocation().getX()), int(ents[0].getLocation().getY()), int(ents[0].getLocation().getZ()), len(ents)]) + chunks.sort(key = lambda entry: entry[4], reverse = True) + lagchunks = chunks def list_chunks(sender): - for id, chunk in enumerate(lagchunks): - msg(sender, "&b%s&a: (&b%s&a) %s&7, &a%s &7(%s)" % (id, chunk[4], chunk[1], chunk[3], chunk[0].getName())) - msg(sender, "&2------------------") + for id, chunk in enumerate(lagchunks): + msg(sender, "&b%s&a: (&b%s&a) %s&7, &a%s &7(%s)" % (id, chunk[4], chunk[1], chunk[3], chunk[0].getName())) + msg(sender, "&2------------------") def tp_chunk(sender, id): - chunk = lagchunks[id] - safetp(sender, chunk[0], chunk[1], chunk[2], chunk[3]) - msg(sender, "&aTeleported to &b%s&a, &b%s&a in &7%s&a with &b%s&a entities nearby." % (chunk[1], chunk[3], chunk[0].getName(), chunk[4])) + chunk = lagchunks[id] + safetp(sender, chunk[0], chunk[1], chunk[2], chunk[3]) + msg(sender, "&aTeleported to &b%s&a, &b%s&a in &7%s&a with &b%s&a entities nearby." % (chunk[1], chunk[3], chunk[0].getName(), chunk[4])) @hook.command("lagchunks") def on_lagchunks_command(sender, args): - if sender.hasPermission("utils.lagchunks"): - plugin_header(sender, "Lagchunks") - global lagchunks - if len(args) == 1 and args[0].isdigit() and int(args[0]) > 0: - amount = args[0] - msg(sender, "&aChunks with at least &b%s &aentities:" % amount, ) - scan_chunks(int(amount)) - list_chunks(sender) - elif len(args) == 1 and args[0].lower() == "list": - list_chunks(sender) - elif len(args) == 2 and args[0].lower() == "tp" and args[1].isdigit() and int(args[1]) <= len(lagchunks)-1: - if isinstance(sender, Player): - tp_chunk(sender, int(args[1])) - else: - msg(sender, "&cOnly players can do this!") + if sender.hasPermission("utils.lagchunks"): + plugin_header(sender, "Lagchunks") + global lagchunks + if len(args) == 1 and args[0].isdigit() and int(args[0]) > 0: + amount = args[0] + msg(sender, "&aChunks with at least &b%s &aentities:" % amount, ) + scan_chunks(int(amount)) + list_chunks(sender) + elif len(args) == 1 and args[0].lower() == "list": + list_chunks(sender) + elif len(args) == 2 and args[0].lower() == "tp" and args[1].isdigit() and int(args[1]) <= len(lagchunks)-1: + if isinstance(sender, Player): + tp_chunk(sender, int(args[1])) + else: + msg(sender, "&cOnly players can do this!") + else: + print_help(sender) else: - print_help(sender) - else: - noperm(sender) - return True
\ No newline at end of file + noperm(sender) + return True
\ No newline at end of file @@ -9,52 +9,52 @@ from traceback import format_exc as print_traceback sys.path += ['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/pymodules/python2.7', '/usr/lib/pyshared/python2.7'] try: - from helpers import * + from helpers import * except: - print("[RedstonerUtils] ERROR: Failed to import helpers:") - print(print_traceback()) + print("[RedstonerUtils] ERROR: Failed to import helpers:") + print(print_traceback()) @hook.enable def on_enable(): - info("RedstonerUtils enabled!") + info("RedstonerUtils enabled!") @hook.disable def on_disable(): - shared["modules"]["reports"].stop_reporting() - info("RedstonerUtils disabled!") + shared["modules"]["reports"].stop_reporting() + info("RedstonerUtils disabled!") info("Loading RedstonerUtils...") # Import all modules, in this order shared["load_modules"] = [ - "misc", - "adminchat", - "badges", - "calc", - "lagchunks", - "reports", - "chatgroups", - "webtoken", - "saylol", - "skullclick", - "mentio", - "cycle", - "motd", - "abot", - "forcefield", - "damnspam", - "check", - "imout" + "misc", + "adminchat", + "badges", + "calc", + "lagchunks", + "reports", + "chatgroups", + "webtoken", + "saylol", + "skullclick", + "mentio", + "cycle", + "motd", + "abot", + "forcefield", + "damnspam", + "check", + "imout" ] shared["modules"] = {} for module in shared["load_modules"]: - try: - shared["modules"][module] = __import__(module) - info("Module %s loaded." % module) - except: - error("Failed to import module %s:" % module) - error(print_traceback())
\ No newline at end of file + try: + shared["modules"][module] = __import__(module) + info("Module %s loaded." % module) + except: + error("Failed to import module %s:" % module) + error(print_traceback())
\ No newline at end of file @@ -10,140 +10,140 @@ colors_reg = reg_compile(u"\u00A7[\\da-fk-or]") # finds color codes def saveMentions(): - save_json_file("mentio", mentions) + save_json_file("mentio", mentions) @hook.event("player.AsyncPlayerChatEvent", "high") def onChat(event): - if not event.isCancelled(): - sender = event.getPlayer() - words = event.getMessage().split(" ") - recipients = event.getRecipients() # set of <Player>, may be a lazy or unmodifiable collection - - for recipient in list(recipients): - recuid = uid(recipient) - - if recuid in mentions: - keywords = mentions[uid(recipient)] - else: - # player - keywords = [recipient.getName().lower(), stripcolors(recipient.getDisplayName()).lower()] - - rec_words = words[:] # copy - for index, word in enumerate(rec_words): - isMentioned = False - - for keyword in keywords: - if keyword in word.lower(): # is the keyword mentioned - isMentioned = True - - if isMentioned: - # join all color codes used upto this word - colors = "".join(colors_reg.findall("".join(words[:index+1]))) - # highlight the word containing mention, then apply all previous color codes - rec_words[index] = colorify("&r&a&o") + stripcolors(word) + colorify("&r") + colors - # No need to - break - - # player was mentioned - if rec_words != words: - try: - recipients.remove(recipient) # don't send original message - except: - # list might not be mutable, ignoring. Receiver will get the message twice - pass - message = " ".join([sender.getDisplayName(), arrow] + rec_words) - msg(recipient, message, usecolor = False) - recipient.playSound(recipient.getLocation(), "mob.chicken.plop", 1, 2) + if not event.isCancelled(): + sender = event.getPlayer() + words = event.getMessage().split(" ") + recipients = event.getRecipients() # set of <Player>, may be a lazy or unmodifiable collection + + for recipient in list(recipients): + recuid = uid(recipient) + + if recuid in mentions: + keywords = mentions[uid(recipient)] + else: + # player + keywords = [recipient.getName().lower(), stripcolors(recipient.getDisplayName()).lower()] + + rec_words = words[:] # copy + for index, word in enumerate(rec_words): + isMentioned = False + + for keyword in keywords: + if keyword in word.lower(): # is the keyword mentioned + isMentioned = True + + if isMentioned: + # join all color codes used upto this word + colors = "".join(colors_reg.findall("".join(words[:index+1]))) + # highlight the word containing mention, then apply all previous color codes + rec_words[index] = colorify("&r&a&o") + stripcolors(word) + colorify("&r") + colors + # No need to + break + + # player was mentioned + if rec_words != words: + try: + recipients.remove(recipient) # don't send original message + except: + # list might not be mutable, ignoring. Receiver will get the message twice + pass + message = " ".join([sender.getDisplayName(), arrow] + rec_words) + msg(recipient, message, usecolor = False) + recipient.playSound(recipient.getLocation(), "mob.chicken.plop", 1, 2) def get_keywords(player): - sender_id = uid(player) - if sender_id in mentions.keys(): - keywords = mentions[sender_id] - else: - keywords = [] - return keywords + sender_id = uid(player) + if sender_id in mentions.keys(): + keywords = mentions[sender_id] + else: + keywords = [] + return keywords def add_keyword(sender, args): - keywords = get_keywords(sender) - new_word = stripcolors(args[1].lower()) + keywords = get_keywords(sender) + new_word = stripcolors(args[1].lower()) - if len(keywords) >= max_amount: - msg(sender, "&cYou are already listening for %s words! Try &6/mentio del <word>" % max_amount) - return True + if len(keywords) >= max_amount: + msg(sender, "&cYou are already listening for %s words! Try &6/mentio del <word>" % max_amount) + return True - if len(new_word) > 20: - msg(sender, "&cThis word is longer than 20 characters. Pick a shorter one!") - return True + if len(new_word) > 20: + msg(sender, "&cThis word is longer than 20 characters. Pick a shorter one!") + return True - if new_word in keywords: - msg(sender, "&cYou are already listening for this word! Try &6/mentio list") - return True + if new_word in keywords: + msg(sender, "&cYou are already listening for this word! Try &6/mentio list") + return True - keywords.append(new_word) - if keywords: - mentions[uid(sender)] = keywords + keywords.append(new_word) + if keywords: + mentions[uid(sender)] = keywords - msg(sender, "&aYou are now listening for '&2%s'!" % new_word) - saveMentions() - return True + msg(sender, "&aYou are now listening for '&2%s'!" % new_word) + saveMentions() + return True def del_keyword(sender, args): - keywords = get_keywords(sender) - del_word = stripcolors(args[1].lower()) + keywords = get_keywords(sender) + del_word = stripcolors(args[1].lower()) - if not keywords: - msg(sender, "&cYou are currently listening for no words! Try &6/mentio add <word>") - return - - if del_word in keywords: - keywords.remove(del_word) - sender_id = uid(sender) - if keywords: - mentions[sender_id] = keywords - elif sender_id in mentions: - del mentions[sender_id] - saveMentions() - msg(sender, "&aYou are no longer listening for '&2%s&e'!" % del_word) - else: - msg(sender, "&cWe can't remove something that doesn't exist! Try &6/mentio list") + if not keywords: + msg(sender, "&cYou are currently listening for no words! Try &6/mentio add <word>") + return + + if del_word in keywords: + keywords.remove(del_word) + sender_id = uid(sender) + if keywords: + mentions[sender_id] = keywords + elif sender_id in mentions: + del mentions[sender_id] + saveMentions() + msg(sender, "&aYou are no longer listening for '&2%s&e'!" % del_word) + else: + msg(sender, "&cWe can't remove something that doesn't exist! Try &6/mentio list") def show_help(player): - msg(player, "&a/mentio add <word>") - msg(player, "&a/mentio del <word>") - msg(player, "&a/mentio list") + msg(player, "&a/mentio add <word>") + msg(player, "&a/mentio del <word>") + msg(player, "&a/mentio list") @hook.command("mentio") def onListenCommand(sender, args): - plugin_header(sender, "Mentio") - - argnum = len(args) - if argnum: - cmd = args[0].lower() - - # /mentio add <word> - if argnum == 2 and cmd == "add": - add_keyword(sender, args) - - # /mentio del <word> - elif argnum == 2 and cmd == "del": - del_keyword(sender, args) - - # /mentio list - elif argnum == 1 and cmd == "list": - msg(sender, "&aWords you're listening for:") - keywords = get_keywords(sender) - for word in keywords: - msg(sender, "&c- &3%s" % word) - if not keywords: - msg(sender, "&cYou are currently listening for no words! Try &6/mentio add <word>") + plugin_header(sender, "Mentio") + + argnum = len(args) + if argnum: + cmd = args[0].lower() + + # /mentio add <word> + if argnum == 2 and cmd == "add": + add_keyword(sender, args) + + # /mentio del <word> + elif argnum == 2 and cmd == "del": + del_keyword(sender, args) + + # /mentio list + elif argnum == 1 and cmd == "list": + msg(sender, "&aWords you're listening for:") + keywords = get_keywords(sender) + for word in keywords: + msg(sender, "&c- &3%s" % word) + if not keywords: + msg(sender, "&cYou are currently listening for no words! Try &6/mentio add <word>") + else: + show_help(sender) else: - show_help(sender) - else: - show_help(sender) - return True
\ No newline at end of file + show_help(sender) + return True
\ No newline at end of file @@ -9,60 +9,60 @@ import org.bukkit.inventory.ItemStack as ItemStack # Welcome new players @hook.event("player.PlayerJoinEvent", "monitor") def on_join(event): - player = event.getPlayer() - - # send welcome broadcast - if not player.hasPlayedBefore(): - broadcast("utils.greet_new", "") - broadcast("utils.greet_new", "&a&lPlease welcome &f" + player.getDisplayName() + " &a<o Redstoner!") - broadcast("utils.greet_new", "") - - # clear out some eventual crap before - msg(player, " \n \n \n \n \n \n \n \n \n \n \n \n ") - msg(player, " &4Welcome to the Redstoner Server!") - msg(player, " &6Before you ask us things, take a quick") - msg(player, " &6look at the &a&l/FAQ &6command.") - msg(player, " \n&6thank you and happy playing ;)") - msg(player, " \n \n") - - # teleport to spawn when spawning inside portal - loginloc = player.getLocation().getBlock().getType() - headloc = player.getEyeLocation().getBlock().getType() - if str(loginloc) == "PORTAL" or str(headloc) == "PORTAL": - msg(player, "&4Looks like you spawned in a portal... Let me help you out") - msg(player, "&6You can use /back if you &nreally&6 want to go back") - player.teleport(player.getWorld().getSpawnLocation()) + player = event.getPlayer() + + # send welcome broadcast + if not player.hasPlayedBefore(): + broadcast("utils.greet_new", "") + broadcast("utils.greet_new", "&a&lPlease welcome &f" + player.getDisplayName() + " &a<o Redstoner!") + broadcast("utils.greet_new", "") + + # clear out some eventual crap before + msg(player, " \n \n \n \n \n \n \n \n \n \n \n \n ") + msg(player, " &4Welcome to the Redstoner Server!") + msg(player, " &6Before you ask us things, take a quick") + msg(player, " &6look at the &a&l/FAQ &6command.") + msg(player, " \n&6thank you and happy playing ;)") + msg(player, " \n \n") + + # teleport to spawn when spawning inside portal + loginloc = player.getLocation().getBlock().getType() + headloc = player.getEyeLocation().getBlock().getType() + if str(loginloc) == "PORTAL" or str(headloc) == "PORTAL": + msg(player, "&4Looks like you spawned in a portal... Let me help you out") + msg(player, "&6You can use /back if you &nreally&6 want to go back") + player.teleport(player.getWorld().getSpawnLocation()) # /sudo - execute command/chat *as* a player/console @hook.command("sudo") def on_sudo_command(sender, args): - if sender.hasPermission("utils.sudo"): - plugin_header(sender, "Sudo") - if not checkargs(sender, args, 2, -1): - return True - target = args[0] - - cmd = " ".join(args[1:]) - msg(sender, "Running '&e%s&r' as &3%s" % (cmd, target)) - if cmd[0] == "/": - cmd = cmd[1:] - if target.lower() == "server" or target.lower() == "console": - runas(server.getConsoleSender(), cmd) - elif server.getPlayer(target): - runas(server.getPlayer(target), cmd) - else: - msg(sender, "&cPlayer %s not found!" % target) + if sender.hasPermission("utils.sudo"): + plugin_header(sender, "Sudo") + if not checkargs(sender, args, 2, -1): + return True + target = args[0] + + cmd = " ".join(args[1:]) + msg(sender, "Running '&e%s&r' as &3%s" % (cmd, target)) + if cmd[0] == "/": + cmd = cmd[1:] + if target.lower() == "server" or target.lower() == "console": + runas(server.getConsoleSender(), cmd) + elif server.getPlayer(target): + runas(server.getPlayer(target), cmd) + else: + msg(sender, "&cPlayer %s not found!" % target) + else: + if target.lower() == "server" or target.lower() == "console": + runas(server.getConsoleSender(), "say %s" % cmd) + elif server.getPlayer(target): + server.getPlayer(target).chat(cmd) + else: + msg(sender, "&cPlayer %s not found!" % target) else: - if target.lower() == "server" or target.lower() == "console": - runas(server.getConsoleSender(), "say %s" % cmd) - elif server.getPlayer(target): - server.getPlayer(target).chat(cmd) - else: - msg(sender, "&cPlayer %s not found!" % target) - else: - noperm(sender) - return True + noperm(sender) + return True # /gm - custom gamemode command with extra perms for greater control @@ -94,80 +94,80 @@ last_shear = 0.0 @hook.event("player.PlayerInteractEntityEvent") def on_player_entity_interact(event): - global last_shear - if not event.isCancelled(): - shear_time = now() - if last_shear + 0.4 < shear_time: - last_shear = shear_time - sender = event.getPlayer() - entity = event.getRightClicked() - if is_player(entity) and uid(entity) == "ae795aa8-6327-408e-92ab-25c8a59f3ba1" and str(sender.getItemInHand().getType()) == "SHEARS" and is_creative(sender): - for _ in range(5): - entity.getWorld().dropItemNaturally(entity.getLocation(), ItemStack(bukkit.Material.getMaterial("REDSTONE"))) - entity.getWorld().dropItemNaturally(entity.getLocation(), ItemStack(bukkit.Material.getMaterial("WOOL"))) - sender.playSound(entity.getLocation(), "mob.cow.say", 1, 1) + global last_shear + if not event.isCancelled(): + shear_time = now() + if last_shear + 0.4 < shear_time: + last_shear = shear_time + sender = event.getPlayer() + entity = event.getRightClicked() + if is_player(entity) and uid(entity) == "ae795aa8-6327-408e-92ab-25c8a59f3ba1" and str(sender.getItemInHand().getType()) == "SHEARS" and is_creative(sender): + for _ in range(5): + entity.getWorld().dropItemNaturally(entity.getLocation(), ItemStack(bukkit.Material.getMaterial("REDSTONE"))) + entity.getWorld().dropItemNaturally(entity.getLocation(), ItemStack(bukkit.Material.getMaterial("WOOL"))) + sender.playSound(entity.getLocation(), "mob.cow.say", 1, 1) # /pluginversions - print all plugins + versions; useful when updating plugins @hook.command("pluginversions") def on_pluginversions_command(sender, args): - plugin_header(sender, "Plugin versions") - plugins = list(server.getPluginManager().getPlugins()) - plugins.sort(key = lambda pl: pl.getDescription().getName()) - msg(sender, "&3Listing all " + str(len(plugins)) + " plugins and their version:") - for plugin in plugins: - msg(sender, "&6" + plugin.getDescription().getName() + "&r: &e" + plugin.getDescription().getVersion()) - return True + plugin_header(sender, "Plugin versions") + plugins = list(server.getPluginManager().getPlugins()) + plugins.sort(key = lambda pl: pl.getDescription().getName()) + msg(sender, "&3Listing all " + str(len(plugins)) + " plugins and their version:") + for plugin in plugins: + msg(sender, "&6" + plugin.getDescription().getName() + "&r: &e" + plugin.getDescription().getVersion()) + return True # /echo - essentials echo sucks and prints mail alerts sometimes @hook.command("echo") def on_echo_command(sender, args): - msg(sender, " ".join(args).replace("\\n", "\n")) + msg(sender, " ".join(args).replace("\\n", "\n")) # /pyeval - run python ingame # has to be in main.py so we can access the modules def eval_thread(sender, code): - try: - result = eval(code) - msg(sender, ">>> %s: %s" % (colorify("&3") + type(result).__name__, colorify("&a") + unicode(result) + "\n "), usecolor = False) - except: - e = exc_info()[1] try: - eclass = e.__class__ - except AttributeError: - eclass = type(e) - msg(sender, ">>> %s: %s" % (eclass.__name__, e) + "\n ", False, "c") - thread.exit() + result = eval(code) + msg(sender, ">>> %s: %s" % (colorify("&3") + type(result).__name__, colorify("&a") + unicode(result) + "\n "), usecolor = False) + except: + e = exc_info()[1] + try: + eclass = e.__class__ + except AttributeError: + eclass = type(e) + msg(sender, ">>> %s: %s" % (eclass.__name__, e) + "\n ", False, "c") + thread.exit() # /pyeval - run python code ingame @hook.command("pyeval") def on_pyeval_command(sender, args): - if sender.hasPermission("utils.pyeval"): - if not checkargs(sender, args, 1, -1): - return True - msg(sender, "%s" % " ".join(args), False, "e") - thread.start_new_thread(eval_thread, (sender, " ".join(args))) - else: - noperm(sender) - return True + if sender.hasPermission("utils.pyeval"): + if not checkargs(sender, args, 1, -1): + return True + msg(sender, "%s" % " ".join(args), False, "e") + thread.start_new_thread(eval_thread, (sender, " ".join(args))) + else: + noperm(sender) + return True # /modules - list all modules, unloaded modules in red @hook.command("modules") def on_modules_command(sender, args): - plugin_header(sender, "Modules") - for mod in shared["load_modules"]: - color = "a" if mod in shared["modules"] else "c" - msg(sender, "&" + color + mod) + plugin_header(sender, "Modules") + for mod in shared["load_modules"]: + color = "a" if mod in shared["modules"] else "c" + msg(sender, "&" + color + mod) # Disable spectator teleportation @hook.event("player.PlayerTeleportEvent") def on_player_teleport(event): - player = event.getPlayer() - if not event.isCancelled() and str(event.getCause()) == "SPECTATE" and not player.hasPermission("utils.tp.spectate"): - event.setCancelled(True) - msg(event.getPlayer(), "&cSpectator teleportation is disabled")
\ No newline at end of file + player = event.getPlayer() + if not event.isCancelled() and str(event.getCause()) == "SPECTATE" and not player.hasPermission("utils.tp.spectate"): + event.setCancelled(True) + msg(event.getPlayer(), "&cSpectator teleportation is disabled")
\ No newline at end of file @@ -6,30 +6,30 @@ motd = default_motd @hook.command("getmotd") def on_getmotd_command(sender, args): - plugin_header(sender, "MOTD") - msg(sender, motd, usecolor = False) + plugin_header(sender, "MOTD") + msg(sender, motd, usecolor = False) @hook.command("setmotd") def on_setmotd_command(sender, args): - global motd - if sender.hasPermission("utils.setmotd"): - if not checkargs(sender, args, 1, -1): - return True + global motd + if sender.hasPermission("utils.setmotd"): + if not checkargs(sender, args, 1, -1): + return True - motd = colorify(" ".join(args).replace("\\n", "\n")) + motd = colorify(" ".join(args).replace("\\n", "\n")) - if motd == "--reset": - motd = default_motd + if motd == "--reset": + motd = default_motd - broadcast(None, plugin_header(name="MOTD")) - broadcast(None, "&aNew MOTD:&r\n%s" % motd) - broadcast(None, " ") - else: - noperm(sender) - return True + broadcast(None, plugin_header(name="MOTD")) + broadcast(None, "&aNew MOTD:&r\n%s" % motd) + broadcast(None, " ") + else: + noperm(sender) + return True @hook.event("server.ServerListPingEvent") def on_server_ping(event): - event.setMotd(motd) + event.setMotd(motd) @@ -10,15 +10,15 @@ z_plot_size = 3 padding = 1 def base_coords(x, z): - pid = plot_id(x, z) - return [pid[0] * (x_plot_size + padding), pid[1] * (z_plot_size + padding)] + pid = plot_id(x, z) + return [pid[0] * (x_plot_size + padding), pid[1] * (z_plot_size + padding)] def bounds(x, z): - base = base_coords(x, z) - return [base, [base[0] + x_plot_size, base[1] + z_plot_size]] + base = base_coords(x, z) + return [base, [base[0] + x_plot_size, base[1] + z_plot_size]] def plot_id(x, z): - return [x // (x_plot_size + padding), z // (z_plot_size + padding)] + return [x // (x_plot_size + padding), z // (z_plot_size + padding)] x = int(sys.argv[1]) @@ -12,128 +12,128 @@ rp_permission = "utils.rp" def print_help(sender): - msg(sender, " &2/report <text> &eReport something") - msg(sender, " &2/rp list &eList unresolved reports (id, player, text)") - msg(sender, " &2/rp tp <id> &eTeleport to report's location & show details") - msg(sender, " &2/rp del <id> &eResolve a report") + msg(sender, " &2/report <text> &eReport something") + msg(sender, " &2/rp list &eList unresolved reports (id, player, text)") + msg(sender, " &2/rp tp <id> &eTeleport to report's location & show details") + msg(sender, " &2/rp del <id> &eResolve a report") def print_list(sender): - try: # new thread, anything can happen. - msg(sender, "&a" + str(len(reports)) + " reports:") - for i, report in enumerate(reports): - name = retrieve_player(report["uuid"]).getName() - msg(sender, "&8[&e%s &c%s&8] &3%s&f: &a%s" % (i, report["time"], name, report["msg"])) - except: - warn("Failed to complete report's print_list() thread") + try: # new thread, anything can happen. + msg(sender, "&a" + str(len(reports)) + " reports:") + for i, report in enumerate(reports): + name = retrieve_player(report["uuid"]).getName() + msg(sender, "&8[&e%s &c%s&8] &3%s&f: &a%s" % (i, report["time"], name, report["msg"])) + except: + warn("Failed to complete report's print_list() thread") def tp_report(sender, rep_id): - if rep_id >= len(reports) or rep_id < 0: - msg(sender, "&cReport &3#" + str(rep_id) + "&c does not exist!") - return True - else: - report = reports[rep_id] - safetp(sender, server.getWorld(report["world"]), report["x"], report["y"], report["z"], report["yaw"], report["pitch"]) - msg(sender, "&aTeleported to report #%s" % rep_id ) + if rep_id >= len(reports) or rep_id < 0: + msg(sender, "&cReport &3#" + str(rep_id) + "&c does not exist!") + return True + else: + report = reports[rep_id] + safetp(sender, server.getWorld(report["world"]), report["x"], report["y"], report["z"], report["yaw"], report["pitch"]) + msg(sender, "&aTeleported to report #%s" % rep_id ) def delete_report(sender, rep_id): - if len(reports) > rep_id >= 0: - report = reports[rep_id] - reports.pop(rep_id) - save_reports() - msg(sender, "&aReport #%s deleted." % rep_id) - reporter = server.getOfflinePlayer(juuid(report["uuid"])) - plugin_header(reporter, "Report") - msg(reporter, "&aReport '&e%s&a' was resolved by %s." % (report["msg"], sender.getName())) - else: - msg(sender, "&cThat report does not exist!") + if len(reports) > rep_id >= 0: + report = reports[rep_id] + reports.pop(rep_id) + save_reports() + msg(sender, "&aReport #%s deleted." % rep_id) + reporter = server.getOfflinePlayer(juuid(report["uuid"])) + plugin_header(reporter, "Report") + msg(reporter, "&aReport '&e%s&a' was resolved by %s." % (report["msg"], sender.getName())) + else: + msg(sender, "&cThat report does not exist!") def save_reports(): - save_json_file("reports", reports) + save_json_file("reports", reports) @hook.command("rp") def on_rp_command(sender, args): - if sender.hasPermission(rp_permission): - plugin_header(sender, "Reports") - if len(args) > 0: - if args[0] == "list": - # needs to run in seperate thread because of getOfflinePlayer - thread.start_new_thread(print_list, (sender,)) - else: - if not checkargs(sender, args, 2, 2): - return True - try: - repid = int(args[1]) - except ValueError: - msg(sender, "&cDoesn't look like &3" + args[1] + "&c is a valid number!") - print_help(sender) - return True - if args[0] == "tp": - if not is_player(sender): - msg(sender, "&conly players can do this") - return True - tp_report(sender, repid) - elif args[0] == "del": - delete_report(sender, repid) + if sender.hasPermission(rp_permission): + plugin_header(sender, "Reports") + if len(args) > 0: + if args[0] == "list": + # needs to run in seperate thread because of getOfflinePlayer + thread.start_new_thread(print_list, (sender,)) + else: + if not checkargs(sender, args, 2, 2): + return True + try: + repid = int(args[1]) + except ValueError: + msg(sender, "&cDoesn't look like &3" + args[1] + "&c is a valid number!") + print_help(sender) + return True + if args[0] == "tp": + if not is_player(sender): + msg(sender, "&conly players can do this") + return True + tp_report(sender, repid) + elif args[0] == "del": + delete_report(sender, repid) + else: + print_help(sender) else: - print_help(sender) + print_help(sender) else: - print_help(sender) - else: - noperm(sender) - return True + noperm(sender) + return True @hook.command("report") def on_report_command(sender, args): - plugin_header(sender, "Report") - if not is_player(sender): - msg(sender, "&conly players can do this") - return True - if not checkargs(sender, args, 1, -1): + plugin_header(sender, "Report") + if not is_player(sender): + msg(sender, "&conly players can do this") + return True + if not checkargs(sender, args, 1, -1): + return True + text = " ".join(args) + loc = sender.getLocation() + reporter = sender.name + reporter_id = uid(sender) + report = { + "uuid": reporter_id, + "msg": text, + "x": int(loc.x), + "y": int(loc.y), + "z": int(loc.z), + "yaw": int(loc.yaw), + "pitch": int(loc.pitch), + "world": loc.getWorld().name, + "time": time.strftime(time_format) + } + reports.append(report) + save_reports() + broadcast(rp_permission, "&aReport #" + str(len(reports) -1) + ": " + reporter + "&f: " + text) + msg(sender, "&aReported \"&e" + text + "&a\"") return True - text = " ".join(args) - loc = sender.getLocation() - reporter = sender.name - reporter_id = uid(sender) - report = { - "uuid": reporter_id, - "msg": text, - "x": int(loc.x), - "y": int(loc.y), - "z": int(loc.z), - "yaw": int(loc.yaw), - "pitch": int(loc.pitch), - "world": loc.getWorld().name, - "time": time.strftime(time_format) - } - reports.append(report) - save_reports() - broadcast(rp_permission, "&aReport #" + str(len(reports) -1) + ": " + reporter + "&f: " + text) - msg(sender, "&aReported \"&e" + text + "&a\"") - return True def reports_reminder(): # needs 2 args for unknown reason - while True: - for i in range(0, check_delay*2): - time.sleep(0.5) # check every 0.5 seconds if we should kill the thread - if not check_reports: - info("Reports reminder thread killed.") - thread.exit() - if len(reports) > 0: - broadcast(rp_permission, "&2--=[ Reports ]=--") - broadcast(rp_permission, "&aThere are %s pending reports!" % len(reports)) + while True: + for i in range(0, check_delay*2): + time.sleep(0.5) # check every 0.5 seconds if we should kill the thread + if not check_reports: + info("Reports reminder thread killed.") + thread.exit() + if len(reports) > 0: + broadcast(rp_permission, "&2--=[ Reports ]=--") + broadcast(rp_permission, "&aThere are %s pending reports!" % len(reports)) def stop_reporting(): - global check_reports - info("Ending reports reminder thread") - check_reports = False + global check_reports + info("Ending reports reminder thread") + check_reports = False thread.start_new_thread(reports_reminder, ())
\ No newline at end of file @@ -9,95 +9,95 @@ last_msg = 0 def save_lols(): - save_json_file("lol", lols) + save_json_file("lol", lols) def add_lol(txt): - lols.append(txt) - save_lols() + lols.append(txt) + save_lols() def del_lol(lid): - lols.pop(lid) - save_lols() + lols.pop(lid) + save_lols() def print_lol(sender, lid): - global last_msg - if time() - last_msg > timeout: - if len(lols) > lid: - dispname = sender.getDisplayName() if is_player(sender) else sender.getName() - broadcast(None, "&8[&blol&8] &7%s&8: &e%s" % (dispname, lols[lid])) - last_msg = time() + global last_msg + if time() - last_msg > timeout: + if len(lols) > lid: + dispname = sender.getDisplayName() if is_player(sender) else sender.getName() + broadcast(None, "&8[&blol&8] &7%s&8: &e%s" % (dispname, lols[lid])) + last_msg = time() + else: + msg(sender, "&cInvalid id") else: - msg(sender, "&cInvalid id") - else: - msg(sender, "&cYou can use SayLol again in &a%s seconds!" % int(timeout + 1 - (time() - last_msg))) + msg(sender, "&cYou can use SayLol again in &a%s seconds!" % int(timeout + 1 - (time() - last_msg))) def search_lols(sender, keyword): - if not keyword: - msg(sender, "&cPlease provide a keyword to search for!") - return - keyword = keyword.lower() - msg(sender, "&aLols containing '&6%s&a':" % keyword) - for i, lol in enumerate(lols): - if keyword in lol.lower(): - msg(sender, "&a%s: &e%s" % (str(i).rjust(3), lol)) - msg(sender, "") # empty line showing end of list + if not keyword: + msg(sender, "&cPlease provide a keyword to search for!") + return + keyword = keyword.lower() + msg(sender, "&aLols containing '&6%s&a':" % keyword) + for i, lol in enumerate(lols): + if keyword in lol.lower(): + msg(sender, "&a%s: &e%s" % (str(i).rjust(3), lol)) + msg(sender, "") # empty line showing end of list @hook.command("lol") def on_lol_command(sender, args): - plugin_header(sender, "SayLol") + plugin_header(sender, "SayLol") + + cmd = args[0] if len(args) > 0 else None + if len(args) == 0: + if sender.hasPermission("utils.lol"): + print_lol(sender, randrange(len(lols))) + else: + noperm(sender) + + elif cmd == "id": + if sender.hasPermission("utils.lol.id"): + try: + i = int(args[1]) + print_lol(sender, i) + except ValueError: + msg(sender, "&cInvalid number '&e%s&c'" % args[1]) + else: + noperm(sender) + + elif cmd == "list": + for i in range(len(lols)): + msg(sender, "&a%s: &e%s" % (str(i).rjust(3), lols[i])) + + elif cmd == "search": + if sender.hasPermission("utils.lol.search"): + search_lols(sender, " ".join(args[1:])) + else: + noperm(sender) + + elif cmd == "add": + if sender.hasPermission("utils.lol.modify"): + add_lol(" ".join(args[1:])) + msg(sender, "&aNew lol message added!") + else: + noperm(sender) + + elif cmd == "del": + if sender.hasPermission("utils.lol.modify"): + try: + i = int(args[1]) + del_lol(i) + msg(sender, "&aLol message &e#%s&a deleted!" % i) + except ValueError: + msg(sender, "&cInvalid number '&e%s&c'" % args[1]) - cmd = args[0] if len(args) > 0 else None - if len(args) == 0: - if sender.hasPermission("utils.lol"): - print_lol(sender, randrange(len(lols))) else: - noperm(sender) - - elif cmd == "id": - if sender.hasPermission("utils.lol.id"): - try: - i = int(args[1]) - print_lol(sender, i) - except ValueError: - msg(sender, "&cInvalid number '&e%s&c'" % args[1]) - else: - noperm(sender) - - elif cmd == "list": - for i in range(len(lols)): - msg(sender, "&a%s: &e%s" % (str(i).rjust(3), lols[i])) - - elif cmd == "search": - if sender.hasPermission("utils.lol.search"): - search_lols(sender, " ".join(args[1:])) - else: - noperm(sender) - - elif cmd == "add": - if sender.hasPermission("utils.lol.modify"): - add_lol(" ".join(args[1:])) - msg(sender, "&aNew lol message added!") - else: - noperm(sender) - - elif cmd == "del": - if sender.hasPermission("utils.lol.modify"): - try: - i = int(args[1]) - del_lol(i) - msg(sender, "&aLol message &e#%s&a deleted!" % i) - except ValueError: - msg(sender, "&cInvalid number '&e%s&c'" % args[1]) - - else: - msg(sender, "&a/lol &eSay random message") - msg(sender, "&a/lol list &eList all messages") - msg(sender, "&a/lol id <id> &eSay specific message") - msg(sender, "&a/lol add <text> &eAdd message") - msg(sender, "&a/lol del <id> &eDelete message") - return True + msg(sender, "&a/lol &eSay random message") + msg(sender, "&a/lol list &eList all messages") + msg(sender, "&a/lol id <id> &eSay specific message") + msg(sender, "&a/lol add <text> &eAdd message") + msg(sender, "&a/lol del <id> &eDelete message") + return True diff --git a/skullclick.py b/skullclick.py index 09fe13f..845b54c 100644 --- a/skullclick.py +++ b/skullclick.py @@ -4,13 +4,13 @@ from helpers import msg @hook.event("player.PlayerInteractEvent", "monitor") def on_block_interact(event): - if (str(event.getAction()) == "RIGHT_CLICK_BLOCK"): - sender = event.getPlayer() - block = event.getClickedBlock().getState() - if (isinstance(block, bukkit.block.Skull) and not event.isCancelled()): - owner = block.getOwner() - if (owner): - msg(sender, "&eThat's %s." % owner) - else: - msg(sender, "&cThis skull has no name (Steve)") - event.setCancelled(True) + if (str(event.getAction()) == "RIGHT_CLICK_BLOCK"): + sender = event.getPlayer() + block = event.getClickedBlock().getState() + if (isinstance(block, bukkit.block.Skull) and not event.isCancelled()): + owner = block.getOwner() + if (owner): + msg(sender, "&eThat's %s." % owner) + else: + msg(sender, "&cThis skull has no name (Steve)") + event.setCancelled(True) diff --git a/spawnplayer.py b/spawnplayer.py index 374c6e3..e584e0b 100644 --- a/spawnplayer.py +++ b/spawnplayer.py @@ -18,45 +18,45 @@ upmul = 0.95 # multiplicate with goup each row def spawn(dispname, sender, x, y, z): - """ - Sends the actual player to sender - """ - server = bukkit.getServer().getServer() - world = server.getWorldServer(0) # main world - profile = GameProfile(dispname, dispname) # set player details - manager = PlayerInteractManager(world) - entity = EntityPlayer(server, world, profile, manager) # create Player's entity - entity.setPosition(x, y, z) - packet = PacketPlayOutNamedEntitySpawn(entity) # create packet for entity spawn - sender.getHandle().playerConnection.sendPacket(packet) # send packet + """ + Sends the actual player to sender + """ + server = bukkit.getServer().getServer() + world = server.getWorldServer(0) # main world + profile = GameProfile(dispname, dispname) # set player details + manager = PlayerInteractManager(world) + entity = EntityPlayer(server, world, profile, manager) # create Player's entity + entity.setPosition(x, y, z) + packet = PacketPlayOutNamedEntitySpawn(entity) # create packet for entity spawn + sender.getHandle().playerConnection.sendPacket(packet) # send packet @hook.command("spawnplayer") def on_spawnplayer_command(sender, args): - global amount, row, ground, goup - - # X and Z position - xpos = sender.getLocation().add(-float(row-1 * shift + (amount * margin) / 2), 0, 0).getX() - row = sender.getLocation().add(0, 0, -row).getZ() - - count = 0 - stop = False - while not stop: - for i in range(amount): - player = players[count] - x = int(xpos + i*margin) - spawn(player, sender, x, ground, row) - print(player, x, ground, row) - count += 1 - if count >= len(players): - stop = True - print "breaking" - break - print("next row") - row -= 1 # next row (-z) - xpos -= shift # shift left - amount += int(shift*margin*2) # add players left and right - if abs(row) % int(goup) == 0: - goup *= upmul - ground += 1 - print "Going up by 1: %s" % ground
\ No newline at end of file + global amount, row, ground, goup + + # X and Z position + xpos = sender.getLocation().add(-float(row-1 * shift + (amount * margin) / 2), 0, 0).getX() + row = sender.getLocation().add(0, 0, -row).getZ() + + count = 0 + stop = False + while not stop: + for i in range(amount): + player = players[count] + x = int(xpos + i*margin) + spawn(player, sender, x, ground, row) + print(player, x, ground, row) + count += 1 + if count >= len(players): + stop = True + print "breaking" + break + print("next row") + row -= 1 # next row (-z) + xpos -= shift # shift left + amount += int(shift*margin*2) # add players left and right + if abs(row) % int(goup) == 0: + goup *= upmul + ground += 1 + print "Going up by 1: %s" % ground
\ No newline at end of file diff --git a/tilehelper.py b/tilehelper.py index 04e510e..a7f5b5f 100644 --- a/tilehelper.py +++ b/tilehelper.py @@ -9,13 +9,13 @@ from helpers import * tilehelpers = open_json_file("tilehelpers", []) dirmap = { - # [x, y, z] - "n": [0, 0, -1], - "e": [+1, 0, 0], - "s": [0, 0, +1], - "w": [-1, 0, 0], - "u": [0, +1, 0], - "d": [0, -1, 0] + # [x, y, z] + "n": [0, 0, -1], + "e": [+1, 0, 0], + "s": [0, 0, +1], + "w": [-1, 0, 0], + "u": [0, +1, 0], + "d": [0, -1, 0] } # FIXME: disallow multiple regions by single person. @@ -24,111 +24,111 @@ dirmap = { @hook.event("block.BlockPlaceEvent", "low") def on_place_block(event): - if not event.isCancelled(): - player = event.getPlayer() - block = event.getBlockPlaced() - for th in tilehelpers: - area = th.get("area") - if th.get("owner") == uid(player) and str(block.getWorld().getUID()) == th.get("world") and block.getX() in range(area[0][0], area[0][1]+1) and block.getY() in range(area[1][0], area[1][1]+1) and block.getZ() in range(area[2][0], area[2][1]+1) and event.canBuild(): - - # stack block in directions - for direction in th.get("directions"): - directions = dirmap[direction] - size = [ - 1 + abs(area[0][1] - area[0][0]), - 1 + abs(area[1][1] - area[1][0]), - 1 + abs(area[2][1] - area[2][0]) - ] - against = event.getBlockAgainst() - - newblock = block.getWorld().getBlockAt( - block.getX() + size[0] * directions[0], - block.getY() + size[1] * directions[1], - block.getZ() + size[2] * directions[2] - ) - - newagainst = against.getWorld().getBlockAt( - against.getX() + size[0] * directions[0], - against.getY() + size[1] * directions[1], - against.getZ() + size[2] * directions[2] - ) - newstate = newblock.getState() - newstate.setType(block.getType()) - newstate.setData(block.getState().getData()) - - event = BlockPlaceEvent(newstate.getBlock(), newblock.getState(), newagainst, event.getItemInHand(), player, event.canBuild()) - server.getPluginManager().callEvent(event) - if not event.isCancelled(): - newblock.setType(block.getType()) - newblock.setData(block.getData()) + if not event.isCancelled(): + player = event.getPlayer() + block = event.getBlockPlaced() + for th in tilehelpers: + area = th.get("area") + if th.get("owner") == uid(player) and str(block.getWorld().getUID()) == th.get("world") and block.getX() in range(area[0][0], area[0][1]+1) and block.getY() in range(area[1][0], area[1][1]+1) and block.getZ() in range(area[2][0], area[2][1]+1) and event.canBuild(): + + # stack block in directions + for direction in th.get("directions"): + directions = dirmap[direction] + size = [ + 1 + abs(area[0][1] - area[0][0]), + 1 + abs(area[1][1] - area[1][0]), + 1 + abs(area[2][1] - area[2][0]) + ] + against = event.getBlockAgainst() + + newblock = block.getWorld().getBlockAt( + block.getX() + size[0] * directions[0], + block.getY() + size[1] * directions[1], + block.getZ() + size[2] * directions[2] + ) + + newagainst = against.getWorld().getBlockAt( + against.getX() + size[0] * directions[0], + against.getY() + size[1] * directions[1], + against.getZ() + size[2] * directions[2] + ) + newstate = newblock.getState() + newstate.setType(block.getType()) + newstate.setData(block.getState().getData()) + + event = BlockPlaceEvent(newstate.getBlock(), newblock.getState(), newagainst, event.getItemInHand(), player, event.canBuild()) + server.getPluginManager().callEvent(event) + if not event.isCancelled(): + newblock.setType(block.getType()) + newblock.setData(block.getData()) @hook.event("block.BlockBreakEvent", "low") def on_break_block(event): - if not event.isCancelled(): - player = event.getPlayer() - block = event.getBlock() - for th in tilehelpers: - area = th.get("area") - if th.get("owner") == uid(player) and str(block.getWorld().getUID()) == th.get("world") and block.getX() in range(area[0][0], area[0][1]+1) and block.getY() in range(area[1][0], area[1][1]+1) and block.getZ() in range(area[2][0], area[2][1]+1): - - # stack block in directions - for direction in th.get("directions"): - directions = dirmap[direction] - size = [ - 1 + abs(area[0][1] - area[0][0]), - 1 + abs(area[1][1] - area[1][0]), - 1 + abs(area[2][1] - area[2][0]) - ] - - newblock = block.getWorld().getBlockAt( - block.getX() + size[0] * directions[0], - block.getY() + size[1] * directions[1], - block.getZ() + size[2] * directions[2] - ) - - event = BlockBreakEvent(newblock, player) - server.getPluginManager().callEvent(event) - if not event.isCancelled(): - newblock.setTypeId(0) + if not event.isCancelled(): + player = event.getPlayer() + block = event.getBlock() + for th in tilehelpers: + area = th.get("area") + if th.get("owner") == uid(player) and str(block.getWorld().getUID()) == th.get("world") and block.getX() in range(area[0][0], area[0][1]+1) and block.getY() in range(area[1][0], area[1][1]+1) and block.getZ() in range(area[2][0], area[2][1]+1): + + # stack block in directions + for direction in th.get("directions"): + directions = dirmap[direction] + size = [ + 1 + abs(area[0][1] - area[0][0]), + 1 + abs(area[1][1] - area[1][0]), + 1 + abs(area[2][1] - area[2][0]) + ] + + newblock = block.getWorld().getBlockAt( + block.getX() + size[0] * directions[0], + block.getY() + size[1] * directions[1], + block.getZ() + size[2] * directions[2] + ) + + event = BlockBreakEvent(newblock, player) + server.getPluginManager().callEvent(event) + if not event.isCancelled(): + newblock.setTypeId(0) @hook.event("player.PlayerInteractEvent", "low") def on_block_interact(event): - action = event.getAction() - if not event.isCancelled() and str(action) == "RIGHT_CLICK_BLOCK": - player = event.getPlayer() - block = event.getClickedBlock() - for th in tilehelpers: - area = th.get("area") - if th.get("owner") == uid(player) and str(block.getWorld().getUID()) == th.get("world") and block.getX() in range(area[0][0], area[0][1]+1) and block.getY() in range(area[1][0], area[1][1]+1) and block.getZ() in range(area[2][0], area[2][1]+1): - - # stack block in directions - for direction in th.get("directions"): - directions = dirmap[direction] - size = [ - 1 + abs(area[0][1] - area[0][0]), - 1 + abs(area[1][1] - area[1][0]), - 1 + abs(area[2][1] - area[2][0]) - ] - - newblock = block.getWorld().getBlockAt( - block.getX() + size[0] * directions[0], - block.getY() + size[1] * directions[1], - block.getZ() + size[2] * directions[2] - ) - - event = PlayerInteractEvent(event.getPlayer(), action, event.getItem(), newblock, event.getBlockFace()) - server.getPluginManager().callEvent(event) - if not event.isCancelled(): - # FIXME: do not use bukkit API calls outside main thread - thread.start_new_thread(update_block, (block, newblock)) + action = event.getAction() + if not event.isCancelled() and str(action) == "RIGHT_CLICK_BLOCK": + player = event.getPlayer() + block = event.getClickedBlock() + for th in tilehelpers: + area = th.get("area") + if th.get("owner") == uid(player) and str(block.getWorld().getUID()) == th.get("world") and block.getX() in range(area[0][0], area[0][1]+1) and block.getY() in range(area[1][0], area[1][1]+1) and block.getZ() in range(area[2][0], area[2][1]+1): + + # stack block in directions + for direction in th.get("directions"): + directions = dirmap[direction] + size = [ + 1 + abs(area[0][1] - area[0][0]), + 1 + abs(area[1][1] - area[1][0]), + 1 + abs(area[2][1] - area[2][0]) + ] + + newblock = block.getWorld().getBlockAt( + block.getX() + size[0] * directions[0], + block.getY() + size[1] * directions[1], + block.getZ() + size[2] * directions[2] + ) + + event = PlayerInteractEvent(event.getPlayer(), action, event.getItem(), newblock, event.getBlockFace()) + server.getPluginManager().callEvent(event) + if not event.isCancelled(): + # FIXME: do not use bukkit API calls outside main thread + thread.start_new_thread(update_block, (block, newblock)) def update_block(block, newblock): - try: # we're in a thread, the universe may hace collapsed in another thread - sleep(0.2) - newblock.setType(block.getType()) - newblock.setData(block.getData()) - except Exception, e: - error("Failed to update %s block in %s at %s,%s,%s: '%s'" % (str(block.getType()), block.getWorld().getName(), block.getX(), block.getY(), block.getZ(), e))
\ No newline at end of file + try: # we're in a thread, the universe may hace collapsed in another thread + sleep(0.2) + newblock.setType(block.getType()) + newblock.setData(block.getData()) + except Exception, e: + error("Failed to update %s block in %s at %s,%s,%s: '%s'" % (str(block.getType()), block.getWorld().getName(), block.getX(), block.getY(), block.getZ(), e))
\ No newline at end of file diff --git a/webtoken.py b/webtoken.py index d01ba75..2ff97e8 100644 --- a/webtoken.py +++ b/webtoken.py @@ -18,96 +18,96 @@ from random import randrange def mysql_query(query, args, fetch = True): - conn = zxJDBC.connect(mysql_database, mysql_user, mysql_pass, "com.mysql.jdbc.Driver") - curs = conn.cursor() - curs.execute(query, args) - if fetch: - results = curs.fetchall() - else: - results = conn.commit() - curs.close() - conn.close() - return results + conn = zxJDBC.connect(mysql_database, mysql_user, mysql_pass, "com.mysql.jdbc.Driver") + curs = conn.cursor() + curs.execute(query, args) + if fetch: + results = curs.fetchall() + else: + results = conn.commit() + curs.close() + conn.close() + return results def generate_token(length): - cons = 'bcdfghjklmnpqrstvwxyz' - vows = 'aeiou' - - token = '' - start = randrange(2) - for i in range(0, length): - if i % 2 == start: - token += cons[randrange(21)] - else: - token += vows[randrange(5)] - return token + cons = 'bcdfghjklmnpqrstvwxyz' + vows = 'aeiou' + + token = '' + start = randrange(2) + for i in range(0, length): + if i % 2 == start: + token += cons[randrange(21)] + else: + token += vows[randrange(5)] + return token def get_token(uuid): - results = mysql_query("SELECT DISTINCT `token`, `email` FROM register_tokens WHERE `uuid` = ? LIMIT 1", (uuid,)) - return results[0] if len(results) == 1 else None + results = mysql_query("SELECT DISTINCT `token`, `email` FROM register_tokens WHERE `uuid` = ? LIMIT 1", (uuid,)) + return results[0] if len(results) == 1 else None def token_command(sender): - plugin_header(sender, "Website Token") - if is_player(sender): - try: - token = get_token(sender.getUniqueId().toString().replace("-", "")) - if token: - msg(sender, "&aEmail: &e%s" % token[1]) - msg(sender, "&aToken: &e%s" % token[0]) - msg(sender, "&cIMPORTANT: never share the token with anyone!") - msg(sender, "&cIt could be used to claim your website account!") - else: - msg(sender, "&cYou don't have a token yet! Use &e/gettoken <email>&c.") - except Exception, e: - error(e) - msg(sender, "&cError getting your token, please contact an admin!") - else: - msg(sender, "&cThis is only for players..") + plugin_header(sender, "Website Token") + if is_player(sender): + try: + token = get_token(sender.getUniqueId().toString().replace("-", "")) + if token: + msg(sender, "&aEmail: &e%s" % token[1]) + msg(sender, "&aToken: &e%s" % token[0]) + msg(sender, "&cIMPORTANT: never share the token with anyone!") + msg(sender, "&cIt could be used to claim your website account!") + else: + msg(sender, "&cYou don't have a token yet! Use &e/gettoken <email>&c.") + except Exception, e: + error(e) + msg(sender, "&cError getting your token, please contact an admin!") + else: + msg(sender, "&cThis is only for players..") def tokengen_command(sender, args): - plugin_header(sender, "Website Token") - if is_player(sender): - if len(args) < 1: - msg(sender, "&cPlease use &e/gettoken <email adress>") + plugin_header(sender, "Website Token") + if is_player(sender): + if len(args) < 1: + msg(sender, "&cPlease use &e/gettoken <email adress>") + else: + # email may contain spaces + mail = " ".join(args) + # email regex, needs something followed by an @ followed by domain or IP + if match("^.+@(.+\\..{2,}|\\[[0-9a-fA-F:.]+\\])$", mail) != None: + token = generate_token(6) + uuid = sender.getUniqueId().toString().replace("-", "") + try: + mysql_query("DELETE FROM register_tokens WHERE `uuid` = ?", (uuid,), False) + mysql_query("INSERT INTO register_tokens (`uuid`, `token`, `email`) VALUES (?, ?, ?)", (uuid, token, mail), False) + msg(sender, "&aToken generated!") + msg(sender, "&aEmail: &e%s" % mail) + msg(sender, "&aToken: &e%s" % token) + msg(sender, "&cIMPORTANT: never share the token with anyone!") + msg(sender, "&cIt could be used to claim your website account!") + except Exception, e: + error(e) + msg(sender, "&cError getting your token, please contact an admin!") + else: + msg(sender, "&c'&6%s&c' doesn't look like a valid email adress!" % mail) else: - # email may contain spaces - mail = " ".join(args) - # email regex, needs something followed by an @ followed by domain or IP - if match("^.+@(.+\\..{2,}|\\[[0-9a-fA-F:.]+\\])$", mail) != None: - token = generate_token(6) - uuid = sender.getUniqueId().toString().replace("-", "") - try: - mysql_query("DELETE FROM register_tokens WHERE `uuid` = ?", (uuid,), False) - mysql_query("INSERT INTO register_tokens (`uuid`, `token`, `email`) VALUES (?, ?, ?)", (uuid, token, mail), False) - msg(sender, "&aToken generated!") - msg(sender, "&aEmail: &e%s" % mail) - msg(sender, "&aToken: &e%s" % token) - msg(sender, "&cIMPORTANT: never share the token with anyone!") - msg(sender, "&cIt could be used to claim your website account!") - except Exception, e: - error(e) - msg(sender, "&cError getting your token, please contact an admin!") - else: - msg(sender, "&c'&6%s&c' doesn't look like a valid email adress!" % mail) - else: - msg(sender, "&cThis is only for players..") + msg(sender, "&cThis is only for players..") @hook.command("token") def on_token_command(sender, args): - thread.start_new_thread(token_command, (sender,)) - return True + thread.start_new_thread(token_command, (sender,)) + return True @hook.command("gettoken") def on_gettoken_command(sender, args): - thread.start_new_thread(tokengen_command, (sender, args)) - return True + thread.start_new_thread(tokengen_command, (sender, args)) + return True |