76 lines
3.0 KiB
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));
|
|
}
|
|
}
|