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