summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjomo <github@jomo.tv>2015-01-06 23:38:42 +0100
committerjomo <github@jomo.tv>2015-01-06 23:38:42 +0100
commit9a916ed2cd9440d46079f9b7db421a7b9fcbf6ee (patch)
tree3af33b3ddc2fa3159f9243b0ade09b3e3cc96425
parent3435e994326b14f700777741a76dd990a2bc703f (diff)
change indentation from 2 spaces to 4, fix #5
-rw-r--r--abot.py80
-rw-r--r--adminchat.py64
-rw-r--r--badges.py202
-rw-r--r--calc.py92
-rw-r--r--chatgroups.py128
-rw-r--r--check.py66
-rw-r--r--cycle.py90
-rw-r--r--damnspam.py238
-rw-r--r--forcefield.py276
-rw-r--r--friends.py238
-rw-r--r--helpers.py274
-rw-r--r--imout.py36
-rw-r--r--lagchunks.py76
-rw-r--r--main.py60
-rw-r--r--mentio.py220
-rw-r--r--misc.py188
-rw-r--r--motd.py32
-rw-r--r--plotter.py10
-rw-r--r--reports.py186
-rw-r--r--saylol.py146
-rw-r--r--skullclick.py20
-rw-r--r--spawnplayer.py76
-rw-r--r--tilehelper.py208
-rw-r--r--webtoken.py136
24 files changed, 1571 insertions, 1571 deletions
diff --git a/abot.py b/abot.py
index e70a340..fa8517e 100644
--- a/abot.py
+++ b/abot.py
@@ -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)
diff --git a/badges.py b/badges.py
index bab99a6..1582dfd 100644
--- a/badges.py
+++ b/badges.py
@@ -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
diff --git a/calc.py b/calc.py
index eeb236b..2022261 100644
--- a/calc.py
+++ b/calc.py
@@ -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)
diff --git a/check.py b/check.py
index 575c6ad..701bbdf 100644
--- a/check.py
+++ b/check.py
@@ -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
diff --git a/cycle.py b/cycle.py
index 8460a0f..4569f4c 100644
--- a/cycle.py
+++ b/cycle.py
@@ -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
diff --git a/friends.py b/friends.py
index d8a70ea..689c526 100644
--- a/friends.py
+++ b/friends.py
@@ -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
diff --git a/helpers.py b/helpers.py
index c386faa..375ddfb 100644
--- a/helpers.py
+++ b/helpers.py
@@ -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
diff --git a/imout.py b/imout.py
index c98b379..4906036 100644
--- a/imout.py
+++ b/imout.py
@@ -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
diff --git a/main.py b/main.py
index 951206f..6d05c05 100644
--- a/main.py
+++ b/main.py
@@ -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
diff --git a/mentio.py b/mentio.py
index 496bf2f..abfc80f 100644
--- a/mentio.py
+++ b/mentio.py
@@ -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
diff --git a/misc.py b/misc.py
index 5a06a62..e9c838f 100644
--- a/misc.py
+++ b/misc.py
@@ -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&lto 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&lto 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
diff --git a/motd.py b/motd.py
index 1b70a29..d91a910 100644
--- a/motd.py
+++ b/motd.py
@@ -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)
diff --git a/plotter.py b/plotter.py
index d825310..13e7f2e 100644
--- a/plotter.py
+++ b/plotter.py
@@ -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])
diff --git a/reports.py b/reports.py
index 361340d..ebab997 100644
--- a/reports.py
+++ b/reports.py
@@ -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
diff --git a/saylol.py b/saylol.py
index 58b8ae9..3251105 100644
--- a/saylol.py
+++ b/saylol.py
@@ -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