RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
ClanViewer.java
1package com.osroyale.content.clanchannel.content;
2
3import com.osroyale.Config;
4import com.osroyale.content.clanchannel.ClanMember;
5import com.osroyale.content.clanchannel.ClanRepository;
6import com.osroyale.content.clanchannel.channel.ClanChannel;
7import com.osroyale.content.clanchannel.channel.ClanChannelHandler;
8import com.osroyale.game.world.entity.mob.player.Player;
9import com.osroyale.game.world.items.Item;
10import com.osroyale.net.packet.out.*;
11import com.osroyale.util.Difficulty;
12import com.osroyale.util.Utility;
13
14import java.util.*;
15
45
46public class ClanViewer {
47
48public enum ClanTab {OVERVIEW, MEMBERS}
49 private final Player player;
50 private ClanChannel viewing;
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;
57
58 public ClanViewer(Player player) {
59 this.player = player;
60 }
61
62 public void open(ClanTab tab) {
63 open(viewing, tab);
64 }
65
66 public void open(ClanChannel channel, ClanTab tab) {
67 int interfaceId = 0;
68 this.viewing = channel;
69 String name = Utility.formatName(filter.name().toLowerCase().replaceAll("_", " "));
70 Item[] showcase = viewing == null ? new Item[3] : viewing.getShowcaseItems();
71
72 if (tab == ClanTab.OVERVIEW) {
73 drawClanList(searchKey);
74 drawClanDetails();
75 interfaceId = 53000;
76 player.send(new SendString(name + ":", 53006));
77 } else if (tab == ClanTab.MEMBERS) {
78 drawClanMembers();
79 interfaceId = 53500;
80 player.send(new SendString("Member List:", 53006));
81 }
82
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));
87 player.send(new SendString(name, 53019));
88 player.send(new SendItemOnInterface(53011, showcase));
89 player.interfaceManager.open(interfaceId);
90 }
91
92 private void drawClanList(String key) {
93 Set<ClanChannel> channels = ClanRepository.getTopChanels(filter).orElse(null);
94 if (channels == null) return;
95 if (!key.isEmpty()) {
96 channels.removeIf(channel -> !channel.getName().contains(key));
97 }
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()) {
102 ClanChannel channel = iterator.next();
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));
106 } else {
107 player.send(new SendString("", string));
108 player.send(new SendTooltip("", string));
109 }
110 }
111 clanList = new ArrayList<>(channels);
112 player.send(new SendScrollbar(53300, size * 14));
113 }
114
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));
120 }
121 }
122
124 private String[] getDetails() {
125 if (viewing == null)
126 return new String[10];
127 return new String[]{
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",
138// (channel.modifier == null ? "None" : (channel.modifier.name) + "(" + channel.modifierDuration + " minute(s)") + ")",
139 "</col>Avg. Total: " + viewing.getColor() + "" + viewing.getDetails().getAverageTotal(),
140 };
141 }
142
143 private String[] getProfile(ClanMember member) {
144 if (member == null)
145 return new String[10];
146 return new String[]{
147 "</col>Rank: " + viewing.getColor() + "" + member.rank.getString() + " " + member.rank.name,
148 "</col>Joined: " + viewing.getColor() + "" + member.joined,
149 "</col>Exp Gained: " + viewing.getColor() + "" + Utility.formatDigits(member.expGained),
150 "</col>PvP Kills: " + viewing.getColor() + "" + member.playerKills,
151 "</col>PvM Kills: " + viewing.getColor() + "" + member.npcKills,
152 "",
153 "",
154 "",
155 "",
156 };
157 }
158
159 private void drawClanMembers() {
160 int size = 18;
161 List<ClanMember> membersList = new ArrayList<>(size);
162 if (viewing != null) {
163 viewing.forEach(o -> {
164 if (o != null)
165 membersList.add(o);
166 });
167 size = membersList.size() < 18 ? 18 : membersList.size();
168 }
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));
175 }
176 player.send(new SendScrollbar(55050, size * 18));
177 clanMembers = membersList;
178
179 if (memberIndex > membersList.size())
180 return;
181
182 ClanMember member = membersList.get(memberIndex);
183
184 if (member == null)
185 return;
186
187 String[] strings = getProfile(member);
188
189 for (int index = 0, string = 55012; index < strings.length; index++, string += 2) {
190 player.send(new SendString(strings[index] == null ? "" : strings[index], string));
191 }
192 }
193
194 public void update(ClanChannel channel) {
195 if (player.interfaceManager.isInterfaceOpen(53000))
196 open(channel, ClanTab.OVERVIEW);
197 if (player.interfaceManager.isSidebar(Config.CLAN_TAB, 42000)) {
198 ClanChannelHandler.manage(player);
199 }
200 }
201
202 public void viewAchievements() {
203 ClanChannel channel = player.clanChannel;
204 int size = ClanAchievement.values().length;
205
206 Difficulty old = null;
207
208 for (int index = 0, string = 37114; index < size; index++, string++) {
209 Optional<ClanAchievement> achievement = ClanAchievement.forOrdinal(index);
210 if (achievement.isPresent()) {
211 boolean completed = channel.getDetails().completedAchievement(achievement.get());
212 Difficulty difficulty = achievement.get().difficulty;
213
214 if (old != difficulty) {
215 string++;
216 player.send(new SendString("<col=255>[" + Utility.formatEnum(difficulty.name()) + "]", string));
217 string++;
218 player.send(new SendString("", string));
219 string++;
220 }
221
222 old = difficulty;
223 int progress = channel.getDetails().getAchievementCompletion(achievement.get());
224 int goal = achievement.get().amount;
225
226 String name = (completed ? "<col=347043>" + "" : "") + achievement.get().details + " (" + Utility.getPercentageAmount(progress, goal) + "%)";
227 player.send(new SendString(name, string));
228 } else {
229 player.send(new SendString("", string));
230 }
231 }
232
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));
236 player.send(new SendString("", 37114));
237 player.send(new SendString("", 37107));
238 player.send(new SendString(channel.getName() + "'s Achievements", 37103));
239 player.send(new SendScrollbar(37110, 500));
240 player.interfaceManager.open(37100);
241 }
242
243 public enum Filter {
244 ALL_TIME,
245 TOP_PVP,
246 TOP_PVM,
247 TOP_SKILLING,
248 TOP_IRON_MAN
249 }
250
251}
static String formatDigits(final int amount)
Definition Utility.java:78
static String formatEnum(final String string)
Definition Utility.java:126
static double getPercentageAmount(int progress, int total)
Definition Utility.java:73
static Optional< ClanAchievement > forOrdinal(int ordinal)