49 private final Set<Prayer> active = EnumSet.noneOf(
Prayer.class);
52 private transient Consumer<Prayer> sendActivated;
55 private transient Consumer<Prayer> sendDeactivated;
58 private transient Consumer<Prayer> sendOverhead;
61 private transient Consumer<Prayer> sendNoOverhead;
73 for (
Prayer prayer : prayers)
74 if (!active.contains(prayer))
return false;
78 public boolean hasOverhead() {
87 public void deactivateOverhead() {
88 for (Prayer prayer : Prayer.OVERHEAD) {
102 for (
Prayer prayer : prayers)
103 if (active.contains(prayer))
return true;
114 for (
Prayer prayer : prayers)
115 if (active.contains(prayer))
return false;
126 private void onlyOrNone(
Prayer... prayers) {
138 List<Prayer> list = Arrays.asList(prayers);
139 Set<Prayer> activate =
new HashSet<>(list);
140 Set<Prayer>
deactivate =
new HashSet<>(active);
151 private void activate(
Prayer... prayers) {
152 for (
Prayer prayer : prayers) {
153 if (!active.add(prayer) || sendActivated ==
null)
continue;
154 sendActivated.accept(prayer);
155 if (sendOverhead !=
null && prayer.is(
Prayer.
Type.OVERHEAD)) {
156 sendOverhead.accept(prayer);
168 for (
Prayer prayer : prayers) {
169 if (!active.remove(prayer) || sendDeactivated ==
null)
continue;
170 sendDeactivated.accept(prayer);
171 if (sendNoOverhead !=
null && prayer.is(
Prayer.
Type.OVERHEAD)) {
172 sendNoOverhead.accept(prayer);
186 Set<Prayer> activate =
new HashSet<>();
188 for (
Prayer prayer : prayers) {
190 if (!active.contains(prayer)) {
192 activate.add(prayer);
214 private void mutate(Set<Prayer> activate, Set<Prayer>
deactivate) {
216 activate(activate.toArray(
new Prayer[activate.size()]));
227 if (active.isEmpty())
230 int effect = 0, amount = 0;
231 int resistance = 60 + 2 * bonus;
233 for (
Prayer prayer : active) {
234 effect += prayer.getDrainRate();
247 public void resetProtection() {
262 return !active.isEmpty();
265 public Set<Prayer> getEnabled() {
271 if (active.isEmpty())
return new Prayer[0];
272 return active.toArray(
new Prayer[active.size()]);
287 public void setOnChange(Consumer<Prayer> sendActivated, Consumer<Prayer> sendDeactivated, Consumer<Prayer> sendOverhead, Consumer<Prayer> sendNoOverhead) {
288 this.sendActivated = sendActivated;
289 this.sendDeactivated = sendDeactivated;
290 this.sendOverhead = sendOverhead;
291 this.sendNoOverhead = sendNoOverhead;
295 public String toString() {
296 return "PrayerBook[active=" + active.toString() +
"]";