ProjectAres/PGM/src/main/java/tc/oc/pgm/spawns/SpawnAttributes.java

76 lines
3.0 KiB
Java

package tc.oc.pgm.spawns;
import java.util.Objects;
import java.util.Optional;
import tc.oc.commons.core.inspect.Inspectable;
import tc.oc.commons.core.util.Optionals;
import tc.oc.commons.core.util.Utils;
import tc.oc.pgm.filters.Filter;
import tc.oc.pgm.filters.matcher.StaticFilter;
import tc.oc.pgm.filters.operator.AllFilter;
import tc.oc.pgm.kits.Kit;
import tc.oc.pgm.points.PointProviderAttributes;
import static com.google.common.base.Preconditions.checkNotNull;
public class SpawnAttributes extends Inspectable.Impl {
public final @Inspect PointProviderAttributes providerAttributes;
public final @Inspect Filter filter;
public final @Inspect Optional<Kit> kit;
public final @Inspect boolean sequential;
public final @Inspect boolean spread;
public final @Inspect boolean exclusive;
public final @Inspect boolean persistent;
public SpawnAttributes(PointProviderAttributes providerAttributes, Filter filter, Optional<Kit> kit, boolean sequential, boolean spread, boolean exclusive, boolean persistent) {
this.filter = checkNotNull(filter);
this.providerAttributes = checkNotNull(providerAttributes);
this.kit = checkNotNull(kit);
this.sequential = sequential;
this.spread = spread;
this.exclusive = exclusive;
this.persistent = persistent;
}
public SpawnAttributes() {
this(new PointProviderAttributes(), StaticFilter.ABSTAIN, Optional.empty(), false, false, false, false);
}
@Override
public int hashCode() {
return Objects.hash(filter, providerAttributes, kit, sequential, spread, exclusive, persistent);
}
@Override
public boolean equals(Object obj) {
return Utils.equals(SpawnAttributes.class, this, obj, that ->
this.filter.equals(that.filter) &&
this.providerAttributes.equals(that.providerAttributes) &&
this.kit.equals(that.kit) &&
this.sequential == that.sequential &&
this.spread == that.spread &&
this.exclusive == that.exclusive &&
this.persistent == that.persistent
);
}
public SpawnAttributes merge(PointProviderAttributes providerAttributes,
Filter filter,
Optional<Kit> kit,
Optional<Boolean> sequential,
Optional<Boolean> spread,
Optional<Boolean> exclusive,
Optional<Boolean> persistent) {
return new SpawnAttributes(providerAttributes,
AllFilter.of(filter, this.filter),
Optionals.first(kit, this.kit),
sequential.orElse(this.sequential),
spread.orElse(this.spread),
exclusive.orElse(this.exclusive),
persistent.orElse(this.persistent));
}
}