Prevent /up griefing, add /ackey, minor tweaks
Dunno why its posting 'changes' in main.py tho
This commit is contained in:
42
adminchat.py
42
adminchat.py
@@ -1,8 +1,12 @@
|
|||||||
#pylint: disable = F0401
|
#pylint: disable = F0401
|
||||||
from helpers import *
|
from helpers import *
|
||||||
|
from basecommands import simplecommand
|
||||||
|
|
||||||
ac_permission = "utils.ac"
|
ac_permission = "utils.ac"
|
||||||
ac_key = ","
|
|
||||||
|
ac_defaultkey = ","
|
||||||
|
ac_keys = open_json_file("adminchat_keys", {})
|
||||||
|
|
||||||
ac_toggle_list = []
|
ac_toggle_list = []
|
||||||
ac_prefix = "&8[&cAC&8]"
|
ac_prefix = "&8[&cAC&8]"
|
||||||
|
|
||||||
@@ -13,6 +17,7 @@ def adminchat(sender, msg):
|
|||||||
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))
|
||||||
|
# Needs something here like fine(message) to show up in the logs when you use ackey, but fine doesnt work for some reason. It did on the server with /pyeval (not show up on console, but show up in logs nevertheless)
|
||||||
|
|
||||||
|
|
||||||
# ac toggle
|
# ac toggle
|
||||||
@@ -41,16 +46,41 @@ def on_ac_command(sender, args):
|
|||||||
noperm(sender)
|
noperm(sender)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def get_key(uuid):
|
||||||
|
key = ac_keys.get(uuid)
|
||||||
|
return key if key != None else ac_defaultkey
|
||||||
|
|
||||||
|
@simplecommand("adminchatkey",
|
||||||
|
aliases = ["ackey"],
|
||||||
|
senderLimit = 0,
|
||||||
|
helpNoargs = True,
|
||||||
|
helpSubcmd = True,
|
||||||
|
description = "Sets a key character for adminchat",
|
||||||
|
usage = "<key>")
|
||||||
|
def adminchatkey_command(sender, command, label, args):
|
||||||
|
key = " ".join(args)
|
||||||
|
uuid = uid(sender)
|
||||||
|
if key.lower() == "default" or key == ac_defaultkey:
|
||||||
|
del ac_keys[uuid]
|
||||||
|
save_keys()
|
||||||
|
return "&aYour adminchat key was set to the default character: '&c%s&a'" % ac_defaultkey
|
||||||
|
ac_keys[uid(sender)] = key
|
||||||
|
save_keys()
|
||||||
|
return "&aYour adminchat key was set to: '&c%s&a'" % key
|
||||||
|
|
||||||
|
def save_keys():
|
||||||
|
save_json_file("adminchat_keys", ac_keys)
|
||||||
|
|
||||||
|
|
||||||
@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:
|
key = get_key(uid(sender))
|
||||||
#This solution to log any AC isn't very optimised as it will check for permission twice. Any fix for this?
|
if sender.getName() in ac_toggle_list:
|
||||||
runas(sender, "ac " + msg[1:])
|
adminchat(sender, msg)
|
||||||
event.setCancelled(True)
|
event.setCancelled(True)
|
||||||
elif sender.getName() in ac_toggle_list:
|
if msg[:len(key)] == key:
|
||||||
runas(sender, "ac " + msg)
|
adminchat(sender, msg[len(key):])
|
||||||
event.setCancelled(True)
|
event.setCancelled(True)
|
||||||
|
|||||||
@@ -95,123 +95,83 @@ def getSettingDetails(arg):
|
|||||||
helpSubcmd = True,
|
helpSubcmd = True,
|
||||||
amax = 2)
|
amax = 2)
|
||||||
def toggle_command(sender, command, label, args):
|
def toggle_command(sender, command, label, args):
|
||||||
try:
|
setting, details = getSettingDetails(args[0])
|
||||||
setting, details = getSettingDetails(args[0])
|
Validate.isAuthorized(sender, "utils.toggle." + setting, "that setting")
|
||||||
Validate.isAuthorized(sender, "utils.toggle." + setting, "that setting")
|
|
||||||
|
|
||||||
values = get(setting)
|
values = get(setting)
|
||||||
player = server.getPlayer(sender.getName())
|
player = server.getPlayer(sender.getName())
|
||||||
uuid = uid(player)
|
uuid = uid(player)
|
||||||
arglen = len(args)
|
arglen = len(args)
|
||||||
|
|
||||||
if details[0] in (0,2): # Toggle
|
if details[0] in (0,2): # Toggle
|
||||||
default = details[0] == 0 # If True: toggle on if list doesn't contain the uuid
|
default = details[0] == 0 # If True: toggle on if list doesn't contain the uuid
|
||||||
|
|
||||||
enabled = (uuid not in values) == default #Invert if details[0] == 2 (toggle disabled by default)
|
enabled = (uuid not in values) == default #Invert if details[0] == 2 (toggle disabled by default)
|
||||||
info("Enabled: " + str(enabled))
|
new = None
|
||||||
new = None
|
if arglen == 1:
|
||||||
if arglen == 1:
|
new = not enabled
|
||||||
|
else:
|
||||||
|
arg2 = args[1].lower()
|
||||||
|
if arg2 == "info":
|
||||||
|
return " &aSetting %s:\n &9%s\n &6Accepted arguments: [on|enable|off|disable|toggle|switch|info]\n &6Aliases: %s" % (setting, details[2], ", ".join(details[3]))
|
||||||
|
elif arg2 in ("toggle", "switch"):
|
||||||
new = not enabled
|
new = not enabled
|
||||||
|
elif arg2 in ("on", "enable"):
|
||||||
|
new = not default
|
||||||
|
elif arg2 in ("off", "disable"):
|
||||||
|
new = default
|
||||||
else:
|
else:
|
||||||
arg2 = args[1].lower()
|
return " &cArgument '%s' was not recognized. \n Use &o/toggle %s info &cfor more information" % (arg2, setting)
|
||||||
if arg2 == "info":
|
if enabled == new:
|
||||||
return " &aSetting %s:\n &9%s\n &6Accepted arguments: [on|enable|off|disable|toggle|switch|info]\n &6Aliases: %s" % (setting, details[2], ", ".join(details[3]))
|
return " &cAlready %s: &a%s" % ("enabled" if enabled else "disabled", details[1])
|
||||||
elif arg2 in ("toggle", "switch"):
|
if new == default:
|
||||||
new = not enabled
|
values.remove(uuid)
|
||||||
elif arg2 in ("on", "enable"):
|
else:
|
||||||
new = True == default
|
values.append(uuid)
|
||||||
info("New: " + str(new))
|
saveSettings()
|
||||||
elif arg2 in ("off", "disable"):
|
return (" &aEnabled " if new else " &aDisabled ") + details[1]
|
||||||
new = False == default
|
|
||||||
info("New: " + str(new))
|
|
||||||
else:
|
|
||||||
return " &cArgument '%s' was not recognized. \n Use &o/toggle %s info &cfor more information" % (arg2, setting)
|
|
||||||
if enabled == new:
|
|
||||||
return " &cAlready %s: &a%s" % ("enabled" if enabled else "disabled", details[1])
|
|
||||||
if new == default:
|
|
||||||
values.remove(uuid)
|
|
||||||
else:
|
|
||||||
values.append(uuid)
|
|
||||||
saveSettings()
|
|
||||||
return (" &aEnabled " if new else " &aDisabled ") + details[1]
|
|
||||||
|
|
||||||
|
|
||||||
elif details[0] == 1: # Save ItemStack in hand
|
elif details[0] == 1: # Save ItemStack in hand
|
||||||
arg2 = args[1].lower() if arglen > 1 else ""
|
arg2 = args[1].lower() if arglen > 1 else ""
|
||||||
enabled = uuid in values
|
enabled = uuid in values
|
||||||
|
|
||||||
if arg2 == "clear":
|
if arg2 == "clear":
|
||||||
if enabled:
|
if enabled:
|
||||||
del values[uuid]
|
del values[uuid]
|
||||||
return " &aDisabled " + details[1]
|
return " &aDisabled " + details[1]
|
||||||
|
|
||||||
if arg2 == "details":
|
if arg2 == "details":
|
||||||
return " &aSetting %s:\n &9%s \n&6Accepted arguments: [<slot>|clear|details]" % (setting, details[2])
|
return " &aSetting %s:\n &9%s \n&6Accepted arguments: [<slot>|clear|details]" % (setting, details[2])
|
||||||
|
|
||||||
slot = int(arg2) if arg2.isdigit() else 0
|
slot = int(arg2) if arg2.isdigit() else 0
|
||||||
if not (0 <= slot <= details[4]):
|
if not (0 <= slot <= details[4]):
|
||||||
return " &cSlot number must be more than or equal to 0 and less than or equal to %s!" % details[4]
|
return " &cSlot number must be more than or equal to 0 and less than or equal to %s!" % details[4]
|
||||||
|
|
||||||
item = fromStack(player.getItemInHand())
|
item = fromStack(player.getItemInHand())
|
||||||
if item[0] == 0 or item[1] <= 0:
|
if item[0] == 0 or item[1] <= 0:
|
||||||
if enabled:
|
if enabled:
|
||||||
items = values[uuid]
|
items = values[uuid]
|
||||||
if slot in items:
|
if slot in items:
|
||||||
del items[slot]
|
del items[slot]
|
||||||
saveSettings()
|
saveSettings()
|
||||||
if len(items) == 0:
|
if len(items) == 0:
|
||||||
del values[uuid]
|
del items
|
||||||
return " &aDisabled " + details[1]
|
return " &aDisabled " + details[1]
|
||||||
return " &aCleared slot %s of setting %s" % (slot, setting)
|
return " &aCleared slot %s of setting %s" % (slot, setting)
|
||||||
return " &cSlot %s of setting %s was already cleared!" % (slot, setting)
|
return " &cSlot %s of setting %s was already cleared!" % (slot, setting)
|
||||||
return " &cAlready disabled: " + details[1]
|
return " &cAlready disabled: " + details[1]
|
||||||
|
|
||||||
if arglen == 2 and not arg2.isdigit():
|
if arglen == 2 and not arg2.isdigit():
|
||||||
return " &cArgument '%s' was not recognized. \nUse &o/toggle %s details &cfor more detailsrmation." % (arg2, setting)
|
return " &cArgument '%s' was not recognized. \nUse &o/toggle %s details &cfor more detailsrmation." % (arg2, setting)
|
||||||
|
|
||||||
if not enabled:
|
if not enabled:
|
||||||
values[uuid] = {}
|
values[uuid] = {}
|
||||||
values[uuid][slot] = item
|
values[uuid][slot] = item
|
||||||
saveSettings()
|
saveSettings()
|
||||||
return ((" &aEnabled setting %s, S" % setting) if len(values[uuid]) == 1 else " &aS") + "et itemstack in slot %s to item in hand" % (slot)
|
return ((" &aEnabled setting %s, S" % setting) if len(values[uuid]) == 1 else " &aS") + "et itemstack in slot %s to item in hand" % (slot)
|
||||||
|
|
||||||
return None #This shouldn't happen
|
|
||||||
except CommandException, e:
|
|
||||||
raise e
|
|
||||||
except:
|
|
||||||
error(trace())
|
|
||||||
|
|
||||||
"""
|
|
||||||
if info[0] in (0,2): # Toggle
|
|
||||||
default = info[0] == 0
|
|
||||||
|
|
||||||
enabled = (uuid not in values) == default #Invert if info[0] == 2 (toggle disabled by default)
|
|
||||||
info("Enabled": True)
|
|
||||||
new = None
|
|
||||||
if arglen == 1:
|
|
||||||
new = not enabled
|
|
||||||
else:
|
|
||||||
arg2 = args[1].lower()
|
|
||||||
if arg2 == "info":
|
|
||||||
return " &aSetting %s:\n &9%s\n &6Accepted arguments: [on|enable|off|disable|toggle|switch]\n &6Aliases: %s" % (setting, info[2], ", ".join(info[3]))
|
|
||||||
elif arg2 in ("toggle", "switch"):
|
|
||||||
new = not enabled
|
|
||||||
elif arg2 in ("on", "enable"):
|
|
||||||
new = True == default
|
|
||||||
elif arg2 in ("off", "disable"):
|
|
||||||
new = False == default
|
|
||||||
else:
|
|
||||||
return " &cArgument '%s' was not recognized. \nUse &o/toggle %s info &cfor more information" % (arg2, setting)
|
|
||||||
if enabled == new:
|
|
||||||
return " &cAlready %s: &a%s" % ("enabled" if enabled else "disabled", info[1])
|
|
||||||
if new:
|
|
||||||
values.remove(uuid)
|
|
||||||
else:
|
|
||||||
values.append(uuid)
|
|
||||||
saveSettings()
|
|
||||||
return (" &aEnabled " if new else " &aDisabled ") + info[1]
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
return None #This shouldn't happen
|
||||||
|
|
||||||
|
|
||||||
def fromStack(itemStack):
|
def fromStack(itemStack):
|
||||||
@@ -226,62 +186,59 @@ def isEnabled(toggleSetting, uuid):
|
|||||||
|
|
||||||
@hook.event("block.BlockPlaceEvent", "monitor")
|
@hook.event("block.BlockPlaceEvent", "monitor")
|
||||||
def on_block_place(event):
|
def on_block_place(event):
|
||||||
try:
|
if event.isCancelled():
|
||||||
if event.isCancelled():
|
return
|
||||||
return
|
player = event.getPlayer()
|
||||||
player = event.getPlayer()
|
if not is_creative(player):
|
||||||
if not is_creative(player):
|
return
|
||||||
return
|
|
||||||
|
|
||||||
uuid = uid(player)
|
uuid = uid(player)
|
||||||
block = event.getBlockPlaced()
|
block = event.getBlockPlaced()
|
||||||
material = block.getType()
|
material = block.getType()
|
||||||
|
|
||||||
|
|
||||||
if (material in (Material.WOOD_STEP, Material.STEP)
|
if (material in (Material.WOOD_STEP, Material.STEP)
|
||||||
and isEnabled("slab", uuid)
|
and isEnabled("slab", uuid)
|
||||||
and player.hasPermission("utils.toggle.slab")
|
and player.hasPermission("utils.toggle.slab")
|
||||||
and block.getData() < 8
|
and block.getData() < 8
|
||||||
):
|
):
|
||||||
block.setData(block.getData() + 8) # Flip upside down
|
block.setData(block.getData() + 8) # Flip upside down
|
||||||
|
|
||||||
|
|
||||||
elif (material == Material.CAULDRON
|
elif (material == Material.CAULDRON
|
||||||
and isEnabled("cauldron", uuid)
|
and isEnabled("cauldron", uuid)
|
||||||
and player.hasPermission("utils.toggle.cauldron")
|
and player.hasPermission("utils.toggle.cauldron")
|
||||||
):
|
):
|
||||||
block.setData(3) #3 layers of water, 3 signal strength
|
block.setData(3) #3 layers of water, 3 signal strength
|
||||||
|
|
||||||
|
|
||||||
elif ((material == Material.FURNACE and player.hasPermission("utils.toggle.furnace"))
|
elif ((material == Material.FURNACE and player.hasPermission("utils.toggle.furnace"))
|
||||||
or (material == Material.DROPPER and player.hasPermission("utils.toggle.dropper"))
|
or (material == Material.DROPPER and player.hasPermission("utils.toggle.dropper"))
|
||||||
or (material == Material.HOPPER and player.hasPermission("utils.toggle.hopper"))
|
or (material == Material.HOPPER and player.hasPermission("utils.toggle.hopper"))
|
||||||
):
|
):
|
||||||
stacks = get(str(material).lower()).get(uuid)
|
stacks = get(str(material).lower()).get(uuid)
|
||||||
if stacks != None: # Enabled
|
if stacks != None: # Enabled
|
||||||
state = block.getState()
|
state = block.getState()
|
||||||
inv = state.getInventory()
|
inv = state.getInventory()
|
||||||
for slot, stack in stacks.iteritems():
|
for slot, stack in stacks.iteritems():
|
||||||
inv.setItem(int(slot), toStack(stack))
|
inv.setItem(int(slot), toStack(stack))
|
||||||
state.update()
|
state.update()
|
||||||
|
|
||||||
"""
|
"""
|
||||||
elif (material == Material.REDSTONE_TORCH_ON
|
elif (material == Material.REDSTONE_TORCH_ON
|
||||||
and event.getBlockAgainst().getType() == Material.REDSTONE_BLOCK
|
and event.getBlockAgainst().getType() == Material.REDSTONE_BLOCK
|
||||||
and isEnabled("torch", uuid)
|
and isEnabled("torch", uuid)
|
||||||
and player.hasPermission("utils.toggle.torch")
|
and player.hasPermission("utils.toggle.torch")
|
||||||
):
|
):
|
||||||
torches_to_break.append(block)
|
torches_to_break.append(block)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
if (material in (Material.PISTON_BASE, Material.PISTON_STICKY_BASE) #Not elif because for droppers it can do 2 things
|
if (material in (Material.PISTON_BASE, Material.PISTON_STICKY_BASE)
|
||||||
and isEnabled("piston", uuid)
|
and isEnabled("piston", uuid)
|
||||||
and player.hasPermission("utils.toggle.piston")
|
and player.hasPermission("utils.toggle.piston")
|
||||||
):
|
):
|
||||||
block.setData(faces[block.getFace(event.getBlockAgainst())])
|
block.setData(faces[block.getFace(event.getBlockAgainst())])
|
||||||
except:
|
|
||||||
error(trace())
|
|
||||||
|
|
||||||
|
|
||||||
@hook.event("player.PlayerInteractEvent", "monitor")
|
@hook.event("player.PlayerInteractEvent", "monitor")
|
||||||
|
|||||||
11
helpers.py
11
helpers.py
@@ -39,6 +39,13 @@ def error(text):
|
|||||||
"""
|
"""
|
||||||
server.getLogger().severe("[RedstonerUtils] %s" % text)
|
server.getLogger().severe("[RedstonerUtils] %s" % text)
|
||||||
|
|
||||||
|
|
||||||
|
def fine(text):
|
||||||
|
"""
|
||||||
|
Log anything to the logs alone, not the console
|
||||||
|
"""
|
||||||
|
server.getLogger().fine(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
|
||||||
@@ -216,6 +223,4 @@ def toggle(player, ls, name = "Toggle", add = None):
|
|||||||
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)
|
||||||
|
|
||||||
|
|
||||||
1
imout.py
1
imout.py
@@ -1,4 +1,3 @@
|
|||||||
import thread
|
|
||||||
from helpers import *
|
from helpers import *
|
||||||
from adminchat import *
|
from adminchat import *
|
||||||
|
|
||||||
|
|||||||
6
main.py
6
main.py
@@ -38,8 +38,8 @@ shared["load_modules"] = [
|
|||||||
"adminchat",
|
"adminchat",
|
||||||
# Adds /badge, allows to give players achievements
|
# Adds /badge, allows to give players achievements
|
||||||
"badges",
|
"badges",
|
||||||
# Adds a few block placement corrections/mods
|
# Adds a few block placement corrections/mods
|
||||||
"blockplacemods",
|
"blockplacemods",
|
||||||
# Adds /calc, toggles automatic solving of Math expressions in chat
|
# Adds /calc, toggles automatic solving of Math expressions in chat
|
||||||
"calc",
|
"calc",
|
||||||
# Plugin to locate laggy chunks. /lc <n> lists chunks with more than n entities
|
# Plugin to locate laggy chunks. /lc <n> lists chunks with more than n entities
|
||||||
@@ -87,4 +87,4 @@ for module in shared["load_modules"]:
|
|||||||
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())
|
||||||
25
misc.py
25
misc.py
@@ -37,11 +37,20 @@ def on_join(event):
|
|||||||
player.teleport(player.getWorld().getSpawnLocation())
|
player.teleport(player.getWorld().getSpawnLocation())
|
||||||
|
|
||||||
|
|
||||||
|
# Prevent /up griefing. //up is blocked by PlotMe.
|
||||||
|
@hook.event("player.PlayerCommandPreprocessEvent", "low")
|
||||||
|
def on_command(event):
|
||||||
|
if event.getMessage()[:4].lower() == "/up ":
|
||||||
|
event.setMessage("/" + event.getMessage())
|
||||||
|
|
||||||
|
|
||||||
|
""" Disabled while builder can't access Trusted
|
||||||
@hook.event("player.PlayerGameModeChangeEvent", "low")
|
@hook.event("player.PlayerGameModeChangeEvent", "low")
|
||||||
def on_gamemode(event):
|
def on_gamemode(event):
|
||||||
user = event.getPlayer()
|
user = event.getPlayer()
|
||||||
if str(event.getNewGameMode()) != "SPECTATOR" and user.getWorld().getName() == "Trusted" and not user.hasPermission("mv.bypass.gamemode.Trusted"):
|
if str(event.getNewGameMode()) != "SPECTATOR" and user.getWorld().getName() == "Trusted" and not user.hasPermission("mv.bypass.gamemode.Trusted"):
|
||||||
event.setCancelled(True)
|
event.setCancelled(True)
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
@hook.event("player.PlayerBedEnterEvent")
|
@hook.event("player.PlayerBedEnterEvent")
|
||||||
@@ -208,3 +217,19 @@ def on_modules_command(sender, command, label, args):
|
|||||||
plugin_header(sender, "Modules")
|
plugin_header(sender, "Modules")
|
||||||
msg(sender, ", ".join([(("&a" if mod in shared["modules"] else "&c") + mod) for mod in shared["load_modules"]]))
|
msg(sender, ", ".join([(("&a" if mod in shared["modules"] else "&c") + mod) for mod in shared["load_modules"]]))
|
||||||
|
|
||||||
|
|
||||||
|
""" Something I'm planning for schematics
|
||||||
|
@hook.event("player.PlayerCommandPreprocessEvent", "low")
|
||||||
|
def on_command(event):
|
||||||
|
msg = " ".split(event.getMessage())
|
||||||
|
if len(msg) < 3:
|
||||||
|
return
|
||||||
|
if msg[0].lower() not in ("/schematic", "/schem"):
|
||||||
|
return
|
||||||
|
if msg[1].lower() not in ("save", "load"):
|
||||||
|
return
|
||||||
|
msg[2] = event.getPlayer().getName() + "/" + msg[2]
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user