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.'