RuneHive-Game
Loading...
Searching...
No Matches
ClanChannel.java
Go to the documentation of this file.
1package com.runehive.content.clanchannel.channel;
2
3import com.google.gson.*;
4import com.runehive.Config;
5import com.runehive.content.Yell;
6import com.runehive.content.clanchannel.ClanMember;
7import com.runehive.content.clanchannel.ClanRank;
8import com.runehive.content.clanchannel.ClanRepository;
9import com.runehive.content.clanchannel.ClanType;
10import com.runehive.content.clanchannel.content.*;
11import com.runehive.game.world.entity.mob.Mob;
12import com.runehive.game.world.entity.mob.UpdateFlag;
13import com.runehive.game.world.entity.mob.player.Player;
14import com.runehive.game.world.items.Item;
15import com.runehive.game.world.items.containers.pricechecker.PriceType;
16import com.runehive.game.world.region.RegionManager;
17import com.runehive.net.packet.out.SendMessage;
18import com.runehive.net.packet.out.SendScrollbar;
19import com.runehive.net.packet.out.SendString;
20import com.runehive.net.packet.out.SendTooltip;
21import com.runehive.util.Difficulty;
22import com.runehive.util.Utility;
23import com.runehive.util.parser.GsonParser;
24
25import java.util.*;
26import java.util.function.Consumer;
27
28/**
29 * Handles the clan chat channel.
30 *
31 * @author Daniel
32 * @author Michael
33 */
34public class ClanChannel implements Comparable<ClanChannel> {
35
36 private static final Gson GSON = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting().create();
37
38 /** The clan channel details. */
39 private ClanDetails details = new ClanDetails(this);
40
41 /** The clan channel management tab panel. */
43
44 /** The clan channel showcase items. */
45 private ClanShowcase showcase = new ClanShowcase(this);
46
47 /** The clan channel handler. */
49
50 /** The clan channel member set. */
51 private final Set<ClanMember> members = new HashSet<>();
52
53 /** A list of banned members. */
54 final List<String> bannedMembers = new ArrayList<>();
55
56 /** The total active logged in members. */
57 private int active;
58
59 private ClanChannel() {
60 }
61
62 public static ClanChannel create(Player player) {
63 if (ClanRepository.getChannel(player.getName()) != null) {
64 player.send(new SendMessage("There is already a clan channel under your name!"));
65 return null;
66 }
67 int[] showcase = new int[]{1155, 1117, 1075};
69 channel.management.name = player.getName();
70 channel.details.owner = player.getName();
71 channel.management.slogan = "Generic slogan here";
72 channel.details.established = Utility.getSimpleDate();
73 channel.details.type = ClanType.SOCIAL;
74 channel.details.level = ClanLevel.BRONZE;
75 channel.showcase.showcase = showcase;
76 Arrays.stream(showcase).forEach(i -> channel.showcase.showcaseItems.add(i));
77 channel.connect(player);
80 return channel;
81 }
82
83 /** Handles a player connecting to the clan channel. */
84 void connect(Player player) {
85 ClanMember member = new ClanMember(player);
86
87 if (!player.lastClan.isEmpty()) {
88 if (player.lastClan.equals(details.owner)) {
89 player.lastClan = "";
90 } else if (!members.contains(member)) {
91 handler.sendConnectionWarning(player, member);
92 return;
93 }
94 }
95
96 add(player, member);
97 }
98
99 void add(Player player, ClanMember member) {
100 if (member.name.equalsIgnoreCase(details.owner)) {
101 member.rank = ClanRank.LEADER;
102 }
103
104 if (!handler.attemptConnection(player, member)) {
105 return;
106 }
107
108 if (handler.testPassword(player, member)) {
109 return;
110 }
111
112 int count = getMembers().size();
113
114 establish(player, member);
115
116 if (getMembers().size() > count) {
120 }
121 }
122
123 void establish(Player player, ClanMember member) {
124 player.clanChannel = this;
125 player.clanTag = getTag();
126 player.clanTagColor = details.level.getColor();
128
129 if (player.lastClan.equals(details.owner)) {
130 player.lastClan = "";
131 }
132
133 active++;
134 member = getMember(member.name).orElse(member);
135 member.player = Optional.of(player);
136 if (addMember(member)) {
137 member.joined = Utility.getSimpleDate();
138 }
139 handler.connected(member);
141 }
142
143 private boolean addMember(ClanMember member) {
144 return members.add(member);
145 }
146
147 /** Handles disconnecting a player from the clan channel. */
148 void disconnect(String name, boolean logout) {
149 Iterator<ClanMember> iterator = members.iterator();
150 while (iterator.hasNext()) {
151 ClanMember member = iterator.next();
152 if (member.name.equals(name)) {
153 if (member.rank == ClanRank.SYSTEM || (member.rank == ClanRank.MEMBER && !member.hasContributed())) {
154 iterator.remove();
155 }
156 member.player.ifPresent(player -> {
157 if (!logout) {
159 player.clanTag = "";
160 player.clanChannel = null;
161 player.updateFlags.add(UpdateFlag.APPEARANCE);
162 player.send(new SendMessage("You have disconnected from the clan chat channel."));
163 }
164 if (member.rank != ClanRank.SYSTEM) {
165 player.lastClan = details.owner;
166 }
167 member.player = Optional.empty();
168 if (--active == 0) {
170 }
171 });
172 return;
173 }
174 }
175 }
176
177 public void ban(String name) {
178 bannedMembers.add(name);
179 Iterator<ClanMember> iterator = members.iterator();
180 while (iterator.hasNext()) {
181 ClanMember member = iterator.next();
182
183 if (member.name.equals(name)) {
184 if (member.rank.greaterThanEqual(ClanRank.LEADER)) {
185 return;
186 }
187
188 member.player.ifPresent(player -> {
190 player.clanTag = "";
191 player.lastClan = details.owner;
192 player.clanChannel = null;
193 player.updateFlags.add(UpdateFlag.APPEARANCE);
194 player.send(new SendMessage("You have been banned from the clan chat channel."));
195 member.player = Optional.empty();
196
197 if (--active == 0) {
199 }
200 });
201
202 iterator.remove();
203 return;
204 }
205 }
206 }
207
208 public void unban(Player player, int index) {
209 if (index < 0 || index >= bannedMembers.size())
210 return;
211 String name = bannedMembers.get(index);
212 if (bannedMembers.remove(index) != null) {
213 int string = 51311;
214 int size = bannedMembers.size() < 10 ? 10 : bannedMembers.size();
215 for (int idx = 0; idx < size; idx++) {
216 boolean valid = idx < bannedMembers.size();
217 Optional<String> banned = valid ? Optional.of(bannedMembers.get(idx)) : Optional.empty();
218 player.send(new SendString(banned.orElse(""), string));
219 player.send(new SendTooltip(valid ? "Unban " + bannedMembers.get(idx) : "", string));
220 string++;
221 }
222 player.send(new SendScrollbar(51310, size * 23));
223 player.send(new SendMessage("You have unbanned " + name + " from the clan chat channel."));
224 }
225 }
226
227 public void addExperience(double experience) {
228 if (experience + details.experience > Double.MAX_VALUE)
229 return;
230 details.experience += experience;
231 ClanLevel level = ClanLevel.getLevel(details.experience);
232 if (details.level != level) {
233 details.level = level;
234 details.points += level.getPoints();
235 forPlayers(player -> {
236 player.clanTagColor = level.getColor();
237 player.updateFlags.add(UpdateFlag.APPEARANCE);
238 });
239 message("We have leveled up to <col=255>" + Utility.formatEnum(level.name()) + "</col>! Total Experience: <col=255>" + Utility.formatDigits(details.experience), "We have earned <col=255>" + level.getPoints() + "</col> CP, which puts us at <col=255>" + Utility.formatDigits(details.points) + "</col> CP.");
240 }
241 }
242
243 public void receiveTask(Difficulty difficulty) {
244 if (details.clanTask == null) {
245 ClanTask task = ClanTask.getAssignment(details.type, difficulty);
246 details.taskAmount = task.getAmount();
247 details.clanTask = task;
248 message("Task time! <col=255>" + task.getName(this) + "</col>.");
249 }
250 }
251
252 public void activateTask(ClanTaskKey key, String name) {
253 activateTask(key, name, 1);
254 }
255
256 public void activateTask(ClanTaskKey key, String name, int amount) {
257 if (details.clanTask == null)
258 return;
259 ClanTask task = details.clanTask;
260 if (task.key != key)
261 return;
262 double experience = task.getProgressExperience();
263 int progress = details.taskAmount - amount;
264 if (progress <= 0) {
265 int reward = details.clanTask.getReward();
266 details.points += reward;
267 message("Task complete! Reward: <col=255>" + reward + "</col> CP. We now have: <col=255>" + Utility.formatDigits(details.points) + "</col> CP.");
268 details.clanTask = null;
269 progress = 0;
273 }
274
275 details.taskAmount = progress;
276 addExperience(experience);
277 getMember(name).ifPresent(member -> {
278 member.expGained += experience;
279 if (task.type == ClanType.PVP) {
280 member.playerKills++;
281 } else if (task.type == ClanType.PVM) {
282 member.npcKills++;
283 }
284
285 member.player.ifPresent(player -> {
286 if (!player.lastClan.isEmpty() && !player.lastClan.equalsIgnoreCase(player.getName())) {
287 ClanChannel channel = ClanRepository.getChannel(player.lastClan);
288 if (channel != null)
289 channel.disconnect(name, false);
290 }
291 });
292 });
293 }
294
296 final int current = details.achievements.computeIfAbsent(achievement, a -> 0);
297 for (ClanAchievement list : ClanAchievement.values()) {
298 if (list == achievement) {
299 details.achievements.put(achievement, current + 1);
300 if (details.completedAchievement(list)) {
301 message("Achievement completed! " + list.details, "We have earned " + list.getPoints() + " CP and " + Utility.formatDigits(list.getExperience()) + " Clan EXP.");
302 }
303 }
304 }
305 }
306
307 public void setRank(ClanMember member, ClanRank rank) {
308 member.player.ifPresent(player -> {
309 if (!player.lastClan.isEmpty() && !player.lastClan.equalsIgnoreCase(player.getName())) {
310 ClanChannel channel = ClanRepository.getChannel(player.lastClan);
311 if (channel != null)
312 channel.disconnect(member.name, false);
313 }
314 });
315 member.rank = rank;
316 }
317
318 public void setName(Player player, String name) {
319 if (getName().equalsIgnoreCase(name)) {
320 player.message("Your clan channel name is already set to " + getName() + "!");
321 return;
322 }
323 if (Arrays.stream(Config.BAD_STRINGS).anyMatch(name::contains)) {
324 player.message("The name you have entered was prohibited! Try something else.");
325 return;
326 }
327 if (ClanRepository.nameExist(name)) {
328 player.message("There is already a clan that exists with that name!");
329 return;
330 }
331 name = Utility.formatName(name);
332 if (!management.name.isEmpty())
333 ClanRepository.ACTIVE_NAMES.remove(management.name.toLowerCase().trim());
334 ClanRepository.ACTIVE_NAMES.add(name.toLowerCase().trim());
335 management.name = name;
336 message("The clan name has been changed to: <col=255>" + name + "</col>.");
337 player.clanViewer.update(this);
338 }
339
340 public void setTag(Player player, String tag) {
341 if (tag.length() > 4)
342 return;
343 if (getTag().equalsIgnoreCase(tag)) {
344 player.message("Your clan channel tag is already set to " + getTag() + "!");
345 return;
346 }
347 if (Arrays.stream(Config.BAD_STRINGS).anyMatch(tag::contains)) {
348 player.message("The tag you have entered was prohibited! Try something else.");
349 return;
350 }
351 if (ClanRepository.tagExist(tag)) {
352 player.message("There is already a clan that exists with that tag!");
353 return;
354 }
355 if (!management.tag.isEmpty())
358 message("The clan tag has been changed to: <col=255>" + getTag() + "</col>.");
359 player.clanViewer.update(this);
360 }
361
362 public void setSlogan(Player player, String slogan) {
363 if (Arrays.stream(Config.BAD_STRINGS).anyMatch(slogan::contains)) {
364 player.message("The slogan you have entered was prohibited! Try something else.");
365 return;
366 }
367 management.slogan = Utility.formatName(slogan);
368 player.clanViewer.update(this);
369 }
370
371 public Optional<ClanMember> getMember(String name) {
372 for (ClanMember member : members) {
373 if (member.name.equalsIgnoreCase(name))
374 return Optional.of(member);
375 }
376 return Optional.empty();
377 }
378
379 List<ClanMember> getActiveMembers() {
380 List<ClanMember> list = new LinkedList<>();
381 forEach(member -> member.player.ifPresent(player -> list.add(member)));
382 return list;
383 }
384
385 /** Handles looping through each clan member. */
386 private void forPlayers(Consumer<Player> player) {
387 for (ClanMember member : members) {
388 member.player.ifPresent(player);
389 }
390 }
391
392 /** Handles looping through each clan member. */
393 public void forEach(Consumer<ClanMember> member) {
394 members.forEach(member);
395 }
396
397 /** Handles messaging all the members in the clan channel. */
398 public void message(Object... messages) {
399 forEach(member -> member.message(messages));
400 }
401
402 public void chat(String name, String message) {
403 getMember(name).ifPresent(member -> {
404 if (management.canTalk(member)) {
405 if (Arrays.stream(Yell.INVALID).anyMatch(message::contains)) {
406 member.message("Your message contains invalid characters.");
407 return;
408 }
409
410 forEach(other -> other.chat(member, message));
411 } else {
412 member.message("Your rank is too low to talk in this channel.");
413 }
414 });
415 }
416
417 public void splitLoot(Player player, Mob dead, Item item) {
418 if (!lootshareEnabled()) {
419 return;
420 }
421
422 Set<Player> players = new HashSet<>();
423 long value = item.getValue(PriceType.HIGH_ALCH_VALUE) * item.getAmount();
424 long tax = value / 4;
425 players.add(player);
426
427 RegionManager.forNearbyPlayer(dead, 32, nearby -> {
428 if (Objects.equals(nearby.clanChannel, player.clanChannel)) {
429 players.add(nearby);
430 }
431 });
432
433 long split = (value - tax) / players.size();
434 players.forEach(other -> {
435 getMember(other.getName()).ifPresent(member ->
436 member.message(Utility.formatDigits(split) + " coins have been deposited into your bank vault."));
437// other.bankVault.deposit((int) split);
438 });
439 }
440
441 public String getName() {
442 return management.name;
443 }
444
445 public String getOwner() {
446 return details.owner;
447 }
448
449 public int size() {
450 return members.size();
451 }
452
453 public int activeSize() {
454 return active;
455 }
456
457 public boolean lootshareEnabled() {
458 return management.lootshare;
459 }
460
461 public boolean canManage(ClanMember member) {
462 return member != null && management.canManage(member);
463 }
464
465 boolean isBanned(String name) {
466 for (String banned : bannedMembers) {
467 if (banned.equalsIgnoreCase(name)) {
468 return true;
469 }
470 }
471 return false;
472 }
473
474 public boolean isLocked() {
475 return management.locked;
476 }
477
478 boolean canEnter(ClanMember member) {
479 return management.canEnter(member);
480 }
481
482 boolean hasPassword() {
483 return management.password != null && !management.password.isEmpty();
484 }
485
486 boolean isPassword(String input) {
487 return input.equals(management.password);
488 }
489
491 return details;
492 }
493
495 return management;
496 }
497
498 public Set<ClanMember> getMembers() {
499 return members;
500 }
501
503 return handler;
504 }
505
506 public String getSlogan() {
507 return management.slogan;
508 }
509
510 public String getPassword() {
511 return management.password;
512 }
513
514 public String getTag() {
515 return management.tag;
516 }
517
518 public String getColor() {
519 return management.color;
520 }
521
523 return showcase;
524 }
525
527 Item[] items = new Item[showcase.showcase.length];
528 int count = 0;
529 for (int iem : showcase.showcase) {
530 items[count] = new Item(iem, 1);
531 if (items[count].isStackable()) {
532 items[count].setAmount(250);
533 }
534 count++;
535 }
536 return items;
537 }
538
539 public void setColor(String color) {
540 management.color = color;
541 }
542
543 public JsonObject toJson() {
544 JsonObject object = new JsonObject();
545 object.addProperty("owner", details.owner);
546 object.addProperty("established", details.established);
547 object.addProperty("name", management.name);
548 object.addProperty("password", management.password);
549 object.addProperty("forum", management.forum);
550 object.addProperty("slogan", management.slogan);
551 object.addProperty("clan-tag", management.tag);
552 object.addProperty("clan-type", String.valueOf(details.type));
553 object.addProperty("clan-color", management.color);
554 object.addProperty("clan-points", details.points);
555 object.addProperty("clan-experience", details.experience);
556 object.addProperty("clan-level", String.valueOf(details.level));
557 if (details.clanTask != null) {
558 object.addProperty("clan-task", String.valueOf(details.clanTask));
559 }
560 object.addProperty("task-amount", details.taskAmount);
561 object.addProperty("locked", management.locked);
562 object.addProperty("lootshare", management.lootshare);
563 management.saveRanks(object);
564
565 object.add("showcase", GSON.toJsonTree(showcase.showcase));
566 object.add("showcase-items", GSON.toJsonTree(showcase.showcaseItems));
567 object.add("banned-members", GSON.toJsonTree(bannedMembers));
568
569 JsonArray memberArray = new JsonArray();
570 for (ClanMember member : members) {
571 JsonObject memberObj = new JsonObject();
572 memberObj.addProperty("name", member.name);
573 memberObj.addProperty("joined", member.joined);
574 memberObj.addProperty("rank", String.valueOf(member.rank));
575 memberObj.addProperty("exp-gained", member.expGained);
576 memberObj.addProperty("npc-kills", member.npcKills);
577 memberObj.addProperty("player-kills", member.playerKills);
578 memberObj.addProperty("total-level", member.totalLevel);
579 memberArray.add(memberObj);
580 }
581 object.add("members", memberArray);
582 return object;
583 }
584
585 public static void load(String owner) {
586 new GsonParser("/content/clan/" + owner, false) {
587 @Override
588 protected void parse(JsonObject object) {
590
591 channel.details.owner = object.get("owner").getAsString();
592 channel.management.name = object.get("name").getAsString();
593 if (object.has("password")) {
594 channel.management.password = object.get("password").getAsString();
595 }
596 channel.details.established = object.get("established").getAsString();
597 if (object.has("forum")) {
598 channel.management.forum = object.get("forum").getAsString();
599 }
600 if (object.has("slogan")) {
601 channel.management.slogan = object.get("slogan").getAsString();
602 }
603 if (object.has("clan-tag")) {
604 channel.management.tag = object.get("clan-tag").getAsString();
605 }
606 channel.details.type = ClanType.valueOf(object.get("clan-type").getAsString());
607 if (object.has("clan-color")) {
608 channel.management.color = object.get("clan-color").getAsString();
609 }
610
611 channel.details.points = object.get("clan-points").getAsInt();
612 channel.details.experience = object.get("clan-experience").getAsLong();
613 channel.details.level = ClanLevel.valueOf(object.get("clan-level").getAsString());
614 if (object.has("clan-task")) {
615 channel.details.clanTask = ClanTask.valueOf(object.get("clan-task").getAsString());
616 }
617 channel.details.taskAmount = object.get("task-amount").getAsInt();
618 channel.management.locked = object.get("locked").getAsBoolean();
619 channel.management.lootshare = object.get("lootshare").getAsBoolean();
620 channel.management.loadRanks(object);
621 channel.showcase.showcase = GSON.fromJson(object.get("showcase"), int[].class);
622
623 JsonArray array = object.get("showcase-items").getAsJsonArray();
624 for (JsonElement element : array) {
625 channel.showcase.showcaseItems.add(element.getAsInt());
626 }
627
628 array = object.get("banned-members").getAsJsonArray();
629 for (JsonElement element : array) {
630 channel.bannedMembers.add(element.getAsString());
631 }
632
633 JsonArray members = object.get("members").getAsJsonArray();
634 for (JsonElement element : members) {
635 JsonObject memberObj = (JsonObject) element;
636 String name = memberObj.get("name").getAsString();
637 ClanMember member = new ClanMember(name);
638 member.joined = memberObj.get("joined").getAsString();
639 member.rank = ClanRank.valueOf(memberObj.get("rank").getAsString());
640 member.expGained = memberObj.get("exp-gained").getAsDouble();
641 member.npcKills = memberObj.get("npc-kills").getAsInt();
642 member.playerKills = memberObj.get("player-kills").getAsInt();
643 member.totalLevel = memberObj.get("total-level").getAsInt();
644 channel.addMember(member);
645 }
646
647 if (!channel.getTag().isEmpty())
648 ClanRepository.ACTIVE_TAGS.add(channel.getTag());
649 if (!channel.getName().isEmpty())
650 ClanRepository.ACTIVE_NAMES.add(channel.getName());
653 }
654 }.run();
655 }
656
657 @Override
658 public int compareTo(ClanChannel other) {
659 int compare = Double.compare(other.details.experience, details.experience);
660 if (compare == 0)
661 return management.name.compareTo(other.management.name);
662 return compare;
663 }
664
665 @Override
666 public int hashCode() {
667 return details.owner.hashCode();
668 }
669
670 @Override
671 public boolean equals(Object obj) {
672 if (obj == this) return true;
673 if (obj instanceof ClanChannel) {
674 ClanChannel other = (ClanChannel) obj;
675 return Objects.equals(details, other.details)
676 && Objects.equals(management, other.management);
677 }
678 return super.equals(obj);
679 }
680}
The class that contains setting-related constants for the server.
Definition Config.java:24
static final String[] BAD_STRINGS
Strings that are classified as bad.
Definition Config.java:216
Handles the yelling command.
Definition Yell.java:16
static final String[] INVALID
Array of all invalid strings.
Definition Yell.java:19
Handles the clan channel member.
ClanRank rank
The rank of the clan member.
Optional< Player > player
The player instance of the clan member .
final String name
The name of the clan member.
The repository containing all the clans and their corresponding data.
static Set< ClanChannel > ALLTIME
Set of all active clan chat names.
static void addChannel(ClanChannel channel)
Adds the channel.
static void setInactive(ClanChannel channel)
static void setActive(ClanChannel channel)
static Set< String > ACTIVE_NAMES
Set of all active clan chat names.
static Set< String > ACTIVE_TAGS
Set of all active clan chat tags.
static ClanChannel getChannel(String channel)
Returns the channel.
static void clean(Player player)
Handles cleaning the clan tab itemcontainer.
void add(Player player, ClanMember member)
ClanDetails details
The clan channel details.
int active
The total active logged in members.
Optional< ClanMember > getMember(String name)
void activateTask(ClanTaskKey key, String name, int amount)
void connect(Player player)
Handles a player connecting to the clan channel.
void setRank(ClanMember member, ClanRank rank)
final Set< ClanMember > members
The clan channel member set.
void splitLoot(Player player, Mob dead, Item item)
final List< String > bannedMembers
A list of banned members.
ClanChannelHandler handler
The clan channel handler.
void activateAchievement(ClanAchievement achievement)
ClanManagement management
The clan channel management tab panel.
void setSlogan(Player player, String slogan)
void forEach(Consumer< ClanMember > member)
Handles looping through each clan member.
ClanShowcase showcase
The clan channel showcase items.
void establish(Player player, ClanMember member)
void message(Object... messages)
Handles messaging all the members in the clan channel.
void disconnect(String name, boolean logout)
Handles disconnecting a player from the clan channel.
void activateTask(ClanTaskKey key, String name)
void forPlayers(Consumer< Player > player)
Handles looping through each clan member.
double experience
The clan channel total experience.
Handles the mob class.
Definition Mob.java:66
final EnumSet< UpdateFlag > updateFlags
Definition Mob.java:94
This class represents a character controlled by a player.
Definition Player.java:125
String getName()
Gets the name of this entity.
Definition Player.java:774
The container class that represents an item that can be interacted with.
Definition Item.java:21
final void setAmount(int amount)
Sets the quantity of this item.
Definition Item.java:351
final int getAmount()
Gets the quantity of this item.
Definition Item.java:342
int getValue(PriceType type)
Gets the value for this item.
Definition Item.java:98
static void forNearbyPlayer(Mob mob, int distance, Consumer< Player > action)
Sends an action to Mob instance which is within a distance.
The OutgoingPacket that sends a message to a Players chatbox in the client.
The OutgoingPacket that sends a string to a Players itemcontainer in the client.
Handles miscellaneous methods.
Definition Utility.java:27
static String formatName(final String input)
Definition Utility.java:645
static String formatDigits(final int amount)
Formats digits for integers.
Definition Utility.java:41
static String formatEnum(final String string)
Formats name of enum.
Definition Utility.java:89
static String getSimpleDate()
Gets the date of server.
Definition Utility.java:131
This class provides an easy to use google gson parser specifically designed for parsing JSON files.
The enum containing all the rank's data within a clan channel.
Definition ClanRank.java:8
boolean greaterThanEqual(ClanRank other)
Definition ClanRank.java:36
PVM
Clans that are focused on PVM.
Definition ClanType.java:13
PVP
Clans that are focused on PVP.
Definition ClanType.java:10
SOCIAL
Clans that are focused on socialism.
Definition ClanType.java:19
Handles the clan levels (based off the total experience earned).
Definition ClanLevel.java:8
int getPoints()
Gets the points rewarded for leveling up.
static ClanLevel getLevel(double experience)
Gets a clan level based off the experience.
String getColor()
Gets the clan level color.
static ClanTask getAssignment(ClanType type, Difficulty difficulty)
Created by Daniel on 2017-11-27.