package NET.worlds.scape; import NET.worlds.console.Main; import NET.worlds.console.MainCallback; public class CallbackPropertyOperator implements MainCallback { private Property prop; private int func; private Object value; private boolean done; CallbackPropertyOperator(Property prop, int func, Object value) { this.prop = prop; this.func = func; this.value = value; assert !Main.isMainThread(); Main.register(this); } synchronized Object getValue() { while (!this.done) { try { this.wait(); } catch (InterruptedException var2) { } } return this.value; } @Override public synchronized void mainCallback() { this.modify(); Main.unregister(this); this.notify(); } private void modify() { this.value = this.prop.safeOperate(this.func, this.value); this.done = true; } }