46public class ClanViewer {
48public enum ClanTab {OVERVIEW, MEMBERS}
49 private final Player player;
51 public int clanIndex = 0;
52 public int memberIndex = 0;
53 public List<ClanChannel> clanList =
new ArrayList<>();
54 public List<ClanMember> clanMembers =
new ArrayList<>();
55 private String searchKey =
"";
56 public Filter filter = Filter.ALL_TIME;
58 public ClanViewer(
Player player) {
62 public void open(ClanTab tab) {
66 public void open(
ClanChannel channel, ClanTab tab) {
68 this.viewing = channel;
69 String name =
Utility.formatName(filter.name().toLowerCase().replaceAll(
"_",
" "));
70 Item[] showcase = viewing ==
null ?
new Item[3] : viewing.getShowcaseItems();
72 if (tab == ClanTab.OVERVIEW) {
73 drawClanList(searchKey);
76 player.send(
new SendString(name +
":", 53006));
77 }
else if (tab == ClanTab.MEMBERS) {
80 player.send(
new SendString(
"Member List:", 53006));
83 player.send(
new SendConfig(531, tab.ordinal()));
84 player.send(
new SendString(viewing !=
null ? viewing.getName() :
"", 53009));
85 player.send(
new SendString(viewing !=
null ? viewing.getSlogan() :
"", 53010));
86 player.send(
new SendString(searchKey.isEmpty() ?
"Search for clan" : searchKey, 53012));
89 player.interfaceManager.open(interfaceId);
92 private void drawClanList(String key) {
93 Set<ClanChannel> channels =
ClanRepository.getTopChanels(filter).orElse(
null);
94 if (channels ==
null)
return;
96 channels.removeIf(channel -> !channel.getName().contains(key));
98 int size = channels.size() > 13 ? channels.size() : 13;
99 Iterator<ClanChannel> iterator = channels.iterator();
100 for (
int index = 0,
string = 53202; index < size; index++,
string += 2) {
101 if (iterator.hasNext()) {
103 String prefix = (index + 1) +
")";
104 player.send(
new SendString((clanIndex == index ?
"<col=ffffff>" :
"") + prefix +
" " + channel.getName(),
string));
105 player.send(
new SendTooltip(
"View " + channel.getName() +
"'s clan profile",
string));
111 clanList =
new ArrayList<>(channels);
115 private void drawClanDetails() {
116 String[] strings = getDetails();
117 assert strings.length != 0;
118 for (
int index = 0,
string = 53102; index < strings.length; index++,
string += 2) {
119 player.send(
new SendString(strings[index] ==
null ?
"" : strings[index],
string));
124 private String[] getDetails() {
126 return new String[10];
128 "</col>Owner: " + viewing.getColor() +
"<clan=7> " +
Utility.formatName(viewing.getOwner()),
129 "</col>Established: " + viewing.getColor() +
"" + viewing.getDetails().established,
130 "</col>Members: " + viewing.getColor() +
"" + viewing.getMembers().size(),
131 "</col>Type: " + viewing.getColor() + viewing.getDetails().type.getIcon() +
" " +
Utility.
formatEnum(viewing.getDetails().type.name()),
132 "</col>Level: " + viewing.getColor() +
"" +
Utility.
formatEnum(viewing.getDetails().level.name()),
133 "</col>Tag " + viewing.getColor() +
"" + (viewing.getTag().length() <= 0 ?
"None" : (
"[" + viewing.getTag()) +
"]"),
134 "</col>Experience: " + viewing.getColor() +
"" +
Utility.
formatDigits(viewing.getDetails().experience),
135 "</col>Points: " + viewing.getColor() +
"" +
Utility.
formatDigits(viewing.getDetails().points),
136 "</col>Achievements Completed: " + viewing.getColor() +
"NA",
137 "</col>Tasks Completed: " + viewing.getColor() +
"NA",
139 "</col>Avg. Total: " + viewing.getColor() +
"" + viewing.getDetails().getAverageTotal(),
143 private String[] getProfile(
ClanMember member) {
145 return new String[10];
147 "</col>Rank: " + viewing.getColor() +
"" + member.
rank.getString() +
" " + member.
rank.
name,
148 "</col>Joined: " + viewing.getColor() +
"" + member.
joined,
150 "</col>PvP Kills: " + viewing.getColor() +
"" + member.
playerKills,
151 "</col>PvM Kills: " + viewing.getColor() +
"" + member.
npcKills,
159 private void drawClanMembers() {
161 List<ClanMember> membersList =
new ArrayList<>(size);
162 if (viewing !=
null) {
163 viewing.forEach(o -> {
167 size = membersList.size() < 18 ? 18 : membersList.size();
169 for (
int i = 0,
string = 55052; i < size; i++,
string += 2) {
170 boolean valid = i < membersList.size();
171 ClanMember member = valid ? membersList.get(i) :
null;
172 String name = valid ? member.
rank.getString() +
" " + member.name :
"";
173 player.send(
new SendString((i == memberIndex ?
"<col=ffffff>" :
"") + name,
string));
174 player.send(
new SendTooltip(valid ?
"View " + member.
name +
"'s clan profile" :
"",
string));
177 clanMembers = membersList;
179 if (memberIndex > membersList.size())
182 ClanMember member = membersList.get(memberIndex);
187 String[] strings = getProfile(member);
189 for (
int index = 0,
string = 55012; index < strings.length; index++,
string += 2) {
190 player.send(
new SendString(strings[index] ==
null ?
"" : strings[index],
string));
195 if (player.interfaceManager.isInterfaceOpen(53000))
196 open(channel, ClanTab.OVERVIEW);
197 if (player.interfaceManager.isSidebar(
Config.CLAN_TAB, 42000)) {
202 public void viewAchievements() {
208 for (
int index = 0,
string = 37114; index < size; index++,
string++) {
210 if (achievement.isPresent()) {
211 boolean completed = channel.getDetails().completedAchievement(achievement.get());
212 Difficulty difficulty = achievement.get().difficulty;
214 if (old != difficulty) {
223 int progress = channel.getDetails().getAchievementCompletion(achievement.get());
224 int goal = achievement.get().amount;
226 String name = (completed ?
"<col=347043>" +
"" :
"") + achievement.get().details +
" (" +
Utility.
getPercentageAmount(progress, goal) +
"%)";
233 player.send(
new SendString(
"<col=000000>These are all the clan achievements available", 37111));
234 player.send(
new SendString(
"<col=000000>Completed achievements will be highlighted in <col=347043>green</col>", 37112));
235 player.send(
new SendString(
"Completed: 0/" + size, 37113));
238 player.send(
new SendString(channel.getName() +
"'s Achievements", 37103));
240 player.interfaceManager.open(37100);