Home Getting Started With Scripts Using this wiki Commands CTGUI Global functions Bracket Handlers
About Boson Names in Boson The ZenScriptX Project

The Concept

Reflection is an English word that has many meanings, but one in particular is “the production of an image by or as if by a mirror” (Source: Merriam-Webster Dictionary). The same concept applies to programming.

Reflection is, in fact, a tool that allows a program to see itself in the mirror and perform some introspection, like analyzing what type an object is, which methods the program exposes, invoking private variables etc. This is obviously a very powerful tool, but at the same time it is also extremely dangerous since reflection provides access to almost anything that is currently running inside a program.

The ZenScriptX project aims to bring a small subset of the possibilities of Reflection to ZenScript, without allowing script users to circumvent the ZenScript sandbox. In particular, the ZenScriptX toned-down implementation of reflection allows the user to do the following:

  • inspect the type of any object, be it a variable or a bracket handler;
  • obtain the simple and fully qualified name of a class in the ZenScript sandbox;
  • obtain the simple and fully qualified name of a class outside the ZenScript sandbox;
  • convert between a ZenScript class and its native counterpart (i.e. crafttweaker.item.IItemStack becomes crafttweaker.api.item.IItemStack).

And this is it: there is no way for a script user to list all the methods provided by a class or circumvent the restricitions imposed by ZenScript with this reflection. It is, in fact, more a useful developer tool to ensure that types exposed by a CraftTweaker integration get converted correctly between the script and the actual backend.

To get started, please look at the documentation for either NativeClass or Class.