@@ -0,0 +1,1452 @@
+package skadistats.clarity.examples.propertychange;%0A%0Aimport org.slf4j.Logger;%0Aimport org.slf4j.LoggerFactory;%0Aimport skadistats.clarity.model.Entity;%0Aimport skadistats.clarity.model.FieldPath;%0Aimport skadistats.clarity.processor.entities.OnEntityPropertyChanged;%0Aimport skadistats.clarity.processor.entities.UsesEntities;%0Aimport skadistats.clarity.processor.runner.Context;%0Aimport skadistats.clarity.processor.runner.SimpleRunner;%0Aimport skadistats.clarity.source.MappedFileSource;%0A%0A@UsesEntities%0Apublic class Main %7B%0A%0A    private final Logger log = LoggerFactory.getLogger(Main.class.getPackage().getClass());%0A%0A    @OnEntityPropertyChanged(classPattern = %22CDOTA_Unit_Hero_.*%22, propertyPattern = %22m_lifeState%22)%0A    public void onEntityPropertyChanged(Context ctx, Entity e, FieldPath fp) %7B%0A        System.out.format(%0A                %22%256d %25s: %25s = %25s%5Cn%22,%0A                ctx.getTick(),%0A                e.getDtClass().getDtName(),%0A                e.getDtClass().getNameForFieldPath(fp),%0A                e.getPropertyForFieldPath(fp)%0A        );%0A    %7D%0A%0A    public void run(String%5B%5D args) throws Exception %7B%0A        long tStart = System.currentTimeMillis();%0A        new SimpleRunner(new MappedFileSource(args%5B0%5D)).runWith(this);%0A        long tMatch = System.currentTimeMillis() - tStart;%0A        log.info(%22total time taken: %7B%7Ds%22, (tMatch) / 1000.0);%0A    %7D%0A%0A    public static void main(String%5B%5D args) throws Exception %7B%0A        new Main().run(args);%0A    %7D%0A%0A%7D%0A

add new @OnEntityPropertyChanged event, plus an example that shows how to use this