summaryrefslogtreecommitdiff
path: root/cycle.py
diff options
context:
space:
mode:
authorjomo <github@jomo.tv>2014-06-29 15:18:25 +0200
committerjomo <github@jomo.tv>2014-06-29 15:18:25 +0200
commitdd8fe148587cdcfd6bbb0b4280fd19aa6e8b9f94 (patch)
treeb122271948d1807fe1e45c98522a968d665e7400 /cycle.py
parent91e826aec052f16d085460df0ce07ea951a68178 (diff)
move cycle plugin to new module; add features
Diffstat (limited to 'cycle.py')
-rw-r--r--cycle.py64
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