package org.mafagafogigante.dungeon.entity.items;
import org.mafagafogigante.dungeon.game.Id;
import org.jetbrains.annotations.NotNull;
import java.io.Serializable;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
/**
* A set of uniqueness restrictions regarding the items produced by a factory.
*/
class UniquenessRestrictions implements ItemFactoryRestrictions, Serializable {
private final Set<Id> uniqueIds;
private final Set<Id> alreadyCreatedUniqueIds = new HashSet<>();
public UniquenessRestrictions(Collection<Id> uniqueIds) {
this.uniqueIds = new HashSet<>(uniqueIds);
}
@Override
public boolean canMakeItem(@NotNull Id id) {
return !alreadyCreatedUniqueIds.contains(id);
}
@Override
public void registerItem(@NotNull Id id) {
if (uniqueIds.contains(id)) {
if (alreadyCreatedUniqueIds.contains(id)) {
throw new IllegalStateException("Created a unique item again");
}
alreadyCreatedUniqueIds.add(id);
}
}
}