package jalse.entities; import java.util.Objects; import java.util.function.Supplier; import jalse.attributes.AttributeListener; import jalse.attributes.NamedAttributeType; class RecursiveAttributeListener<T> implements EntityListener { private final Supplier<AttributeListener<T>> supplier; private final NamedAttributeType<T> namedType; private final int depth; RecursiveAttributeListener(final NamedAttributeType<T> namedType, final Supplier<AttributeListener<T>> supplier, final int depth) { this.namedType = Objects.requireNonNull(namedType); this.supplier = Objects.requireNonNull(supplier); this.depth = depth; } @Override public void entityCreated(final EntityEvent event) { if (depth > 0) { final Entity e = event.getEntity(); e.addAttributeListener(namedType, supplier.get()); e.addEntityListener(new RecursiveAttributeListener<>(namedType, supplier, depth - 1)); } } }