RuneHive-Game
Loading...
Searching...
No Matches
PlayerPersistFile.java
Go to the documentation of this file.
1package com.runehive.game.world.entity.mob.player.persist;
2
3import com.google.gson.Gson;
4import com.google.gson.JsonElement;
5import com.google.gson.JsonObject;
6import com.google.gson.JsonParser;
7import com.google.gson.reflect.TypeToken;
8import com.runehive.content.ActivityLog;
9import com.runehive.content.achievement.AchievementKey;
10import com.runehive.content.activity.impl.barrows.BrotherData;
11import com.runehive.content.activity.impl.duelarena.DuelRule;
12import com.runehive.content.clanchannel.ClanRepository;
13import com.runehive.content.clanchannel.channel.ClanChannel;
14import com.runehive.content.clanchannel.content.ClanMemberComporator;
15import com.runehive.content.dailyeffect.impl.DailySlayerTaskSkip;
16import com.runehive.content.dailyeffect.impl.DailySlayerTaskTeleport;
17import com.runehive.content.dailyeffect.impl.DailySpellBookSwap;
18import com.runehive.content.emote.EmoteUnlockable;
19import com.runehive.content.overrides.Overrides;
20import com.runehive.content.pet.PetData;
21import com.runehive.content.preset.Preset;
22import com.runehive.content.prestige.PrestigePerk;
23import com.runehive.content.skill.impl.hunter.birdhouse.PlayerBirdHouseData;
24import com.runehive.content.skill.impl.magic.Spellbook;
25import com.runehive.content.skill.impl.slayer.SlayerTask;
26import com.runehive.content.skill.impl.slayer.SlayerUnlockable;
27import com.runehive.content.teleport.Teleport;
28import com.runehive.content.tittle.PlayerTitle;
29import com.runehive.content.tradingpost.ItemHistory;
30import com.runehive.game.world.entity.combat.attack.FightType;
31import com.runehive.game.world.entity.combat.magic.CombatSpell;
32import com.runehive.game.world.entity.combat.weapon.WeaponInterface;
33import com.runehive.game.world.entity.mob.npc.Npc;
34import com.runehive.game.world.entity.mob.player.Player;
35import com.runehive.game.world.entity.mob.player.PlayerRight;
36import com.runehive.game.world.entity.mob.player.appearance.Appearance;
37import com.runehive.game.world.entity.mob.player.relations.PrivacyChatMode;
38import com.runehive.game.world.entity.mob.prayer.Prayer;
39import com.runehive.game.world.entity.mob.prayer.PrayerBook;
40import com.runehive.game.world.entity.skill.Skill;
41import com.runehive.game.world.items.Item;
42import com.runehive.game.world.position.Position;
43import com.runehive.net.codec.login.LoginResponse;
44import com.runehive.util.Utility;
45import de.mkammerer.argon2.Argon2Factory.Argon2Types;
46import org.apache.logging.log4j.LogManager;
47import org.apache.logging.log4j.Logger;
48import org.jire.runehiveps.Argon2;
49
50import java.io.FileReader;
51import java.io.Reader;
52import java.lang.reflect.Type;
53import java.nio.file.Files;
54import java.nio.file.Path;
55import java.nio.file.Paths;
56import java.nio.file.StandardCopyOption;
57import java.util.*;
58
59import static com.runehive.util.GsonUtils.JSON_PRETTY_ALLOW_NULL;
60
61public final class PlayerPersistFile implements PlayerPersistable {
62
63 private static final Logger logger = LogManager.getLogger(PlayerPersistFile.class);
64
65 private static final Path FILE_DIR = Paths.get("data", "profile", "save");
66
67 private static Gson gson() {
68 return JSON_PRETTY_ALLOW_NULL.get();
69 }
70
71 @Override
72 public void save(Player player) {
73 if (player.isBot) {
74 return;
75 }
76
77 try {
78 final Gson gson = gson();
79
80 JsonObject properties = new JsonObject();
81
82 for (PlayerJSONProperty property : PROPERTIES) {
83 properties.add(property.label, gson.toJsonTree(property.write(player)));
84 }
85
86 final Path path = FILE_DIR.resolve(player.getName() + ".json");
87 Path parent = path.getParent();
88 if (parent == null) {
89 throw new UnsupportedOperationException("Path must have a parent " + path);
90 }
91 if (!Files.exists(parent)) {
92 parent = Files.createDirectories(parent);
93 }
94
95 final Path tempFile = Files.createTempFile(parent, path.getFileName().toString(), ".tmp");
96 Files.write(tempFile, gson.toJson(properties).getBytes());
97
98 Files.move(tempFile, path, StandardCopyOption.ATOMIC_MOVE, StandardCopyOption.REPLACE_EXISTING);
99 } catch (Exception ex) {
100 logger.error(String.format("Error while saving player=%s", player.getName()), ex);
101 }
102
103 player.saved.set(true);
104 }
105
106 @Override
107 public LoginResponse load(Player player, String expectedPassword) {
108 try {
109 final Path path = FILE_DIR.resolve(player.getName() + ".json");
110
111 if (!Files.exists(path)) {
112 player.newPlayer = true;
113 player.needsStarter = true;
114 return LoginResponse.NORMAL;
115 }
116
117 final JsonElement jsonElement;
118 try (final Reader reader = new FileReader(path.toFile())) {
119 jsonElement = JsonParser.parseReader(reader);
120 }
121 final JsonObject jsonObject = jsonElement.getAsJsonObject();
122
123 for (PlayerJSONProperty property : PROPERTIES) {
124 final String label = property.label;
125 final JsonElement propertyElement = jsonObject.get(label);
126 if (propertyElement == null || propertyElement.isJsonNull()) continue;
127 property.read(player, propertyElement);
128 }
129
130 final String password = player.getPassword();
131 if (expectedPassword.equals(password)) {
132 return LoginResponse.NORMAL; // fallback to support old unhashed passwords
133 }
134
135 final Argon2Types type = Argon2.argon2Type(password);
136 if (type == null) {
138 }
139
140 final var argon2 = Argon2.forType(type);
141 if (!argon2.verify(password, expectedPassword)) {
143 }
144
145 return LoginResponse.NORMAL;
146 } catch (final Exception ex) {
147 ex.printStackTrace();
148 }
149
151 }
152
153 private static final PlayerJSONProperty[] PROPERTIES = {
154
155 new PlayerJSONProperty("username") {
156 @Override
157 void read(Player player, JsonElement property) {
158 player.setUsername(property.getAsString());
159 }
160
161 @Override
162 Object write(Player player) {
163 return player.getUsername();
164 }
165 },
166
167 new PlayerJSONProperty("password") {
168 @Override
169 void read(Player player, JsonElement property) {
170 player.setPassword(property.getAsString());
171 }
172
173 @Override
174 Object write(Player player) {
175 return player.getPassword();
176 }
177 },
178 new PlayerJSONProperty("weapon-styles") {
179 @Override
180 void read(Player player, JsonElement property) {
181 HashMap<WeaponInterface, FightType> styles = gson().fromJson(property, new TypeToken<HashMap<WeaponInterface, FightType>>() {
182 }.getType());
183 styles.forEach((key, val) -> player.fightStyles.put(key, val));
184 }
185
186 @Override
187 Object write(Player player) {
188 return gson().toJsonTree(player.fightStyles, new TypeToken<HashMap<WeaponInterface, FightType>>() {
189 }.getType());
190 }
191 },
192 new PlayerJSONProperty("player-rights") {
193 @Override
194 void read(Player player, JsonElement property) {
195 player.right = gson().fromJson(property, PlayerRight.class);
196 }
197
198 @Override
199 Object write(Player player) {
200 return player.right;
201 }
202 },
203
204 new PlayerJSONProperty("last-host") {
205 @Override
206 void read(Player player, JsonElement property) {
207 player.lastHost = property.getAsString();
208 }
209
210 @Override
211 Object write(Player player) {
212 return player.lastHost;
213 }
214 },
215
216 new PlayerJSONProperty("host-list") {
217 @Override
218 void read(Player player, JsonElement property) {
219 player.hostList.addAll(gson().fromJson(property, new TypeToken<Set<String>>() {
220 }.getType()));
221 }
222
223 @Override
224 Object write(Player player) {
225 return player.hostList;
226 }
227 },
228
229 new PlayerJSONProperty("position") {
230 @Override
231 void read(Player player, JsonElement property) {
232 final Position position = gson().fromJson(property, Position.class);
233 final int height = position.getHeight() < 0 ? 0 : position.getHeight() % 4;
234 player.setPosition(Position.create(position.getX(), position.getY(), height));
235 }
236
237 @Override
238 Object write(Player player) {
239 return player.getPosition();
240 }
241 },
242
243 new PlayerJSONProperty("created") {
244 @Override
245 void read(Player player, JsonElement property) {
246 player.created = property.getAsString();
247 }
248
249 @Override
250 Object write(Player player) {
251 if (player.created == null)
252 return Utility.getDate();
253 return player.created;
254 }
255 },
256
257 new PlayerJSONProperty("play-time") {
258 @Override
259 void read(Player player, JsonElement property) {
260 player.playTime = property.getAsInt();
261 }
262
263 @Override
264 Object write(Player player) {
265 return player.playTime;
266 }
267 },
268
269 new PlayerJSONProperty("money-spent") {
270 @Override
271 void read(Player player, JsonElement property) {
272 player.donation.setSpent(property.getAsInt());
273 }
274
275 @Override
276 Object write(Player player) {
277 return player.donation.getSpent();
278 }
279 },
280
281 new PlayerJSONProperty("donation-credits") {
282 @Override
283 void read(Player player, JsonElement property) {
284 player.donation.setCredits(property.getAsInt());
285 }
286
287 @Override
288 Object write(Player player) {
289 return player.donation.getCredits();
290 }
291 },
292
293 new PlayerJSONProperty("skilling-points") {
294 @Override
295 void read(Player player, JsonElement property) {
296 player.skillingPoints = property.getAsInt();
297 }
298
299 @Override
300 Object write(Player player) {
301 return player.skillingPoints;
302 }
303 },
304
305 new PlayerJSONProperty("lms-kills") {
306 @Override
307 void read(Player player, JsonElement property) {
308 player.lmsTotalKills = property.getAsInt();
309 }
310
311 @Override
312 Object write(Player player) {
313 return player.lmsTotalKills;
314 }
315 },
316
317 new PlayerJSONProperty("lms-deaths") {
318 @Override
319 void read(Player player, JsonElement property) {
320 player.lmsTotalDeaths = property.getAsInt();
321 }
322
323 @Override
324 Object write(Player player) {
325 return player.lmsTotalDeaths;
326 }
327 },
328
329 new PlayerJSONProperty("lms-points") {
330 @Override
331 void read(Player player, JsonElement property) {
332 player.lmsPoints = property.getAsInt();
333 }
334
335 @Override
336 Object write(Player player) {
337 return player.lmsPoints;
338 }
339 },
340
341 new PlayerJSONProperty("pest-points") {
342 @Override
343 void read(Player player, JsonElement property) {
344 player.pestPoints = property.getAsInt();
345 }
346
347 @Override
348 Object write(Player player) {
349 return player.pestPoints;
350 }
351 },
352
353 new PlayerJSONProperty("mute-start") {
354 @Override
355 void read(Player player, JsonElement property) {
356 player.punishment.muteStart = property.getAsLong();
357 }
358
359 @Override
360 Object write(Player player) {
361 return player.punishment.muteStart;
362 }
363 },
364
365 new PlayerJSONProperty("mute-duration") {
366 @Override
367 void read(Player player, JsonElement property) {
368 player.punishment.muteDuration = property.getAsLong();
369 }
370
371 @Override
372 Object write(Player player) {
373 return player.punishment.muteDuration;
374 }
375 },
376
377 new PlayerJSONProperty("jail-start") {
378 @Override
379 void read(Player player, JsonElement property) {
380 player.punishment.jailStart = property.getAsLong();
381 }
382
383 @Override
384 Object write(Player player) {
385 return player.punishment.jailStart;
386 }
387 },
388
389 new PlayerJSONProperty("jail-duration") {
390 @Override
391 void read(Player player, JsonElement property) {
392 player.punishment.jailDuration = property.getAsLong();
393 }
394
395 @Override
396 Object write(Player player) {
397 return player.punishment.jailDuration;
398 }
399 },
400
401 new PlayerJSONProperty("player-title") {
402 @Override
403 void read(Player player, JsonElement property) {
404 player.playerTitle = gson().fromJson(property, PlayerTitle.class);
405 }
406
407 @Override
408 Object write(Player player) {
409 return player.playerTitle;
410 }
411 },
412
413 new PlayerJSONProperty("clan") {
414 @Override
415 void read(Player player, JsonElement property) {
416 ClanChannel channel = ClanRepository.getChannel(property.getAsString());
417 if (channel != null) {
418 player.clanChannel = channel;
419 }
420 }
421
422 @Override
423 Object write(Player player) {
424 return player.clanChannel == null ? "" : player.clanChannel.getOwner();
425 }
426 },
427
428 new PlayerJSONProperty("last-clan") {
429 @Override
430 void read(Player player, JsonElement property) {
431 player.lastClan = property.getAsString();
432 }
433
434 @Override
435 Object write(Player player) {
436 return player.lastClan;
437 }
438 },
439
440 new PlayerJSONProperty("clan-tag") {
441 @Override
442 void read(Player player, JsonElement property) {
443 player.clanTag = property.getAsString();
444 }
445
446 @Override
447 Object write(Player player) {
448 return player.clanTag;
449 }
450 },
451
452 new PlayerJSONProperty("clan-tag-color") {
453 @Override
454 void read(Player player, JsonElement property) {
455 player.clanTagColor = property.getAsString();
456 }
457
458 @Override
459 Object write(Player player) {
460 return player.clanTagColor;
461 }
462 },
463
464 new PlayerJSONProperty("clan-sort-type") {
465 @Override
466 void read(Player player, JsonElement property) {
467 player.settings.clanMemberComporator = ClanMemberComporator.valueOf(property.getAsString());
468 }
469
470 @Override
471 Object write(Player player) {
472 return player.settings.clanMemberComporator.name();
473 }
474 },
475
476 new PlayerJSONProperty("bank-placeholder") {
477 @Override
478 void read(Player player, JsonElement property) {
479 player.bank.placeHolder = property.getAsBoolean();
480 }
481
482 @Override
483 Object write(Player player) {
484 return player.bank.placeHolder;
485 }
486 },
487
488 new PlayerJSONProperty("bank-pin") {
489 @Override
490 void read(Player player, JsonElement property) {
491 player.bankPin.pin = property.getAsString();
492 }
493
494 @Override
495 Object write(Player player) {
496 return player.bankPin.pin;
497 }
498 },
499
500 new PlayerJSONProperty("bank-vault") {
501 @Override
502 void read(Player player, JsonElement property) {
503 player.bankVault.coinsContainer = property.getAsLong();
504 }
505
506 @Override
507 Object write(Player player) {
508 return player.bankVault.coinsContainer;
509 }
510 },
511
512 new PlayerJSONProperty("bank-vault-blood-money") {
513 @Override
514 void read(Player player, JsonElement property) {
515 player.bankVault.bloodMoneyContainer = property.getAsLong();
516 }
517
518 @Override
519 Object write(Player player) {
520 return player.bankVault.bloodMoneyContainer;
521 }
522 },
523
524 new PlayerJSONProperty("pet") {
525 @Override
526 void read(Player player, JsonElement property) {
527 int pet = property.getAsInt();
528 if (pet != -1) {
529 player.pet = new Npc(pet, player.getPosition());
530 }
531 }
532
533 @Override
534 Object write(Player player) {
535 return player.pet == null ? -1 : player.pet.id;
536 }
537 },
538
539 new PlayerJSONProperty("pet-insurnce") {
540 @Override
541 void read(Player player, JsonElement property) {
542 player.petInsurance = gson().fromJson(property, new TypeToken<HashSet<PetData>>() {
543 }.getType());
544 }
545
546 @Override
547 Object write(Player player) {
548 return player.petInsurance;
549 }
550 },
551
552 new PlayerJSONProperty("lost-pets") {
553 @Override
554 void read(Player player, JsonElement property) {
555 player.lostPets = gson().fromJson(property, new TypeToken<HashSet<PetData>>() {
556 }.getType());
557 }
558
559 @Override
560 Object write(Player player) {
561 return player.lostPets;
562 }
563 },
564
565 new PlayerJSONProperty("new-player") {
566 @Override
567 void read(Player player, JsonElement property) {
568 player.newPlayer = property.getAsBoolean();
569 }
570
571 @Override
572 Object write(Player player) {
573 return player.newPlayer;
574 }
575 },
576
577 new PlayerJSONProperty("needs-starter") {
578 @Override
579 void read(Player player, JsonElement property) {
580 player.needsStarter = property.getAsBoolean();
581 }
582
583 @Override
584 Object write(Player player) {
585 return player.needsStarter;
586 }
587 },
588
589 new PlayerJSONProperty("kills") {
590 @Override
591 void read(Player player, JsonElement property) {
592 player.kill = property.getAsInt();
593 }
594
595 @Override
596 Object write(Player player) {
597 return player.kill;
598 }
599 },
600
601 new PlayerJSONProperty("deaths") {
602 @Override
603 void read(Player player, JsonElement property) {
604 player.death = property.getAsInt();
605 }
606
607 @Override
608 Object write(Player player) {
609 return player.death;
610 }
611 },
612
613 new PlayerJSONProperty("kill-streak") {
614 @Override
615 void read(Player player, JsonElement property) {
616 player.killstreak.streak = property.getAsInt();
617 }
618
619 @Override
620 Object write(Player player) {
621 return player.killstreak.streak;
622 }
623 },
624 new PlayerJSONProperty("answered-trivias") {
625 @Override
626 void read(Player player, JsonElement property) {
627 player.answeredTrivias = property.getAsInt();
628 }
629
630 @Override
631 Object write(Player player) {
632 return player.answeredTrivias;
633 }
634 },
635 new PlayerJSONProperty("small-pouch") {
636 @Override
637 void read(Player player, JsonElement property) {
638 player.smallPouch = property.getAsInt();
639 }
640
641 @Override
642 Object write(Player player) {
643 return player.smallPouch;
644 }
645 },
646
647 new PlayerJSONProperty("medium-pouch") {
648 @Override
649 void read(Player player, JsonElement property) {
650 player.mediumPouch = property.getAsInt();
651 }
652
653 @Override
654 Object write(Player player) {
655 return player.mediumPouch;
656 }
657 },
658
659 new PlayerJSONProperty("large-pouch") {
660 @Override
661 void read(Player player, JsonElement property) {
662 player.largePouch = property.getAsInt();
663 }
664
665 @Override
666 Object write(Player player) {
667 return player.largePouch;
668 }
669 },
670
671 new PlayerJSONProperty("giant-pouch") {
672 @Override
673 void read(Player player, JsonElement property) {
674 player.giantPouch = property.getAsInt();
675 }
676
677 @Override
678 Object write(Player player) {
679 return player.giantPouch;
680 }
681 },
682
683 new PlayerJSONProperty("rune-pouch") {
684 @Override
685 void read(Player player, JsonElement property) {
686 player.runePouch.runes = gson().fromJson(property, new TypeToken<LinkedList<Item>>() {
687 }.getType());
688 }
689
690 @Override
691 Object write(Player player) {
692 return player.runePouch.runes;
693 }
694 },
695
696 new PlayerJSONProperty("rune-pouch-copy") {
697 @Override
698 void read(Player player, JsonElement property) {
699 player.runePouch_copy.runes = gson().fromJson(property, new TypeToken<LinkedList<Item>>() {
700 }.getType());
701 }
702
703 @Override
704 Object write(Player player) {
705 return player.runePouch_copy.runes;
706 }
707 },
708
709 new PlayerJSONProperty("run-toggled") {
710 @Override
711 void read(Player player, JsonElement property) {
712 player.movement.setRunningToggled(property.getAsBoolean());
713 }
714
715 @Override
716 Object write(Player player) {
717 return player.movement.isRunningToggled();
718 }
719 },
720
721 new PlayerJSONProperty("run-energy") {
722 @Override
723 void read(Player player, JsonElement property) {
724 player.runEnergy = property.getAsInt();
725 }
726
727 @Override
728 Object write(Player player) {
729 return player.runEnergy;
730 }
731 },
732
733 new PlayerJSONProperty("energy-rate") {
734 @Override
735 void read(Player player, JsonElement property) {
736 player.energyRate = property.getAsInt();
737 }
738
739 @Override
740 Object write(Player player) {
741 return player.energyRate;
742 }
743 },
744
745 new PlayerJSONProperty("special-amount") {
746 @Override
747 void read(Player player, JsonElement property) {
748 player.getSpecialPercentage().set(property.getAsInt());
749 }
750
751 @Override
752 Object write(Player player) {
753 return player.getSpecialPercentage().get();
754 }
755 },
756
757 new PlayerJSONProperty("recoil-charge") {
758 @Override
759 void read(Player player, JsonElement property) {
760 player.ringOfRecoil = property.getAsInt();
761 }
762
763 @Override
764 Object write(Player player) {
765 return player.ringOfRecoil;
766 }
767 },
768
769 new PlayerJSONProperty("whip-charge") {
770 @Override
771 void read(Player player, JsonElement property) {
772 player.whipCharges = property.getAsInt();
773 }
774
775 @Override
776 Object write(Player player) {
777 return player.whipCharges;
778 }
779 },
780 new PlayerJSONProperty("ags-charge") {
781 @Override
782 void read(Player player, JsonElement property) {
783 player.agsCharges = property.getAsInt();
784 }
785
786 @Override
787 Object write(Player player) {
788 return player.agsCharges;
789 }
790 },
791
792 new PlayerJSONProperty("dragonfire-shield-charge") {
793 @Override
794 void read(Player player, JsonElement property) {
795 player.dragonfireCharges = property.getAsInt();
796 }
797
798 @Override
799 Object write(Player player) {
800 return player.dragonfireCharges;
801 }
802 },
803
804 new PlayerJSONProperty("dragonfire-shield-cooldown") {
805 @Override
806 void read(Player player, JsonElement property) {
807 player.dragonfireUsed = property.getAsLong();
808 }
809
810 @Override
811 Object write(Player player) {
812 return player.dragonfireUsed;
813 }
814 },
815
816 new PlayerJSONProperty("blowpipe-darts") {
817 @Override
818 void read(Player player, JsonElement property) {
819 player.blowpipeDarts = gson().fromJson(property, Item.class);
820 }
821
822 @Override
823 Object write(Player player) {
824 return player.blowpipeDarts;
825 }
826 },
827
828 new PlayerJSONProperty("blowpipe-scales") {
829 @Override
830 void read(Player player, JsonElement property) {
831 player.blowpipeScales = property.getAsFloat();
832 }
833
834 @Override
835 Object write(Player player) {
836 return player.blowpipeScales;
837 }
838 },
839
840 new PlayerJSONProperty("serpentine-helm") {
841 @Override
842 void read(Player player, JsonElement property) {
843 player.serpentineHelmCharges = property.getAsInt();
844 }
845
846 @Override
847 Object write(Player player) {
848 return player.serpentineHelmCharges;
849 }
850 },
851
852 new PlayerJSONProperty("tanzanite-helm") {
853 @Override
854 void read(Player player, JsonElement property) {
855 player.tanzaniteHelmCharges = property.getAsInt();
856 }
857
858 @Override
859 Object write(Player player) {
860 return player.tanzaniteHelmCharges;
861 }
862 },
863
864 new PlayerJSONProperty("magma-helm") {
865 @Override
866 void read(Player player, JsonElement property) {
867 player.magmaHelmCharges = property.getAsInt();
868 }
869
870 @Override
871 Object write(Player player) {
872 return player.magmaHelmCharges;
873 }
874 },
875
876
877 new PlayerJSONProperty("craws-bow-charges") {
878 @Override
879 void read(Player player, JsonElement property) {
880 player.crawsBowCharges = property.getAsInt();
881 }
882
883 @Override
884 Object write(Player player) {
885 return player.crawsBowCharges;
886 }
887 },
888 new PlayerJSONProperty("viggoras-chainmace-charges") {
889 @Override
890 void read(Player player, JsonElement property) {
891 player.viggorasChainmaceCharges = property.getAsInt();
892 }
893
894 @Override
895 Object write(Player player) {
896 return player.viggorasChainmaceCharges;
897 }
898 },
899 new PlayerJSONProperty("thammaron-sceptre-charges") {
900 @Override
901 void read(Player player, JsonElement property) {
902 player.thammoranSceptreCharges = property.getAsInt();
903 }
904
905 @Override
906 Object write(Player player) {
907 return player.thammoranSceptreCharges;
908 }
909 },
910 new PlayerJSONProperty("trident-seas-charges") {
911 @Override
912 void read(Player player, JsonElement property) {
913 player.tridentSeasCharges = property.getAsInt();
914 }
915
916 @Override
917 Object write(Player player) {
918 return player.tridentSeasCharges;
919 }
920 },
921
922 new PlayerJSONProperty("trident-swamp-charges") {
923 @Override
924 void read(Player player, JsonElement property) {
925 player.tridentSwampCharges = property.getAsInt();
926 }
927
928 @Override
929 Object write(Player player) {
930 return player.tridentSwampCharges;
931 }
932 },
933
934 new PlayerJSONProperty("celestial-ring-charges") {
935 @Override
936 void read(Player player, JsonElement property) {
937 player.celestialRingCharges = property.getAsInt();
938 }
939
940 @Override
941 Object write(Player player) {
942 return player.celestialRingCharges;
943 }
944 },
945
946 new PlayerJSONProperty("fight-type") {
947 @Override
948 void read(Player player, JsonElement property) {
949 player.getCombat().setFightType(gson().fromJson(property, FightType.class));
950 }
951
952 @Override
953 Object write(Player player) {
954 return player.getCombat().getFightType();
955 }
956 },
957
958 new PlayerJSONProperty("client-width") {
959 @Override
960 void read(Player player, JsonElement property) {
961 player.settings.clientWidth = property.getAsInt();
962 }
963
964 @Override
965 Object write(Player player) {
966 return player.settings.clientWidth;
967 }
968 },
969
970 new PlayerJSONProperty("client-height") {
971 @Override
972 void read(Player player, JsonElement property) {
973 player.settings.clientHeight = property.getAsInt();
974 }
975
976 @Override
977 Object write(Player player) {
978 return player.settings.clientHeight;
979 }
980 },
981
982 new PlayerJSONProperty("spell-book") {
983 @Override
984 void read(Player player, JsonElement property) {
985 player.spellbook = gson().fromJson(property, Spellbook.class);
986 }
987
988 @Override
989 Object write(Player player) {
990 return player.spellbook;
991 }
992 },
993
994 new PlayerJSONProperty("spell-book-copy") {
995 @Override
996 void read(Player player, JsonElement property) {
997 player.spellbook_copy = gson().fromJson(property, Spellbook.class);
998 }
999
1000 @Override
1001 Object write(Player player) {
1002 return player.spellbook_copy;
1003 }
1004 },
1005
1006 new PlayerJSONProperty("auto-cast") {
1007 @Override
1008 void read(Player player, JsonElement property) {
1009 player.setAutocast(gson().fromJson(property, CombatSpell.class));
1010 }
1011
1012 @Override
1013 Object write(Player player) {
1014 return player.autocast;
1015 }
1016 },
1017
1018 new PlayerJSONProperty("brightness") {
1019 @Override
1020 void read(Player player, JsonElement property) {
1021 player.settings.setBrightness(property.getAsInt());
1022 }
1023
1024 @Override
1025 Object write(Player player) {
1026 return player.settings.brightness;
1027 }
1028 },
1029
1030 new PlayerJSONProperty("zoom") {
1031 @Override
1032 void read(Player player, JsonElement property) {
1033 player.settings.setZoom(property.getAsInt(), true);
1034 }
1035
1036 @Override
1037 Object write(Player player) {
1038 return player.settings.zoom;
1039 }
1040 },
1041
1042 new PlayerJSONProperty("private-chat") {
1043 @Override
1044 void read(Player player, JsonElement property) {
1045 player.settings.privateChat = property.getAsBoolean();
1046 }
1047
1048 @Override
1049 Object write(Player player) {
1050 return player.settings.privateChat;
1051 }
1052 },
1053
1054 new PlayerJSONProperty("chat-effects") {
1055 @Override
1056 void read(Player player, JsonElement property) {
1057 player.settings.chatEffects = property.getAsBoolean();
1058 }
1059
1060 @Override
1061 Object write(Player player) {
1062 return player.settings.chatEffects;
1063 }
1064 },
1065
1066 new PlayerJSONProperty("accept-aid") {
1067 @Override
1068 void read(Player player, JsonElement property) {
1069 player.settings.acceptAid = property.getAsBoolean();
1070 }
1071
1072 @Override
1073 Object write(Player player) {
1074 return player.settings.acceptAid;
1075 }
1076 },
1077
1078 new PlayerJSONProperty("mouse-clicks") {
1079 @Override
1080 void read(Player player, JsonElement property) {
1081 player.settings.mouse = property.getAsBoolean();
1082 }
1083
1084 @Override
1085 Object write(Player player) {
1086 return player.settings.mouse;
1087 }
1088 },
1089
1090 new PlayerJSONProperty("auto-retaliate") {
1091 @Override
1092 void read(Player player, JsonElement property) {
1093 player.settings.autoRetaliate = property.getAsBoolean();
1094 }
1095
1096 @Override
1097 Object write(Player player) {
1098 return player.settings.autoRetaliate;
1099 }
1100 },
1101
1102 new PlayerJSONProperty("profanity-filter") {
1103 @Override
1104 void read(Player player, JsonElement property) {
1105 player.settings.profanityFilter = property.getAsBoolean();
1106 }
1107
1108 @Override
1109 Object write(Player player) {
1110 return player.settings.profanityFilter;
1111 }
1112 },
1113
1114 new PlayerJSONProperty("camera-movement") {
1115 @Override
1116 void read(Player player, JsonElement property) {
1117 player.settings.cameraMovement = property.getAsBoolean();
1118 }
1119
1120 @Override
1121 Object write(Player player) {
1122 return player.settings.cameraMovement;
1123 }
1124 },
1125
1126 new PlayerJSONProperty("experience-lock") {
1127 @Override
1128 void read(Player player, JsonElement property) {
1129 player.settings.lockExperience = property.getAsBoolean();
1130 }
1131
1132 @Override
1133 Object write(Player player) {
1134 return player.settings.lockExperience;
1135 }
1136 },
1137
1138 new PlayerJSONProperty("welcome-screen") {
1139 @Override
1140 void read(Player player, JsonElement property) {
1141 player.settings.welcomeScreen = property.getAsBoolean();
1142 }
1143
1144 @Override
1145 Object write(Player player) {
1146 return player.settings.welcomeScreen;
1147 }
1148 },
1149
1150 new PlayerJSONProperty("screenshot-kill") {
1151 @Override
1152 void read(Player player, JsonElement property) {
1153 player.settings.screenshotKill = property.getAsBoolean();
1154 }
1155
1156 @Override
1157 Object write(Player player) {
1158 return player.settings.screenshotKill;
1159 }
1160 },
1161
1162 new PlayerJSONProperty("trivia-bot") {
1163 @Override
1164 void read(Player player, JsonElement property) {
1165 player.settings.triviaBot = property.getAsBoolean();
1166 }
1167
1168 @Override
1169 Object write(Player player) {
1170 return player.settings.triviaBot;
1171 }
1172 },
1173
1174 new PlayerJSONProperty("drop-notification") {
1175 @Override
1176 void read(Player player, JsonElement property) {
1177 player.settings.dropNotification = property.getAsBoolean();
1178 }
1179
1180 @Override
1181 Object write(Player player) {
1182 return player.settings.dropNotification;
1183 }
1184 },
1185
1186 new PlayerJSONProperty("yell-notification") {
1187 @Override
1188 void read(Player player, JsonElement property) {
1189 player.settings.yell = property.getAsBoolean();
1190 }
1191
1192 @Override
1193 Object write(Player player) {
1194 return player.settings.yell;
1195 }
1196 },
1197
1198 new PlayerJSONProperty("untradeable-notification") {
1199 @Override
1200 void read(Player player, JsonElement property) {
1201 player.settings.untradeableNotification = property.getAsBoolean();
1202 }
1203
1204 @Override
1205 Object write(Player player) {
1206 return player.settings.untradeableNotification;
1207 }
1208 },
1209
1210 new PlayerJSONProperty("esc-close") {
1211 @Override
1212 void read(Player player, JsonElement property) {
1213 player.settings.ESC_CLOSE = property.getAsBoolean();
1214 }
1215
1216 @Override
1217 Object write(Player player) {
1218 return player.settings.ESC_CLOSE;
1219 }
1220 },
1221
1222 new PlayerJSONProperty("gloves-tier") {
1223 @Override
1224 void read(Player player, JsonElement property) {
1225 player.glovesTier = property.getAsInt();
1226 }
1227
1228 @Override
1229 Object write(Player player) {
1230 return player.glovesTier;
1231 }
1232 },
1233
1234 new PlayerJSONProperty("experience-rate") {
1235 @Override
1236 void read(Player player, JsonElement property) {
1237 player.experienceRate = property.getAsDouble();
1238 }
1239
1240 @Override
1241 Object write(Player player) {
1242 return player.experienceRate;
1243 }
1244 },
1245
1246 new PlayerJSONProperty("experience-counter") {
1247 @Override
1248 void read(Player player, JsonElement property) {
1249 player.skills.experienceCounter = property.getAsDouble();
1250 }
1251
1252 @Override
1253 Object write(Player player) {
1254 return player.skills.experienceCounter;
1255 }
1256 },
1257
1258 new PlayerJSONProperty("experience-counter-copy") {
1259 @Override
1260 void read(Player player, JsonElement property) {
1261 player.skills_copy.experienceCounter = property.getAsDouble();
1262 }
1263
1264 @Override
1265 Object write(Player player) {
1266 return player.skills_copy.experienceCounter;
1267 }
1268 },
1269
1270 new PlayerJSONProperty("preset-death-open") {
1271 @Override
1272 void read(Player player, JsonElement property) {
1273 player.presetManager.deathOpen = property.getAsBoolean();
1274 }
1275
1276 @Override
1277 Object write(Player player) {
1278 return player.presetManager.deathOpen;
1279 }
1280 },
1281
1282 new PlayerJSONProperty("preset-death-open") {
1283 @Override
1284 void read(Player player, JsonElement property) {
1285 player.presetManager.deathOpen = property.getAsBoolean();
1286 }
1287
1288 @Override
1289 Object write(Player player) {
1290 return player.presetManager.deathOpen;
1291 }
1292 },
1293
1294 new PlayerJSONProperty("preset-automatic-deposit") {
1295 @Override
1296 void read(Player player, JsonElement property) {
1297 player.presetManager.autoDeposit = property.getAsBoolean();
1298 }
1299
1300 @Override
1301 Object write(Player player) {
1302 return player.presetManager.autoDeposit;
1303 }
1304 },
1305
1306 new PlayerJSONProperty("hidden-brother") {
1307 @Override
1308 void read(Player player, JsonElement property) {
1309 player.hiddenBrother = gson().fromJson(property, BrotherData.class);
1310 }
1311
1312 @Override
1313 Object write(Player player) {
1314 return player.hiddenBrother;
1315 }
1316 },
1317
1318 new PlayerJSONProperty("brothers-kill-count") {
1319 @Override
1320 void read(Player player, JsonElement property) {
1321 player.barrowsKillCount = property.getAsInt();
1322 }
1323
1324 @Override
1325 Object write(Player player) {
1326 return player.barrowsKillCount;
1327 }
1328 },
1329
1330 new PlayerJSONProperty("brothers-dead") {
1331 @Override
1332 void read(Player player, JsonElement property) {
1333 player.barrowKills = gson().fromJson(property, boolean[].class);
1334 }
1335
1336 @Override
1337 Object write(Player player) {
1338 return player.barrowKills;
1339 }
1340 },
1341
1342 new PlayerJSONProperty("vote-points") {
1343 @Override
1344 void read(Player player, JsonElement property) {
1345 player.votePoints = property.getAsInt();
1346 }
1347
1348 @Override
1349 Object write(Player player) {
1350 return player.votePoints;
1351 }
1352 },
1353
1354 new PlayerJSONProperty("total-votes") {
1355 @Override
1356 void read(Player player, JsonElement property) {
1357 player.totalVotes = property.getAsInt();
1358 }
1359
1360 @Override
1361 Object write(Player player) {
1362 return player.totalVotes;
1363 }
1364 },
1365
1366 new PlayerJSONProperty("completed-magearena") {
1367 @Override
1368 void read(Player player, JsonElement property) {
1369 player.completedMageArena = property.getAsBoolean();
1370 }
1371
1372 @Override
1373 Object write(Player player) {
1374 return player.completedMageArena;
1375 }
1376 },
1377
1378 new PlayerJSONProperty("magearena-points") {
1379 @Override
1380 void read(Player player, JsonElement property) {
1381 player.mageArenaPoints = property.getAsInt();
1382 }
1383
1384 @Override
1385 Object write(Player player) {
1386 return player.mageArenaPoints;
1387 }
1388 },
1389
1390 new PlayerJSONProperty("poison-immunity") {
1391 @Override
1392 void read(Player player, JsonElement property) {
1393 player.getPoisonImmunity().set(property.getAsInt());
1394 }
1395
1396 @Override
1397 Object write(Player player) {
1398 return player.getPoisonImmunity().get();
1399 }
1400 },
1401
1402 new PlayerJSONProperty("venom-immunity") {
1403 @Override
1404 void read(Player player, JsonElement property) {
1405 player.getVenomImmunity().set(property.getAsInt());
1406 }
1407
1408 @Override
1409 Object write(Player player) {
1410 return player.getVenomImmunity().get();
1411 }
1412 },
1413
1414 new PlayerJSONProperty("skull-timer") {
1415 @Override
1416 void read(Player player, JsonElement property) {
1417 player.skulling.getSkullRemoveTask().setSkullTime(property.getAsInt());
1418 }
1419
1420 @Override
1421 Object write(Player player) {
1422 return player.skulling.getSkullRemoveTask().getSkullTime();
1423 }
1424 },
1425
1426 new PlayerJSONProperty("teleblock-timer") {
1427 @Override
1428 void read(Player player, JsonElement property) {
1429 player.teleblockTimer.set(property.getAsInt());
1430 }
1431
1432 @Override
1433 Object write(Player player) {
1434 return player.teleblockTimer.get();
1435 }
1436 },
1437
1438 new PlayerJSONProperty("prestige-points") {
1439 @Override
1440 void read(Player player, JsonElement property) {
1441 player.prestige.setPrestigePoint(property.getAsInt());
1442 }
1443
1444 @Override
1445 Object write(Player player) {
1446 return player.prestige.getPrestigePoint();
1447 }
1448 },
1449
1450 new PlayerJSONProperty("prestige-total") {
1451 @Override
1452 void read(Player player, JsonElement property) {
1453 player.prestige.totalPrestige = property.getAsInt();
1454 }
1455
1456 @Override
1457 Object write(Player player) {
1458 return player.prestige.totalPrestige;
1459 }
1460 },
1461
1462 new PlayerJSONProperty("prestige-color") {
1463 @Override
1464 void read(Player player, JsonElement property) {
1465 player.settings.prestigeColors = property.getAsBoolean();
1466 }
1467
1468 @Override
1469 Object write(Player player) {
1470 return player.settings.prestigeColors;
1471 }
1472 },
1473
1474 new PlayerJSONProperty("prestiges") {
1475 @Override
1476 void read(Player player, JsonElement property) {
1477 player.prestige.prestige = gson().fromJson(property, int[].class);
1478 }
1479
1480 @Override
1481 Object write(Player player) {
1482 return player.prestige.prestige;
1483 }
1484 },
1485
1486 new PlayerJSONProperty("active-perks") {
1487 @Override
1488 void read(Player player, JsonElement property) {
1489 player.prestige.activePerks = gson().fromJson(property, new TypeToken<Set<PrestigePerk>>() {
1490 }.getType());
1491 }
1492
1493 @Override
1494 Object write(Player player) {
1495 return player.prestige.activePerks;
1496 }
1497 },
1498
1499 new PlayerJSONProperty("achievements") {
1500 @Override
1501 void read(Player player, JsonElement property) {
1502 HashMap<AchievementKey, Integer> achievements = gson().fromJson(property, new TypeToken<HashMap<AchievementKey, Integer>>() {
1503 }.getType());
1504 achievements.forEach((key, val) -> player.playerAchievements.put(key, val));
1505 }
1506
1507 @Override
1508 Object write(Player player) {
1509 return gson().toJsonTree(player.playerAchievements, new TypeToken<HashMap<AchievementKey, Integer>>() {
1510 }.getType());
1511 }
1512 },
1513
1514 new PlayerJSONProperty("last-killed") {
1515 @Override
1516 void read(Player player, JsonElement property) {
1517 player.lastKilled = gson().fromJson(property, new TypeToken<Deque<String>>() {
1518 }.getType());
1519 }
1520
1521 @Override
1522 Object write(Player player) {
1523 return player.lastKilled;
1524 }
1525 },
1526
1527 new PlayerJSONProperty("favorite-teleport") {
1528 @Override
1529 void read(Player player, JsonElement property) {
1530 player.favoriteTeleport = gson().fromJson(property, new TypeToken<List<Teleport>>() {
1531 }.getType());
1532 }
1533
1534 @Override
1535 Object write(Player player) {
1536 return player.favoriteTeleport;
1537 }
1538 },
1539
1540 new PlayerJSONProperty("unlocked-emotes") {
1541 @Override
1542 void read(Player player, JsonElement property) {
1543 player.emoteUnlockable = gson().fromJson(property, new TypeToken<List<EmoteUnlockable>>() {
1544 }.getType());
1545 }
1546
1547 @Override
1548 Object write(Player player) {
1549 return player.emoteUnlockable;
1550 }
1551 },
1552
1553 new PlayerJSONProperty("public-chat-mode") {
1554 @Override
1555 void read(Player player, JsonElement property) {
1556 player.relations.setPublicChatMode(PrivacyChatMode.valueOf(gson().fromJson(property, String.class).toUpperCase()), false);
1557 }
1558
1559 @Override
1560 Object write(Player player) {
1561 return player.relations.getPublicChatMode().name();
1562 }
1563 },
1564
1565 new PlayerJSONProperty("private-chat-mode") {
1566 @Override
1567 void read(Player player, JsonElement property) {
1568 player.relations.setPrivateChatMode(PrivacyChatMode.valueOf(gson().fromJson(property, String.class).toUpperCase()), true);
1569 }
1570
1571 @Override
1572 Object write(Player player) {
1573 return player.relations.getPrivateChatMode().name();
1574 }
1575 },
1576
1577 new PlayerJSONProperty("clan-chat-mode") {
1578 @Override
1579 void read(Player player, JsonElement property) {
1580 player.relations.setClanChatMode(PrivacyChatMode.valueOf(gson().fromJson(property, String.class).toUpperCase()), false);
1581 }
1582
1583 @Override
1584 Object write(Player player) {
1585 return player.relations.getClanChatMode().name();
1586 }
1587 },
1588
1589 new PlayerJSONProperty("trade-chat-mode") {
1590 @Override
1591 void read(Player player, JsonElement property) {
1592 player.relations.setTradeChatMode(PrivacyChatMode.valueOf(gson().fromJson(property, String.class).toUpperCase()), false);
1593 }
1594
1595 @Override
1596 Object write(Player player) {
1597 return player.relations.getTradeChatMode().name();
1598 }
1599 },
1600
1601 new PlayerJSONProperty("friend-list") {
1602 @Override
1603 void read(Player player, JsonElement property) {
1604 player.relations.getFriendList().addAll(gson().fromJson(property, new TypeToken<List<Long>>() {
1605 }.getType()));
1606 }
1607
1608 @Override
1609 Object write(Player player) {
1610 return player.relations.getFriendList();
1611 }
1612 },
1613
1614 new PlayerJSONProperty("ignore-list") {
1615 @Override
1616 void read(Player player, JsonElement property) {
1617 player.relations.getIgnoreList().addAll(gson().fromJson(property, new TypeToken<List<Long>>() {
1618 }.getType()));
1619 }
1620
1621 @Override
1622 Object write(Player player) {
1623 return player.relations.getIgnoreList();
1624 }
1625 },
1626
1627 new PlayerJSONProperty("appearance") {
1628 @Override
1629 void read(Player player, JsonElement property) {
1630 player.appearance = gson().fromJson(property, Appearance.class);
1631 }
1632
1633 @Override
1634 Object write(Player player) {
1635 return player.appearance;
1636 }
1637 },
1638
1639 new PlayerJSONProperty("preset") {
1640 @Override
1641 void read(Player player, JsonElement property) {
1642 Preset[] loaded = gson().fromJson(property, Preset[].class);
1643 System.arraycopy(loaded, 0, player.presetManager.preset, 0, loaded.length);
1644 }
1645
1646 @Override
1647 Object write(Player player) {
1648 return player.presetManager.preset;
1649 }
1650 },
1651
1652 new PlayerJSONProperty("activity-logger") {
1653 @Override
1654 void read(Player player, JsonElement property) {
1655 player.loggedActivities = gson().fromJson(property, new TypeToken<HashMap<ActivityLog, Integer>>() {
1656 }.getType());
1657 }
1658
1659 @Override
1660 Object write(Player player) {
1661 return gson().toJsonTree(player.loggedActivities, new TypeToken<HashMap<ActivityLog, Integer>>() {
1662 }.getType());
1663 }
1664 },
1665
1666 new PlayerJSONProperty("quick-prayers") {
1667 @Override
1668 void read(Player player, JsonElement property) {
1669 player.quickPrayers = gson().fromJson(property, PrayerBook.class);
1670 }
1671
1672 @Override
1673 Object write(Player player) {
1674 return player.quickPrayers;
1675 }
1676 },
1677
1678 new PlayerJSONProperty("locked-prayers") {
1679 @Override
1680 void read(Player player, JsonElement property) {
1681 player.unlockedPrayers = gson().fromJson(property, new TypeToken<Set<Prayer>>() {
1682 }.getType());
1683 }
1684
1685 @Override
1686 Object write(Player player) {
1687 return player.unlockedPrayers;
1688 }
1689 },
1690
1691 new PlayerJSONProperty("slayer-points") {
1692 @Override
1693 void read(Player player, JsonElement property) {
1694 player.slayer.setPoints(property.getAsInt());
1695 }
1696
1697 @Override
1698 Object write(Player player) {
1699 return player.slayer.getPoints();
1700 }
1701 },
1702
1703 new PlayerJSONProperty("slayer-task") {
1704 @Override
1705 void read(Player player, JsonElement property) {
1706 player.slayer.setTask(gson().fromJson(property, SlayerTask.class));
1707 }
1708
1709 @Override
1710 Object write(Player player) {
1711 return player.slayer.getTask();
1712 }
1713 },
1714
1715 new PlayerJSONProperty("slayer-assigned") {
1716 @Override
1717 void read(Player player, JsonElement property) {
1718 player.slayer.setAssigned(property.getAsInt());
1719 }
1720
1721 @Override
1722 Object write(Player player) {
1723 return player.slayer.getAssigned();
1724 }
1725 },
1726
1727 new PlayerJSONProperty("slayer-amount") {
1728 @Override
1729 void read(Player player, JsonElement property) {
1730 player.slayer.setAmount(property.getAsInt());
1731 }
1732
1733 @Override
1734 Object write(Player player) {
1735 return player.slayer.getAmount();
1736 }
1737 },
1738
1739 new PlayerJSONProperty("slayer-total-assigned") {
1740 @Override
1741 void read(Player player, JsonElement property) {
1742 player.slayer.setTotalAssigned(property.getAsInt());
1743 }
1744
1745 @Override
1746 Object write(Player player) {
1747 return player.slayer.getTotalAssigned();
1748 }
1749 },
1750
1751 new PlayerJSONProperty("slayer-total-completed") {
1752 @Override
1753 void read(Player player, JsonElement property) {
1754 player.slayer.setTotalCompleted(property.getAsInt());
1755 }
1756
1757 @Override
1758 Object write(Player player) {
1759 return player.slayer.getTotalCompleted();
1760 }
1761 },
1762
1763 new PlayerJSONProperty("slayer-total-cancelled") {
1764 @Override
1765 void read(Player player, JsonElement property) {
1766 player.slayer.setTotalCancelled(property.getAsInt());
1767 }
1768
1769 @Override
1770 Object write(Player player) {
1771 return player.slayer.getTotalCancelled();
1772 }
1773 },
1774
1775 new PlayerJSONProperty("slayer-total-points") {
1776 @Override
1777 void read(Player player, JsonElement property) {
1778 player.slayer.setTotalPoints(property.getAsInt());
1779 }
1780
1781 @Override
1782 Object write(Player player) {
1783 return player.slayer.getTotalPoints();
1784 }
1785 },
1786
1787 new PlayerJSONProperty("slayer-blocked") {
1788 @Override
1789 void read(Player player, JsonElement property) {
1790 player.slayer.setBlocked(gson().fromJson(property, new TypeToken<List<SlayerTask>>() {
1791 }.getType()));
1792 }
1793
1794 @Override
1795 Object write(Player player) {
1796 return player.slayer.getBlocked();
1797 }
1798 },
1799
1800 new PlayerJSONProperty("slayer-unlocked") {
1801 @Override
1802 void read(Player player, JsonElement property) {
1803 player.slayer.setUnlocked(gson().fromJson(property, new TypeToken<Set<SlayerUnlockable>>() {
1804 }.getType()));
1805 }
1806
1807 @Override
1808 Object write(Player player) {
1809 return player.slayer.getUnlocked();
1810 }
1811 },
1812 new PlayerJSONProperty("waypoints") {
1813 @Override
1814 void read(Player player, JsonElement property) {
1815 player.waypoints = gson().fromJson(property, new TypeToken<HashMap<String, Position>>() {}.getType());
1816 }
1817
1818 @Override
1819 Object write(Player player) {
1820 return player.waypoints;
1821 }
1822 },
1823 new PlayerJSONProperty("presetOverrides") {
1824 @Override
1825 void read(Player player, JsonElement property) {
1826 player.overrides.presets = gson().fromJson(property, new TypeToken<HashMap<String, Overrides.OverridePreset>>() {}.getType());
1827 }
1828
1829 @Override
1830 Object write(Player player) {
1831 return player.overrides.presets;
1832 }
1833 },
1834 new PlayerJSONProperty("currentOverrides") {
1835 @Override
1836 void read(Player player, JsonElement property) {
1837 player.overrides.currentOverrides = gson().fromJson(property, new TypeToken<HashMap<Integer, Item>>() {}.getType());
1838 }
1839
1840 @Override
1841 Object write(Player player) {
1842 return player.overrides.currentOverrides;
1843 }
1844 },
1845 new PlayerJSONProperty("allOverrides") {
1846 @Override
1847 void read(Player player, JsonElement property) {
1848 player.overrides.allOverrides = gson().fromJson(property, new TypeToken<List<Integer>>() {}.getType());
1849 }
1850
1851 @Override
1852 Object write(Player player) {
1853 return player.overrides.allOverrides;
1854 }
1855 },
1856 new PlayerJSONProperty("skills") {
1857 @Override
1858 void read(Player player, JsonElement property) {
1859 player.skills.setSkills(gson().fromJson(property, Skill[].class));
1860 }
1861
1862 @Override
1863 Object write(Player player) {
1864 return player.skills.getSkills();
1865 }
1866 },
1867
1868 new PlayerJSONProperty("skills-copy") {
1869 @Override
1870 void read(Player player, JsonElement property) {
1871 player.skills_copy.setSkills(gson().fromJson(property, Skill[].class));
1872 }
1873
1874 @Override
1875 Object write(Player player) {
1876 return player.skills_copy.getSkills();
1877 }
1878 },
1879
1880 new PlayerJSONProperty("inventory") {
1881 @Override
1882 void read(Player player, JsonElement property) {
1883 player.inventory.set(gson().fromJson(property, Item[].class));
1884 }
1885
1886 @Override
1887 Object write(Player player) {
1888 return player.inventory.getItems();
1889 }
1890 },
1891
1892 new PlayerJSONProperty("equipment") {
1893 @Override
1894 void read(Player player, JsonElement property) {
1895 player.equipment.set(gson().fromJson(property, Item[].class));
1896 }
1897
1898 @Override
1899 Object write(Player player) {
1900 return player.equipment.getItems();
1901 }
1902 },
1903
1904 new PlayerJSONProperty("inventory-copy") {
1905 @Override
1906 void read(Player player, JsonElement property) {
1907 player.inventory_copy.set(gson().fromJson(property, Item[].class));
1908 }
1909
1910 @Override
1911 Object write(Player player) {
1912 return player.inventory_copy.getItems();
1913 }
1914 },
1915
1916 new PlayerJSONProperty("equipment-copy") {
1917 @Override
1918 void read(Player player, JsonElement property) {
1919 player.equipment_copy.set(gson().fromJson(property, Item[].class));
1920 }
1921
1922 @Override
1923 Object write(Player player) {
1924 return player.equipment_copy.getItems();
1925 }
1926 },
1927
1928 new PlayerJSONProperty("tab-amounts") {
1929 @Override
1930 void read(Player player, JsonElement property) {
1931 player.bank.tabAmounts = gson().fromJson(property, int[].class);
1932 }
1933
1934 @Override
1935 Object write(Player player) {
1936 return player.bank.tabAmounts;
1937 }
1938 },
1939
1940 new PlayerJSONProperty("bank") {
1941 @Override
1942 void read(Player player, JsonElement property) {
1943 player.bank.set(gson().fromJson(property, Item[].class));
1944 }
1945
1946 @Override
1947 Object write(Player player) {
1948 return player.bank.getItems();
1949 }
1950 },
1951
1952 new PlayerJSONProperty("looting-bag") {
1953 @Override
1954 void read(Player player, JsonElement property) {
1955 player.lootingBag.set(gson().fromJson(property, Item[].class));
1956 }
1957
1958 @Override
1959 Object write(Player player) {
1960 return player.lootingBag.getItems();
1961 }
1962 },
1963
1964 new PlayerJSONProperty("lost-items") {
1965 @Override
1966 void read(Player player, JsonElement property) {
1967 player.lostItems = (gson().fromJson(property, new TypeToken<LinkedList<Item>>() {
1968 }.getType()));
1969 }
1970
1971 @Override
1972 Object write(Player player) {
1973 return player.lostItems;
1974 }
1975 },
1976
1977 new PlayerJSONProperty("lost-untradables") {
1978 @Override
1979 void read(Player player, JsonElement property) {
1980 player.lostUntradeables.set(gson().fromJson(property, Item[].class));
1981 }
1982
1983 @Override
1984 Object write(Player player) {
1985 return player.lostUntradeables.getItems();
1986 }
1987 },
1988
1989 new PlayerJSONProperty("duel-rules") {
1990 @Override
1991 void read(Player player, JsonElement property) {
1992 if (property.isJsonNull()) {
1993 return;
1994 }
1995 Type ruleSet = new TypeToken<EnumSet<DuelRule>>() {
1996 }.getType();
1997
1998
1999 player.attributes.put("duel_rules", gson().fromJson(property, ruleSet));
2000 }
2001
2002 @Override
2003 Object write(Player player) {
2004 if (player.attributes.has("duel_rules")) {
2005 return player.attributes.<String, EnumSet<DuelRule>>get("duel_rules");
2006 }
2007 return null;
2008 }
2009 },
2010
2011 new PlayerJSONProperty("farming-patches") {
2012 @Override
2013 void read(Player player, JsonElement property) {
2014 player.farming.fromJson(property.getAsJsonObject());
2015 }
2016
2017 @Override
2018 Object write(Player player) {
2019 return player.farming.toJson();
2020 }
2021 },
2022
2023 new PlayerJSONProperty("daily-spell-book-swap") {
2024 @Override
2025 void read(Player player, JsonElement property) {
2026 player.dailySpellBookSwap = gson().fromJson(property, DailySpellBookSwap.class);
2027 }
2028
2029 @Override
2030 Object write(Player player) {
2031 return player.dailySpellBookSwap;
2032 }
2033 },
2034
2035 new PlayerJSONProperty("daily-slayer-task-skip") {
2036 @Override
2037 void read(Player player, JsonElement property) {
2038 player.dailySlayerTaskSkip = gson().fromJson(property, DailySlayerTaskSkip.class);
2039 }
2040
2041 @Override
2042 Object write(Player player) {
2043 return player.dailySlayerTaskSkip;
2044 }
2045 },
2046
2047 new PlayerJSONProperty("daily-slayer-task-teleport") {
2048 @Override
2049 void read(Player player, JsonElement property) {
2050 player.dailySlayerTaskTeleport = gson().fromJson(property, DailySlayerTaskTeleport.class);
2051 }
2052
2053 @Override
2054 Object write(Player player) {
2055 return player.dailySlayerTaskTeleport;
2056 }
2057 },
2058
2059 new PlayerJSONProperty("gem-bag") {
2060 @Override
2061 void read(Player player, JsonElement property) {
2062 player.gemBag.container.set(gson().fromJson(property, Item[].class));
2063 }
2064
2065 @Override
2066 Object write(Player player) {
2067 return player.gemBag.container.getItems();
2068 }
2069 },
2070
2071 new PlayerJSONProperty("coal-bag") {
2072 @Override
2073 void read(Player player, JsonElement property) {
2074 player.coalBag.container.set(gson().fromJson(property, Item[].class));
2075 }
2076
2077 @Override
2078 Object write(Player player) {
2079 return player.coalBag.container.getItems();
2080 }
2081 },
2082
2083 new PlayerJSONProperty("birdhouse-data") {
2084 @Override
2085 void read(Player player, JsonElement property) {
2086 player.birdHouseData = gson().fromJson(property, new TypeToken<List<PlayerBirdHouseData>>() {}.getType());
2087 }
2088
2089 @Override
2090 Object write(Player player) {
2091 return player.birdHouseData;
2092 }
2093 },
2094
2095 new PlayerJSONProperty("player-trading-post-history") {
2096 @Override
2097 void read(Player player, JsonElement property) {
2098 Type type = new TypeToken<List<ItemHistory>>() {
2099 }.getType();
2100 player.tradingPost.getPlayersItemHistory().addAll(gson().fromJson(property, type));
2101 }
2102
2103 @Override
2104 Object write(Player player) {
2105 return player.tradingPost.getPlayersItemHistory();
2106 }
2107 }
2108
2109 };
2110
2111}
The repository containing all the clans and their corresponding data.
static ClanChannel getChannel(String channel)
Returns the channel.
Represents a non-player character in the in-game world.
Definition Npc.java:29
This class represents a character controlled by a player.
Definition Player.java:125
LoginResponse load(Player player, String expectedPassword)
Represents a trainable and usable skill.
Definition Skill.java:18
The container class that represents an item that can be interacted with.
Definition Item.java:21
Represents a single tile on the game world.
Definition Position.java:14
static Position create(int x, int y, int z)
Creates a location.
Handles miscellaneous methods.
Definition Utility.java:27
static String getDate()
Gets the date of server.
Definition Utility.java:126
The in-game spellbooks for players.
Definition Spellbook.java:8
The enumerated type whose elements represent the fighting types.
Represents the enumerated login response codes.