A bracket handler is used to resolve ZenTokens inside <tokens>.
In order to do that, ZS will add all tokens inside the brackets to a list and go through all registered bracket handlers to find one that does not return null.
The annotated class simply need to implement IBracketHandler.

CraftTweaker Test Project Bracket Handler

@BracketHandler(priority = 34)
public class BracketWiki implements IBracketHandler{
	public IZenSymbol resolve(IEnvironmentGlobal environment, List<Token> tokens) {
		if ((tokens.size() < 3)) return null; 
		if (!tokens.get(0).getValue().equalsIgnoreCase("devBracket")) return null;
		if (!tokens.get(1).getValue().equals(":")) return null;
		return new devSymbol(tokens);
	private class devSymbol implements IZenSymbol {

		private final String value;
		public devSymbol(List<Token> tokens) {
			StringBuilder sB = new StringBuilder();
			this.value = sB.toString().replaceAll(":", " ");

		public IPartialExpression instance(ZenPosition position) {
			return new ExpressionString(position, "DevSymbol: ".concat(value));

What classes can be annotated || Additional Info

Link to what-classes-can-be-annotated--additional-info

  • You can annotate all Java Classes that are an instance of IBracketHandler.
  • You can give the annotation a priority value (e.g. priority = 100). The higher the prio the earlier that specific bracket handler is checked: CrT Bracket Handlers normally have a priority of 100.
  • After declaring a class a ZenBracketHandler, you still need to register it. It is recommended that you use @ZenRegister for that.
  • If your bracket Handler cannot resolve the brackets or is not meant to resolve the bracket, you should return null