diff --git a/README.md b/README.md
index cebf4fd9..aa31095a 100755
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-![logo](imgs/icon64.png)![carrier](imgs/logo_carrier.png)
+![ClaimChunk Logo](imgs/icon64.png)![ClaimChunk Title](imgs/logo_carrier.png)
[![Version Info](https://img.shields.io/badge/version-0.0.5-brightgreen.svg)](https://github.com/cjburkey01/ClaimChunk/releases)
[![Download Info](https://img.shields.io/badge/Download-Spigot-blue.svg)](https://www.spigotmc.org/resources/claimchunk.44458/)
@@ -10,7 +10,7 @@ Spigot plugin for 1.8+ allowing the claiming of chunks.
*The destiny of chunks is to unite not to divide*
*Let's make the world ours.*
-Usage and more information can be found [HERE](https://github.com/cjburkey01/ClaimChunk/wiki), on the Wiki.
+Usage and more information can be found [on the wiki](https://github.com/cjburkey01/ClaimChunk/wiki).
* 1.8 - 1.12.1 Work seamlessly.
* 1.6 - 1.7.10 Work when titles are disabled in config.
@@ -22,7 +22,7 @@ For more information:
Page on SpigotMC can be found [HERE](https://www.spigotmc.org/resources/claimchunk.44458/).
-Current version: **0.0.5** for Minecraft **1.12**.
+Current version: **[0.0.5](https://github.com/cjburkey01/ClaimChunk/releases)** for Minecraft **1.12**.
Optional:
* [Vault](https://www.spigotmc.org/resources/vault.41918/).
diff --git a/src/main/resources/icon.png b/imgs/icon.png
similarity index 100%
rename from src/main/resources/icon.png
rename to imgs/icon.png
diff --git a/src/main/java/com/cjburkey/claimchunk/ClaimChunk.java b/src/main/java/com/cjburkey/claimchunk/ClaimChunk.java
index 3c42582d..f7d9acfa 100644
--- a/src/main/java/com/cjburkey/claimchunk/ClaimChunk.java
+++ b/src/main/java/com/cjburkey/claimchunk/ClaimChunk.java
@@ -1,7 +1,6 @@
package com.cjburkey.claimchunk;
import java.io.File;
-import java.io.IOException;
import org.bukkit.plugin.java.JavaPlugin;
import com.cjburkey.claimchunk.chunk.ChunkHandler;
import com.cjburkey.claimchunk.cmd.CommandHandler;
@@ -20,10 +19,8 @@ public final class ClaimChunk extends JavaPlugin {
private boolean useEcon = false;
private boolean useDynmap = false;
+ private boolean useSql = false;
- //private File dataFile;
- //private File accessFile;
- //private File namesFile;
private File chunkFile;
private File plyFile;
@@ -39,9 +36,6 @@ public void onLoad() {
}
public void onEnable() {
- //dataFile = new File(getDataFolder(), "/data/claimed.chks");
- //plyFile = new File(getDataFolder(), "/data/playerCache.dat");
- //accessFile = new File(getDataFolder(), "/data/grantedAccess.dat");
chunkFile = new File(getDataFolder(), "/data/claimedChunks.json");
plyFile = new File(getDataFolder(), "/data/playerData.json");
@@ -49,8 +43,8 @@ public void onEnable() {
cmds = new Commands();
economy = new Econ();
map = new ClaimChunkDynmap();
- playerHandler = new PlayerHandler(plyFile);
- chunkHandler = new ChunkHandler(chunkFile);
+ playerHandler = new PlayerHandler(useSql, plyFile);
+ chunkHandler = new ChunkHandler(useSql, chunkFile);
File oldChunks = new File(getDataFolder(), "/data/claimed.chks");
File oldCache = new File(getDataFolder(), "/data/playerCache.dat");
@@ -100,7 +94,7 @@ public void onEnable() {
try {
chunkHandler.readFromDisk();
playerHandler.readFromDisk();
- } catch (IOException e) {
+ } catch (Exception e) {
e.printStackTrace();
}
Utils.log("Loaded data.");
@@ -116,7 +110,7 @@ public void onDisable() {
chunkHandler.writeToDisk();
playerHandler.writeToDisk();
Utils.log("Saved data.");
- } catch (IOException e) {
+ } catch (Exception e) {
e.printStackTrace();
}
Utils.log("Finished disable.");
@@ -153,7 +147,7 @@ private void reloadData() {
chunkHandler.readFromDisk();
playerHandler.readFromDisk();
- } catch (IOException e) {
+ } catch (Exception e) {
e.printStackTrace();
Utils.log("Couldn't reload data: \"" + e.getMessage() + "\"");
}
diff --git a/src/main/java/com/cjburkey/claimchunk/chunk/ChunkHandler.java b/src/main/java/com/cjburkey/claimchunk/chunk/ChunkHandler.java
index 302e5a02..f7bbe4b5 100644
--- a/src/main/java/com/cjburkey/claimchunk/chunk/ChunkHandler.java
+++ b/src/main/java/com/cjburkey/claimchunk/chunk/ChunkHandler.java
@@ -10,15 +10,17 @@
import org.bukkit.World;
import org.bukkit.entity.Player;
import com.cjburkey.claimchunk.ClaimChunk;
+import com.cjburkey.claimchunk.data.IDataStorage;
import com.cjburkey.claimchunk.data.JsonDataStorage;
+import com.cjburkey.claimchunk.data.SqlDataStorage;
public final class ChunkHandler {
private final Map claimed = new ConcurrentHashMap<>();
- private final JsonDataStorage data;
+ private final IDataStorage data;
- public ChunkHandler(File saveFile) {
- data = new JsonDataStorage<>(DataChunk[].class, saveFile);
+ public ChunkHandler(boolean sql, File saveFile) {
+ data = (sql) ? new SqlDataStorage<>() : new JsonDataStorage<>(DataChunk[].class, saveFile);
}
/**
@@ -106,7 +108,7 @@ public boolean hasChunk(UUID uniqueId) {
return false;
}
- public void writeToDisk() throws IOException {
+ public void writeToDisk() throws Exception {
data.clearData();
for (Entry entry : claimed.entrySet()) {
data.addData(new DataChunk(entry.getKey(), entry.getValue()));
@@ -114,7 +116,7 @@ public void writeToDisk() throws IOException {
data.saveData();
}
- public void readFromDisk() throws IOException {
+ public void readFromDisk() throws Exception {
data.reloadData();
claimed.clear();
for (DataChunk c : data.getData()) {
diff --git a/src/main/java/com/cjburkey/claimchunk/data/DataConversion.java b/src/main/java/com/cjburkey/claimchunk/data/DataConversion.java
index 9b0cbeab..c0ecc475 100644
--- a/src/main/java/com/cjburkey/claimchunk/data/DataConversion.java
+++ b/src/main/java/com/cjburkey/claimchunk/data/DataConversion.java
@@ -38,21 +38,21 @@ public static void check(File chunk, File cache, File access, ClaimChunk c) thro
}
}
- private static void convertChunks(File file, ChunkHandler handler) throws IOException {
+ private static void convertChunks(File file, ChunkHandler handler) throws Exception {
Utils.log("Updating chunks.");
readChunks(file, handler);
handler.writeToDisk();
file.delete();
}
- private static void convertCache(File file, PlayerHandler handler) throws ClassNotFoundException, IOException {
+ private static void convertCache(File file, PlayerHandler handler) throws Exception {
Utils.log("Updating cache.");
readOldCacher(file, handler);
handler.writeToDisk();
file.delete();
}
- private static void convertAccess(File file, PlayerHandler handler) throws ClassNotFoundException, IOException {
+ private static void convertAccess(File file, PlayerHandler handler) throws Exception {
Utils.log("Updating access.");
readOldAccess(file, handler);
handler.writeToDisk();
diff --git a/src/main/java/com/cjburkey/claimchunk/data/SqlDataStorage.java b/src/main/java/com/cjburkey/claimchunk/data/SqlDataStorage.java
index 11dbf0e4..0d7daf98 100644
--- a/src/main/java/com/cjburkey/claimchunk/data/SqlDataStorage.java
+++ b/src/main/java/com/cjburkey/claimchunk/data/SqlDataStorage.java
@@ -1,11 +1,37 @@
package com.cjburkey.claimchunk.data;
+import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
+import org.bukkit.Bukkit;
+import com.cjburkey.claimchunk.ClaimChunk;
+import com.cjburkey.claimchunk.Config;
+import com.cjburkey.claimchunk.Utils;
+import com.cjburkey.claimchunk.database.DatabaseConnect;
public class SqlDataStorage implements IDataStorage {
private final List storage = new ArrayList<>();
+ private final DatabaseConnect connect;
+
+ public SqlDataStorage() {
+ String host = Config.getString("database", "hostname");
+ int port = Config.getInt("database", "port");
+ String database = Config.getString("database", "database");
+ String user = Config.getString("database", "username");
+ String pass = Config.getString("database", "password");
+ connect = new DatabaseConnect(host, database, user, pass, port);
+ try {
+ boolean worked = connect.openConnection();
+ if (!worked) {
+ Utils.log("&4Couldn't create SQL connection. Connection could not be made or JDBC could not be found.");
+ Bukkit.getServer().getPluginManager().disablePlugin(ClaimChunk.getInstance());
+ return;
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ }
public void saveData() {
diff --git a/src/main/java/com/cjburkey/claimchunk/database/DatabaseConnect.java b/src/main/java/com/cjburkey/claimchunk/database/DatabaseConnect.java
new file mode 100644
index 00000000..27062f37
--- /dev/null
+++ b/src/main/java/com/cjburkey/claimchunk/database/DatabaseConnect.java
@@ -0,0 +1,49 @@
+package com.cjburkey.claimchunk.database;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import com.cjburkey.claimchunk.Utils;
+
+public class DatabaseConnect {
+
+ private final String hostName;
+ private final String database;
+ private final String username;
+ private final String password;
+ private final int port;
+ private Connection connection;
+
+ public DatabaseConnect(String hostName, String database, String user, String pass, int port) {
+ this.hostName = hostName;
+ this.database = database;
+ username = user;
+ password = pass;
+ this.port = port;
+ }
+
+ public boolean openConnection() throws SQLException {
+ synchronized (this) {
+ if (connection != null && !connection.isClosed()) {
+ return false;
+ }
+ try {
+ Class.forName("com.mysql.jdbc.Driver");
+ } catch (ClassNotFoundException e) {
+ Utils.log("JDBC not found.");
+ return false;
+ }
+ StringBuilder connect = new StringBuilder();
+ connect.append("jdbc:mysql://");
+ connect.append(hostName);
+ connect.append(':');
+ connect.append(port);
+ connect.append('/');
+ connect.append(database);
+ connection = DriverManager.getConnection(connect.toString(), username, password);
+ return true;
+ }
+
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/cjburkey/claimchunk/player/PlayerHandler.java b/src/main/java/com/cjburkey/claimchunk/player/PlayerHandler.java
index f098b422..5823b571 100644
--- a/src/main/java/com/cjburkey/claimchunk/player/PlayerHandler.java
+++ b/src/main/java/com/cjburkey/claimchunk/player/PlayerHandler.java
@@ -8,15 +8,17 @@
import java.util.UUID;
import java.util.concurrent.ConcurrentLinkedQueue;
import org.bukkit.entity.Player;
+import com.cjburkey.claimchunk.data.IDataStorage;
import com.cjburkey.claimchunk.data.JsonDataStorage;
+import com.cjburkey.claimchunk.data.SqlDataStorage;
public class PlayerHandler {
private final Queue playerData = new ConcurrentLinkedQueue<>();
- private final JsonDataStorage data;
+ private final IDataStorage data;
- public PlayerHandler(File file) {
- data = new JsonDataStorage<>(DataPlayer[].class, file);
+ public PlayerHandler(boolean sql, File file) {
+ data = (sql) ? new SqlDataStorage<>() : new JsonDataStorage<>(DataPlayer[].class, file);
}
/**
@@ -125,7 +127,7 @@ public void addOldPlayerData(UUID id, String name) {
}
}
- public void writeToDisk() throws IOException {
+ public void writeToDisk() throws Exception {
data.clearData();
for (DataPlayer a : playerData) {
data.addData(a.clone());
@@ -133,7 +135,7 @@ public void writeToDisk() throws IOException {
data.saveData();
}
- public void readFromDisk() throws IOException {
+ public void readFromDisk() throws Exception {
data.reloadData();
playerData.clear();
for (DataPlayer ply : data.getData()) {
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 84a74cc5..b9dc1dd7 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -31,6 +31,15 @@ data:
# In minutes
saveDataInterval: 5
+# Not implemented yet
+database:
+ useDatabase: false
+ hostname: '127.0.0.1'
+ port: 3306
+ database: 'MyServer'
+ username: 'root'
+ password: ''
+
messages:
noPluginPerm: 'You do not have permission to use ClaimChunk.'
claimNoPerm: 'You do not have permission to claim chunks.'