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