Skip to content

Commit 0d96cdd

Browse files
committed
MySQL Implementation, Bump Version
Addressing PR #2 by implementing MySQL. Added close() to SaveHandler. Bumped Version to 2.0.0. Update PAPI and Paper Maven depends.
1 parent 13bf7f8 commit 0d96cdd

File tree

8 files changed

+153
-9
lines changed

8 files changed

+153
-9
lines changed

pom.xml

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66

77
<groupId>Simplexity</groupId>
88
<artifactId>SimplePrefixes</artifactId>
9-
<version>1.2.0</version>
9+
<version>2.0.0</version>
1010
<packaging>jar</packaging>
1111

1212
<name>SimplePrefixes</name>
1313

1414
<properties>
15-
<java.version>1.8</java.version>
15+
<java.version>21</java.version>
1616
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1717
</properties>
1818

@@ -75,13 +75,18 @@
7575
<dependency>
7676
<groupId>io.papermc.paper</groupId>
7777
<artifactId>paper-api</artifactId>
78-
<version>1.20.2-R0.1-SNAPSHOT</version>
78+
<version>1.20.6-R0.1-SNAPSHOT</version>
7979
<scope>provided</scope>
8080
</dependency>
81+
<dependency>
82+
<groupId>net.kyori</groupId>
83+
<artifactId>adventure-api</artifactId>
84+
<version>4.16.0</version>
85+
</dependency>
8186
<dependency>
8287
<groupId>me.clip</groupId>
8388
<artifactId>placeholderapi</artifactId>
84-
<version>2.11.4</version>
89+
<version>2.11.6</version>
8590
<scope>provided</scope>
8691
</dependency>
8792
<dependency>
@@ -90,5 +95,10 @@
9095
<version>1.7</version>
9196
<scope>provided</scope>
9297
</dependency>
98+
<dependency>
99+
<groupId>mysql</groupId>
100+
<artifactId>mysql-connector-java</artifactId>
101+
<version>8.0.32</version>
102+
</dependency>
93103
</dependencies>
94104
</project>

src/main/java/simplexity/simpleprefixes/config/Config.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,19 @@
11
package simplexity.simpleprefixes.config;
22

3-
import me.clip.placeholderapi.PlaceholderAPI;
4-
import net.kyori.adventure.text.Component;
53
import org.bukkit.Material;
64
import org.bukkit.inventory.ItemStack;
75
import org.bukkit.inventory.meta.ItemMeta;
86
import simplexity.simpleprefixes.SimplePrefixes;
97
import simplexity.simpleprefixes.util.Message;
108
import org.bukkit.configuration.file.FileConfiguration;
11-
;
129
import java.util.ArrayList;
1310
import java.util.Collections;
1411
import java.util.List;
1512

1613

1714
public class Config {
1815

19-
public enum SAVING_TYPE { PDC, FILE }
16+
public enum SAVING_TYPE { PDC, FILE, MYSQL }
2017
private static SAVING_TYPE savingType = SAVING_TYPE.PDC;
2118
private static String defaultPrefix = "<white>[<gray>Player</gray>]</white> ";
2219
private static String prefixMenuName = "<bold>Prefix Menu</bold>";
@@ -25,6 +22,11 @@ public enum SAVING_TYPE { PDC, FILE }
2522
private static List<String> headerLore = new ArrayList<>();
2623
private static String headerCount = "1";
2724

25+
private static String sqlUser;
26+
private static String sqlPass;
27+
private static String sqlDbName;
28+
private static String sqlIp;
29+
2830
public static void loadConfig() {
2931
SimplePrefixes.getPlugin().reloadConfig();
3032
FileConfiguration config = SimplePrefixes.getPlugin().getConfig();
@@ -39,6 +41,11 @@ public static void loadConfig() {
3941
headerName = config.getString("header.name", "<aqua>Click to Reset Prefix</aqua>");
4042
headerLore = config.getStringList("header.lore");
4143
headerCount = config.getString("header.count", "1");
44+
45+
sqlUser = config.getString("sql.user");
46+
sqlPass = config.getString("sql.pass");
47+
sqlDbName = config.getString("sql.dbName");
48+
sqlIp = config.getString("sql.ip");
4249
}
4350

4451
public static void generateBaseHeaderItem() {
@@ -47,7 +54,7 @@ public static void generateBaseHeaderItem() {
4754
headerItem = material != null ? new ItemStack(material) : new ItemStack(Material.ENDER_EYE);
4855
if (config.isInt("header.custom-model-data")) {
4956
ItemMeta meta = headerItem.getItemMeta();
50-
meta.setCustomModelData(config.getInt("header.custom-model-data"));
57+
meta.setCustomModelData(Integer.valueOf(config.getInt("header.custom-model-data")));
5158
headerItem.setItemMeta(meta);
5259
}
5360
}
@@ -60,4 +67,10 @@ public static void generateBaseHeaderItem() {
6067
public static List<String> getHeaderLore() { return Collections.unmodifiableList(headerLore); }
6168
public static String getHeaderCount() { return headerCount; }
6269

70+
public static String getSqlUser() { return sqlUser; }
71+
public static String getSqlPass() { return sqlPass; }
72+
public static String getSqlDbName() { return sqlDbName; }
73+
public static String getSqlIp() { return sqlIp; }
74+
public static String getSqlUrl() { return "jdbc:mysql://" + sqlIp + "/" + sqlDbName; }
75+
6376
}

src/main/java/simplexity/simpleprefixes/gui/chest/PrefixMenu.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public static PrefixMenu getInstance() {
3939
return instance;
4040
}
4141

42+
// TODO: Allow for the prefix menu to be generated using a "slots" argument.
4243
public Inventory generatePrefixMenu(Player p, int page) {
4344
Inventory inv;
4445
if (Config.getPrefixMenuName() == null) inv = Bukkit.createInventory(null, 54);

src/main/java/simplexity/simpleprefixes/prefix/PrefixUtil.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package simplexity.simpleprefixes.prefix;
22

33
import simplexity.simpleprefixes.config.Config;
4+
import simplexity.simpleprefixes.util.saving.MySQL;
45
import simplexity.simpleprefixes.util.saving.PlayerPDC;
56
import simplexity.simpleprefixes.util.saving.SaveHandler;
67
import simplexity.simpleprefixes.util.saving.YMLFile;
@@ -20,9 +21,11 @@ public static PrefixUtil getInstance() {
2021
}
2122

2223
public void loadSaveHandler() {
24+
if (saveHandler != null) saveHandler.close();
2325
switch (Config.getSavingType()) {
2426
case PDC -> saveHandler = new PlayerPDC();
2527
case FILE -> saveHandler = new YMLFile();
28+
case MYSQL -> saveHandler = new MySQL();
2629
// TODO: SQLite Implementation?
2730
}
2831
saveHandler.init();
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package simplexity.simpleprefixes.util.saving;
2+
3+
import org.bukkit.OfflinePlayer;
4+
import simplexity.simpleprefixes.SimplePrefixes;
5+
import simplexity.simpleprefixes.config.Config;
6+
7+
import java.sql.*;
8+
import java.util.logging.Logger;
9+
10+
public class MySQL extends SaveHandler {
11+
12+
private Connection connection;
13+
private String dbName;
14+
Logger logger = SimplePrefixes.getPrefixLogger();
15+
boolean enabled = true;
16+
17+
private final String CREATE_TABLE = """
18+
CREATE TABLE IF NOT EXISTS player_prefixes (
19+
id VARCHAR(36) PRIMARY KEY,
20+
prefix_id VARCHAR(256) NOT NULL
21+
);""";
22+
private final String INSERT_ROW = "REPLACE INTO player_prefixes (id, prefix_id) VALUES (?, ?);";
23+
private final String REMOVE_ROW = "DELETE FROM player_prefixes WHERE id = ?;";
24+
private final String SELECT_ROW = "SELECT * FROM player_prefixes WHERE id = ?;";
25+
26+
@Override
27+
public void init() {
28+
dbName = Config.getSqlDbName();
29+
30+
try {
31+
connection = DriverManager.getConnection(Config.getSqlUrl(), Config.getSqlUser(), Config.getSqlPass());
32+
logger.info("Established connection to the database.");
33+
34+
try (Statement statement = connection.createStatement()) {
35+
statement.execute(CREATE_TABLE);
36+
}
37+
38+
} catch (SQLException e) {
39+
if (e.getSQLState().equals("42000")) {
40+
logger.severe("Could not find database " + dbName + ", please create this database or fix the name to use MySQL.");
41+
}
42+
else {
43+
e.printStackTrace();
44+
}
45+
enabled = false;
46+
}
47+
}
48+
49+
@Override
50+
public String getPrefixId(OfflinePlayer p) {
51+
String prefixId = null;
52+
if (!isEnabled()) return null;
53+
try (PreparedStatement statement = connection.prepareStatement(SELECT_ROW)) {
54+
statement.setString(1, p.getUniqueId().toString());
55+
try (ResultSet result = statement.executeQuery()) {
56+
if (result.next()) {
57+
prefixId = result.getString("prefix_id");
58+
}
59+
}
60+
} catch (SQLException e) {
61+
e.printStackTrace();
62+
}
63+
return prefixId;
64+
}
65+
66+
@Override
67+
public void setPrefixId(OfflinePlayer p, String id) {
68+
if (id == null) {
69+
try (PreparedStatement statement = connection.prepareStatement(REMOVE_ROW)) {
70+
statement.setString(1, p.getUniqueId().toString());
71+
} catch (SQLException e) {
72+
e.printStackTrace();
73+
}
74+
return;
75+
}
76+
try (PreparedStatement statement = connection.prepareStatement(INSERT_ROW)) {
77+
statement.setString(1, p.getUniqueId().toString());
78+
statement.setString(2, id);
79+
} catch (SQLException e) {
80+
e.printStackTrace();
81+
}
82+
}
83+
84+
@Override
85+
public void close() {
86+
if (connection == null) return;
87+
try {
88+
connection.close();
89+
} catch (SQLException e) {
90+
e.printStackTrace();
91+
}
92+
}
93+
94+
private boolean isEnabled() {
95+
if (!enabled) {
96+
logger.severe("This plugin has disabled MySQL due to invalid configuration, please check configuration and reload.");
97+
}
98+
return enabled;
99+
}
100+
101+
}

src/main/java/simplexity/simpleprefixes/util/saving/PlayerPDC.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,9 @@ public void setPrefixId(OfflinePlayer p, String id) {
3939
if (id == null || id.isEmpty()) { pdc.remove(pdcKey); }
4040
else pdc.set(pdcKey, PersistentDataType.STRING, id);
4141
}
42+
43+
@Override
44+
public void close() {
45+
46+
}
4247
}

src/main/java/simplexity/simpleprefixes/util/saving/SaveHandler.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public abstract class SaveHandler {
1515
* Is nullable depending on the saving type.
1616
* @param p OfflinePlayer
1717
* @return prefixId of the player, empty String if none, null for special cases.
18+
* TODO: Figure out what the hell I was doing for null and empty string cases.
1819
*/
1920
public abstract String getPrefixId(OfflinePlayer p);
2021

@@ -25,4 +26,9 @@ public abstract class SaveHandler {
2526
*/
2627
public abstract void setPrefixId(OfflinePlayer p, String id);
2728

29+
/**
30+
* Called when the SaveHandler is no longer to be used.
31+
*/
32+
public abstract void close();
33+
2834
}

src/main/java/simplexity/simpleprefixes/util/saving/YMLFile.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,9 @@ public void setPrefixId(OfflinePlayer p, String id) {
4242
try { prefixData.save(dataFile); }
4343
catch (IOException e) { e.printStackTrace(); }
4444
}
45+
46+
@Override
47+
public void close() {
48+
49+
}
4550
}

0 commit comments

Comments
 (0)