diff --git a/pom.xml b/pom.xml
index 2b6947b..ab57f2d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -79,6 +79,12 @@
1.20-R0.1-SNAPSHOT
provided
+
+ org.mongodb
+ mongo-java-driver
+ 3.12.10
+ compile
+
org.projectlombok
lombok
diff --git a/src/main/java/com/loganmagnan/eventcore/EventCore.java b/src/main/java/com/loganmagnan/eventcore/EventCore.java
index ed75974..232717f 100644
--- a/src/main/java/com/loganmagnan/eventcore/EventCore.java
+++ b/src/main/java/com/loganmagnan/eventcore/EventCore.java
@@ -4,7 +4,9 @@ import com.loganmagnan.eventcore.managers.CooldownManager;
import com.loganmagnan.eventcore.managers.PlayerDataManager;
import com.loganmagnan.eventcore.managers.SpawnManager;
import com.loganmagnan.eventcore.managers.ChatManager;
+import com.loganmagnan.eventcore.managers.mongo.MongoManager;
import com.loganmagnan.eventcore.menusystem.PlayerMenuUtil;
+import com.loganmagnan.eventcore.playerdata.PlayerData;
import com.loganmagnan.eventcore.runnables.CooldownRunnable;
import com.loganmagnan.eventcore.utils.ClassRegistrationUtils;
import com.loganmagnan.eventcore.utils.ColorUtils;
@@ -15,7 +17,6 @@ import com.loganmagnan.eventcore.utils.config.FileConfig;
import com.loganmagnan.eventcore.utils.config.file.Config;
import lombok.Getter;
import lombok.Setter;
-import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.HashMap;
@@ -32,6 +33,7 @@ public class EventCore extends JavaPlugin {
private FileConfig messagesConfig;
// Managers
+ private MongoManager mongoManager;
private PlayerDataManager playerDataManager;
private SpawnManager spawnManager;
private ChatManager chatManager;
@@ -53,11 +55,10 @@ public class EventCore extends JavaPlugin {
new Constants();
- Bukkit.getConsoleSender().sendMessage(Utils.chatBar);
- Bukkit.getConsoleSender().sendMessage(ColorUtils.getMessageType("&dEventCore &7- &av" + this.getDescription().getVersion()));
- Bukkit.getConsoleSender().sendMessage(ColorUtils.getMessageType("&7Made by &eLoganM Development"));
- Bukkit.getConsoleSender().sendMessage(Utils.chatBar);
-
+ this.getServer().getConsoleSender().sendMessage(Utils.chatBar);
+ this.getServer().getConsoleSender().sendMessage(ColorUtils.getMessageType("&dEventCore &7- &av" + this.getDescription().getVersion()));
+ this.getServer().getConsoleSender().sendMessage(ColorUtils.getMessageType("&7Made by &eLoganM Development"));
+ this.getServer().getConsoleSender().sendMessage(Utils.chatBar);
this.loadCommands();
this.loadManagers();
this.loadListeners();
@@ -66,6 +67,14 @@ public class EventCore extends JavaPlugin {
@Override
public void onDisable() {
+ for (Player player : this.getServer().getOnlinePlayers()) {
+ PlayerData playerData = this.playerDataManager.getPlayerData(player.getUniqueId());
+
+ this.playerDataManager.savePlayerData(playerData);
+ }
+
+ this.mongoManager.disconnect();
+
instance = null;
}
@@ -74,6 +83,7 @@ public class EventCore extends JavaPlugin {
}
private void loadManagers() {
+ this.mongoManager = new MongoManager();
this.playerDataManager = new PlayerDataManager();
this.spawnManager = new SpawnManager();
this.chatManager = new ChatManager();
diff --git a/src/main/java/com/loganmagnan/eventcore/commands/ChatColorCommand.java b/src/main/java/com/loganmagnan/eventcore/commands/ChatColorCommand.java
new file mode 100644
index 0000000..f91b2ec
--- /dev/null
+++ b/src/main/java/com/loganmagnan/eventcore/commands/ChatColorCommand.java
@@ -0,0 +1,24 @@
+package com.loganmagnan.eventcore.commands;
+
+import com.loganmagnan.eventcore.EventCore;
+import com.loganmagnan.eventcore.utils.command.BaseCommand;
+import com.loganmagnan.eventcore.utils.command.Command;
+import com.loganmagnan.eventcore.utils.command.CommandArguments;
+import org.bukkit.entity.Player;
+
+public class ChatColorCommand extends BaseCommand {
+
+ private EventCore main = EventCore.getInstance();
+
+ @Command(name = "chatcolor", permission = "eventcore.command.chatcolor")
+ @Override
+ public void executeAs(CommandArguments command) {
+ Player player = command.getPlayer();
+
+ String[] args = command.getArgs();
+
+ if (args.length == 0) {
+ // To Do: Setup Chat Color Menu
+ }
+ }
+}
diff --git a/src/main/java/com/loganmagnan/eventcore/listeners/AsyncPlayerChatListener.java b/src/main/java/com/loganmagnan/eventcore/listeners/AsyncPlayerChatListener.java
index f5aaee3..32f701a 100644
--- a/src/main/java/com/loganmagnan/eventcore/listeners/AsyncPlayerChatListener.java
+++ b/src/main/java/com/loganmagnan/eventcore/listeners/AsyncPlayerChatListener.java
@@ -1,6 +1,7 @@
package com.loganmagnan.eventcore.listeners;
import com.loganmagnan.eventcore.EventCore;
+import com.loganmagnan.eventcore.playerdata.PlayerData;
import com.loganmagnan.eventcore.utils.ColorUtils;
import com.loganmagnan.eventcore.utils.Constants;
import org.bukkit.entity.Player;
@@ -16,6 +17,8 @@ public class AsyncPlayerChatListener implements Listener {
public void onAsyncPlayerChat(AsyncPlayerChatEvent event) {
Player player = event.getPlayer();
+ PlayerData playerData = this.main.getPlayerDataManager().getPlayerData(player.getUniqueId());
+
if (this.main.getChatManager().isMuted()) {
event.setCancelled(true);
@@ -39,7 +42,9 @@ public class AsyncPlayerChatListener implements Listener {
}
}
- // To Do: Setup Chat Color
+ if (playerData.getChatColor() != null) {
+ event.setMessage(playerData.getChatColor() + event.getMessage());
+ }
this.main.getCooldownManager().setChatCooldown(player.getUniqueId(), this.main.getChatManager().getDelayAmount());
}
diff --git a/src/main/java/com/loganmagnan/eventcore/managers/PlayerDataManager.java b/src/main/java/com/loganmagnan/eventcore/managers/PlayerDataManager.java
index c752017..30b4403 100644
--- a/src/main/java/com/loganmagnan/eventcore/managers/PlayerDataManager.java
+++ b/src/main/java/com/loganmagnan/eventcore/managers/PlayerDataManager.java
@@ -4,7 +4,12 @@ import com.loganmagnan.eventcore.EventCore;
import com.loganmagnan.eventcore.playerdata.PlayerData;
import com.loganmagnan.eventcore.playerdata.PlayerState;
import com.loganmagnan.eventcore.utils.PlayerUtil;
+import com.mongodb.client.MongoCursor;
+import com.mongodb.client.model.Filters;
+import com.mongodb.client.model.UpdateOptions;
import lombok.Getter;
+import org.bson.Document;
+import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.*;
@@ -28,11 +33,21 @@ public class PlayerDataManager {
}
public void loadPlayerData(PlayerData playerData) {
+ Document document = this.main.getMongoManager().getPlayers().find(Filters.eq("unique-id", playerData.getUniqueId().toString())).first();
+
+ if (document != null) {
+ playerData.setChatColor(ChatColor.valueOf(document.getString("chat-color")));
+ }
+
playerData.setLoaded(true);
}
public void savePlayerData(PlayerData playerData) {
+ Document document = new Document();
+ document.put("unique-id", playerData.getUniqueId().toString());
+ document.put("chat-color", playerData.getChatColor().name());
+ this.main.getMongoManager().getPlayers().replaceOne(Filters.eq("unique-id", playerData.getUniqueId().toString()), document, new UpdateOptions().upsert(true));
}
public void deletePlayer(UUID uniqueId) {
@@ -42,6 +57,13 @@ public class PlayerDataManager {
});
}
+ public MongoCursor getPlayersSorted(String stat) {
+ Document sort = new Document();
+ sort.put(stat, -1);
+
+ return this.main.getMongoManager().getPlayers().find().sort(sort).limit(10).iterator();
+ }
+
public void sendToSpawnAndResetPlayer(Player player) {
this.resetPlayer(player);
this.giveSpawnItemsToPlayer(player);
diff --git a/src/main/java/com/loganmagnan/eventcore/managers/mongo/MongoManager.java b/src/main/java/com/loganmagnan/eventcore/managers/mongo/MongoManager.java
new file mode 100644
index 0000000..30d49fc
--- /dev/null
+++ b/src/main/java/com/loganmagnan/eventcore/managers/mongo/MongoManager.java
@@ -0,0 +1,81 @@
+package com.loganmagnan.eventcore.managers.mongo;
+
+import com.loganmagnan.eventcore.EventCore;
+import com.loganmagnan.eventcore.utils.ColorUtils;
+import com.mongodb.MongoClient;
+import com.mongodb.MongoClientURI;
+import com.mongodb.MongoCredential;
+import com.mongodb.ServerAddress;
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.MongoDatabase;
+import lombok.Getter;
+import org.bson.Document;
+import org.bukkit.Bukkit;
+import org.bukkit.configuration.file.FileConfiguration;
+import java.util.Collections;
+
+@Getter
+public class MongoManager {
+
+ private EventCore plugin = EventCore.getInstance();
+ private final MongoManager instance;
+
+ private final FileConfiguration config = this.plugin.getMainConfig().getConfig();
+
+ private MongoClient mongoClient;
+ private MongoDatabase mongoDatabase;
+
+ private final boolean uriMode = config.getBoolean("MONGO.URI-MODE");
+ private final String host = config.getString("MONGO.NORMAL.HOST");
+ private final int port = config.getInt("MONGO.NORMAL.PORT");
+ private final String database = config.getString("MONGO.NORMAL.DATABASE");
+ private final boolean auth = config.getBoolean("MONGO.NORMAL.AUTH.ENABLED");
+ private final String user = config.getString("MONGO.NORMAL.AUTH.USERNAME");
+ private final String password = config.getString("MONGO.NORMAL.AUTH.PASSWORD");
+ private final String authDatabase = config.getString("MONGO.NORMAL.AUTH.AUTH-DATABASE");
+ private final String uriString = config.getString("MONGO.URI.CONNECTION-STRING");
+ private final String uriDatabase = config.getString("MONGO.URI.DATABASE-NAME");
+
+ private boolean connected;
+
+ private MongoCollection players;
+
+ public MongoManager() {
+ instance = this;
+ try {
+ if (this.uriMode) {
+ MongoClientURI mongoClientURI = new MongoClientURI(this.uriString);
+
+ MongoClient mongoClient = new MongoClient(mongoClientURI);
+ mongoClient.getDatabase(this.uriDatabase);
+ mongoDatabase = mongoClient.getDatabase(this.uriDatabase);
+ } else {
+ if (auth) {
+ final MongoCredential credential = MongoCredential.createCredential(user, authDatabase, password.toCharArray());
+ mongoClient = new MongoClient(new ServerAddress(host, port), Collections.singletonList(credential));
+ } else {
+ mongoClient = new MongoClient(host, port);
+ }
+
+ mongoDatabase = mongoClient.getDatabase(database);
+ }
+ connected = true;
+ Bukkit.getConsoleSender().sendMessage(ColorUtils.getMessageType("&b[EventCore] &aSuccessfully connected to the database!"));
+ this.players = this.mongoDatabase.getCollection("players");
+ } catch (Exception exception) {
+ connected = false;
+ Bukkit.getConsoleSender().sendMessage(ColorUtils.getMessageType("&b[EventCore] &cFailed to connect to the database!"));
+ exception.printStackTrace();
+ Bukkit.getPluginManager().disablePlugin(this.plugin);
+ Bukkit.getConsoleSender().sendMessage(ColorUtils.getMessageType("&b[EventCore] &cDisabling EventCore..."));
+ }
+ }
+
+ public void disconnect() {
+ if (this.mongoClient != null) {
+ this.mongoClient.close();
+ this.connected = false;
+ Bukkit.getConsoleSender().sendMessage(ColorUtils.getMessageType("&b[EventCore] &aSuccessfully disconnected from the database!"));
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index c7e9ce5..cf63715 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -1,2 +1,20 @@
+# --------------------------------------------------
+# MongoDB configuration
+# --------------------------------------------------
+MONGO:
+ URI-MODE: false
+ NORMAL:
+ HOST: ""
+ PORT: 27017
+ DATABASE: ""
+ AUTH:
+ ENABLED: false
+ USERNAME: "user"
+ PASSWORD: "pass"
+ AUTH-DATABASE: "admin"
+ URI:
+ CONNECTION-STRING: ""
+ DATABASE-NAME: ""
+
PERMISSION-NODES:
CHAT-BYPASS: "eventcore.chat.bypass"
\ No newline at end of file