ScrollingMenuSign
Videos
Latest video:
- See the Videos page for full list of demonstration & tutorial videos.
Latest Version
Features
- Create scrollable command menus with one or more sign, map, multisign, inventory, hologram or spout views. Or trigger your menus with redstone signals or even from any held item.
- Scroll through views with right-click, execute the selected command with left-click (configurable)
- Sophisticated command parser/executor - permission elevation, command costs (items/durability/economy/food/health/xp), player/group/world restrictions, variable substitutions...
- Commands can have warm-ups and cooldowns
- Macros - run multiple commands or display large text blocks with one click
- Build a hierarchy of menus using Submenus
- Flexible Access Control gives you private menus and views, or limited to permission groups.
- External scripting language support allowing unlimited flexibility in what menu commands can do
- Sign & multisign views can produce Redstone Output when scrolled or executed
- Redstone Control Signs allow remote scrolling & execution via redstone signals for sign & multisign views
- Permissions support via Bukkit superperms
- Command Logging lets you keep an audit trail of who's executed what commands from SMS menus
- Multi-world support: menus can have views in any number of worlds
- Full coloured/bold/italic/underline/strikethrough text support on menu titles, items and messages
- Configure menus or menu items to have a limited number of uses, either per-player or globally
- Comprehensive tab completion for all commands
- Optional Spout support
Possible Applications
- A menu of station setting commands for Minecart Mania (this is what inspired me to write the plugin in the first place!)
- Newbie user guide menus
- Warp menus for your favourite teleportation plugin
- A basic shop menu - buy/sell/swap items & credits
- Controlled access to commands that users can't normally run
- Item reward menus with limited usage count
- Traps built from redstone views and/or scripts
- Super-convenient game mode (survival/creative) changer with map and/or spout views
Installation
Pretty simple:
- Copy ScrollingMenuSign.jar into your server's
bukkit/plugins
folder - Optional: install Vault for economy command costs and/or permission group support.
- Optional: install ProtocolLib to make active items glow.
- Restart or reload your server.
That's it. ScrollingMenuSign will automatically create a folder called bukkit/plugins/ScrollingMenuSign
when it first runs. All data related to the plugin is stored in here.
Documentation
- Quickstart Guide
- FAQ
- Command Reference
- Permissions support
- The Configuration File
- The Command Parser
- Submenus
- Warmups and Cooldowns
- Popup Messages
- View Types
- Redstone Output
- Macros
- Menu Item Tooltips
- User Variables
- Command Logging
- Setting usage limits on menus & menu items
- Redstone Control Signs
- Spout Support
- Using External Scripting Languages
- API: Managing ScrollingMenuSign menus from scripts or other plugins
Source
Development Versions
Development versions can be downloaded from this Jenkins build server. Notes:
- Development versions have not been approved by dev.bukkit.org staff
- Development versions may be buggy or fail to work completely. Only use development versions if you a) want to help with finding bugs, or b) have been asked to, to test a bugfix.
Changelog
Usage Statistics
Since SMS v1.3.0, fully anonymous usage statistics are collected using MCStats:
If you wish to opt out of MCStats metrics collection, edit plugins/PluginMetrics/config.yml
and change opt-out: false to true.
Donations
If you use and enjoy ScrollingMenuSign, you are welcome to make a donation by clicking the "Donate" button at the top right. However, donations are strictly optional, and don't confer any special benefits over non-donors.
@desht
once the player actually has the view though, shouldn't they be able to click to execute the command?
EDIT: ok got it working, the only issue is I want players to be able to use the map view without needing to look down at the map..
this is actually incorrect, bukkit has actions for clicking air.
EDIT2: PR for fixing interaction events: https://github.com/desht/ScrollingMenuSign/pull/2
@Sleaker
Probably best to open a ticket with an some example code for your API issues. As far as I know no one other than me has actually used the API in a separate plugin, so a bugs in the API or unclear documentation is the mostly likely cause of your issue :)
Update: I just updated API with examples of executing a menu item - see under Creating and Using Views.
@desht
ahh ok, I guess i was just confused that they weren't contextual. My next issue is that after using the API to setup the views, interacting with the map doesn't result in the command being performed. (I can scroll the menu though)
@Sleaker
Nope, only one map view is required for the menu:
/sms sync <menu-name>
/sms givemap <id> <count>
where <id> is the map-id that you were given when you created the map view (you can also get the id with/sms list <menu-name>
). <count> defaults to 1. Distribute those maps to your users somehow.If you want to create map views within your plugin via the published SMS API, you'd want to get the mapID of the map you're adding (
item.getDurability()
) and then use theSMSMapView.addMapToMenu(menu, mapID)
static method. See API.That's it - your users now all have a view on the same menu, and only one map-id is used per view. Each user will be able to scroll and execute their maps independently.
(It is possible to create multiple map views per menu - but you'd probably only want to do that if you're setting an individual owner for each map - it's possible to have maps that only one person can use).
tl;dr "Contextual" is the default and only state for map views
Looking forward to seeing what you do with Heroes & SMS :)
@desht - ok so for the contextual stuff do I need to create a new mapview for each player that joins the server that uses the menu I've created? I'm confused on how to get contextual map views working that allow each player viewing to scroll/use etc.
If I can get past this hurdle then I can get Heroes working with Scroll Map Menus which would be very cool :)
@desht
Thank you very much. This is the second time you have come through for one of my problems. You are awesome keep up the good work. Great plugin. (Mod) :)
@futhermukker
Thanks for the very detailed explanation - this is actually very easy to fix, since the author of Courier has published exactly the info I need :) I can just have SMS check for the map data and ignore any attempts to turn it into a menu if the data matches the specific ID that Courier uses.
Also, to clear the menu you created and make it usable for Courier again, just hold the map in your hand and type '/sms break'. Or just hit a glass block with the map.
I'll see if I can get a fix out for SMS today. Update: fixed in 1.0.4 :)
@desht
Thanks for your quick reply. I will try and explain what the problem is and then I will give you the steps to recreate the problem. here it goes :)
This part is Courier:
When the command "/letter [text]" is used. (where text is the body of the message) The "courier" mod puts a map in your inventory (and in hand) with the [text] you entered in the initial command. So If I were to enter "/letter hello bob" into the console, I would then have a map with "hello bob" written on it.
This part is Scrollingmenusign:
When I create menu entries for the "courier mod" for example:
/sms add mailbox jenkinsjr "/post jenkinsjr" "you sent JenkinsJr a letter"
(jenkinsjr is a user on my server)
("/post jenkinsjr" is a courier command that is supposed to send the letter in your hand or inventory to the person listed in the initial command, in this case jenkinsjr.)
The problem is when holding the letter (actually a game map) and trying to click the sign, instead of executing the command (in this case "/post jenkinsjr") and sending the mail, it turns my map (letter) into a menu. From then on I cannot write letters, the map continues to remain a menu. Even if I clear my inventory and try to start another letter, the letter just comes up as a menu.
To create the problem:
1.install scrollingmenusign
2.install courier
3.create a sign menu:
/sms create mailbox &4Mailbox
4.add entries:
/sms add mailbox Compose "/letter -" "Type /letter [text] where [text] is your message. Use /n for new lines"
/sms add mailbox Redeliver "/courier redeliver" "All unread mail will be redelivered"
/sms add mailbox futhermukker "/post futhermukker" "You sent futhermukker a letter"
(obviously you would need to change futhermukker to another user on your server)
5. Execute the menu item Compose. (by clicking the menu item on the sign)
6. Execute the menu item futhermukker (by clicking the menu item on the sign)
7. **FAIL** (and by fail I mean the letter does not send and it turns into a menu.)
If you want to continue:
8. clear your inventory
9. Execute the menu item Compose. (by clicking the menu item on the sign)
10. **FAIL** (and by fail I mean this time you don't even get a letter to begin with, just a menu.
Well that is it in a nutshell. I hope I wasn't too confusing. If I did not explain it well or you need more information, please let me know.
Thanks for your patience. :)
p.s. I do not know java or programming, but someone told me it has something to do with the map id courier uses or something like that. I thought I would bring that up just in case it helps.
@futhermukker
I'd rather sort things so SMS is compatible with Courier rather than disabling map views entirely. In what way does it conflict, currently? I.e. what steps can I take to reproduce your problem?
Is it possible to turn off map view? Either with a command or in the config? If not would it be possible to add that feature? It conflicts with Courier a in-game mail system that uses maps to send and receive mail. Hope I am not being a pain. :)
@hedgiematty
Absolutely. You can use <NAME> or <N> in commands, and the player's name will be substituted in when it's executed. See Command Parser for a full list of substitutions.
@Sleaker
Hmm, contextual map views (where each player has their own view and scroll position on one map view) should already be working, or at least they were when I added them a couple of months back. I'll do some testing on that.
Update (testing with MC 1.1 & my dev build): well, it half works :/ The scroll position is maintained correctly for each player, but if two players are holding maps of the same ID, when player A scrolls his map, player B's map goes blank until he scrolls his (then player A's map goes blank). Not sure what's changed, but clearly contextual map renderers don't work the way I'm expecting. I'll see what can be done.
Update 2: yeah, I know what the problem is: while I maintain a separate scroll position for each player, I neglected to maintain a separate clean/dirty status for each player. So when one map gets redrawn, it decides that no further rendering is needed for any other player. Oops. Fixed in dev now, there will be a new release fairly soon.
Update 3: should be fixed now in the 1.0.3 release.
I want to potentially have 1 view per player on my server using the map views. Would there be any way to only use 1 mapid and manage which player gets which display rather than forcing SMS to hog all the mapids? I'm having trouble implementing this without needing to do this, and it seems pretty impossible at the moment.
It would be great if i could use this as a gamemode changer but as the command for that is /gamemode <player> <mode>, is it possible to make it so that the player that is using the sign is automatically inputted into the <player> part of the command?
@T4LGoose
Yeah, known issue with Bukkit, and it's harmless (do a search for "Start block missed in BlockIterator" on forums.bukkit.org and you'll see it happens quite a bit). Not quite sure what triggers it, but some combinations of player location and facing do it. I can add a catch to the next SMS release to suppress the exception.
I keep getting this error in my console:
2012-01-08 16:16:45 [SEVERE] Could not pass event PLAYER_ITEM_HELD to ScrollingMenuSign java.lang.IllegalStateException: Start block missed in BlockIterator at org.bukkit.util.BlockIterator.(BlockIterator.java:167) at org.bukkit.util.BlockIterator.(BlockIterator.java:254) at org.bukkit.util.BlockIterator.(BlockIterator.java:289) at org.bukkit.craftbukkit.entity.CraftLivingEntity.getLineOfSight(CraftLivingEntity.java:85) at org.bukkit.craftbukkit.entity.CraftLivingEntity.getTargetBlock(CraftLivingEntity.java:111) at me.desht.scrollingmenusign.listeners.SMSPlayerListener.onItemHeldChange(SMSPlayerListener.java:115) at org.bukkit.plugin.java.JavaPluginLoader$18.execute(JavaPluginLoader.java:384) at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:58) at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:339) at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:690) at net.minecraft.server.Packet16BlockItemSwitch.a(SourceFile:24) at net.minecraft.server.NetworkManager.b(NetworkManager.java:226) at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:93) at org.getspout.spout.SpoutNetServerHandler.a(SpoutNetServerHandler.java:550) at net.minecraft.server.NetworkListenThread.a(SourceFile:108) at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:527) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:425) at net.minecraft.server.ThreadServerApplication.run(SourceFile:457)
@DanishDude93 No, that's obsolete pre 0.6 syntax. You can now do /sms add menu Day "/time day" "It's daytime!" - use double quotes around any part of the command that has a space in it.
Where did you read about that old style command? I might need to update some docs somewhere...
What do i write if i want just one user to have a permission node? You know, theres a command for PEX to add permission nodes to some users and ranks, so i thought it might work. Does it? :o It not, could you make it so it works?
Thanks to this plugin, I am able to create an Intense RPG Server!
@gabizou
The permissions syntax is quite different between the two plugins.
Offhand, I'm not sure what migration tools there are, so I'd recommend checking in the bPermissions thread.