47public final class PlayerRelation {
54 private final List<Long> friendList =
new ArrayList<>(200);
56 private final List<Long> ignoreList =
new ArrayList<>(100);
58 private int privateMessageId = 1;
60 public int getPrivateMessageId() {
61 return privateMessageId++;
66 public PlayerRelation(
Player player) {
70 public PlayerRelation setPrivateMessageId(
int privateMessageId) {
71 this.privateMessageId = privateMessageId;
75 public List<Long> getFriendList() {
79 public List<Long> getIgnoreList() {
83 public PlayerRelation updateLists(
boolean online) {
91 if (players ==
null) {
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;
100 players.send(
new SendAddFriend(player.usernameLong, temporaryOnlineStatus ? 1 : 0));
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)) {
108 player.send(
new SendAddFriend(players.usernameLong, tempOn ? 1 : 0));
114 private void updatePrivacyChatOptions() {
115 player.send(
new SendChatOption(publicChatMode, privateChatMode, clanChatMode, tradeChatMode));
118 private void sendFriends() {
119 for (
long l : friendList) {
124 private void sendIgnores() {
125 for (
long l : ignoreList) {
130 private void sendAddFriend(
long name) {
134 public PlayerRelation onLogin() {
137 updatePrivacyChatOptions();
142 public void addFriend(Long username) {
145 if (player.usernameLong == username) {
149 if (friendList.size() >= 200) {
150 player.send(
new SendMessage(
"Your friend list is full!"));
153 if (ignoreList.contains(username)) {
154 player.send(
new SendMessage(
"Please remove " + name +
" from your ignore list first."));
157 if (friendList.contains(username)) {
158 player.send(
new SendMessage(name +
" is already on your friends list!"));
160 friendList.add(username);
161 sendAddFriend(username);
165 result.ifPresent(it -> it.relations.updateLists(
true));
169 public boolean isFriendWith(String player) {
170 return friendList.contains(
Utility.stringToLong(player));
173 public void deleteFriend(Long username) {
174 final String name =
Utility.formatName(
Utility.longToString(username));
175 if (name.equals(player.getUsername())) {
178 if (friendList.contains(username)) {
179 friendList.remove(username);
185 player.send(
new SendMessage(
"This player is not on your friends list!"));
189 public void addIgnore(Long username) {
192 if (player.usernameLong == username) {
196 if (ignoreList.size() >= 100) {
197 player.send(
new SendMessage(
"Your ignore list is full!"));
200 if (friendList.contains(username)) {
201 player.send(
new SendMessage(
"Please remove " + name +
" from your friend list first."));
204 if (ignoreList.contains(username)) {
205 player.send(
new SendMessage(name +
" is already on your ignore list!"));
207 ignoreList.add(username);
211 result.ifPresent(it -> it.relations.updateLists(
false));
215 public void deleteIgnore(Long username) {
217 if (name.equals(player.getUsername())) {
220 if (ignoreList.contains(username)) {
221 ignoreList.remove(username);
225 result.ifPresent(it -> it.relations.updateLists(
true));
228 player.send(
new SendMessage(
"This player is not on your ignore list!"));
233 if (player.punishment.isMuted()) {
234 player.message(
"You can not send private messages while muted!");
237 if (friend ==
null) {
238 player.send(
new SendMessage(
"This player is currently offline."));
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."));
251 friend.send(
new SendPrivateMessage(player.usernameLong, player.right, message.getCompressed()));
255 public PlayerRelation setPrivateChatMode(
PrivacyChatMode privateChatMode,
boolean update) {
256 if (this.privateChatMode == privateChatMode) {
260 this.privateChatMode = privateChatMode;
269 public void setPrivacyChatModes(
int publicChat,
int privateChat,
int clanChat,
int tradeChat) {
271 PrivacyChatMode.get(publicChat).ifPresent(it -> this.publicChatMode = it);
274 if (privateChat >= 0 && privateChat <=
PrivacyChatMode.OFF.getCode()) {
275 PrivacyChatMode.get(privateChat).ifPresent(it -> setPrivateChatMode(it,
true));
283 PrivacyChatMode.get(tradeChat).ifPresent(it -> this.tradeChatMode = it);
288 return publicChatMode;
291 public void setPublicChatMode(
PrivacyChatMode publicChatMode,
boolean update) {
292 this.publicChatMode = publicChatMode;
294 updatePrivacyChatOptions();
299 return privateChatMode;
302 public void setClanChatMode(
PrivacyChatMode clanChatMode,
boolean update) {
303 this.clanChatMode = clanChatMode;
305 updatePrivacyChatOptions();
314 return tradeChatMode;
317 public void setTradeChatMode(
PrivacyChatMode tradeChatMode,
boolean update) {
318 this.tradeChatMode = tradeChatMode;
320 updatePrivacyChatOptions();