63 lines
1.7 KiB
Java
63 lines
1.7 KiB
Java
package com.github.dtschust.zork.objects;
|
|
|
|
import com.github.dtschust.zork.ZorkTrigger;
|
|
import com.github.dtschust.zork.types.HasSetOfCollectable;
|
|
|
|
import java.util.*;
|
|
|
|
import static com.github.dtschust.zork.objects.ZorkObjectTypes.ITEM;
|
|
|
|
/* Container*/
|
|
public class ZorkContainer extends ZorkObject implements HasSetOfCollectable {
|
|
private final Set<String> items;
|
|
private boolean open;
|
|
|
|
public ZorkContainer(final String name,
|
|
final String description,
|
|
final String status,
|
|
final Collection<String> items,
|
|
final Collection<String> accepts,
|
|
final Collection<ZorkTrigger> triggers) {
|
|
super(name, description, status, triggers);
|
|
// If a container has an accepts attribute, then it is always open
|
|
this.open = !accepts.isEmpty();
|
|
this.items = new HashSet<>(items);
|
|
}
|
|
|
|
public String getContents() {
|
|
if (this.items.isEmpty()) {
|
|
return getName() + " is empty";
|
|
} else {
|
|
return getName() + " contains " + String.join(", ", items) + ".";
|
|
}
|
|
}
|
|
|
|
public void addItem(final String item) {
|
|
this.items.add(item);
|
|
}
|
|
|
|
public void removeItem(final String item) {
|
|
this.items.remove(item);
|
|
}
|
|
|
|
public boolean containsItem(final String item) {
|
|
return this.items.contains(item);
|
|
}
|
|
|
|
public boolean isOpen() {
|
|
return open;
|
|
}
|
|
|
|
public void open() {
|
|
open = true;
|
|
}
|
|
|
|
@Override
|
|
public Set<String> getSetFromType(ZorkObjectTypes type) {
|
|
if (type.equals(ITEM))
|
|
return items;
|
|
throw new IllegalStateException("Unexpected value: " + type);
|
|
}
|
|
|
|
}
|