Skip to content

Commit c39dd56

Browse files
committed
2 parents 57b0906 + a1d29e9 commit c39dd56

26 files changed

+603
-295
lines changed

api/pom.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,22 @@
2222
<target>6</target>
2323
</configuration>
2424
</plugin>
25+
<plugin>
26+
<groupId>org.apache.maven.plugins</groupId>
27+
<artifactId>maven-compiler-plugin</artifactId>
28+
<configuration>
29+
<source>8</source>
30+
<target>8</target>
31+
</configuration>
32+
</plugin>
33+
<plugin>
34+
<groupId>org.apache.maven.plugins</groupId>
35+
<artifactId>maven-compiler-plugin</artifactId>
36+
<configuration>
37+
<source>8</source>
38+
<target>8</target>
39+
</configuration>
40+
</plugin>
2541
</plugins>
2642
</build>
2743
<packaging>jar</packaging>
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package me.tofpu.speedbridge.api.leaderboard;
2+
3+
public interface Leaderboard {
4+
/**
5+
* @return the leaderboard identifier
6+
*/
7+
String identifier();
8+
9+
/**
10+
* Fetches the position from this leaderboard to a string.
11+
*
12+
* @param position the position that you would like to fetch from the leaderboard
13+
*
14+
* @return nicely formatted string position, will return "N/A" if the postiion was filled
15+
*/
16+
String parse(final int position);
17+
18+
/**
19+
* A nicely formatted string from this leaderboard.
20+
*
21+
* @return nicely formatted leaderboard
22+
*/
23+
String print();
24+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package me.tofpu.speedbridge.api.leaderboard;
2+
3+
4+
import java.util.function.Consumer;
5+
import java.util.function.Predicate;
6+
7+
public interface LeaderboardService {
8+
/**
9+
* Retrieves a leaderboard that associates with the type.
10+
*
11+
* @param type the leaderboard type
12+
*
13+
* @return the leaderboard instance that associates with the type, otherwise null.
14+
*/
15+
Leaderboard get(final LeaderboardType type);
16+
17+
/**
18+
* This method allows you to run a method across all the leaderboard within a single method, so long it wasn't filtered.
19+
*
20+
* @param filter filter
21+
* @param consumer the consumer value
22+
*/
23+
void compute(final Predicate<Leaderboard> filter, Consumer<Leaderboard> consumer);
24+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package me.tofpu.speedbridge.api.leaderboard;
2+
3+
public enum LeaderboardType {
4+
GLOBAL, SEASONAL;
5+
6+
public static LeaderboardType match(final String identifier) {
7+
for (LeaderboardType type : values()){
8+
if (type.name().equalsIgnoreCase(identifier))
9+
return type;
10+
}
11+
return null;
12+
}
13+
}

api/src/main/java/me/tofpu/speedbridge/api/lobby/Leaderboard.java

Lines changed: 0 additions & 23 deletions
This file was deleted.

api/src/main/java/me/tofpu/speedbridge/api/lobby/LobbyService.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@ public interface LobbyService {
1212

1313
boolean hasLobbyLocation();
1414

15-
void save(final Gson gson, final File lobbyFile, final File leaderboardFile);
15+
void save(final Gson gson, final File lobbyFile);
1616

17-
void load(final Gson gson, final File lobbyFile, final File leaderboardFile);
18-
19-
Leaderboard getLeaderboard();
17+
void load(final Gson gson, final File lobbyFile);
2018
}

spigot/src/main/java/me/tofpu/speedbridge/SpeedBridge.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package me.tofpu.speedbridge;
22

33
import me.tofpu.speedbridge.game.Game;
4+
import me.tofpu.speedbridge.game.leaderboard.AbstractLeaderboard;
45
import org.bukkit.plugin.java.JavaPlugin;
56

67
public final class SpeedBridge extends JavaPlugin {
@@ -28,7 +29,7 @@ public void onDisable() {
2829
game().dataManager().shutdown();
2930

3031
// cancelling the leaderboard task
31-
game().lobbyService().getLeaderboard().cancel();
32+
game.leaderboardManager().compute(null, leaderboard -> ((AbstractLeaderboard) leaderboard).cancel());
3233
}
3334

3435
public Game game() {

spigot/src/main/java/me/tofpu/speedbridge/command/CommandHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public CommandHandler(Game game, final SpeedBridge plugin) {
3030
this.commandManager.getCommandCompletions().registerCompletion("setupStage", context -> Util.toString(SetupStage.values()));
3131

3232
// registrations
33-
registerCommand(new MainCommand(game.userService(), game.gameService(), game.lobbyService()));
33+
registerCommand(new MainCommand(game.userService(), game.gameService(), game.lobbyService(), game.leaderboardManager()));
3434
registerCommand(new AdminCommand(plugin, game.lobbyService(), game.gameService(), game.gameController(), game.dataManager()));
3535
}
3636

spigot/src/main/java/me/tofpu/speedbridge/command/sub/MainCommand.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,32 @@
44
import me.tofpu.speedbridge.api.game.GameService;
55
import me.tofpu.speedbridge.api.game.Result;
66
import me.tofpu.speedbridge.api.island.mode.Mode;
7+
import me.tofpu.speedbridge.api.leaderboard.LeaderboardService;
78
import me.tofpu.speedbridge.api.lobby.LobbyService;
89
import me.tofpu.speedbridge.api.user.User;
910
import me.tofpu.speedbridge.api.user.UserProperties;
1011
import me.tofpu.speedbridge.api.user.UserService;
1112
import me.tofpu.speedbridge.command.BridgeBaseCommand;
1213
import me.tofpu.speedbridge.data.file.path.Path;
14+
import me.tofpu.speedbridge.api.leaderboard.LeaderboardType;
1315
import me.tofpu.speedbridge.island.mode.ModeManager;
1416
import me.tofpu.speedbridge.util.Util;
1517
import org.bukkit.command.CommandSender;
1618
import org.bukkit.entity.Player;
1719

1820
@CommandAlias("speedbridge|game")
1921
public class MainCommand extends BridgeBaseCommand {
20-
2122
private final UserService userService;
2223
private final GameService gameService;
2324
private final LobbyService lobbyService;
25+
private final LeaderboardService leaderboardService;
2426

25-
public MainCommand(final UserService userService, final GameService gameService, final LobbyService lobbyService) {
27+
public MainCommand(final UserService userService, final GameService gameService, final LobbyService lobbyService, final LeaderboardService leaderboardService) {
2628
super("game");
2729
this.userService = userService;
2830
this.gameService = gameService;
2931
this.lobbyService = lobbyService;
32+
this.leaderboardService = leaderboardService;
3033
}
3134

3235
@Override
@@ -73,7 +76,7 @@ public void onLeave(final Player player) {
7376
@CommandAlias("leaderboard")
7477
@Description("Lists the top 10 best performers")
7578
public void onLeaderboard(final CommandSender player) {
76-
player.sendMessage(lobbyService.getLeaderboard().print());
79+
player.sendMessage(leaderboardService.get(LeaderboardType.GLOBAL).print());
7780
}
7881

7982
@Subcommand("score")

spigot/src/main/java/me/tofpu/speedbridge/data/DataManager.java

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,33 @@
44
import com.github.requestpluginsforfree.fileutil.file.PluginFile;
55
import com.google.gson.Gson;
66
import com.google.gson.GsonBuilder;
7-
import com.google.gson.reflect.TypeToken;
87
import me.tofpu.speedbridge.api.island.Island;
98
import me.tofpu.speedbridge.api.island.IslandService;
10-
import me.tofpu.speedbridge.api.lobby.BoardUser;
9+
import me.tofpu.speedbridge.api.leaderboard.LeaderboardService;
10+
import me.tofpu.speedbridge.api.leaderboard.LeaderboardType;
1111
import me.tofpu.speedbridge.api.lobby.LobbyService;
1212
import me.tofpu.speedbridge.api.user.User;
1313
import me.tofpu.speedbridge.api.user.UserService;
1414
import me.tofpu.speedbridge.data.adapter.IslandAdapter;
15-
import me.tofpu.speedbridge.data.adapter.LeaderboardTypeAdapter;
1615
import me.tofpu.speedbridge.data.adapter.LocationAdapter;
1716
import me.tofpu.speedbridge.data.adapter.UserAdapter;
1817
import me.tofpu.speedbridge.data.file.path.Path;
1918
import me.tofpu.speedbridge.data.file.path.PathType;
2019
import me.tofpu.speedbridge.data.file.type.MessageFile;
2120
import me.tofpu.speedbridge.data.file.type.SettingsFile;
21+
import me.tofpu.speedbridge.game.leaderboard.AbstractLeaderboard;
22+
import me.tofpu.speedbridge.game.leaderboard.LeaderboardAdapter;
23+
import me.tofpu.speedbridge.game.leaderboard.LeaderboardServiceImpl;
2224
import me.tofpu.speedbridge.island.service.IslandServiceImpl;
2325
import me.tofpu.speedbridge.user.service.UserServiceImpl;
2426
import org.bukkit.Location;
2527
import org.bukkit.configuration.file.YamlConfiguration;
2628
import org.bukkit.plugin.Plugin;
2729

2830
import java.io.File;
31+
import java.io.FileNotFoundException;
32+
import java.io.FileReader;
2933
import java.io.IOException;
30-
import java.util.List;
3134
import java.util.Locale;
3235
import java.util.UUID;
3336

@@ -36,35 +39,38 @@ public class DataManager {
3639
.registerTypeAdapter(Location.class, new LocationAdapter())
3740
.registerTypeAdapter(Island.class, new IslandAdapter())
3841
.registerTypeAdapter(User.class, new UserAdapter())
39-
.registerTypeAdapter(
40-
new TypeToken<List<BoardUser>>() {}.getType(),
41-
new LeaderboardTypeAdapter())
42+
.registerTypeAdapter(AbstractLeaderboard.class, new LeaderboardAdapter())
4243
.setPrettyPrinting()
4344
.serializeNulls()
4445
.create();
4546

47+
private final Plugin plugin;
4648
private final File[] files;
4749
private final PluginFile[] pluginFiles;
4850

4951
private IslandServiceImpl islandService;
5052
private UserServiceImpl userService;
5153
private LobbyService lobbyService;
54+
private LeaderboardServiceImpl leaderboardService;
5255

53-
public DataManager() {
56+
public DataManager(final Plugin plugin) {
57+
this.plugin = plugin;
5458
this.files = new File[5];
5559
this.pluginFiles = new PluginFile[2];
5660
}
5761

58-
public void initialize(final IslandService islandService, final UserService userService, final LobbyService lobbyService, final Plugin plugin, final File parentDirectory) {
62+
public void initialize(final IslandService islandService, final UserService userService, final LobbyService lobbyService, final LeaderboardServiceImpl leaderboardService, final Plugin plugin, final File parentDirectory) {
5963
this.islandService = (IslandServiceImpl) islandService;
6064
this.userService = (UserServiceImpl) userService;
6165
this.lobbyService = lobbyService;
66+
this.leaderboardService = leaderboardService;
6267

6368
this.files[0] = parentDirectory;
6469
this.files[1] = new File(parentDirectory, "islands");
6570
this.files[2] = new File(parentDirectory, "users");
66-
this.files[3] = new File(parentDirectory, "lobby.json");
67-
this.files[4] = new File(parentDirectory, "leaderboard.json");
71+
this.files[3] = new File(parentDirectory, "leaderboards");
72+
this.files[4] = new File(parentDirectory, "lobby.json");
73+
// this.files[4] = new File(parentDirectory, "leaderboard.json");
6874

6975
this.pluginFiles[0] = new SettingsFile(plugin, parentDirectory);
7076
this.pluginFiles[1] = new MessageFile(plugin, parentDirectory);
@@ -124,15 +130,28 @@ public void unloadUser(final UUID uuid) {
124130
userService.removeUser(user);
125131
}
126132

127-
public void load() {
128-
lobbyService.load(GSON, files[3], files[4]);
133+
public void load() throws IOException {
134+
lobbyService.load(GSON, files[4]);
129135
islandService.loadAll();
136+
137+
final File file = new File(getFiles()[0], "leaderboard.json");
138+
if (file.exists()) {
139+
try (final FileReader reader = new FileReader(file)) {
140+
plugin.getLogger().info("Migrating your outdated leaderboard to the new leaderboard system now...");
141+
leaderboardService.get(LeaderboardType.GLOBAL).addAll(GSON.fromJson(reader, AbstractLeaderboard.class).positions());
142+
} catch (FileNotFoundException e) {
143+
e.printStackTrace();
144+
}
145+
file.delete();
146+
}
147+
leaderboardService.load();
130148
}
131149

132150
public void shutdown() {
133151
islandService.saveAll(true);
134152
userService.saveAll(true);
135-
lobbyService.save(GSON, files[3], files[4]);
153+
lobbyService.save(GSON, files[4]);
154+
leaderboardService.save();
136155
}
137156

138157
public File[] getFiles() {

0 commit comments

Comments
 (0)