RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
ClanChannelHandler.java
1package com.osroyale.content.clanchannel.channel;
2
3import com.osroyale.Config;
4import com.osroyale.content.clanchannel.*;
5import com.osroyale.game.world.entity.mob.player.Player;
6import com.osroyale.game.world.entity.mob.player.PlayerRight;
7import com.osroyale.game.world.entity.mob.player.profile.ProfileRepository;
8import com.osroyale.net.packet.out.*;
9import com.osroyale.util.Utility;
10
11import java.io.File;
12import java.nio.file.Path;
13import java.nio.file.Paths;
14import java.util.*;
15
16import static com.osroyale.content.clanchannel.channel.ClanManagement.*;
17
59
60public class ClanChannelHandler {
61
65 private final ClanChannel channel;
66
70 ClanChannelHandler(ClanChannel channel) {
71 this.channel = channel;
72 }
73
77 public static void onLogin(Player player) {
78 clean(player);
79 if (player.clanChannel != null) {
80 String owner = player.clanChannel.getOwner();
81 player.clanChannel = null;
82 connect(player, owner);
83 }
84 }
85
89 public static void connect(Player player, String owner) {
90 player.send(new SendMessage("Attempting to connect to clan..."));
91 ClanChannel channel = ClanRepository.getChannel(owner);
92 if (channel == null) {
93 boolean loaded = true;
94 Path path = Paths.get("./data/content/clan/");
95 File[] files = path.toFile().listFiles();
96
97 if (files == null) {
98 System.out.println("No clan files were found!");
99 player.message("Clan does not exist!");
100
101 if (owner.equalsIgnoreCase(player.getName())) {
102 ClanChannel.create(player);
103 }
104 return;
105 }
106
107 for (File file : files) {
108 if (file.getName().toLowerCase().contains(player.getUsername().toLowerCase().trim()) && file.length() > 0) {
109 loaded = false;
110 break;
111 }
112 }
113
114 if (owner.equalsIgnoreCase(player.getName())) {
115 if (!loaded) {
116 player.send(new SendMessage("Your clan didn't load into the server properly!"));
117 player.send(new SendMessage("If you see this message, your clan was not reset."));
118 player.message("Try to join your clan again. If you still see this message, contact a staff member.");
119 ClanChannel.load(player.getUsername().toLowerCase().trim());
120 return;
121 }
122 ClanChannel.create(player);
123 } else {
124 if (!loaded) {
125 player.send(new SendMessage("This clan didn't load into the server properly!"));
126 player.message("Try to join your clan again. If you still see this message, contact a staff member.");
127 ClanChannel.load(player.getUsername().toLowerCase().trim());
128 return;
129 }
130 player.send(new SendMessage("Connection was refused: No channel exists!"));
131 }
132 return;
133 }
134 if (!channel.getOwner().equals("Osroyale") && channel.activeSize() >= 80) {
135 player.send(new SendMessage("Connection was refused: Channel currently full!"));
136 return;
137 }
138 if (channel.isBanned(player.getName())) {
139 player.send(new SendMessage("Connection was refused: Currently banned from channel!"));
140 return;
141 }
142 if (channel.getDetails().type == ClanType.IRON_MAN && !PlayerRight.isIronman(player)) {
143 player.message("Only Iron-man accounts can join this clan!");
144 return;
145 }
146 channel.connect(player);
147 }
148
152 public static boolean disconnect(Player player, boolean logout) {
153 if (player == null || player.clanChannel == null)
154 return false;
155 ClanChannel channel = player.clanChannel;
156 channel.disconnect(player.getName(), logout);
157 return true;
158 }
159
160 public static void manage(Player player) {
161 ClanChannel channel = player.clanChannel;
162 Optional<ClanMember> member = channel.getMember(player.getName());
163 member.ifPresent(m -> {
164 if (!channel.canManage(m)) {
165 player.send(new SendMessage("You do not have sufficient privileges to manage this clan!"));
166 return;
167 }
168 player.send(new SendString(channel.getName(), 42102));
169 player.send(new SendString(channel.getTag(), 42104));
170 player.send(new SendString(channel.getSlogan(), 42106));
171 player.send(new SendString(channel.getPassword(), 42108));
172 player.send(new SendString(channel.getDetails().type.getIcon() + "" + channel.getDetails().type.getName(), 42110));
173 player.send(new SendString(channel.getManagement().getRank(ENTER_RANK_INDEX) + " " + channel.getManagement().getEnter(), 42112));
174 player.send(new SendString(channel.getManagement().getRank(TALK_RANK_INDEX) + " " + channel.getManagement().getTalk(), 42114));
175 player.send(new SendString(channel.getManagement().getRank(MANAGE_RANK_INDEX) + " " + channel.getManagement().getManage(), 42116));
176 player.send(new SendConfig(326, channel.getManagement().locked ? 1 : 0));
177 player.send(new SendItemOnInterface(42126, channel.getShowcaseItems()));
178 player.interfaceManager.setSidebar(Config.CLAN_TAB, 42000);
179 });
180 }
181
185 boolean attemptConnection(Player player, ClanMember member) {
186 if (member.rank.equals(ClanRank.MEMBER)) {
187 if (ProfileRepository.isFriend(player, channel.getOwner()))
188 member.rank = ClanRank.FRIEND;
189 if (PlayerRight.isDeveloper(player))
190 member.rank = ClanRank.SYSTEM;
191 }
192
193 if (!channel.canEnter(member)) {
194 player.send(new SendMessage("Connection was refused: No required permission!"));
195 return false;
196 }
197
198 if (channel.isLocked() && !channel.canManage(member)) {
199 player.send(new SendMessage("Connection was refused: Clan is currently locked!"));
200 return false;
201 }
202
203 return true;
204 }
205
209 boolean testPassword(Player player, ClanMember member) {
210 if (!channel.hasPassword() || channel.canManage(member)) {
211 return false;
212 }
213
214 player.dialogueFactory.sendStatement("This clan requires a password in order to join.").onAction(() -> {
215 player.send(new SendInputMessage("Enter the password:", 6, input -> {
216 if (!channel.isPassword(input)) {
217 player.send(new SendMessage("You have entered an invalid clan password."));
218 player.dialogueFactory.clear();
219 return;
220 }
221 player.dialogueFactory.sendStatement("Password was accepted!").execute();
222 channel.establish(player, member);
223 }));
224 }).execute();
225 return true;
226 }
227
231 void connected(ClanMember member) {
232 updateMemberList(member);
233 member.player.ifPresent(player -> {
234 player.send(new SendMessage("Now talking in clan chat <col=FFFF64><shad=0>" + Utility.formatName(channel.getName()) + "</shad></col>."));
235 player.send(new SendMessage("To talk, start each line of chat with the / symbol."));
236 });
237 }
238
242 void sendConnectionWarning(Player player, ClanMember member) {
243 player.dialogueFactory.sendStatement(
244 "-<col=FF0000>WARNING</col>-",
245 "Contributing to this clan or gaining a rank will remove",
246 "all of your progress from your current clan <col=FF4444>" + player.lastClan + "</col>.",
247 "Are you sure you want to join?")
248 .sendOption(
249 "Yes, I accept.",
250 () -> channel.add(player, member),
251 "No, I don't want to risk it.",
252 () -> player.clanChannel = null).execute();
253 }
254
255 public static void manageMember(Player player, int button) {
256 ClanChannel channel = player.clanChannel;
257 if (channel == null)
258 return;
259 channel.getMember(player.getName()).ifPresent(member -> {
260 if (!channel.canManage(member))
261 return;
262
263 List<ClanMember> sorted = new ArrayList<>(channel.getActiveMembers());
264 sorted.sort(player.settings.clanMemberComporator);
265
266 int ordinal = ClanUtility.getRankOrdinal(button);
267 if (ordinal >= sorted.size())
268 return;
269
270 ClanMember other = sorted.get(ordinal);
271 if (other != null && !other.name.equalsIgnoreCase(player.getName()) && other.rank.lessThan(ClanRank.LEADER)) {
272 player.attributes.set("CLAN_RANK_MEMBER", other);
273 player.send(new SendString(other.name, 43606));
274 player.interfaceManager.open(43600);
275 }
276 });
277 }
278
282 public void updateMemberList(ClanMember member) {
283 Player player = member.player.orElse(null);
284 if (player == null)
285 return;
286 int size = channel.size() < 10 ? 10 : channel.size();
287 player.send(new SendString("Talking in: <col=F7DC6F>" + Utility.formatName(channel.getName()), 33502));
288 player.send(new SendConfig(393, channel.lootshareEnabled() ? 1 : 0));
289 player.send(new SendScrollbar(33530, size * 22));
290
291
292 List<ClanMember> members = new LinkedList<>();
293 members.addAll(channel.getMembers());
294 members.sort(player.settings.clanMemberComporator);
295
296 Iterator<ClanMember> iterator = members.iterator();
297 boolean tooltip = channel.canManage(member);
298 int string = 33532;
299
300 for (int index = 0; index < size * 3; index++) {
301 ClanMember nextMember = null;
302 if (iterator.hasNext()) {
303 nextMember = iterator.next();
304 }
305 if (nextMember == null || (!nextMember.player.isPresent() && index / 3 >= members.size())) {
306 player.send(new SendString("", string++));
307 player.send(new SendString("", string));
308 player.send(new SendTooltip("", string++));
309 player.send(new SendString("", string++));
310 string++;
311 } else if (nextMember.player.isPresent()) {
312 player.send(new SendString(nextMember.rank.getString(), string++));
313 player.send(new SendString(nextMember.name, string));
314 player.send(new SendTooltip(tooltip ? (nextMember.name.equals(player.getName()) ? "" : "Manage " + nextMember.name) : "", string++));
315 player.send(new SendString("", string++));
316 string++;
317 }
318 }
319 }
320
324 public static void clean(Player player) {
325 player.send(new SendString("Talking in: <col=F7DC6F>None", 33502));
326 for (int i = 0; i < 99; i += 4) {
327 player.send(new SendString("", 33531 + (i + 1)));
328 player.send(new SendString("", 33531 + (i + 2)));
329 player.send(new SendString("", 33531 + (i + 3)));
330 }
331 player.send(new SendScrollbar(33530, 11 * 22));
332 }
333
334}
static ClanChannel getChannel(String channel)
static boolean disconnect(Player player, boolean logout)
final DialogueFactory sendStatement(String... lines)
final DialogueFactory sendOption(String option1, Runnable action1, String option2, Runnable action2)
final DialogueFactory onAction(Runnable action)