[BUG] Player name change throws exception
Bobcat00 opened this issue ยท 15 comments
Describe the bug
A player who changed his name to match a previously used name caused an exception in Prism.
See https://pastebin.com/kju1czbr
To Reproduce
Player A joins with UUID 1
Player B joins with UUID 2
Player A renames his account to B
Player B joins with UUID 1 - Exception thrown and prism_players table is left with Player B UUID 2
(Note this occurred over a 12 month period)
Expected behavior
Prism should handle this as a matter of course and have the correct data in prism_players. Also note that at this point UUIDs 1 and 2 both have the same player name. prism_players should handle this properly. (I guess lookups for the original Player B are no longer possible?)
Server (please complete the following information):
- Prism Version: v2.1.7-
- Server Type: Spigot
- Server Version: git-Spigot-628435a-b5e5adc (MC: 1.16.4)
Just looking at this quickly again... Is removing the UNIQUE keyword from the player key (3rd line from the bottom) a possible solution? What would happen with multiple entries with the same player name?
CREATE TABLE IF NOT EXISTS `prism_players` (
`player_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`player` varchar(255) NOT NULL,
`player_uuid` binary(16) NOT NULL,
PRIMARY KEY (`player_id`),
UNIQUE KEY `player` (`player`),
UNIQUE KEY `player_uuid` (`player_uuid`))
ENGINE=InnoDB DEFAULT CHARSET=utf8;
I think the algorithm would be something like this:
PlayerJoinEvent
Get uuid and playername from event
Lookup uuid in DB and get name
if (name != playername)
{
// Player's name has changed see if new name is already in DB
Lookup playername in DB, get uuid
if (playername found)
{
// New name already in DB - Need to correct existing entry in DB
Lookup 2nd uuid at Mojang, get current name
Update 2nd uuid with current name
}
Update DB entry for uuid with playername
}
}
A robust design would handle delayed responses and failures from Mojang. So maybe the name should be changed to a temporary value in the DB and the Mojang processing run on yet another thread (which should probably have a retry mechanism, too). This would allow Prism's regular processing to continue until the second DB entry can be updated.
Yeah I suspect the player names key was a lay over from before UUID was a thing - I will have to think about how to fix this one.
If it makes you feel better, LuckPerms puts out 5 lines of warnings, even though there isn't anything wrong.
Maybe if the name is already in the table with a different UUID, do a lookup of that UUID in Mojang's servers to get the current name, change the name in the table, then add/update the player who is joining.
I had designed the system to just assume a new name for a UUID already present was a name change, and it would run an update to change the name in the table. Pretty sure this link is the logic, so either this isn't running anymore, isn't running early enough, etc. This worked fine for a few years post-UUID switch so I'm not sure how this is coming up now.
Also, I think the player name key was intended because in-game queries are by player names, not UUIDs, so we could match those.
How would Player B rejoin with the same UUID as player A.
Sorry if this is confusing. Player A renamed his account so he's now player B. By A and B, I'm referring to playernames, not individuals. Individuals are represented by UUIDs, as they should be.
Look at the sequence above, and let me know if you need further clarification.
It is not possible for 2 players to have the same UUID - names yes - UUID no
query = "CREATE TABLE IF NOT EXISTS `" + prefix + "players` ("
+ "`player_id` int(10) unsigned NOT NULL AUTO_INCREMENT," + "`player` varchar(255) NOT NULL,"
+ "`player_uuid` binary(16) NOT NULL," + "PRIMARY KEY (`player_id`),"
+ "UNIQUE KEY `player` (`player`)," + "UNIQUE KEY `player_uuid` (`player_uuid`)"
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8;";
st.executeUpdate(query);
I know very little about SQL, but the above says that player is unique in the prism_players table. So you can't have two players with the same name, which is probably where the exception comes from.
I did some further looking (one UUID has had 18 names, the other 7, so it's hard to find), and after the above sequence, prism_players has:
Player A UUID1
Player B UUID2
Even though UUID1 is now named B.
My players do that a lot. Some change their names every month and they reuse names other players used.
And some of them have up to 10 alt accounts! It's hard to keep track of them all.
throwing in some temp name for the old one.
Connect to the Mojang servers and get the current name for the UUID.
I had designed the system to just assume a new name for a UUID already present was a name change, and it would run an update to change the name in the table.
Yeah, but the problem is the new name is already in the table (and with a different UUID).
Ok I misunderstood. I re-read the original issue
A player who changed his name to match a previously used name
That is not a scenario many people will ever run into, I never even considered that. Two different players are involved, hence two different UUIDs.
I guess if you're in online mode it boils down to just trusting the data from Mojang and using the name for the new UUID, and throwing in some temp name for the old one.
@Bobcat00 @viveleroi when you get a chance can you review that commit and let me know what you think
It's still not working. Prisim v2.1.8-SNAPSHOT-208
Spoiler - click here
2021-01-16 12:12:21 [WARN] [LuckPerms] LuckPerms already has data for player 'BlatantMineman' - but this data is stored under a different UUID.
2021-01-16 12:12:21 [WARN] [LuckPerms] 'BlatantMineman' has previously used the unique ids [74d992d2-feda-4657-a14d-79534782619a] but is now connecting with '3b328412-db51-4115-9f64-08a79c8377b9'
2021-01-16 12:12:21 [WARN] [LuckPerms] The UUID the player is connecting with now is Mojang-assigned (type 4). This implies that one of the other servers in your network is not authenticating correctly.
2021-01-16 12:12:21 [WARN] [LuckPerms] If you're using BungeeCord/Velocity, please ensure that IP-Forwarding is setup correctly on all of your backend servers!
2021-01-16 12:12:21 [WARN] [LuckPerms] See here for more info: https://luckperms.net/wiki/Network-Installation#pre-setup
2021-01-16 12:12:21 [INFO] UUID of player BlatantMineman is 3b328412-db51-4115-9f64-08a79c8377b9
2021-01-16 12:12:22 [WARN] [Prism] 2 Players exist with the same name Prism cannot load both as per the name.
2021-01-16 12:12:22 [WARN] [Prism] Player 1(player to update): BlatantMineman / 3b328412-db51-4115-9f64-08a79c8377b9
2021-01-16 12:12:22 [WARN] [Prism] Player 2(existing): BlatantMineman / 74d992d2-feda-4657-a14d-79534782619a
2021-01-16 12:12:22 [WARN] [Prism] Player 2 will have the name set with a random index.
2021-01-16 12:12:22 [WARN] com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'BlatantMineman' for key 'player'
2021-01-16 12:12:22 [WARN] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
2021-01-16 12:12:22 [WARN] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
2021-01-16 12:12:22 [WARN] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
2021-01-16 12:12:22 [WARN] at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
2021-01-16 12:12:22 [WARN] at com.mysql.jdbc.Util.handleNewInstance(Util.java:403)
2021-01-16 12:12:22 [WARN] at com.mysql.jdbc.Util.getInstance(Util.java:386)
2021-01-16 12:12:22 [WARN] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
2021-01-16 12:12:22 [WARN] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3933)
2021-01-16 12:12:22 [WARN] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3869)
2021-01-16 12:12:22 [WARN] at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524)
2021-01-16 12:12:22 [WARN] at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2675)
2021-01-16 12:12:22 [WARN] at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465)
2021-01-16 12:12:22 [WARN] at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1915)
2021-01-16 12:12:22 [WARN] at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2136)
2021-01-16 12:12:22 [WARN] at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2070)
2021-01-16 12:12:22 [WARN] at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5187)
2021-01-16 12:12:22 [WARN] at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2055)
2021-01-16 12:12:22 [WARN] at com.botsko.prism.libs.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
2021-01-16 12:12:22 [WARN] at com.botsko.prism.libs.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
2021-01-16 12:12:22 [WARN] at me.botsko.prism.database.sql.SqlPlayerIdentificationHelper.updatePlayer(SqlPlayerIdentificationHelper.java:182)
2021-01-16 12:12:22 [WARN] at me.botsko.prism.players.PlayerIdentification.getPrismPlayer(PlayerIdentification.java:99)
2021-01-16 12:12:22 [WARN] at me.botsko.prism.players.PlayerIdentification.cachePrismPlayer(PlayerIdentification.java:23)
2021-01-16 12:12:22 [WARN] at me.botsko.prism.listeners.PrismPlayerEvents.lambda$onPlayerJoin$1(PrismPlayerEvents.java:130)
2021-01-16 12:12:22 [WARN] at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftTask.run(CraftTask.java:81)
2021-01-16 12:12:22 [WARN] at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54)
2021-01-16 12:12:22 [WARN] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
2021-01-16 12:12:22 [WARN] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
2021-01-16 12:12:22 [WARN] at java.lang.Thread.run(Thread.java:748)
2021-01-16 12:12:22 [INFO] [Essentials] Found new UUID for BlatantMineman. Replacing 74d992d2-feda-4657-a14d-79534782619a with 3b328412-db51-4115-9f64-08a79c8377b9
2021-01-16 13:11:30 [INFO] UUID of player BlatantMineman is 3b328412-db51-4115-9f64-08a79c8377b9
2021-01-16 13:11:30 [WARN] [Prism] 2 Players exist with the same name Prism cannot load both as per the name.
2021-01-16 13:11:30 [WARN] [Prism] Player 1(player to update): BlatantMineman / 3b328412-db51-4115-9f64-08a79c8377b9
2021-01-16 13:11:30 [WARN] [Prism] Player 2(existing): BlatantMineman / 74d992d2-feda-4657-a14d-79534782619a
2021-01-16 13:11:30 [WARN] [Prism] Player 2 will have the name set with a random index.
2021-01-16 13:11:30 [WARN] com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'BlatantMineman' for key 'player'
2021-01-16 13:11:30 [WARN] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
2021-01-16 13:11:30 [WARN] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
2021-01-16 13:11:30 [WARN] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
2021-01-16 13:11:30 [WARN] at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
2021-01-16 13:11:30 [WARN] at com.mysql.jdbc.Util.handleNewInstance(Util.java:403)
2021-01-16 13:11:30 [WARN] at com.mysql.jdbc.Util.getInstance(Util.java:386)
2021-01-16 13:11:30 [WARN] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
2021-01-16 13:11:30 [WARN] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3933)
2021-01-16 13:11:30 [WARN] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3869)
2021-01-16 13:11:30 [WARN] at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524)
2021-01-16 13:11:30 [WARN] at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2675)
2021-01-16 13:11:30 [WARN] at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465)
2021-01-16 13:11:30 [WARN] at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1915)
2021-01-16 13:11:30 [WARN] at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2136)
2021-01-16 13:11:30 [WARN] at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2070)
2021-01-16 13:11:30 [WARN] at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5187)
2021-01-16 13:11:30 [WARN] at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2055)
2021-01-16 13:11:30 [WARN] at com.botsko.prism.libs.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
2021-01-16 13:11:30 [WARN] at com.botsko.prism.libs.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
2021-01-16 13:11:30 [WARN] at me.botsko.prism.database.sql.SqlPlayerIdentificationHelper.updatePlayer(SqlPlayerIdentificationHelper.java:182)
2021-01-16 13:11:30 [WARN] at me.botsko.prism.players.PlayerIdentification.getPrismPlayer(PlayerIdentification.java:99)
2021-01-16 13:11:30 [WARN] at me.botsko.prism.players.PlayerIdentification.cachePrismPlayer(PlayerIdentification.java:23)
2021-01-16 13:11:30 [WARN] at me.botsko.prism.listeners.PrismPlayerEvents.lambda$onPlayerJoin$1(PrismPlayerEvents.java:130)
2021-01-16 13:11:30 [WARN] at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftTask.run(CraftTask.java:81)
2021-01-16 13:11:30 [WARN] at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54)
2021-01-16 13:11:30 [WARN] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
2021-01-16 13:11:30 [WARN] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
2021-01-16 13:11:30 [WARN] at java.lang.Thread.run(Thread.java:748)
2021-01-16 15:55:55 [INFO] [Prism] [InternalAffairs] Recorder is NOT active... checking database
2021-01-16 15:55:55 [INFO] [Prism] [InternalAffairs] Pool returned valid connection!
2021-01-16 15:55:55 [INFO] [Prism] [InternalAffairs] Restarting scheduled recorder tasks
2021-01-16 17:03:48 [INFO] UUID of player BlatantMineman is 3b328412-db51-4115-9f64-08a79c8377b9
2021-01-16 17:03:49 [WARN] [Prism] 2 Players exist with the same name Prism cannot load both as per the name.
2021-01-16 17:03:49 [WARN] [Prism] Player 1(player to update): BlatantMineman / 3b328412-db51-4115-9f64-08a79c8377b9
2021-01-16 17:03:49 [WARN] [Prism] Player 2(existing): BlatantMineman / 74d992d2-feda-4657-a14d-79534782619a
2021-01-16 17:03:49 [WARN] [Prism] Player 2 will have the name set with a random index.
2021-01-16 17:03:49 [WARN] com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'BlatantMineman' for key 'player'
2021-01-16 17:03:49 [WARN] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
2021-01-16 17:03:49 [WARN] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
2021-01-16 17:03:49 [WARN] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
2021-01-16 17:03:49 [WARN] at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
2021-01-16 17:03:49 [WARN] at com.mysql.jdbc.Util.handleNewInstance(Util.java:403)
2021-01-16 17:03:49 [WARN] at com.mysql.jdbc.Util.getInstance(Util.java:386)
2021-01-16 17:03:49 [WARN] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
2021-01-16 17:03:49 [WARN] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3933)
2021-01-16 17:03:49 [WARN] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3869)
2021-01-16 17:03:49 [WARN] at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524)
2021-01-16 17:03:49 [WARN] at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2675)
2021-01-16 17:03:49 [WARN] at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465)
2021-01-16 17:03:49 [WARN] at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1915)
2021-01-16 17:03:49 [WARN] at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2136)
2021-01-16 17:03:49 [WARN] at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2070)
2021-01-16 17:03:49 [WARN] at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5187)
2021-01-16 17:03:49 [WARN] at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2055)
2021-01-16 17:03:49 [WARN] at com.botsko.prism.libs.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
2021-01-16 17:03:49 [WARN] at com.botsko.prism.libs.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
2021-01-16 17:03:49 [WARN] at me.botsko.prism.database.sql.SqlPlayerIdentificationHelper.updatePlayer(SqlPlayerIdentificationHelper.java:182)
2021-01-16 17:03:49 [WARN] at me.botsko.prism.players.PlayerIdentification.getPrismPlayer(PlayerIdentification.java:99)
2021-01-16 17:03:49 [WARN] at me.botsko.prism.players.PlayerIdentification.cachePrismPlayer(PlayerIdentification.java:23)
2021-01-16 17:03:49 [WARN] at me.botsko.prism.listeners.PrismPlayerEvents.lambda$onPlayerJoin$1(PrismPlayerEvents.java:130)
2021-01-16 17:03:49 [WARN] at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftTask.run(CraftTask.java:81)
2021-01-16 17:03:49 [WARN] at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54)
2021-01-16 17:03:49 [WARN] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
2021-01-16 17:03:49 [WARN] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
2021-01-16 17:03:49 [WARN] at java.lang.Thread.run(Thread.java:748)
2021-01-16 17:05:44 [INFO] UUID of player BlatantMineman is 3b328412-db51-4115-9f64-08a79c8377b9
2021-01-16 17:05:45 [WARN] [Prism] 2 Players exist with the same name Prism cannot load both as per the name.
2021-01-16 17:05:45 [WARN] [Prism] Player 1(player to update): BlatantMineman / 3b328412-db51-4115-9f64-08a79c8377b9
2021-01-16 17:05:45 [WARN] [Prism] Player 2(existing): BlatantMineman / 74d992d2-feda-4657-a14d-79534782619a
2021-01-16 17:05:45 [WARN] [Prism] Player 2 will have the name set with a random index.
2021-01-16 17:05:45 [WARN] com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'BlatantMineman' for key 'player'
2021-01-16 17:05:45 [WARN] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
2021-01-16 17:05:45 [WARN] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
2021-01-16 17:05:45 [WARN] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
2021-01-16 17:05:45 [WARN] at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
2021-01-16 17:05:45 [WARN] at com.mysql.jdbc.Util.handleNewInstance(Util.java:403)
2021-01-16 17:05:45 [WARN] at com.mysql.jdbc.Util.getInstance(Util.java:386)
2021-01-16 17:05:45 [WARN] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)
2021-01-16 17:05:45 [WARN] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3933)
2021-01-16 17:05:45 [WARN] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3869)
2021-01-16 17:05:45 [WARN] at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2524)
2021-01-16 17:05:45 [WARN] at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2675)
2021-01-16 17:05:45 [WARN] at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2465)
2021-01-16 17:05:45 [WARN] at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1915)
2021-01-16 17:05:45 [WARN] at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2136)
2021-01-16 17:05:45 [WARN] at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2070)
2021-01-16 17:05:45 [WARN] at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5187)
2021-01-16 17:05:45 [WARN] at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2055)
2021-01-16 17:05:45 [WARN] at com.botsko.prism.libs.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
2021-01-16 17:05:45 [WARN] at com.botsko.prism.libs.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
2021-01-16 17:05:45 [WARN] at me.botsko.prism.database.sql.SqlPlayerIdentificationHelper.updatePlayer(SqlPlayerIdentificationHelper.java:182)
2021-01-16 17:05:45 [WARN] at me.botsko.prism.players.PlayerIdentification.getPrismPlayer(PlayerIdentification.java:99)
2021-01-16 17:05:45 [WARN] at me.botsko.prism.players.PlayerIdentification.cachePrismPlayer(PlayerIdentification.java:23)
2021-01-16 17:05:45 [WARN] at me.botsko.prism.listeners.PrismPlayerEvents.lambda$onPlayerJoin$1(PrismPlayerEvents.java:130)
2021-01-16 17:05:45 [WARN] at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftTask.run(CraftTask.java:81)
2021-01-16 17:05:45 [WARN] at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54)
2021-01-16 17:05:45 [WARN] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
2021-01-16 17:05:45 [WARN] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
2021-01-16 17:05:45 [WARN] at java.lang.Thread.run(Thread.java:748)