RuneHive-Game
Loading...
Searching...
No Matches
PlayerRelation.java
Go to the documentation of this file.
1package com.runehive.game.world.entity.mob.player.relations;
2
3import com.runehive.game.event.impl.log.PrivateMessageChatLogEvent;
4import com.runehive.game.world.World;
5import com.runehive.game.world.entity.mob.player.Player;
6import com.runehive.net.packet.out.*;
7import com.runehive.util.Utility;
8
9import java.util.ArrayList;
10import java.util.List;
11import java.util.Optional;
12
13public final class PlayerRelation {
14
19
20 private final List<Long> friendList = new ArrayList<>(200);
21
22 private final List<Long> ignoreList = new ArrayList<>(100);
23
24 private int privateMessageId = 1;
25
26 public int getPrivateMessageId() {
27 return privateMessageId++;
28 }
29
30 private Player player;
31
33 this.player = player;
34 }
35
37 this.privateMessageId = privateMessageId;
38 return this;
39 }
40
41 public List<Long> getFriendList() {
42 return friendList;
43 }
44
45 public List<Long> getIgnoreList() {
46 return ignoreList;
47 }
48
49 public PlayerRelation updateLists(boolean online) {
50
52 online = false;
53 }
54
56 for (Player players : World.getPlayers()) {
57 if (players == null) {
58 continue;
59 }
60 boolean temporaryOnlineStatus = online;
61 if (players.relations.friendList.contains(player.usernameLong)) {
62 if (privateChatMode.equals(PrivacyChatMode.FRIENDS_ONLY) && !friendList.contains(players.usernameLong) ||
63 privateChatMode.equals(PrivacyChatMode.OFF) || ignoreList.contains(players.usernameLong)) {
64 temporaryOnlineStatus = false;
65 }
66 players.send(new SendAddFriend(player.usernameLong, temporaryOnlineStatus ? 1 : 0));
67 }
68 boolean tempOn = true;
69 if (player.relations.friendList.contains(players.usernameLong)) {
70 if (players.relations.privateChatMode.equals(PrivacyChatMode.FRIENDS_ONLY) && !players.relations.getFriendList().contains(player.usernameLong) ||
71 players.relations.privateChatMode.equals(PrivacyChatMode.OFF) || players.relations.getIgnoreList().contains(player.usernameLong)) {
72 tempOn = false;
73 }
74 player.send(new SendAddFriend(players.usernameLong, tempOn ? 1 : 0));
75 }
76 }
77 return this;
78 }
79
83
84 private void sendFriends() {
85 for (long l : friendList) {
86 player.send(new SendAddFriend(l, 0));
87 }
88 }
89
90 private void sendIgnores() {
91 for (long l : ignoreList) {
92 player.send(new SendAddIgnore(l));
93 }
94 }
95
96 private void sendAddFriend(long name) {
97 player.send(new SendAddFriend(name, 0));
98 }
99
101 sendFriends();
102 sendIgnores();
104 updateLists(true);
105 return this;
106 }
107
108 public void addFriend(Long username) {
109 String name = Utility.formatName(Utility.longToString(username));
110
111 if (player.usernameLong == username) {
112 return;
113 }
114
115 if (friendList.size() >= 200) {
116 player.send(new SendMessage("Your friend list is full!"));
117 return;
118 }
119 if (ignoreList.contains(username)) {
120 player.send(new SendMessage("Please remove " + name + " from your ignore list first."));
121 return;
122 }
123 if (friendList.contains(username)) {
124 player.send(new SendMessage(name + " is already on your friends list!"));
125 } else {
126 friendList.add(username);
127 sendAddFriend(username);
128 updateLists(true);
129 Optional<Player> result = World.search(name);
130
131 result.ifPresent(it -> it.relations.updateLists(true));
132 }
133 }
134
135 public boolean isFriendWith(String player) {
136 return friendList.contains(Utility.stringToLong(player));
137 }
138
139 public void deleteFriend(Long username) {
140 final String name = Utility.formatName(Utility.longToString(username));
141 if (name.equals(player.getUsername())) {
142 return;
143 }
144 if (friendList.contains(username)) {
145 friendList.remove(username);
146
148 updateLists(false);
149 }
150 } else {
151 player.send(new SendMessage("This player is not on your friends list!"));
152 }
153 }
154
155 public void addIgnore(Long username) {
156 String name = Utility.formatName(Utility.longToString(username));
157
158 if (player.usernameLong == username) {
159 return;
160 }
161
162 if (ignoreList.size() >= 100) {
163 player.send(new SendMessage("Your ignore list is full!"));
164 return;
165 }
166 if (friendList.contains(username)) {
167 player.send(new SendMessage("Please remove " + name + " from your friend list first."));
168 return;
169 }
170 if (ignoreList.contains(username)) {
171 player.send(new SendMessage(name + " is already on your ignore list!"));
172 } else {
173 ignoreList.add(username);
174 updateLists(true);
175
176 Optional<Player> result = World.search(name);
177 result.ifPresent(it -> it.relations.updateLists(false));
178 }
179 }
180
181 public void deleteIgnore(Long username) {
182 String name = Utility.formatName(Utility.longToString(username));
183 if (name.equals(player.getUsername())) {
184 return;
185 }
186 if (ignoreList.contains(username)) {
187 ignoreList.remove(username);
188 updateLists(true);
189 if (privateChatMode.equals(PrivacyChatMode.ON)) {
190 Optional<Player> result = World.search(name);
191 result.ifPresent(it -> it.relations.updateLists(true));
192 }
193 } else {
194 player.send(new SendMessage("This player is not on your ignore list!"));
195 }
196 }
197
199 if (player.punishment.isMuted()) {
200 player.message("You can not send private messages while muted!");
201 return;
202 }
203 if (friend == null) {
204 player.send(new SendMessage("This player is currently offline."));
205 return;
206 }
207
208 if (friend.relations.privateChatMode.equals(PrivacyChatMode.FRIENDS_ONLY) && !friend.relations.friendList.contains(player.usernameLong) || friend.relations.privateChatMode.equals(PrivacyChatMode.OFF)) {
209 player.send(new SendMessage("This player is currently offline."));
210 return;
211 }
212
215 }
216
217 friend.send(new SendPrivateMessage(player.usernameLong, player.right, message.getCompressed()));
218 World.getDataBus().publish(new PrivateMessageChatLogEvent(player, friend, message.getDecompressed()));
219 }
220
222 if (this.privateChatMode == privateChatMode) {
223 return this;
224 }
225
226 this.privateChatMode = privateChatMode;
227
228 if (update) {
229 updateLists(true);
230 }
231
232 return this;
233 }
234
235 public void setPrivacyChatModes(int publicChat, int privateChat, int clanChat, int tradeChat) {
236 if (publicChat >= 0 && publicChat <= PrivacyChatMode.HIDE.getCode()) {
237 PrivacyChatMode.get(publicChat).ifPresent(it -> this.publicChatMode = it);
238 }
239
240 if (privateChat >= 0 && privateChat <= PrivacyChatMode.OFF.getCode()) {
241 PrivacyChatMode.get(privateChat).ifPresent(it -> setPrivateChatMode(it, true));
242 }
243
244 if (clanChat >= 0 && clanChat <= PrivacyChatMode.OFF.getCode()) {
245 PrivacyChatMode.get(clanChat).ifPresent(it -> this.clanChatMode = it);
246 }
247
248 if (tradeChat >= 0 && tradeChat <= PrivacyChatMode.OFF.getCode()) {
249 PrivacyChatMode.get(tradeChat).ifPresent(it -> this.tradeChatMode = it);
250 }
251 }
252
256
257 public void setPublicChatMode(PrivacyChatMode publicChatMode, boolean update) {
258 this.publicChatMode = publicChatMode;
259 if (update) {
261 }
262 }
263
267
268 public void setClanChatMode(PrivacyChatMode clanChatMode, boolean update) {
269 this.clanChatMode = clanChatMode;
270 if (update) {
272 }
273 }
274
276 return clanChatMode;
277 }
278
280 return tradeChatMode;
281 }
282
283 public void setTradeChatMode(PrivacyChatMode tradeChatMode, boolean update) {
284 this.tradeChatMode = tradeChatMode;
285 if (update) {
287 }
288 }
289
290}
void publish(Event event)
Sends an Event to all subscribed listeners.
Definition DataBus.java:92
Represents the game world.
Definition World.java:46
static Optional< Player > search(String name)
Gets a player by name.
Definition World.java:147
static DataBus getDataBus()
Definition World.java:568
static MobList< Player > getPlayers()
Definition World.java:544
This class represents a character controlled by a player.
Definition Player.java:125
void setPublicChatMode(PrivacyChatMode publicChatMode, boolean update)
void setTradeChatMode(PrivacyChatMode tradeChatMode, boolean update)
PlayerRelation setPrivateChatMode(PrivacyChatMode privateChatMode, boolean update)
void message(Player friend, PrivateChatMessage message)
void setClanChatMode(PrivacyChatMode clanChatMode, boolean update)
void setPrivacyChatModes(int publicChat, int privateChat, int clanChat, int tradeChat)
Handles sending the deposit friend packet.
The OutgoingPacket that sends a message to a Players chatbox in the client.
Handles miscellaneous methods.
Definition Utility.java:27
static String formatName(final String input)
Definition Utility.java:645
static String longToString(long l)
Definition Utility.java:202
static long stringToLong(String string)
Definition Utility.java:71