Need help? Ask on the forum, ask a fellow user or developer (join us on IRC), or contact sk89q.
Contribute to the wiki, edit this page! Register an account, or login with Facebook first.
HEY! Do you integrate (or want to) a plugin into yours? Do you help work on WE/WG/etc.? Please subscribe to our mailing list!
- Player's pitch and yaw (the way they're facing) is preserved when using set_ploc
- Fixed a bug when dealing with offline players in pinfo (as well as a few other functions)
- substr() now works properly if the last argument is left off
- When using an ivar as the second parameter in assign(), it works properly now.
- Added interpreter mode!
- Added user defined procedures
- read() and include() are subject to the base-dir restriction now
- # comments work even if they aren't the first character on the line. C style block comments are also available. /* */
- Commands can be run from the console. If the command doesn't make sense to run without a player, the command should fail gracefully.
- Added include and procedures. See this page for more details.
- Potion Effects can now be accessed with set_peffect. See the guide on the minecraft wiki for ID numbers and other information
- Added case-sensitive option to make it possible to toggle command matching being case sensitive or not
- Arrays are much more flexible now
- The \u escape sequence is implemented in the lexer. This allows insertion of arbitrary unicode characters into scripts.
- The WG/WE series of functions are implemented now
- Added functions: sqrt, include, proc, return, pinv, set_pinv, min, max, is_proc, call_proc, pexp/set_pexp (experimental), ptexp/set_ptexp (experimental), plevel/set_plevel (experimental), pmode/set_pmode, set_peffect (requires CraftBukkit), array_resize, range, Economy Functions, call_alias, item_drop, set_phealth, equals_ic, sk_all_regions, sk_pos1, sk_pos2, sk_region_info, sk_region_overlaps
- Added exception handling, and fixed more bugs with command matching and
optional variables. Also added more advanced permission syntax for commands.
- Added functions: set_display_name, reset_display_name, try, array_index_exists,
is_array, is_boolean, is_double, is_integer, is_null, is_string, substr, to_lower, to_upper, length, throw
- msg() and all other applicable Echoes functions now handle newlines and linebreaks properly. Besides being able to use a \n character to mean a newline character, word wrapping now occurs at word boundaries instead of arbitrarily. Thanks to Reil for the code to do that! Also, if a file is read in with read(), and it has newlines in it, newline characters are passed through to the other functions properly.
- Permissions handling just got easier. In addition to being able to label a command, and giving that group/user permission to commandhelper.alias.label, you can give groups permissions to certain commands by doing:
~admin:/adminOnlyCommand = msg('This is an admin only command')
In addition, you can give multiple groups permission, in one go, like this:
~admin/mods:/adminOrModCommand = msg('This is an admin or mods command')
Further, you can revoke permissions by putting a dash in front, like so:
~-default:/normallyAbleToUseCommand = ...
Note that permissions take priority from left to right. So, say that a user is in the 'mods' and 'builder' groups. If the setup were in this order: ~mods/-builder, then the user would have permission, but if it were ~-builder/mods, they would not. If the user is not in one of the listed groups, that group name is ignored.
- Checking that you are passing the correct number of arguments to a function is now done at compile time. This will potentially help reduce the numbers of errors in a script.
- Fixed a bug where no argument functions in the root of the command would give a compile error.
- Added several new functions, including eval, set_ploc, time, nano_time, break, continue, get_worlds, pworld, pinfo, and kick. Also, reorganized the source code, and made it so that if one command would cause a compiler error, the entire script won't be affected, but just the one command. Also, concatenation automatically happens now, the g() function is no longer necessary. Debug mode now outputs what real command is being run, if debug mode is on. It is now possible to define the location of your config file, in the preferences.txt file. See the upgrade notices for information about upgrading your scripts from 3.0.2 to 3.1.0.
- Compiler re-organized and modified. The g() function is no longer necessary, but is still defined, so scripts will remain backwards compatible. Also, scripts with compiler errors will most likely only break the individual command that has the error, the entire script will no longer fail. Of course if the compiler can't determine where the end of the command is (for instance a missing multiline end symbol) more of the script will fail. The sconcat() function is no longer necessary. Let's look at the following code:
/cmd = if(boolean, /run this command, /else run this command)
In previous versions, you had to group the "if" and "else" portions seperately, in this case, you would likely have used sconcat() though g() would have worked. Now, the commas separate the arguments, with tokens between commas automatically being sconcatenated together.
- The compiler for the scripting language has been broken out of the CommandHelper core. The language itself is now called MScript, and CommandHelper simply hooks into MScript to generate commands to run. This allows me to more easily add other events in the future. Also, in future versions, I will make it so that other plugin authors can hook into MScript to allow their plugins to run MScripts, so that plugin authors can give users more control over the plugin, when applicable. Let's look at the structure of an alias again:
/alias command name and $variables = MScript \ MScript \ MScript
The portions of an alias that are actually part of the MScript language are shown. All other parts are simply identifiers for CommandHelper specifically. While there is still a great deal of integration with the alias engine, the MScript portions can now be used standalone in future applications.
- eval() functions are now available. As implied, eval() allows arbitrary MScript to be executed.
- Debug mode now outputs what real command is being run, if debug mode is set to true
- You can now define the name/location of your config file. In the preferences.txt file, the script-name property defines this value.
- Added new functions to allow scripts to interact with the environment around the player.
- Added several new functions, including a foreach loop, and the g function. See the upgrade notices for information about upgrading your scripts from 3.0.0 to 3.0.1.
- Completly reworked the engine. Essentially a new plugin.
- Updated to work again.
- Updated for Bukkit.