Skip to content

Commit 7dab0ec

Browse files
authored
Merge pull request #2 from JavaJava19/develop
Develop
2 parents ef26f13 + 74c6aef commit 7dab0ec

File tree

10 files changed

+126
-124
lines changed

10 files changed

+126
-124
lines changed

src/main/java/com/github/elic0de/thejpspit/TheJpsPit.java

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@
1212
import com.github.elic0de.thejpspit.queue.QueueManager;
1313
import com.github.elic0de.thejpspit.task.QueueTask;
1414
import com.github.elic0de.thejpspit.util.KillRatingHelper;
15+
import java.util.Optional;
1516
import java.util.concurrent.atomic.AtomicBoolean;
1617
import java.util.logging.Level;
1718
import org.bukkit.Bukkit;
1819
import org.bukkit.GameRule;
20+
import org.bukkit.entity.Player;
1921
import org.bukkit.plugin.java.JavaPlugin;
2022

2123
public final class TheJpsPit extends JavaPlugin {
@@ -72,14 +74,27 @@ public void onEnable() {
7274
world.setGameRule(GameRule.KEEP_INVENTORY, true);
7375
});
7476

75-
Bukkit.getOnlinePlayers().forEach(player ->
76-
database.ensureUser(player).thenRun(() ->
77-
database.getPitPlayer(player).join().ifPresent(pitPlayer -> {
78-
PitPlayerManager.registerUser(pitPlayer);
79-
game.join(pitPlayer);
80-
})
81-
)
82-
);
77+
Bukkit.getOnlinePlayers().forEach(player -> {
78+
final Optional<PitPlayer> userData = database.getPitPlayer(player);
79+
if (userData.isEmpty()) {
80+
database.createPitPlayer(player);
81+
PitPlayerManager.registerUser(new PitPlayer(player));
82+
return;
83+
}
84+
// Update the user's name if it has changed
85+
final PitPlayer pitPlayer = userData.get();
86+
boolean updateNeeded = false;
87+
88+
if (!pitPlayer.getName().equals(player.getName())) {
89+
updateNeeded = true;
90+
}
91+
92+
PitPlayerManager.registerUser(pitPlayer);
93+
game.join(pitPlayer);
94+
if (updateNeeded) {
95+
database.updateUserData(pitPlayer);
96+
}
97+
});
8398
}
8499

85100
private void registerCommands() {

src/main/java/com/github/elic0de/thejpspit/database/Database.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,14 @@ protected final String formatStatementTables(String sql) {
4949
public abstract CompletableFuture<Void> runScript(InputStream inputStream,
5050
Map<String, String> replacements);
5151

52-
public abstract CompletableFuture<Void> ensureUser(Player Player);
52+
public abstract void createPitPlayer(Player Player);
5353

54-
public abstract CompletableFuture<Optional<PitPlayer>> getPitPlayer(Player player);
54+
public abstract Optional<PitPlayer> getPitPlayer(Player player);
5555

5656
public abstract CompletableFuture<Optional<Integer>> getPlayerRanking(PitPlayer player,
5757
RankType type);
5858

59-
public abstract CompletableFuture<Void> updateUserData(PitPlayer player);
59+
public abstract void updateUserData(PitPlayer player);
6060

6161
public abstract void deletePlayerData();
6262

src/main/java/com/github/elic0de/thejpspit/database/SqLiteDatabase.java

Lines changed: 61 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -130,81 +130,30 @@ public CompletableFuture<Void> runScript(InputStream inputStream,
130130
}
131131

132132
@Override
133-
public CompletableFuture<Void> ensureUser(Player player) {
134-
return CompletableFuture.runAsync(
135-
() -> getPitPlayer(player.getPlayer()).thenAccept(optionalUser ->
136-
optionalUser.ifPresentOrElse(existingUser -> {
137-
if (!existingUser.getName().equals(player.getName())) {
138-
// Update a player's name if it has changed in the database
139-
try {
140-
try (PreparedStatement statement = getConnection().prepareStatement(
141-
formatStatementTables("""
142-
UPDATE `%players_table%`
143-
SET `username`=?
144-
WHERE `uuid`=?"""))) {
145-
146-
statement.setString(1, player.getName());
147-
statement.setString(2, player.getUniqueId().toString());
148-
statement.executeUpdate();
149-
}
150-
getLogger().log(Level.INFO,
151-
"Updated " + player.getName() + "'s name in the database ("
152-
+ existingUser.getName() + " -> " + player.getName() + ")");
153-
} catch (SQLException e) {
154-
getLogger().log(Level.SEVERE,
155-
"Failed to update a player's name on the database",
156-
e);
157-
}
158-
}
159-
},
160-
() -> {
161-
// Insert new player data into the database
162-
try {
163-
try (PreparedStatement statement = getConnection().prepareStatement(
164-
formatStatementTables("""
165-
INSERT INTO `%players_table%` (`uuid`,`username`)
166-
VALUES (?,?);"""))) {
167-
168-
statement.setString(1, player.getUniqueId().toString());
169-
statement.setString(2, player.getName());
170-
statement.executeUpdate();
171-
}
172-
} catch (SQLException e) {
173-
getLogger().log(Level.SEVERE,
174-
"Failed to insert a player into the database", e);
175-
}
176-
})));
177-
}
178-
179-
@Override
180-
public CompletableFuture<Optional<PitPlayer>> getPitPlayer(Player player) {
181-
return CompletableFuture.supplyAsync(() -> {
182-
try {
183-
try (PreparedStatement statement = getConnection().prepareStatement(
184-
formatStatementTables("""
185-
SELECT `kills`, `streaks`, `deaths`, `rating`, `xp`
186-
FROM `%players_table%`
187-
WHERE `uuid`=?"""))) {
188-
189-
statement.setString(1, player.getUniqueId().toString());
190-
191-
final ResultSet resultSet = statement.executeQuery();
192-
if (resultSet.next()) {
193-
return Optional.of(new PitPlayer(player,
194-
resultSet.getLong("kills"),
195-
resultSet.getLong("streaks"),
196-
resultSet.getLong("deaths"),
197-
resultSet.getDouble("rating"),
198-
resultSet.getDouble("xp")
199-
));
200-
}
201-
}
202-
} catch (SQLException e) {
203-
getLogger().log(Level.SEVERE,
204-
"Failed to fetch a player from uuid from the database", e);
133+
public Optional<PitPlayer> getPitPlayer(Player player) {
134+
try (PreparedStatement statement = getConnection().prepareStatement(
135+
formatStatementTables("""
136+
SELECT `kills`, `streaks`, `deaths`, `rating`, `xp`
137+
FROM `%players_table%`
138+
WHERE `uuid`=?"""))) {
139+
140+
statement.setString(1, player.getUniqueId().toString());
141+
142+
final ResultSet resultSet = statement.executeQuery();
143+
if (resultSet.next()) {
144+
return Optional.of(new PitPlayer(player,
145+
resultSet.getLong("kills"),
146+
resultSet.getLong("streaks"),
147+
resultSet.getLong("deaths"),
148+
resultSet.getDouble("rating"),
149+
resultSet.getDouble("xp")
150+
));
205151
}
206-
return Optional.empty();
207-
});
152+
} catch (SQLException e) {
153+
getLogger().log(Level.SEVERE,
154+
"Failed to fetch a player from uuid from the database", e);
155+
}
156+
return Optional.empty();
208157
}
209158

210159
@Override
@@ -235,28 +184,46 @@ SELECT RANK() OVER(ORDER BY ? DESC)
235184
}
236185

237186
@Override
238-
public CompletableFuture<Void> updateUserData(PitPlayer player) {
239-
return CompletableFuture.runAsync(() -> {
240-
try {
241-
try (PreparedStatement statement = getConnection().prepareStatement(
242-
formatStatementTables("""
243-
UPDATE `%players_table%`
244-
SET `kills`=?, `streaks`=?, `deaths`=?, `rating`=?, `xp`=?
245-
WHERE `uuid`=?"""))) {
187+
public void createPitPlayer(Player player) {
188+
// Insert new player data into the database
189+
try {
190+
try (PreparedStatement statement = getConnection().prepareStatement(
191+
formatStatementTables("""
192+
INSERT INTO `%players_table%` (`uuid`,`username`)
193+
VALUES (?,?);"""))) {
246194

247-
statement.setLong(1, player.getKills());
248-
statement.setLong(2, player.getStreaks());
249-
statement.setLong(3, player.getDeaths());
250-
statement.setDouble(4, player.getRating());
251-
statement.setDouble(5, player.getXp());
252-
statement.setString(6, player.getUniqueId().toString());
253-
statement.executeUpdate();
254-
}
255-
} catch (SQLException e) {
256-
getLogger().log(Level.SEVERE,
257-
"Failed to update user data for " + player.getName() + " on the database", e);
195+
statement.setString(1, player.getUniqueId().toString());
196+
statement.setString(2, player.getName());
197+
statement.executeUpdate();
258198
}
259-
});
199+
} catch (SQLException e) {
200+
getLogger().log(Level.SEVERE,
201+
"Failed to insert a player into the database", e);
202+
}
203+
}
204+
205+
@Override
206+
public void updateUserData(PitPlayer player) {
207+
try {
208+
try (PreparedStatement statement = getConnection().prepareStatement(
209+
formatStatementTables("""
210+
UPDATE `%players_table%`
211+
SET `kills`=?, `streaks`=?, `deaths`=?, `rating`=?, `xp`=?
212+
WHERE `uuid`=?"""))) {
213+
214+
statement.setLong(1, player.getKills());
215+
statement.setLong(2, player.getStreaks());
216+
statement.setLong(3, player.getDeaths());
217+
statement.setDouble(4, player.getRating());
218+
statement.setDouble(5, player.getXp());
219+
statement.setString(6, player.getUniqueId().toString());
220+
statement.executeUpdate();
221+
}
222+
223+
} catch (SQLException e) {
224+
getLogger().log(Level.SEVERE,
225+
"Failed to update user data for " + player.getName() + " on the database", e);
226+
}
260227
}
261228

262229
@Override

src/main/java/com/github/elic0de/thejpspit/game/Game.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,14 @@ public void death(PitPlayer player) {
3434
final PitPlayer killer = player.getKiller();
3535

3636
if (killer == null) {
37+
player.increaseDeaths();
38+
player.resetStreaks();
39+
40+
pit.getRatingHelper().initRating(player);
41+
42+
player.sendMessage("&c【PIT】死亡しました (KDレート:%rating%)"
43+
.replaceAll("%rating%", killer.getRating() + "%")
44+
);
3745
return;
3846
}
3947

src/main/java/com/github/elic0de/thejpspit/gui/ServerQueueMenu.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ private DynamicGuiElement queueButton(char symbol, QueueServerType type, ItemSta
6868
desc,
6969
" ",
7070
"&7必要なプレイヤー: &a" + queueManager.getNeededPlayer(type),
71-
isQueued ? "&cクリックしてキャンセルする" : "&eクリックしてキューを追加"
71+
isQueued ? "&cクリックしてキャンセルする" : "&eクリックしてキューを追加",
72+
"&c現在利用できません"
7273
);
7374
});
7475
}

src/main/java/com/github/elic0de/thejpspit/listener/EventListener.java

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.github.elic0de.thejpspit.gui.ServerQueueMenu;
55
import com.github.elic0de.thejpspit.player.PitPlayer;
66
import com.github.elic0de.thejpspit.player.PitPlayerManager;
7+
import java.util.Optional;
78
import org.bukkit.Bukkit;
89
import org.bukkit.Material;
910
import org.bukkit.entity.Player;
@@ -34,16 +35,26 @@ public EventListener() {
3435

3536
@EventHandler
3637
public void onJoin(PlayerJoinEvent event) {
37-
if (PitPlayerManager.isContain(event.getPlayer())) {
38-
plugin.getGame().join(PitPlayerManager.getPitPlayer(event.getPlayer()));
38+
final Player player = event.getPlayer();
39+
final Optional<PitPlayer> userData = plugin.getDatabase().getPitPlayer(player);
40+
if (userData.isEmpty()) {
41+
plugin.getDatabase().createPitPlayer(player);
42+
PitPlayerManager.registerUser(new PitPlayer(player));
3943
return;
4044
}
41-
plugin.getDatabase().ensureUser(event.getPlayer()).thenRun(() ->
42-
plugin.getDatabase().getPitPlayer(event.getPlayer()).join().ifPresent(pitPlayer -> {
43-
PitPlayerManager.registerUser(pitPlayer);
44-
plugin.getGame().join(pitPlayer);
45-
})
46-
);
45+
// Update the user's name if it has changed
46+
final PitPlayer pitPlayer = userData.get();
47+
boolean updateNeeded = false;
48+
49+
if (!pitPlayer.getName().equals(player.getName())) {
50+
updateNeeded = true;
51+
}
52+
53+
PitPlayerManager.registerUser(pitPlayer);
54+
plugin.getGame().join(pitPlayer);
55+
if (updateNeeded) {
56+
plugin.getDatabase().updateUserData(pitPlayer);
57+
}
4758
}
4859

4960
@EventHandler
@@ -76,9 +87,6 @@ public void onHungerChange(FoodLevelChangeEvent event) {
7687

7788
@EventHandler
7889
public void onDeath(PlayerDeathEvent event) {
79-
if (event.getEntity().getKiller() == null) {
80-
return;
81-
}
8290
plugin.getGame().death(PitPlayerManager.getPitPlayer(event.getEntity()));
8391
event.getDrops().clear();
8492
event.setDeathMessage(null);

src/main/java/com/github/elic0de/thejpspit/player/PitPlayer.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717
public class PitPlayer {
1818

1919
private final Player player;
20+
21+
private final String name;
22+
23+
private final UUID uuid;
2024
private final ItemStack[] INVENTORY = {
2125
new ItemStack(Material.IRON_SWORD),
2226
new ItemStack(Material.BOW),
@@ -39,6 +43,8 @@ public class PitPlayer {
3943

4044
public PitPlayer(Player player) {
4145
this.player = player;
46+
this.name = player.getName();
47+
this.uuid = player.getUniqueId();
4248
this.kills = 0;
4349
this.streaks= 0;
4450
this.deaths = 0;
@@ -50,6 +56,8 @@ public PitPlayer(Player player) {
5056

5157
public PitPlayer(Player player, long kills, long streaks, long deaths, double rating, double xp) {
5258
this.player = player;
59+
this.name = player.getName();
60+
this.uuid = player.getUniqueId();
5361
this.kills = kills;
5462
this.streaks = streaks;
5563
this.deaths = deaths;

src/main/java/com/github/elic0de/thejpspit/player/PitPlayerManager.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,4 @@ public static void unregisterUser(PitPlayer player) {
2121
public static PitPlayer getPitPlayer(Player player) {
2222
return pitPlayerMap.get(player.getUniqueId());
2323
}
24-
25-
public static boolean isContain(Player player) {
26-
return pitPlayerMap.containsKey(player.getUniqueId());
27-
}
28-
2924
}

src/main/java/com/github/elic0de/thejpspit/util/KillRatingHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
public class KillRatingHelper {
88

99
// 少数第二で四捨五入
10-
private static final double roundingFactor = 10;
10+
private static final double roundingFactor = 10000;
1111
private final double defaultRating;
1212

1313
public KillRatingHelper(double defaultRating) {

src/main/java/com/github/elic0de/thejpspit/util/ShowHealth.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public static void showHealth(PitPlayer pitPlayer, PitPlayer targetPit) {
5252

5353
pitPlayer.getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR,
5454
new ComponentBuilder(net.md_5.bungee.api.ChatColor.translateAlternateColorCodes(
55-
'&', pitPlayer.getPlayer().getDisplayName() + " " + style)
55+
'&', target.getPlayer().getDisplayName() + " " + style)
5656
).create()
5757
);
5858
}

0 commit comments

Comments
 (0)