diff options
author | jomo <github@jomo.tv> | 2014-06-29 15:18:25 +0200 |
---|---|---|
committer | jomo <github@jomo.tv> | 2014-06-29 15:18:25 +0200 |
commit | dd8fe148587cdcfd6bbb0b4280fd19aa6e8b9f94 (patch) | |
tree | b122271948d1807fe1e45c98522a968d665e7400 | |
parent | 91e826aec052f16d085460df0ce07ea951a68178 (diff) |
move cycle plugin to new module; add features
-rw-r--r-- | README.md | 4 | ||||
-rw-r--r-- | cycle.py | 64 | ||||
-rw-r--r-- | main.py | 2 | ||||
-rw-r--r-- | misc.py | 21 |
4 files changed, 69 insertions, 22 deletions
@@ -121,6 +121,10 @@ If you want the server to load a file (*module*) on startup, add it to the `modu > Adds `/listen`, highlights chat and plays a sound when your name was mentioned +* `cycler.py` + + > Adds `/cycler`, swaps the hotbar with inventory when player changes slot from right->left or left->right + # Code styleguide & tips diff --git a/cycle.py b/cycle.py new file mode 100644 index 0000000..df1cf42 --- /dev/null +++ b/cycle.py @@ -0,0 +1,64 @@ +import simplejson as json +from helpers import * + +cyclers_file = "plugins/redstoner-utils.py.dir/files/cycle.json" +no_cyclers = [] +try: + no_cyclers = json.loads(open(cyclers_file).read()) +except Exception, e: + error("Failed to load no_cyclers: %s" % e) + + +@hook.command("cycle") +def onCyclerCommand(sender, args): + plugHeader(sender, "Cycle") + if not isPlayer(sender): + msg(sender, "&conly players can do this") + return True + if not checkargs(sender, args, 1, 1): + return True + + cmd = args[0].lower() + pid = sender.getUniqueId() + nop = pid in no_cyclers + if cmd == "on": + if nop: + no_cyclers.remove(pid) + msg(sender, "&aTurned &2on&a inventory cycling!") + else: + msg(sender, "&aAlready turned on.") + elif cmd == "off": + if not nop: + no_cyclers.append(pid) + 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") +def onSlotChange(event): + player = event.getPlayer() + if player.getUniqueId() not in no_cyclers: + prev_slot = event.getPreviousSlot() + new_slot = event.getNewSlot() + if (prev_slot == 0 and new_slot == 8): # left -> right + doCycle(player, True) + elif (prev_slot == 8 and new_slot == 0): # right -> left + doCycle(player, False) + + +def doCycle(player, up): + inv = player.getInventory() + items = inv.getContents() + shift = -9 if up else 9 + shift = shift % len(items) + for _ in range(4): + uniq_items = sorted(set(list(items)[:shift])) # crazy code + msg(player, items[:shift]) + if uniq_items != [None]: # row not empty + break + items = items[shift:] + items[:shift] # shift "around" + inv.setContents(items)
\ No newline at end of file @@ -31,7 +31,7 @@ def onDisable(): log("Loading RedstonerUtils...") # Import all modules -modules = ["misc", "adminchat", "lagchunks", "reports", "chatgroups", "webtoken", "saylol", "skullclick", "mentio"] +modules = ["misc", "adminchat", "lagchunks", "reports", "chatgroups", "webtoken", "saylol", "skullclick", "mentio", "cycle"] mod = {} for module in modules: try: @@ -93,27 +93,6 @@ def onPlayerInteractEntity(event): # -# Cycling around the item bar will switch between rows of the inventory -# -@hook.event("player.PlayerItemHeldEvent", "normal") -def onHeldEvent(event): - player = event.getPlayer() - prev_slot = event.getPreviousSlot() - new_slot = event.getNewSlot() - if (prev_slot == 0 and new_slot == 8): - doCycle(player, -9) - elif (prev_slot == 8 and new_slot == 0): - doCycle(player, 9) - -def doCycle(player, e): - inv = player.getInventory() - inv2 = inv.getContents() - e = e % len(inv2) - inv2 = inv2[e:] + inv2[:e] - inv.setContents(inv2) - - -# # Various text commands # |