I have some questions that pertain towards plugin design.
I am developing an auto-announcer plugin. It’s a simple idea, a message is broadcasted every X seconds. However, I have some more in-depth features that I want to make available.
Plugin Basics
The vital settings of this plugin are simple: you have an interval of messages, broadcast prefix, broadcast suffix, and the message list (the messages to broadcast).
Frequency/Timing
For example of in-depth, if we have a fixed interval, and there’s 150 people on the server chatting, the message may need to be broadcasted more frequently. Or if chat is just not moving for a while, the messages hog up the chat (for players). I want to (eventually) incorporate Lua into the configurations, so people could make up their own little scripts for determining when a message is broadcasted, and which message is broadcasted. I might just scrap that idea, because it sounds a bit difficult.
External Support For External Apps
I know things (like Votifier, Buycraft/donations stuff) like to broadcast announcements that something happened. I would like to make available to make a simple HTTP request to the Minecraft server to broadcast the message.
User Broadcast Settings
I was also thinking about grouping announcements. Only people with a certain permission node will see certain messages. Maybe have an option to disable announcements if they don’t like advertisements?
Updates
Then, you have updates. The configuration might change, the plugin might change so I added a node for setting the configuration’s version(how do most plugins make update systems, by the way?).
Problem with Complex Features
If you’re looking into skimming through plugin pages and finding the first jar file you can find, upload to the server without thought, you probably want something that is simple, and works. However, having all these settings in the configuration file and commands would make you think “WTF? I’m going to get a simpler plugin that I can figure out.”
In my opinion, Group Manager was a great plugin to a lot of people because PEX was more complicated than Group Manager. What I’m trying to figure out is if I can design something that both someone who wants basic, sounds-like-it-is, out-of-the-box type of plugin, and satisfy those who want complex features to play with(developers, donation pages, web sites, etc,).
My Solution
So, I decided to implement a “simple” and “complex” mode. I am thinking that the simple version will just have the Plugin Basics and updates settings. It would also have the simple/complex setting.
Basically, I am thinking that simple/complex will just be a setting that tells the computer whether or not to show complicated settings/features to the user. When the mode is changed to “complex”, the complex config will be written/parsed.
In simple mode, the plugin will load all the commands that change simple features. To be a little verbose, if the user puts in a command that is considered complex, the plugin will just tell the use who execute the command “this command requires the ‘complex’ plugin mode.” (I’ll have an in-game command for changing simple/complex modes.) In this mode, comments will be targeted to dummies.
In complex mode, all features are loaded. I might even have some features parsed differently. A config for the complex features will be made, and more technical-savvy comments for specificness.
For the updates/version setting, I put it in an ‘advanced’ area of the configuration, as a “you don’t need to mess with these, but you can if you know what you’re doing” type thing.
I am not at all even close to the simple part of the plugin done. I’m just gathering ideas for future versions, and having my plugin ready for updates
Any critique on these ideas? Are they good? Bad? Features that have no use?