ZenMembers and ZenProperties

ZenMembers are a ZenObject’s members.
They can be accesses using object.member. Members can be settable, gettable or both.

Getters and Setters

There are two Types of ZenGetters: ZenGetters and ZenMemberGetters.
So what’s the difference?

Normally you use @ZenGetter(value), unless you have something which has either many members that return the same type or if you don’t know the exact members yourself.
In that case you can use @ZenMemberGetter.
So what’s the difference?

The same applies for ZenSetters/ZenMemberSetters.


The @ZenProperty combines both, @ZenGetter(value) and @ZenSetter in one annotation.
This annotation can only be applied to public fields (e.g. public String name).

This Annotation can have these arguments:

The important thing with ZenProperties is, that you still need to declare setter/getter Methods, you just don’t have to give them @ZenProperty


ZenGetters Example

Crafttweaker’s IOreDict

public interface IOreDict extends Iterable<IOreDictEntry> {

    IOreDictEntry get(String name);

    List<IOreDictEntry> getEntries();

    boolean contains(String name);

ZenProperties Example

ContentTweaker’s MCAxisAlignedBB

public class MCAxisAlignedBB implements ICTObject<AxisAlignedBB> {
    public double minX = 0.0;


    public double getMinX() {
        return minX;

    public void setMinX(double minX) {
        this.minX = minX;