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 /cycle.py | |
parent | 91e826aec052f16d085460df0ce07ea951a68178 (diff) |
move cycle plugin to new module; add features
Diffstat (limited to 'cycle.py')
-rw-r--r-- | cycle.py | 64 |
1 files changed, 64 insertions, 0 deletions
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 |