diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml
index 331e3cf..ec06eed 100644
--- a/.github/workflows/sonar.yml
+++ b/.github/workflows/sonar.yml
@@ -19,13 +19,13 @@ jobs:
java-version: 21
distribution: 'temurin' # Alternative distribution options are available.
- name: Cache SonarCloud packages
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: ~/.sonar/cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar
- name: Cache Maven packages
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
diff --git a/pom.xml b/pom.xml
index 8713c49..1b0470c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -130,13 +130,6 @@
-
- org.xerial
- sqlite-jdbc
- 3.43.2.2
- compile
-
-
org.bstats
bstats-bukkit
@@ -153,8 +146,8 @@
net.guizhanss
- guizhanlib-all
- 2.0.0-SNAPSHOT
+ GuizhanLib-api
+ 1.8.1
compile
diff --git a/src/main/java/net/guizhanss/gcereborn/GeneticChickengineering.java b/src/main/java/net/guizhanss/gcereborn/GeneticChickengineering.java
index bbc1632..abe4532 100644
--- a/src/main/java/net/guizhanss/gcereborn/GeneticChickengineering.java
+++ b/src/main/java/net/guizhanss/gcereborn/GeneticChickengineering.java
@@ -16,10 +16,8 @@
import net.guizhanss.gcereborn.core.commands.GCECommand;
import net.guizhanss.gcereborn.core.services.ConfigurationService;
-import net.guizhanss.gcereborn.core.services.DatabaseService;
import net.guizhanss.gcereborn.core.services.IntegrationService;
import net.guizhanss.gcereborn.core.services.LocalizationService;
-import net.guizhanss.gcereborn.listeners.WorldSavedListener;
import net.guizhanss.gcereborn.setup.Items;
import net.guizhanss.gcereborn.setup.Researches;
import net.guizhanss.guizhanlib.slimefun.addon.AbstractAddon;
@@ -33,7 +31,6 @@ public class GeneticChickengineering extends AbstractAddon {
private ConfigurationService configService;
private LocalizationService localization;
- private DatabaseService dbService;
private IntegrationService integrationService;
private boolean debugEnabled = false;
@@ -51,11 +48,6 @@ public static LocalizationService getLocalization() {
return inst().localization;
}
- @Nonnull
- public static DatabaseService getDatabaseService() {
- return inst().dbService;
- }
-
@Nonnull
public static IntegrationService getIntegrationService() {
return inst().integrationService;
@@ -105,14 +97,6 @@ public void enable() {
return;
}
- // database
- log(Level.INFO, localization.getString("console.load.database"));
- dbService = new DatabaseService(this);
- if (!dbService.isConnected()) {
- getServer().getPluginManager().disablePlugin(this);
- return;
- }
-
// items
log(Level.INFO, localization.getString("console.load.items"));
Items.setup(this);
@@ -122,7 +106,6 @@ public void enable() {
Researches.setup();
// listeners
- new WorldSavedListener(this);
// commands
if (configService.isCommandsEnabled()) {
@@ -140,17 +123,11 @@ public void enable() {
// metrics
setupMetrics();
-
- // run cleanup once after startup
- getScheduler().run(() -> dbService.cleanup());
}
@Override
public void disable() {
- if (dbService != null) {
- dbService.cleanup();
- dbService.shutdown();
- }
+ // do nothing
}
private void setupMetrics() {
diff --git a/src/main/java/net/guizhanss/gcereborn/core/services/DatabaseService.java b/src/main/java/net/guizhanss/gcereborn/core/services/DatabaseService.java
deleted file mode 100644
index 155379f..0000000
--- a/src/main/java/net/guizhanss/gcereborn/core/services/DatabaseService.java
+++ /dev/null
@@ -1,241 +0,0 @@
-package net.guizhanss.gcereborn.core.services;
-
-import java.io.File;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.logging.Level;
-
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import javax.annotation.ParametersAreNonnullByDefault;
-
-import com.google.common.base.Preconditions;
-
-import org.bukkit.World;
-import org.bukkit.entity.Entity;
-
-import io.github.thebusybiscuit.slimefun4.libraries.dough.data.persistent.PersistentDataAPI;
-
-import net.guizhanss.gcereborn.GeneticChickengineering;
-import net.guizhanss.gcereborn.utils.Keys;
-
-@SuppressWarnings("ConstantConditions")
-@Deprecated(forRemoval = true)
-public final class DatabaseService {
-
- private static final String DB_NAME = "GCE.db";
-
- private final String dbPath;
-
- private Connection conn;
- private boolean hasChanges = false;
- private Map cache;
-
- public DatabaseService(GeneticChickengineering plugin) {
- dbPath = plugin.getDataFolder().getPath() + File.separator + DB_NAME;
-
- connect();
-
- if (isConnected()) {
- GeneticChickengineering.log(Level.INFO, GeneticChickengineering.getLocalization().getString("console.database.connected"));
- createTables();
- }
- }
-
- public boolean isConnected() {
- return conn != null;
- }
-
- public boolean checkConnection() {
- if (!isConnected()) {
- GeneticChickengineering.log(Level.SEVERE, GeneticChickengineering.getLocalization().getString("console.database.not-connected"));
- return false;
- } else {
- return true;
- }
- }
-
- @Nonnull
- public Map getAllChickens() {
- if (!hasChanges && cache != null) {
- return cache;
- }
-
- checkConnection();
- Map chickens = new HashMap<>();
- try {
- String sql = "SELECT uuid, dna FROM entities;";
- Statement stmt = conn.createStatement();
- ResultSet rs = stmt.executeQuery(sql);
- while (rs.next()) {
- chickens.put(rs.getString("uuid"), rs.getString("dna"));
- }
- hasChanges = false;
- cache = chickens;
- } catch (SQLException ex) {
- GeneticChickengineering.log(Level.SEVERE, ex, GeneticChickengineering.getLocalization().getString("console.database.exception"));
- }
- return chickens;
- }
-
- public boolean hasChicken(@Nonnull String uuid) {
- Preconditions.checkArgument(uuid != null, "uuid cannot be null");
-
- return getAllChickens().containsKey(uuid);
- }
-
- public boolean hasChicken(@Nonnull UUID uuid) {
- Preconditions.checkArgument(uuid != null, "uuid cannot be null");
-
- return hasChicken(uuid.toString());
- }
-
- /**
- * Get the chicken DNA.
- * Make sure you have called {@link #hasChicken(String)} to check if chicken exists first.
- *
- * @param uuid The uuid of the chicken.
- * @return The chicken DNA.
- */
- @Nullable
- public String getChickenDNA(@Nonnull String uuid) {
- Preconditions.checkArgument(uuid != null, "uuid cannot be null");
-
- return getAllChickens().get(uuid);
- }
-
- public String getChickenDNA(@Nonnull UUID uuid) {
- Preconditions.checkArgument(uuid != null, "uuid cannot be null");
-
- return getChickenDNA(uuid.toString());
- }
-
- @ParametersAreNonnullByDefault
- public void addChicken(String uuid, String dna) {
- Preconditions.checkArgument(uuid != null, "uuid cannot be null");
- Preconditions.checkArgument(dna != null, "dna cannot be null");
-
- checkConnection();
- String sql = "INSERT INTO entities (uuid, dna) VALUES (?, ?);";
- try (var stmt = conn.prepareStatement(sql)) {
- stmt.setString(1, uuid);
- stmt.setString(2, dna);
- stmt.executeUpdate();
- hasChanges = true;
- } catch (SQLException ex) {
- GeneticChickengineering.log(Level.SEVERE, ex, GeneticChickengineering.getLocalization().getString("console.database.exception"));
- }
- }
-
- public void removeChicken(@Nonnull String uuid) {
- Preconditions.checkArgument(uuid != null, "uuid cannot be null");
-
- checkConnection();
- String sql = "DELETE FROM entities WHERE uuid = ?;";
- try (var stmt = conn.prepareStatement(sql)) {
- stmt.setString(1, uuid);
- stmt.executeUpdate();
- hasChanges = true;
- } catch (SQLException ex) {
- GeneticChickengineering.log(Level.SEVERE, ex, GeneticChickengineering.getLocalization().getString("console.database.exception"));
- }
- }
-
-
- /**
- * Clean up the database, remove the records of chickens that no longer exist.
- */
- public void cleanup() {
- var chickens = getAllChickens();
- if (chickens.isEmpty()) {
- return;
- }
- List worlds = GeneticChickengineering.getInstance().getServer().getWorlds();
-
- List found = new ArrayList<>();
- for (World world : worlds) {
- for (var entry : chickens.entrySet()) {
- String uuid = entry.getKey();
- if (found.contains(uuid)) {
- continue;
- }
- Entity chick = world.getEntity(UUID.fromString(uuid));
- if (chick != null) {
- found.add(uuid);
- PersistentDataAPI.setString(chick, Keys.CHICKEN_DNA, entry.getValue());
- }
- }
- }
- int validCount = 0;
- int invalidCount = 0;
-
- for (var entry : chickens.entrySet()) {
- String uuid = entry.getKey();
- removeChicken(uuid);
- if (found.contains(uuid)) {
- validCount++;
- } else {
- invalidCount++;
- }
- }
- commit();
- if (invalidCount > 0) {
- GeneticChickengineering.log(Level.INFO, "Migrated {0} valid records and removed {1} invalid records from the database.", validCount, invalidCount);
- }
- }
-
- public void shutdown() {
- checkConnection();
- try {
- commit();
- conn.close();
- } catch (SQLException ex) {
- GeneticChickengineering.log(Level.SEVERE, ex, GeneticChickengineering.getLocalization().getString("console.database.exception"));
- }
- }
-
- private void connect() {
- try {
- String url = "jdbc:sqlite:" + dbPath;
- conn = DriverManager.getConnection(url);
- conn.setAutoCommit(false);
- } catch (SQLException ex) {
- GeneticChickengineering.log(Level.SEVERE, ex, GeneticChickengineering.getLocalization().getString("console.database.connect-fail"));
- }
- }
-
- private void createTables() {
- try {
- String sql = "CREATE TABLE IF NOT EXISTS entities (" + "id INTEGER PRIMARY KEY AUTOINCREMENT," + "uuid TEXT NOT NULL," + "dna TEXT NOT NULL);";
- execSql(sql);
- commit();
- } catch (SQLException ex) {
- GeneticChickengineering.log(Level.SEVERE, ex, GeneticChickengineering.getLocalization().getString("console.database.exception"));
- }
- }
-
- private void execSql(@Nonnull String sql) throws SQLException {
- if (!checkConnection()) return;
- GeneticChickengineering.debug("Prepare execute sql entry: {0}", sql);
-
- try (var stmt = conn.createStatement()) {
- stmt.execute(sql);
- }
- }
-
- private void commit() {
- try {
- conn.commit();
- } catch (SQLException ex) {
- GeneticChickengineering.log(Level.SEVERE, ex, GeneticChickengineering.getLocalization().getString("console.database.exception"));
- }
- }
-}
diff --git a/src/main/java/net/guizhanss/gcereborn/listeners/WorldSavedListener.java b/src/main/java/net/guizhanss/gcereborn/listeners/WorldSavedListener.java
deleted file mode 100644
index d86c12d..0000000
--- a/src/main/java/net/guizhanss/gcereborn/listeners/WorldSavedListener.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package net.guizhanss.gcereborn.listeners;
-
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.world.WorldSaveEvent;
-
-import net.guizhanss.gcereborn.GeneticChickengineering;
-
-public class WorldSavedListener implements Listener {
-
- public WorldSavedListener(GeneticChickengineering plugin) {
- plugin.getServer().getPluginManager().registerEvents(this, plugin);
- }
-
- @EventHandler
- public void onWorldSave(WorldSaveEvent e) {
- GeneticChickengineering.getDatabaseService().cleanup();
- }
-}
diff --git a/src/main/java/net/guizhanss/gcereborn/utils/ChickenUtils.java b/src/main/java/net/guizhanss/gcereborn/utils/ChickenUtils.java
index cbbaaf4..ec5a4c7 100644
--- a/src/main/java/net/guizhanss/gcereborn/utils/ChickenUtils.java
+++ b/src/main/java/net/guizhanss/gcereborn/utils/ChickenUtils.java
@@ -90,7 +90,6 @@ public static ItemStack capture(@Nonnull Chicken chicken) {
GeneticChickengineering.getIntegrationService().captureChicken(chicken);
JsonObject json = PocketChicken.ADAPTER.saveData(chicken);
ItemStack item = GCEItems.POCKET_CHICKEN.clone();
- var db = GeneticChickengineering.getDatabaseService();
DNA dna;
String uuid = chicken.getUniqueId().toString();
@@ -99,16 +98,6 @@ public static ItemStack capture(@Nonnull Chicken chicken) {
String dnaStr = PersistentDataAPI.getString(chicken, Keys.CHICKEN_DNA);
GeneticChickengineering.debug("captured chicken has data in pdc: {0}", dnaStr);
dna = new DNA(dnaStr);
- } else if (chicken.hasMetadata(Keys.METADATA)) {
- String dnaStr = chicken.getMetadata(Keys.METADATA).get(0).asString();
- GeneticChickengineering.debug("captured chicken has meta data: {0}", dnaStr);
- dna = new DNA(dnaStr);
- db.removeChicken(uuid);
- } else if (db.hasChicken(uuid)) {
- // Checked if the UUID existed first, so null won't be returned
- String dnaStr = db.getChickenDNA(uuid);
- GeneticChickengineering.debug("captured chicken in database: {0}", dnaStr);
- dna = new DNA(dnaStr);
} else {
GeneticChickengineering.debug("captured chicken has no DNA information");
dna = new DNA();