RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
PrayerBook.java
1package com.osroyale.game.world.entity.mob.prayer;
2
3import java.util.*;
4import java.util.function.Consumer;
5
45
46public class PrayerBook {
47
49 private final Set<Prayer> active = EnumSet.noneOf(Prayer.class);
50
52 private transient Consumer<Prayer> sendActivated;
53
55 private transient Consumer<Prayer> sendDeactivated;
56
58 private transient Consumer<Prayer> sendOverhead;
59
61 private transient Consumer<Prayer> sendNoOverhead;
62
64 public transient int drainCounter;
65
72 public boolean isActive(Prayer... prayers) {
73 for (Prayer prayer : prayers)
74 if (!active.contains(prayer)) return false;
75 return true;
76 }
77
78 public boolean hasOverhead() {
79 for (Prayer prayer : Prayer.OVERHEAD) {
80 if (isActive(prayer)) {
81 return true;
82 }
83 }
84 return false;
85 }
86
87 public void deactivateOverhead() {
88 for (Prayer prayer : Prayer.OVERHEAD) {
89 if (isActive(prayer)) {
90 deactivate(prayer);
91 }
92 }
93 }
94
101 public boolean anyActive(Prayer... prayers) {
102 for (Prayer prayer : prayers)
103 if (active.contains(prayer)) return true;
104 return false;
105 }
106
113 public boolean noneActive(Prayer... prayers) {
114 for (Prayer prayer : prayers)
115 if (active.contains(prayer)) return false;
116 return true;
117 }
118
126 private void onlyOrNone(Prayer... prayers) {
127 if (isActive(prayers)) reset();
128 else only(prayers);
129 }
130
137 public void only(Prayer... prayers) {
138 List<Prayer> list = Arrays.asList(prayers);
139 Set<Prayer> activate = new HashSet<>(list);
140 Set<Prayer> deactivate = new HashSet<>(active);
141 deactivate.removeAll(activate);
142 mutate(activate, deactivate);
143 }
144
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);
157 }
158 }
159 }
160
167 public void deactivate(Prayer... prayers) {
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);
173 }
174 }
175 }
176
185 public void toggle(Prayer... prayers) {
186 Set<Prayer> activate = new HashSet<>();
187 Set<Prayer> deactivate = new HashSet<>();
188 for (Prayer prayer : prayers) {
189 if (deactivate.contains(prayer)) continue;
190 if (!active.contains(prayer)) {
191 deactivate.addAll(prayer.toDeactivate());
192 activate.add(prayer);
193 } else deactivate.add(prayer);
194 }
195 deactivate.removeAll(activate);
196 mutate(activate, deactivate);
197 }
198
204 public void setAs(PrayerBook book) {
205 onlyOrNone(book.toArray());
206 }
207
214 private void mutate(Set<Prayer> activate, Set<Prayer> deactivate) {
215 deactivate(deactivate.toArray(new Prayer[deactivate.size()]));
216 activate(activate.toArray(new Prayer[activate.size()]));
217 }
218
226 public int drainAmount(int bonus) {
227 if (active.isEmpty())
228 return 0;
229
230 int effect = 0, amount = 0;
231 int resistance = 60 + 2 * bonus;
232
233 for (Prayer prayer : active) {
234 effect += prayer.getDrainRate();
235 }
236
237 drainCounter += effect;
238
239 if (drainCounter > resistance) {
240 amount = drainCounter / resistance;
241 drainCounter -= amount * resistance;
242 }
243
244 return amount;
245 }
246
247 public void resetProtection() {
248 if (isActive(Prayer.PROTECT_FROM_MAGIC))
249 deactivate(Prayer.PROTECT_FROM_MAGIC);
250 if (isActive(Prayer.PROTECT_FROM_MELEE))
251 deactivate(Prayer.PROTECT_FROM_MELEE);
252 if (isActive(Prayer.PROTECT_FROM_RANGE))
253 deactivate(Prayer.PROTECT_FROM_RANGE);
254 }
255
257 public void reset() {
258 deactivate(active.toArray(new Prayer[active.size()]));
259 }
260
261 public boolean isActive() {
262 return !active.isEmpty();
263 }
264
265 public Set<Prayer> getEnabled() {
266 return active;
267 }
268
270 public Prayer[] toArray() {
271 if (active.isEmpty()) return new Prayer[0];
272 return active.toArray(new Prayer[active.size()]);
273 }
274
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;
292 }
293
294 @Override
295 public String toString() {
296 return "PrayerBook[active=" + active.toString() + "]";
297 }
298
299}
void setOnChange(Consumer< Prayer > sendActivated, Consumer< Prayer > sendDeactivated, Consumer< Prayer > sendOverhead, Consumer< Prayer > sendNoOverhead)