|
1 | 1 | package com.github.elic0de.thejpspit.database; |
2 | 2 |
|
3 | 3 | import com.github.elic0de.thejpspit.TheJpsPit; |
| 4 | +import com.github.elic0de.thejpspit.player.OfflinePitPlayer; |
4 | 5 | import com.github.elic0de.thejpspit.player.PitPlayer; |
5 | 6 | import java.io.File; |
6 | 7 | import java.io.IOException; |
|
15 | 16 | import java.util.Locale; |
16 | 17 | import java.util.Map; |
17 | 18 | import java.util.Optional; |
| 19 | +import java.util.UUID; |
18 | 20 | import java.util.concurrent.CompletableFuture; |
19 | 21 | import java.util.logging.Level; |
| 22 | +import org.bukkit.Bukkit; |
20 | 23 | import org.bukkit.entity.Player; |
21 | 24 | import org.sqlite.SQLiteConfig; |
22 | 25 |
|
@@ -131,17 +134,49 @@ public CompletableFuture<Void> runScript(InputStream inputStream, |
131 | 134 |
|
132 | 135 | @Override |
133 | 136 | public Optional<PitPlayer> getPitPlayer(Player player) { |
| 137 | + return getPitPlayer(player.getUniqueId()); |
| 138 | + } |
| 139 | + |
| 140 | + @Override |
| 141 | + public Optional<PitPlayer> getPitPlayer(UUID uuid) { |
134 | 142 | try (PreparedStatement statement = getConnection().prepareStatement( |
135 | | - formatStatementTables(""" |
| 143 | + formatStatementTables(""" |
136 | 144 | SELECT `kills`, `streaks`, `deaths`, `rating`, `xp` |
137 | 145 | FROM `%players_table%` |
138 | 146 | WHERE `uuid`=?"""))) { |
139 | 147 |
|
140 | | - statement.setString(1, player.getUniqueId().toString()); |
| 148 | + statement.setString(1, uuid.toString()); |
141 | 149 |
|
142 | 150 | final ResultSet resultSet = statement.executeQuery(); |
143 | 151 | if (resultSet.next()) { |
144 | | - return Optional.of(new PitPlayer(player, |
| 152 | + return Optional.of(new PitPlayer(Bukkit.getPlayer(uuid), |
| 153 | + resultSet.getLong("kills"), |
| 154 | + resultSet.getLong("streaks"), |
| 155 | + resultSet.getLong("deaths"), |
| 156 | + resultSet.getDouble("rating"), |
| 157 | + resultSet.getDouble("xp") |
| 158 | + )); |
| 159 | + } |
| 160 | + } catch (SQLException e) { |
| 161 | + getLogger().log(Level.SEVERE, |
| 162 | + "Failed to fetch a player from uuid from the database", e); |
| 163 | + } |
| 164 | + return Optional.empty(); |
| 165 | + } |
| 166 | + |
| 167 | + @Override |
| 168 | + public Optional<OfflinePitPlayer> getOfflinePitPlayer(UUID uuid) { |
| 169 | + try (PreparedStatement statement = getConnection().prepareStatement( |
| 170 | + formatStatementTables(""" |
| 171 | + SELECT `kills`, `streaks`, `deaths`, `rating`, `xp` |
| 172 | + FROM `%players_table%` |
| 173 | + WHERE `uuid`=?"""))) { |
| 174 | + |
| 175 | + statement.setString(1, uuid.toString()); |
| 176 | + |
| 177 | + final ResultSet resultSet = statement.executeQuery(); |
| 178 | + if (resultSet.next()) { |
| 179 | + return Optional.of(new OfflinePitPlayer(uuid, |
145 | 180 | resultSet.getLong("kills"), |
146 | 181 | resultSet.getLong("streaks"), |
147 | 182 | resultSet.getLong("deaths"), |
@@ -226,6 +261,30 @@ public void updateUserData(PitPlayer player) { |
226 | 261 | } |
227 | 262 | } |
228 | 263 |
|
| 264 | + @Override |
| 265 | + public void updateUserData(OfflinePitPlayer player) { |
| 266 | + try { |
| 267 | + try (PreparedStatement statement = getConnection().prepareStatement( |
| 268 | + formatStatementTables(""" |
| 269 | + UPDATE `%players_table%` |
| 270 | + SET `kills`=?, `streaks`=?, `deaths`=?, `rating`=?, `xp`=? |
| 271 | + WHERE `uuid`=?"""))) { |
| 272 | + |
| 273 | + statement.setLong(1, player.getKills()); |
| 274 | + statement.setLong(2, player.getStreaks()); |
| 275 | + statement.setLong(3, player.getDeaths()); |
| 276 | + statement.setDouble(4, player.getRating()); |
| 277 | + statement.setDouble(5, player.getXp()); |
| 278 | + statement.setString(6, player.getUniqueId().toString()); |
| 279 | + statement.executeUpdate(); |
| 280 | + } |
| 281 | + |
| 282 | + } catch (SQLException e) { |
| 283 | + getLogger().log(Level.SEVERE, |
| 284 | + "Failed to update user data for " + player.getUniqueId().toString() + " on the database", e); |
| 285 | + } |
| 286 | + } |
| 287 | + |
229 | 288 | @Override |
230 | 289 | public void deletePlayerData() { |
231 | 290 | try (Connection connection = getConnection()) { |
|
0 commit comments