summaryrefslogtreecommitdiff
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
parent91e826aec052f16d085460df0ce07ea951a68178 (diff)
move cycle plugin to new module; add features
-rw-r--r--README.md4
-rw-r--r--cycle.py64
-rw-r--r--main.py2
-rw-r--r--misc.py21
4 files changed, 69 insertions, 22 deletions
diff --git a/README.md b/README.md
index 67c5167..efdef84 100644
--- a/README.md
+++ b/README.md
@@ -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
diff --git a/main.py b/main.py
index 1481ffa..a0d6efb 100644
--- a/main.py
+++ b/main.py
@@ -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:
diff --git a/misc.py b/misc.py
index b6d9646..4424768 100644
--- a/misc.py
+++ b/misc.py
@@ -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
#