Merge chr name + id wrappers into new CharacterIdentity record
This commit is contained in:
@@ -21,6 +21,7 @@
|
|||||||
*/
|
*/
|
||||||
package client;
|
package client;
|
||||||
|
|
||||||
|
import model.CharacterIdentity;
|
||||||
import net.packet.Packet;
|
import net.packet.Packet;
|
||||||
import net.server.PlayerStorage;
|
import net.server.PlayerStorage;
|
||||||
import tools.DatabaseConnection;
|
import tools.DatabaseConnection;
|
||||||
@@ -43,7 +44,7 @@ public class BuddyList {
|
|||||||
|
|
||||||
private final Map<Integer, BuddylistEntry> buddies = new LinkedHashMap<>();
|
private final Map<Integer, BuddylistEntry> buddies = new LinkedHashMap<>();
|
||||||
private int capacity;
|
private int capacity;
|
||||||
private final Deque<CharacterNameAndId> pendingRequests = new LinkedList<>();
|
private final Deque<CharacterIdentity> pendingRequests = new LinkedList<>();
|
||||||
|
|
||||||
public BuddyList(int capacity) {
|
public BuddyList(int capacity) {
|
||||||
this.capacity = capacity;
|
this.capacity = capacity;
|
||||||
@@ -145,7 +146,7 @@ public class BuddyList {
|
|||||||
try (ResultSet rs = ps.executeQuery()) {
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
if (rs.getInt("pending") == 1) {
|
if (rs.getInt("pending") == 1) {
|
||||||
pendingRequests.push(new CharacterNameAndId(rs.getInt("buddyid"), rs.getString("buddyname")));
|
pendingRequests.push(new CharacterIdentity(rs.getString("buddyname"), rs.getInt("buddyid")));
|
||||||
} else {
|
} else {
|
||||||
put(new BuddylistEntry(rs.getString("buddyname"), rs.getString("group"), rs.getInt("buddyid"), (byte) -1, true));
|
put(new BuddylistEntry(rs.getString("buddyname"), rs.getString("group"), rs.getInt("buddyid"), (byte) -1, true));
|
||||||
}
|
}
|
||||||
@@ -162,7 +163,7 @@ public class BuddyList {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CharacterNameAndId pollPendingRequest() {
|
public CharacterIdentity pollPendingRequest() {
|
||||||
return pendingRequests.pollLast();
|
return pendingRequests.pollLast();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,7 +172,7 @@ public class BuddyList {
|
|||||||
if (pendingRequests.isEmpty()) {
|
if (pendingRequests.isEmpty()) {
|
||||||
c.sendPacket(PacketCreator.requestBuddylistAdd(cidFrom, c.getPlayer().getId(), nameFrom));
|
c.sendPacket(PacketCreator.requestBuddylistAdd(cidFrom, c.getPlayer().getId(), nameFrom));
|
||||||
} else {
|
} else {
|
||||||
pendingRequests.push(new CharacterNameAndId(cidFrom, nameFrom));
|
pendingRequests.push(new CharacterIdentity(nameFrom, cidFrom));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ import constants.id.MapId;
|
|||||||
import constants.id.MobId;
|
import constants.id.MobId;
|
||||||
import constants.inventory.ItemConstants;
|
import constants.inventory.ItemConstants;
|
||||||
import constants.skills.*;
|
import constants.skills.*;
|
||||||
|
import model.CharacterIdentity;
|
||||||
import net.packet.Packet;
|
import net.packet.Packet;
|
||||||
import net.server.PlayerBuffValueHolder;
|
import net.server.PlayerBuffValueHolder;
|
||||||
import net.server.PlayerCoolDownValueHolder;
|
import net.server.PlayerCoolDownValueHolder;
|
||||||
@@ -2115,9 +2116,9 @@ public class Character extends AbstractCharacterObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void nextPendingRequest(Client c) {
|
private void nextPendingRequest(Client c) {
|
||||||
CharacterNameAndId pendingBuddyRequest = c.getPlayer().getBuddylist().pollPendingRequest();
|
CharacterIdentity pendingBuddyRequest = c.getPlayer().getBuddylist().pollPendingRequest();
|
||||||
if (pendingBuddyRequest != null) {
|
if (pendingBuddyRequest != null) {
|
||||||
c.sendPacket(PacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName()));
|
c.sendPacket(PacketCreator.requestBuddylistAdd(pendingBuddyRequest.id(), c.getPlayer().getId(), pendingBuddyRequest.name()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,41 +0,0 @@
|
|||||||
/*
|
|
||||||
This file is part of the OdinMS Maple Story Server
|
|
||||||
Copyright (C) 2008 Patrick Huy <patrick.huy@frz.cc>
|
|
||||||
Matthias Butz <matze@odinms.de>
|
|
||||||
Jan Christian Meyer <vimes@odinms.de>
|
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU Affero General Public License as
|
|
||||||
published by the Free Software Foundation version 3 as published by
|
|
||||||
the Free Software Foundation. You may not use, modify or distribute
|
|
||||||
this program under any other version of the GNU Affero General Public
|
|
||||||
License.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Affero General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package client;
|
|
||||||
|
|
||||||
public class CharacterNameAndId {
|
|
||||||
private final int id;
|
|
||||||
private final String name;
|
|
||||||
|
|
||||||
public CharacterNameAndId(int id, String name) {
|
|
||||||
super();
|
|
||||||
this.id = id;
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getId() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -27,6 +27,7 @@ import constants.id.MapId;
|
|||||||
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
import io.netty.channel.ChannelInboundHandlerAdapter;
|
import io.netty.channel.ChannelInboundHandlerAdapter;
|
||||||
import io.netty.handler.timeout.IdleStateEvent;
|
import io.netty.handler.timeout.IdleStateEvent;
|
||||||
|
import model.CharacterIdentity;
|
||||||
import net.PacketHandler;
|
import net.PacketHandler;
|
||||||
import net.PacketProcessor;
|
import net.PacketProcessor;
|
||||||
import net.netty.DisconnectException;
|
import net.netty.DisconnectException;
|
||||||
@@ -308,8 +309,8 @@ public class Client extends ChannelInboundHandlerAdapter {
|
|||||||
public List<Character> loadCharacters(int serverId) {
|
public List<Character> loadCharacters(int serverId) {
|
||||||
List<Character> chars = new ArrayList<>(15);
|
List<Character> chars = new ArrayList<>(15);
|
||||||
try {
|
try {
|
||||||
for (CharNameAndId cni : loadCharactersInternal(serverId)) {
|
for (CharacterIdentity cni : loadCharactersInternal(serverId)) {
|
||||||
chars.add(Character.loadCharFromDB(cni.id, this, false));
|
chars.add(Character.loadCharFromDB(cni.id(), this, false));
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -317,8 +318,8 @@ public class Client extends ChannelInboundHandlerAdapter {
|
|||||||
return chars;
|
return chars;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<CharNameAndId> loadCharactersInternal(int worldId) {
|
private List<CharacterIdentity> loadCharactersInternal(int worldId) {
|
||||||
List<CharNameAndId> chars = new ArrayList<>(15);
|
List<CharacterIdentity> chars = new ArrayList<>(15);
|
||||||
try (Connection con = DatabaseConnection.getConnection();
|
try (Connection con = DatabaseConnection.getConnection();
|
||||||
PreparedStatement ps = con.prepareStatement("SELECT id, name FROM characters WHERE accountid = ? AND world = ?")) {
|
PreparedStatement ps = con.prepareStatement("SELECT id, name FROM characters WHERE accountid = ? AND world = ?")) {
|
||||||
ps.setInt(1, this.getAccID());
|
ps.setInt(1, this.getAccID());
|
||||||
@@ -326,7 +327,7 @@ public class Client extends ChannelInboundHandlerAdapter {
|
|||||||
|
|
||||||
try (ResultSet rs = ps.executeQuery()) {
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
chars.add(new CharNameAndId(rs.getString("name"), rs.getInt("id")));
|
chars.add(new CharacterIdentity(rs.getString("name"), rs.getInt("id")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
@@ -1160,18 +1161,6 @@ public class Client extends ChannelInboundHandlerAdapter {
|
|||||||
actionsSemaphore.release();
|
actionsSemaphore.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class CharNameAndId {
|
|
||||||
|
|
||||||
public String name;
|
|
||||||
public int id;
|
|
||||||
|
|
||||||
public CharNameAndId(String name, int id) {
|
|
||||||
super();
|
|
||||||
this.name = name;
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean checkHash(String hash, String type, String password) {
|
private static boolean checkHash(String hash, String type, String password) {
|
||||||
try {
|
try {
|
||||||
MessageDigest digester = MessageDigest.getInstance(type);
|
MessageDigest digester = MessageDigest.getInstance(type);
|
||||||
|
|||||||
9
src/main/java/model/CharacterIdentity.java
Normal file
9
src/main/java/model/CharacterIdentity.java
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
package model;
|
||||||
|
|
||||||
|
public record CharacterIdentity(String name, int id) {
|
||||||
|
public CharacterIdentity {
|
||||||
|
if (name == null) {
|
||||||
|
throw new IllegalArgumentException("Character name must not be null");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -21,10 +21,13 @@
|
|||||||
*/
|
*/
|
||||||
package net.server.channel.handlers;
|
package net.server.channel.handlers;
|
||||||
|
|
||||||
import client.*;
|
import client.BuddyList;
|
||||||
import client.BuddyList.BuddyAddResult;
|
import client.BuddyList.BuddyAddResult;
|
||||||
import client.Character;
|
|
||||||
import client.BuddyList.BuddyOperation;
|
import client.BuddyList.BuddyOperation;
|
||||||
|
import client.BuddylistEntry;
|
||||||
|
import client.Character;
|
||||||
|
import client.Client;
|
||||||
|
import model.CharacterIdentity;
|
||||||
import net.AbstractPacketHandler;
|
import net.AbstractPacketHandler;
|
||||||
import net.packet.InPacket;
|
import net.packet.InPacket;
|
||||||
import net.server.world.World;
|
import net.server.world.World;
|
||||||
@@ -39,28 +42,24 @@ import java.sql.SQLException;
|
|||||||
import static client.BuddyList.BuddyOperation.ADDED;
|
import static client.BuddyList.BuddyOperation.ADDED;
|
||||||
|
|
||||||
public class BuddylistModifyHandler extends AbstractPacketHandler {
|
public class BuddylistModifyHandler extends AbstractPacketHandler {
|
||||||
private static class CharacterIdNameBuddyCapacity extends CharacterNameAndId {
|
|
||||||
private final int buddyCapacity;
|
|
||||||
|
|
||||||
public CharacterIdNameBuddyCapacity(int id, String name, int buddyCapacity) {
|
private record BuddyIdentity(String name, int id, int buddyCapacity) {
|
||||||
super(id, name);
|
public BuddyIdentity {
|
||||||
this.buddyCapacity = buddyCapacity;
|
if (name == null) {
|
||||||
|
throw new IllegalArgumentException("name must not be null");
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getBuddyCapacity() {
|
|
||||||
return buddyCapacity;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void nextPendingRequest(Client c) {
|
private void nextPendingRequest(Client c) {
|
||||||
CharacterNameAndId pendingBuddyRequest = c.getPlayer().getBuddylist().pollPendingRequest();
|
CharacterIdentity pendingBuddyRequest = c.getPlayer().getBuddylist().pollPendingRequest();
|
||||||
if (pendingBuddyRequest != null) {
|
if (pendingBuddyRequest != null) {
|
||||||
c.sendPacket(PacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName()));
|
c.sendPacket(PacketCreator.requestBuddylistAdd(pendingBuddyRequest.id(), c.getPlayer().getId(), pendingBuddyRequest.name()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private CharacterIdNameBuddyCapacity getCharacterIdAndNameFromDatabase(String name) throws SQLException {
|
private BuddyIdentity getBuddyIdentityFromDatabase(String name) throws SQLException {
|
||||||
CharacterIdNameBuddyCapacity ret = null;
|
BuddyIdentity buddyIdentity = null;
|
||||||
|
|
||||||
try (Connection con = DatabaseConnection.getConnection();
|
try (Connection con = DatabaseConnection.getConnection();
|
||||||
PreparedStatement ps = con.prepareStatement("SELECT id, name, buddyCapacity FROM characters WHERE name LIKE ?")) {
|
PreparedStatement ps = con.prepareStatement("SELECT id, name, buddyCapacity FROM characters WHERE name LIKE ?")) {
|
||||||
@@ -68,12 +67,15 @@ public class BuddylistModifyHandler extends AbstractPacketHandler {
|
|||||||
|
|
||||||
try (ResultSet rs = ps.executeQuery()) {
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
if (rs.next()) {
|
if (rs.next()) {
|
||||||
ret = new CharacterIdNameBuddyCapacity(rs.getInt("id"), rs.getString("name"), rs.getInt("buddyCapacity"));
|
String actualName = rs.getString("name");
|
||||||
|
int id = rs.getInt("id");
|
||||||
|
int buddyCapacity = rs.getInt("buddyCapacity");
|
||||||
|
buddyIdentity = new BuddyIdentity(actualName, id, buddyCapacity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return buddyIdentity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -95,36 +97,39 @@ public class BuddylistModifyHandler extends AbstractPacketHandler {
|
|||||||
} else if (ble == null) {
|
} else if (ble == null) {
|
||||||
try {
|
try {
|
||||||
World world = c.getWorldServer();
|
World world = c.getWorldServer();
|
||||||
CharacterIdNameBuddyCapacity charWithId;
|
final BuddyIdentity buddyIdentity;
|
||||||
int channel;
|
int channel;
|
||||||
Character otherChar = c.getChannelServer().getPlayerStorage().getCharacterByName(addName);
|
Character otherChar = c.getChannelServer().getPlayerStorage().getCharacterByName(addName);
|
||||||
if (otherChar != null) {
|
if (otherChar != null) {
|
||||||
channel = c.getChannel();
|
channel = c.getChannel();
|
||||||
charWithId = new CharacterIdNameBuddyCapacity(otherChar.getId(), otherChar.getName(), otherChar.getBuddylist().getCapacity());
|
buddyIdentity = new BuddyIdentity(otherChar.getName(), otherChar.getId(), otherChar.getBuddylist().getCapacity());
|
||||||
} else {
|
} else {
|
||||||
channel = world.find(addName);
|
channel = world.find(addName);
|
||||||
charWithId = getCharacterIdAndNameFromDatabase(addName);
|
buddyIdentity = getBuddyIdentityFromDatabase(addName);
|
||||||
|
}
|
||||||
|
if (buddyIdentity == null) {
|
||||||
|
c.sendPacket(PacketCreator.serverNotice(1, "A character called \"" + addName + "\" does not exist"));
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
if (charWithId != null) {
|
|
||||||
BuddyAddResult buddyAddResult = null;
|
BuddyAddResult buddyAddResult = null;
|
||||||
if (channel != -1) {
|
if (channel != -1) {
|
||||||
buddyAddResult = world.requestBuddyAdd(addName, c.getChannel(), player.getId(), player.getName());
|
buddyAddResult = world.requestBuddyAdd(addName, c.getChannel(), player.getId(), player.getName());
|
||||||
} else {
|
} else {
|
||||||
try (Connection con = DatabaseConnection.getConnection()) {
|
try (Connection con = DatabaseConnection.getConnection()) {
|
||||||
try (PreparedStatement ps = con.prepareStatement("SELECT COUNT(*) as buddyCount FROM buddies WHERE characterid = ? AND pending = 0")) {
|
try (PreparedStatement ps = con.prepareStatement("SELECT COUNT(*) as buddyCount FROM buddies WHERE characterid = ? AND pending = 0")) {
|
||||||
ps.setInt(1, charWithId.getId());
|
ps.setInt(1, buddyIdentity.id());
|
||||||
|
|
||||||
try (ResultSet rs = ps.executeQuery()) {
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
if (!rs.next()) {
|
if (!rs.next()) {
|
||||||
throw new RuntimeException("Result set expected");
|
throw new RuntimeException("Result set expected");
|
||||||
} else if (rs.getInt("buddyCount") >= charWithId.getBuddyCapacity()) {
|
} else if (rs.getInt("buddyCount") >= buddyIdentity.buddyCapacity()) {
|
||||||
buddyAddResult = BuddyAddResult.BUDDYLIST_FULL;
|
buddyAddResult = BuddyAddResult.BUDDYLIST_FULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
try (PreparedStatement ps = con.prepareStatement("SELECT pending FROM buddies WHERE characterid = ? AND buddyid = ?")) {
|
try (PreparedStatement ps = con.prepareStatement("SELECT pending FROM buddies WHERE characterid = ? AND buddyid = ?")) {
|
||||||
ps.setInt(1, charWithId.getId());
|
ps.setInt(1, buddyIdentity.id());
|
||||||
ps.setInt(2, player.getId());
|
ps.setInt(2, player.getId());
|
||||||
|
|
||||||
try (ResultSet rs = ps.executeQuery()) {
|
try (ResultSet rs = ps.executeQuery()) {
|
||||||
@@ -140,24 +145,21 @@ public class BuddylistModifyHandler extends AbstractPacketHandler {
|
|||||||
} else {
|
} else {
|
||||||
int displayChannel;
|
int displayChannel;
|
||||||
displayChannel = -1;
|
displayChannel = -1;
|
||||||
int otherCid = charWithId.getId();
|
int otherCid = buddyIdentity.id();
|
||||||
if (buddyAddResult == BuddyAddResult.ALREADY_ON_LIST && channel != -1) {
|
if (buddyAddResult == BuddyAddResult.ALREADY_ON_LIST && channel != -1) {
|
||||||
displayChannel = channel;
|
displayChannel = channel;
|
||||||
notifyRemoteChannel(c, channel, otherCid, ADDED);
|
notifyRemoteChannel(c, channel, otherCid, ADDED);
|
||||||
} else if (buddyAddResult != BuddyAddResult.ALREADY_ON_LIST && channel == -1) {
|
} else if (buddyAddResult != BuddyAddResult.ALREADY_ON_LIST && channel == -1) {
|
||||||
try (Connection con = DatabaseConnection.getConnection();
|
try (Connection con = DatabaseConnection.getConnection();
|
||||||
PreparedStatement ps = con.prepareStatement("INSERT INTO buddies (characterid, `buddyid`, `pending`) VALUES (?, ?, 1)")) {
|
PreparedStatement ps = con.prepareStatement("INSERT INTO buddies (characterid, `buddyid`, `pending`) VALUES (?, ?, 1)")) {
|
||||||
ps.setInt(1, charWithId.getId());
|
ps.setInt(1, buddyIdentity.id());
|
||||||
ps.setInt(2, player.getId());
|
ps.setInt(2, player.getId());
|
||||||
ps.executeUpdate();
|
ps.executeUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
buddylist.put(new BuddylistEntry(charWithId.getName(), group, otherCid, displayChannel, true));
|
buddylist.put(new BuddylistEntry(buddyIdentity.name(), group, otherCid, displayChannel, true));
|
||||||
c.sendPacket(PacketCreator.updateBuddylist(buddylist.getBuddies()));
|
c.sendPacket(PacketCreator.updateBuddylist(buddylist.getBuddies()));
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
c.sendPacket(PacketCreator.serverNotice(1, "A character called \"" + addName + "\" does not exist"));
|
|
||||||
}
|
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import client.keybind.KeyBinding;
|
|||||||
import config.YamlConfig;
|
import config.YamlConfig;
|
||||||
import constants.game.GameConstants;
|
import constants.game.GameConstants;
|
||||||
import database.character.CharacterLoader;
|
import database.character.CharacterLoader;
|
||||||
|
import model.CharacterIdentity;
|
||||||
import net.AbstractPacketHandler;
|
import net.AbstractPacketHandler;
|
||||||
import net.netty.GameViolationException;
|
import net.netty.GameViolationException;
|
||||||
import net.packet.InPacket;
|
import net.packet.InPacket;
|
||||||
@@ -332,9 +333,9 @@ public final class PlayerLoggedinHandler extends AbstractPacketHandler {
|
|||||||
|
|
||||||
c.sendPacket(PacketCreator.updateBuddylist(player.getBuddylist().getBuddies()));
|
c.sendPacket(PacketCreator.updateBuddylist(player.getBuddylist().getBuddies()));
|
||||||
|
|
||||||
CharacterNameAndId pendingBuddyRequest = c.getPlayer().getBuddylist().pollPendingRequest();
|
CharacterIdentity pendingBuddyRequest = c.getPlayer().getBuddylist().pollPendingRequest();
|
||||||
if (pendingBuddyRequest != null) {
|
if (pendingBuddyRequest != null) {
|
||||||
c.sendPacket(PacketCreator.requestBuddylistAdd(pendingBuddyRequest.getId(), c.getPlayer().getId(), pendingBuddyRequest.getName()));
|
c.sendPacket(PacketCreator.requestBuddylistAdd(pendingBuddyRequest.id(), c.getPlayer().getId(), pendingBuddyRequest.name()));
|
||||||
}
|
}
|
||||||
|
|
||||||
c.sendPacket(PacketCreator.updateGender(player));
|
c.sendPacket(PacketCreator.updateGender(player));
|
||||||
|
|||||||
Reference in New Issue
Block a user