RuneHive-Tarnish
Neural OSRS Enhancement Framework
Loading...
Searching...
No Matches
PlayerRelation.java
1package com.osroyale.game.world.entity.mob.player.relations;
2
3import com.osroyale.game.event.impl.log.PrivateMessageChatLogEvent;
4import com.osroyale.game.world.World;
5import com.osroyale.game.world.entity.mob.player.Player;
6import com.osroyale.net.packet.out.*;
7import com.osroyale.util.Utility;
8
9import java.util.ArrayList;
10import java.util.List;
11import java.util.Optional;
12
46
47public final class PlayerRelation {
48
49 private PrivacyChatMode publicChatMode = PrivacyChatMode.ON;
50 private PrivacyChatMode privateChatMode = PrivacyChatMode.ON;
51 private PrivacyChatMode clanChatMode = PrivacyChatMode.ON;
52 private PrivacyChatMode tradeChatMode = PrivacyChatMode.ON;
53
54 private final List<Long> friendList = new ArrayList<>(200);
55
56 private final List<Long> ignoreList = new ArrayList<>(100);
57
58 private int privateMessageId = 1;
59
60 public int getPrivateMessageId() {
61 return privateMessageId++;
62 }
63
64 private Player player;
65
66 public PlayerRelation(Player player) {
67 this.player = player;
68 }
69
70 public PlayerRelation setPrivateMessageId(int privateMessageId) {
71 this.privateMessageId = privateMessageId;
72 return this;
73 }
74
75 public List<Long> getFriendList() {
76 return friendList;
77 }
78
79 public List<Long> getIgnoreList() {
80 return ignoreList;
81 }
82
83 public PlayerRelation updateLists(boolean online) {
84
85 if (privateChatMode == PrivacyChatMode.OFF) {
86 online = false;
87 }
88
90 for (Player players : World.getPlayers()) {
91 if (players == null) {
92 continue;
93 }
94 boolean temporaryOnlineStatus = online;
95 if (players.relations.friendList.contains(player.usernameLong)) {
96 if (privateChatMode.equals(PrivacyChatMode.FRIENDS_ONLY) && !friendList.contains(players.usernameLong) ||
97 privateChatMode.equals(PrivacyChatMode.OFF) || ignoreList.contains(players.usernameLong)) {
98 temporaryOnlineStatus = false;
99 }
100 players.send(new SendAddFriend(player.usernameLong, temporaryOnlineStatus ? 1 : 0));
101 }
102 boolean tempOn = true;
103 if (player.relations.friendList.contains(players.usernameLong)) {
104 if (players.relations.privateChatMode.equals(PrivacyChatMode.FRIENDS_ONLY) && !players.relations.getFriendList().contains(player.usernameLong) ||
105 players.relations.privateChatMode.equals(PrivacyChatMode.OFF) || players.relations.getIgnoreList().contains(player.usernameLong)) {
106 tempOn = false;
107 }
108 player.send(new SendAddFriend(players.usernameLong, tempOn ? 1 : 0));
109 }
110 }
111 return this;
112 }
113
114 private void updatePrivacyChatOptions() {
115 player.send(new SendChatOption(publicChatMode, privateChatMode, clanChatMode, tradeChatMode));
116 }
117
118 private void sendFriends() {
119 for (long l : friendList) {
120 player.send(new SendAddFriend(l, 0));
121 }
122 }
123
124 private void sendIgnores() {
125 for (long l : ignoreList) {
126 player.send(new SendAddIgnore(l));
127 }
128 }
129
130 private void sendAddFriend(long name) {
131 player.send(new SendAddFriend(name, 0));
132 }
133
134 public PlayerRelation onLogin() {
135 sendFriends();
136 sendIgnores();
137 updatePrivacyChatOptions();
138 updateLists(true);
139 return this;
140 }
141
142 public void addFriend(Long username) {
143 String name = Utility.formatName(Utility.longToString(username));
144
145 if (player.usernameLong == username) {
146 return;
147 }
148
149 if (friendList.size() >= 200) {
150 player.send(new SendMessage("Your friend list is full!"));
151 return;
152 }
153 if (ignoreList.contains(username)) {
154 player.send(new SendMessage("Please remove " + name + " from your ignore list first."));
155 return;
156 }
157 if (friendList.contains(username)) {
158 player.send(new SendMessage(name + " is already on your friends list!"));
159 } else {
160 friendList.add(username);
161 sendAddFriend(username);
162 updateLists(true);
163 Optional<Player> result = World.search(name);
164
165 result.ifPresent(it -> it.relations.updateLists(true));
166 }
167 }
168
169 public boolean isFriendWith(String player) {
170 return friendList.contains(Utility.stringToLong(player));
171 }
172
173 public void deleteFriend(Long username) {
174 final String name = Utility.formatName(Utility.longToString(username));
175 if (name.equals(player.getUsername())) {
176 return;
177 }
178 if (friendList.contains(username)) {
179 friendList.remove(username);
180
181 if (privateChatMode != PrivacyChatMode.ON) {
182 updateLists(false);
183 }
184 } else {
185 player.send(new SendMessage("This player is not on your friends list!"));
186 }
187 }
188
189 public void addIgnore(Long username) {
190 String name = Utility.formatName(Utility.longToString(username));
191
192 if (player.usernameLong == username) {
193 return;
194 }
195
196 if (ignoreList.size() >= 100) {
197 player.send(new SendMessage("Your ignore list is full!"));
198 return;
199 }
200 if (friendList.contains(username)) {
201 player.send(new SendMessage("Please remove " + name + " from your friend list first."));
202 return;
203 }
204 if (ignoreList.contains(username)) {
205 player.send(new SendMessage(name + " is already on your ignore list!"));
206 } else {
207 ignoreList.add(username);
208 updateLists(true);
209
210 Optional<Player> result = World.search(name);
211 result.ifPresent(it -> it.relations.updateLists(false));
212 }
213 }
214
215 public void deleteIgnore(Long username) {
216 String name = Utility.formatName(Utility.longToString(username));
217 if (name.equals(player.getUsername())) {
218 return;
219 }
220 if (ignoreList.contains(username)) {
221 ignoreList.remove(username);
222 updateLists(true);
223 if (privateChatMode.equals(PrivacyChatMode.ON)) {
224 Optional<Player> result = World.search(name);
225 result.ifPresent(it -> it.relations.updateLists(true));
226 }
227 } else {
228 player.send(new SendMessage("This player is not on your ignore list!"));
229 }
230 }
231
232 public void message(Player friend, PrivateChatMessage message) {
233 if (player.punishment.isMuted()) {
234 player.message("You can not send private messages while muted!");
235 return;
236 }
237 if (friend == null) {
238 player.send(new SendMessage("This player is currently offline."));
239 return;
240 }
241
242 if (friend.relations.privateChatMode.equals(PrivacyChatMode.FRIENDS_ONLY) && !friend.relations.friendList.contains(player.usernameLong) || friend.relations.privateChatMode.equals(PrivacyChatMode.OFF)) {
243 player.send(new SendMessage("This player is currently offline."));
244 return;
245 }
246
247 if (privateChatMode == PrivacyChatMode.OFF) {
248 setPrivateChatMode(PrivacyChatMode.FRIENDS_ONLY, true);
249 }
250
251 friend.send(new SendPrivateMessage(player.usernameLong, player.right, message.getCompressed()));
252 World.getDataBus().publish(new PrivateMessageChatLogEvent(player, friend, message.getDecompressed()));
253 }
254
255 public PlayerRelation setPrivateChatMode(PrivacyChatMode privateChatMode, boolean update) {
256 if (this.privateChatMode == privateChatMode) {
257 return this;
258 }
259
260 this.privateChatMode = privateChatMode;
261
262 if (update) {
263 updateLists(true);
264 }
265
266 return this;
267 }
268
269 public void setPrivacyChatModes(int publicChat, int privateChat, int clanChat, int tradeChat) {
270 if (publicChat >= 0 && publicChat <= PrivacyChatMode.HIDE.getCode()) {
271 PrivacyChatMode.get(publicChat).ifPresent(it -> this.publicChatMode = it);
272 }
273
274 if (privateChat >= 0 && privateChat <= PrivacyChatMode.OFF.getCode()) {
275 PrivacyChatMode.get(privateChat).ifPresent(it -> setPrivateChatMode(it, true));
276 }
277
278 if (clanChat >= 0 && clanChat <= PrivacyChatMode.OFF.getCode()) {
279 PrivacyChatMode.get(clanChat).ifPresent(it -> this.clanChatMode = it);
280 }
281
282 if (tradeChat >= 0 && tradeChat <= PrivacyChatMode.OFF.getCode()) {
283 PrivacyChatMode.get(tradeChat).ifPresent(it -> this.tradeChatMode = it);
284 }
285 }
286
287 public PrivacyChatMode getPublicChatMode() {
288 return publicChatMode;
289 }
290
291 public void setPublicChatMode(PrivacyChatMode publicChatMode, boolean update) {
292 this.publicChatMode = publicChatMode;
293 if (update) {
294 updatePrivacyChatOptions();
295 }
296 }
297
298 public PrivacyChatMode getPrivateChatMode() {
299 return privateChatMode;
300 }
301
302 public void setClanChatMode(PrivacyChatMode clanChatMode, boolean update) {
303 this.clanChatMode = clanChatMode;
304 if (update) {
305 updatePrivacyChatOptions();
306 }
307 }
308
309 public PrivacyChatMode getClanChatMode() {
310 return clanChatMode;
311 }
312
313 public PrivacyChatMode getTradeChatMode() {
314 return tradeChatMode;
315 }
316
317 public void setTradeChatMode(PrivacyChatMode tradeChatMode, boolean update) {
318 this.tradeChatMode = tradeChatMode;
319 if (update) {
320 updatePrivacyChatOptions();
321 }
322 }
323
324}
static Optional< Player > search(String name)
Definition World.java:184