2020import clientapi .util .interfaces .impl .MergedMutable ;
2121import clientapi .util .interfaces .impl .MutableField ;
2222import clientapi .value .holder .ValueAccessor ;
23+ import me .zero .alpine .type .EventState ;
2324
2425import java .lang .reflect .Field ;
2526import java .util .ArrayList ;
@@ -50,7 +51,7 @@ public class Value<T> implements IValue<T> {
5051 /**
5152 * A list of all of the {@code ValueChangeListeners} waiting for this value to change
5253 */
53- private final List <ValueChangeListener <T >> valueChangeListeners = new ArrayList <>();
54+ private final Map < EventState , List <ValueChangeListener <T >>> valueChangeListeners = new HashMap <>();
5455
5556 /**
5657 * Name of the Value
@@ -107,6 +108,11 @@ public Value(String name, String parent, String id, String description, Object o
107108 } else {
108109 this .mutable = new MutableField <>(object , field );
109110 }
111+
112+ // Listeners
113+ for (EventState state : EventState .values ()) {
114+ valueChangeListeners .put (state , new ArrayList <>());
115+ }
110116 }
111117
112118 @ Override
@@ -122,15 +128,23 @@ public T getValue() {
122128
123129 @ Override
124130 public void setValue (T value ) {
125- // Notify all of the change listeners of the new change of state
126- this .valueChangeListeners .forEach (listener -> listener .onValueChanged (this , this .getValue (), value ));
131+ T oldValue = this .getValue ();
132+ // Notify all PRE change listeners
133+ this .valueChangeListeners .get (EventState .PRE ).forEach (listener -> listener .onValueChanged (this , oldValue , value ));
127134 // Pass the new value to the change function
128135 this .mutable .accept (value );
136+ // Nofify all POST change listeners
137+ this .valueChangeListeners .get (EventState .POST ).forEach (listener -> listener .onValueChanged (this , oldValue , value ));
129138 }
130139
131140 @ Override
132141 public void addChangeListener (ValueChangeListener <T > listener ) {
133- this .valueChangeListeners .add (listener );
142+ this .addChangeListener (EventState .PRE , listener );
143+ }
144+
145+ @ Override
146+ public void addChangeListener (EventState state , ValueChangeListener <T > listener ) {
147+ this .valueChangeListeners .get (state ).add (listener );
134148 }
135149
136150 @ Override
0 commit comments