mirror of
https://github.com/Zrips/Jobs.git
synced 2024-11-26 04:25:15 +01:00
Data base conversion with one command. More data are being converted
This commit is contained in:
parent
6536e402b4
commit
8eed14b765
@ -150,7 +150,7 @@ public class Jobs extends JavaPlugin {
|
||||
private static NMS nms;
|
||||
|
||||
private static ActionBar actionbar;
|
||||
private boolean running = false;
|
||||
private static boolean running = false;
|
||||
|
||||
protected static VersionChecker versionCheckManager;
|
||||
|
||||
@ -523,7 +523,15 @@ public class Jobs extends JavaPlugin {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
|
||||
Bukkit.getScheduler().runTaskAsynchronously(this, new Runnable() {
|
||||
loadAllPlayersData();
|
||||
// add all online players
|
||||
for (Player online : Bukkit.getServer().getOnlinePlayers()) {
|
||||
Jobs.getPlayerManager().playerJoin(online);
|
||||
}
|
||||
}
|
||||
|
||||
public static void loadAllPlayersData() {
|
||||
Bukkit.getScheduler().runTaskAsynchronously(Jobs.getInstance(), new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
int i = 0;
|
||||
@ -533,6 +541,7 @@ public class Jobs extends JavaPlugin {
|
||||
// Cloning to avoid issues
|
||||
HashMap<UUID, PlayerInfo> temp = new HashMap<UUID, PlayerInfo>(Jobs.getPlayerManager().getPlayersInfoUUIDMap());
|
||||
Iterator<Entry<UUID, PlayerInfo>> it = temp.entrySet().iterator();
|
||||
Jobs.consoleMsg("map size: " + temp.size());
|
||||
while (it.hasNext()) {
|
||||
Entry<UUID, PlayerInfo> one = it.next();
|
||||
if (!running)
|
||||
@ -557,10 +566,6 @@ public class Jobs extends JavaPlugin {
|
||||
return;
|
||||
}
|
||||
});
|
||||
// add all online players
|
||||
for (Player online : Bukkit.getServer().getOnlinePlayers()) {
|
||||
Jobs.getPlayerManager().playerJoin(online);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -88,6 +88,13 @@ public class PlayerManager {
|
||||
PlayerNameMap.clear();
|
||||
}
|
||||
|
||||
public void clearCache() {
|
||||
playersCache.clear();
|
||||
playersUUIDCache.clear();
|
||||
players.clear();
|
||||
playersUUID.clear();
|
||||
}
|
||||
|
||||
public void addPlayerToMap(PlayerInfo info) {
|
||||
this.PlayerUUIDMap.put(info.getUuid(), info);
|
||||
this.PlayerIDMap.put(info.getID(), info);
|
||||
@ -211,13 +218,34 @@ public class PlayerManager {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Save all the information of all of the players
|
||||
*/
|
||||
public void saveEntireChacheOfPlayers() {
|
||||
public void convertChacheOfPlayers(boolean resetID) {
|
||||
int y = 0;
|
||||
int i = 0;
|
||||
int total = playersUUIDCache.size();
|
||||
for (Entry<UUID, JobsPlayer> one : playersUUIDCache.entrySet()) {
|
||||
one.getValue().save();
|
||||
JobsPlayer jPlayer = one.getValue();
|
||||
if (resetID)
|
||||
jPlayer.setUserId(-1);
|
||||
JobsDAO dao = Jobs.getJobsDAO();
|
||||
dao.updateSeen(jPlayer);
|
||||
if (jPlayer.getUserId() == -1)
|
||||
continue;
|
||||
for (JobProgression oneJ : jPlayer.getJobProgression()) {
|
||||
dao.insertJob(jPlayer, oneJ);
|
||||
}
|
||||
dao.saveLog(jPlayer);
|
||||
dao.savePoints(jPlayer);
|
||||
dao.recordPlayersLimits(jPlayer);
|
||||
i++;
|
||||
y++;
|
||||
if (y >= 1000) {
|
||||
Bukkit.getConsoleSender().sendMessage(ChatColor.YELLOW + "[Jobs] Saved " + i + "/" + total + " players data");
|
||||
y = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -11,6 +11,7 @@ import com.gamingmesh.jobs.Jobs;
|
||||
import com.gamingmesh.jobs.commands.Cmd;
|
||||
import com.gamingmesh.jobs.commands.JobCommand;
|
||||
import com.gamingmesh.jobs.container.Convert;
|
||||
import com.gamingmesh.jobs.dao.JobsManager.DataBaseType;
|
||||
import com.gamingmesh.jobs.stuff.ChatColor;
|
||||
|
||||
public class convert implements Cmd {
|
||||
@ -29,29 +30,34 @@ public class convert implements Cmd {
|
||||
return true;
|
||||
}
|
||||
|
||||
List<Convert> list = null;
|
||||
List<Convert> archivelist = null;
|
||||
|
||||
try {
|
||||
list = Jobs.getJobsDAO().convertDatabase("jobs");
|
||||
archivelist = Jobs.getJobsDAO().convertDatabase("archive");
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
sender.sendMessage(ChatColor.RED + "Can't read data from data base, please send error log to dev's.");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Jobs.ChangeDatabase();
|
||||
|
||||
if (list == null & archivelist == null)
|
||||
|
||||
if (archivelist == null)
|
||||
return false;
|
||||
try {
|
||||
Jobs.getJobsDAO().continueConvertions(list, "jobs");
|
||||
Jobs.getJobsDAO().truncateAllTables();
|
||||
Jobs.getPlayerManager().convertChacheOfPlayers(true);
|
||||
|
||||
Jobs.getJobsDAO().continueConvertions(archivelist, "archive");
|
||||
Jobs.getJobsDAO().transferUsers();
|
||||
Jobs.getPlayerManager().clearMaps();
|
||||
Jobs.getPlayerManager().clearCache();
|
||||
|
||||
Jobs.getJobsDAO().saveExplore(false);
|
||||
Jobs.getJobsDAO().saveBlockProtection();
|
||||
Jobs.loadAllPlayersData();
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
sender.sendMessage(ChatColor.RED + "Can't write data to data base, please send error log to dev's.");
|
||||
Jobs.consoleMsg("&cCan't write data to data base, please send error log to dev's.");
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -64,14 +70,12 @@ public class convert implements Cmd {
|
||||
String from = "MysSQL";
|
||||
String to = "SqLite";
|
||||
|
||||
if (Jobs.getGCManager().storageMethod.equalsIgnoreCase("sqlite")) {
|
||||
if (Jobs.getDBManager().getDbType().equals(DataBaseType.SqLite)) {
|
||||
from = "SqLite";
|
||||
to = "MySQL";
|
||||
}
|
||||
|
||||
sender.sendMessage(ChatColor.GOLD + "Data base was converted from " + ChatColor.GREEN + from + ChatColor.GOLD + " to " + ChatColor.GREEN + to + ChatColor.GOLD
|
||||
+ "! Now you can stop the server, change storage-method to " + ChatColor.GREEN + to + ChatColor.GOLD
|
||||
+ " in general config file and start server again on your new database system.");
|
||||
Jobs.consoleMsg("&eData base was converted from &2" + from + " &eto &2" + to + "&e!");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.gamingmesh.jobs.config;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
@ -49,6 +50,14 @@ public class ExploreManager {
|
||||
return worlds;
|
||||
}
|
||||
|
||||
public int getSize() {
|
||||
int i = 0;
|
||||
for (Entry<String, ExploreRegion> one : this.getWorlds().entrySet()) {
|
||||
i += one.getValue().getChunks().size();
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
public ExploreRespond ChunkRespond(Player player, Chunk chunk, boolean isNew) {
|
||||
return ChunkRespond(player.getName(), chunk.getWorld().getName(), chunk.getX(), chunk.getZ(), isNew);
|
||||
}
|
||||
|
@ -112,7 +112,6 @@ public class GeneralConfigManager {
|
||||
public double TaxesAmount;
|
||||
public String SoundLevelupSound, SoundTitleChangeSound, ServerAcountName, ServertaxesAcountName;
|
||||
public ArrayList<String> keys;
|
||||
public String storageMethod;
|
||||
public boolean hideJobsInfoWithoutPermission;
|
||||
public boolean UseTaxes;
|
||||
public boolean TransferToServerAccount;
|
||||
|
@ -513,6 +513,12 @@ public abstract class JobsDAO {
|
||||
return true;
|
||||
}
|
||||
|
||||
public void truncateAllTables() {
|
||||
for (DBTables one : DBTables.values()) {
|
||||
this.truncate(one.getTableName());
|
||||
}
|
||||
}
|
||||
|
||||
public DataBaseType getDbType() {
|
||||
return dbType;
|
||||
}
|
||||
@ -625,33 +631,33 @@ public abstract class JobsDAO {
|
||||
}
|
||||
}
|
||||
|
||||
private void loadAllSavedJobs() {
|
||||
JobsConnection conn = getConnection();
|
||||
if (conn == null)
|
||||
return;
|
||||
PreparedStatement prest = null;
|
||||
ResultSet res = null;
|
||||
try {
|
||||
prest = conn.prepareStatement("SELECT * FROM `" + prefix + "jobs`;");
|
||||
res = prest.executeQuery();
|
||||
while (res.next()) {
|
||||
int id = res.getInt("userid");
|
||||
ArrayList<JobsDAOData> list = map.get(id);
|
||||
if (list == null) {
|
||||
list = new ArrayList<JobsDAOData>();
|
||||
list.add(new JobsDAOData(res.getString("job"), res.getInt("level"), res.getInt("experience")));
|
||||
map.put(id, list);
|
||||
} else {
|
||||
list.add(new JobsDAOData(res.getString("job"), res.getInt("level"), res.getInt("experience")));
|
||||
}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
close(res);
|
||||
close(prest);
|
||||
}
|
||||
}
|
||||
// private void loadAllSavedJobs() {
|
||||
// JobsConnection conn = getConnection();
|
||||
// if (conn == null)
|
||||
// return;
|
||||
// PreparedStatement prest = null;
|
||||
// ResultSet res = null;
|
||||
// try {
|
||||
// prest = conn.prepareStatement("SELECT * FROM `" + prefix + "jobs`;");
|
||||
// res = prest.executeQuery();
|
||||
// while (res.next()) {
|
||||
// int id = res.getInt("userid");
|
||||
// ArrayList<JobsDAOData> list = map.get(id);
|
||||
// if (list == null) {
|
||||
// list = new ArrayList<JobsDAOData>();
|
||||
// list.add(new JobsDAOData(res.getString("job"), res.getInt("level"), res.getInt("experience")));
|
||||
// map.put(id, list);
|
||||
// } else {
|
||||
// list.add(new JobsDAOData(res.getString("job"), res.getInt("level"), res.getInt("experience")));
|
||||
// }
|
||||
// }
|
||||
// } catch (SQLException e) {
|
||||
// e.printStackTrace();
|
||||
// } finally {
|
||||
// close(res);
|
||||
// close(prest);
|
||||
// }
|
||||
// }
|
||||
|
||||
public void recordNewPlayer(Player player) {
|
||||
recordNewPlayer((OfflinePlayer) player);
|
||||
@ -870,6 +876,33 @@ public abstract class JobsDAO {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Join a job (create player-job entry from storage)
|
||||
* @param player - player that wishes to join the job
|
||||
* @param job - job that the player wishes to join
|
||||
*/
|
||||
public synchronized void insertJob(JobsPlayer jPlayer, JobProgression prog) {
|
||||
JobsConnection conn = getConnection();
|
||||
if (conn == null)
|
||||
return;
|
||||
PreparedStatement prest = null;
|
||||
try {
|
||||
int exp = (int) prog.getExperience();
|
||||
if (exp < 0)
|
||||
exp = 0;
|
||||
prest = conn.prepareStatement("INSERT INTO `" + prefix + "jobs` (`userid`, `job`, `level`, `experience`) VALUES (?, ?, ?, ?);");
|
||||
prest.setInt(1, jPlayer.getUserId());
|
||||
prest.setString(2, prog.getJob().getName());
|
||||
prest.setInt(3, prog.getLevel());
|
||||
prest.setInt(4, exp);
|
||||
prest.execute();
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
close(prest);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Join a job (create player-job entry from storage)
|
||||
* @param player - player that wishes to join the job
|
||||
@ -914,7 +947,7 @@ public abstract class JobsDAO {
|
||||
int i = list.size();
|
||||
try {
|
||||
statement = conns.createStatement();
|
||||
if (Jobs.getGCManager().storageMethod.equalsIgnoreCase("sqlite")) {
|
||||
if (Jobs.getDBManager().getDbType().toString().equalsIgnoreCase("sqlite")) {
|
||||
statement.executeUpdate("TRUNCATE `" + getPrefix() + table + "`");
|
||||
} else {
|
||||
statement.executeUpdate("DELETE from `" + getPrefix() + table + "`");
|
||||
@ -940,38 +973,38 @@ public abstract class JobsDAO {
|
||||
}
|
||||
}
|
||||
|
||||
public void transferUsers() throws SQLException {
|
||||
JobsConnection conns = this.getConnection();
|
||||
if (conns == null)
|
||||
return;
|
||||
PreparedStatement insert = null;
|
||||
Statement statement = null;
|
||||
try {
|
||||
statement = conns.createStatement();
|
||||
if (Jobs.getGCManager().storageMethod.equalsIgnoreCase("sqlite")) {
|
||||
statement.executeUpdate("TRUNCATE `" + getPrefix() + "users`");
|
||||
} else {
|
||||
statement.executeUpdate("DELETE from `" + getPrefix() + "users`");
|
||||
}
|
||||
|
||||
insert = conns.prepareStatement("INSERT INTO `" + getPrefix() + "users` (`id`, `player_uuid`, `username`, `seen`) VALUES (?, ?, ?, ?);");
|
||||
conns.setAutoCommit(false);
|
||||
|
||||
for (Entry<UUID, JobsPlayer> oneUser : Jobs.getPlayerManager().getPlayersCache().entrySet()) {
|
||||
insert.setInt(1, oneUser.getValue().getUserId());
|
||||
insert.setString(2, oneUser.getValue().getPlayerUUID().toString());
|
||||
insert.setString(3, oneUser.getValue().getUserName());
|
||||
insert.setLong(4, oneUser.getValue().getSeen() == null ? System.currentTimeMillis() : oneUser.getValue().getSeen());
|
||||
insert.addBatch();
|
||||
}
|
||||
insert.executeBatch();
|
||||
conns.commit();
|
||||
conns.setAutoCommit(true);
|
||||
} finally {
|
||||
close(statement);
|
||||
close(insert);
|
||||
}
|
||||
}
|
||||
// public void transferUsers() throws SQLException {
|
||||
// JobsConnection conns = this.getConnection();
|
||||
// if (conns == null)
|
||||
// return;
|
||||
// PreparedStatement insert = null;
|
||||
// Statement statement = null;
|
||||
// try {
|
||||
// statement = conns.createStatement();
|
||||
// if (Jobs.getGCManager().storageMethod.equalsIgnoreCase("sqlite")) {
|
||||
// statement.executeUpdate("TRUNCATE `" + getPrefix() + "users`");
|
||||
// } else {
|
||||
// statement.executeUpdate("DELETE from `" + getPrefix() + "users`");
|
||||
// }
|
||||
//
|
||||
// insert = conns.prepareStatement("INSERT INTO `" + getPrefix() + "users` (`id`, `player_uuid`, `username`, `seen`) VALUES (?, ?, ?, ?);");
|
||||
// conns.setAutoCommit(false);
|
||||
//
|
||||
// for (Entry<UUID, JobsPlayer> oneUser : Jobs.getPlayerManager().getPlayersCache().entrySet()) {
|
||||
// insert.setInt(1, oneUser.getValue().getUserId());
|
||||
// insert.setString(2, oneUser.getValue().getPlayerUUID().toString());
|
||||
// insert.setString(3, oneUser.getValue().getUserName());
|
||||
// insert.setLong(4, oneUser.getValue().getSeen() == null ? System.currentTimeMillis() : oneUser.getValue().getSeen());
|
||||
// insert.addBatch();
|
||||
// }
|
||||
// insert.executeBatch();
|
||||
// conns.commit();
|
||||
// conns.setAutoCommit(true);
|
||||
// } finally {
|
||||
// close(statement);
|
||||
// close(insert);
|
||||
// }
|
||||
// }
|
||||
|
||||
/**
|
||||
* Quit a job (delete player-job entry from storage)
|
||||
@ -1320,6 +1353,10 @@ public abstract class JobsDAO {
|
||||
}
|
||||
|
||||
public void updateSeen(JobsPlayer player) {
|
||||
if (player.getUserId() == -1) {
|
||||
insertPlayer(player);
|
||||
return;
|
||||
}
|
||||
JobsConnection conn = getConnection();
|
||||
if (conn == null)
|
||||
return;
|
||||
@ -1336,6 +1373,40 @@ public abstract class JobsDAO {
|
||||
}
|
||||
}
|
||||
|
||||
private void insertPlayer(JobsPlayer player) {
|
||||
JobsConnection conn = getConnection();
|
||||
if (conn == null)
|
||||
return;
|
||||
PreparedStatement prestt = null;
|
||||
try {
|
||||
prestt = conn.prepareStatement("INSERT INTO `" + prefix + "users` (`player_uuid`, `username`, `seen`) VALUES (?, ?, ?);");
|
||||
prestt.setString(1, player.getPlayerUUID().toString());
|
||||
prestt.setString(2, player.getUserName());
|
||||
prestt.setLong(3, player.getSeen());
|
||||
prestt.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
close(prestt);
|
||||
}
|
||||
PreparedStatement prest = null;
|
||||
ResultSet res = null;
|
||||
try {
|
||||
prest = conn.prepareStatement("SELECT `id` FROM `" + prefix + "users` WHERE `player_uuid` = ?;");
|
||||
prest.setString(1, player.getPlayerUUID().toString());
|
||||
res = prest.executeQuery();
|
||||
res.next();
|
||||
int id = res.getInt("id");
|
||||
player.setUserId(id);
|
||||
Jobs.getPlayerManager().addPlayerToMap(new PlayerInfo(player.getUserName(), id, player.getPlayerUUID(), player.getSeen()));
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
close(res);
|
||||
close(prest);
|
||||
}
|
||||
}
|
||||
|
||||
public void savePoints(JobsPlayer jPlayer) {
|
||||
JobsConnection conn = getConnection();
|
||||
if (conn == null)
|
||||
@ -1670,6 +1741,10 @@ public abstract class JobsDAO {
|
||||
* @param jobexplore - the information getting saved
|
||||
*/
|
||||
public void saveExplore() {
|
||||
saveExplore(true);
|
||||
}
|
||||
|
||||
public void saveExplore(boolean ignoreOld) {
|
||||
if (!Jobs.getExplore().isExploreEnabled())
|
||||
return;
|
||||
|
||||
@ -1687,7 +1762,7 @@ public abstract class JobsDAO {
|
||||
|
||||
for (Entry<String, ExploreRegion> worlds : temp.entrySet()) {
|
||||
for (Entry<String, ExploreChunk> oneChunk : worlds.getValue().getChunks().entrySet()) {
|
||||
if (!oneChunk.getValue().isNew())
|
||||
if (!oneChunk.getValue().isNew() && ignoreOld)
|
||||
continue;
|
||||
for (String oneuser : oneChunk.getValue().getPlayers()) {
|
||||
prest2.setString(1, worlds.getKey());
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.gamingmesh.jobs.dao;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
|
||||
@ -24,7 +25,7 @@ public class JobsManager {
|
||||
return dao;
|
||||
}
|
||||
|
||||
public void switchDataBase() {
|
||||
public void switchDataBase() {
|
||||
if (dao != null)
|
||||
dao.closeConnections();
|
||||
switch (DbType) {
|
||||
@ -39,6 +40,17 @@ public class JobsManager {
|
||||
dao.setDbType(DbType);
|
||||
break;
|
||||
}
|
||||
|
||||
File f = new File(plugin.getDataFolder(), "generalConfig.yml");
|
||||
YamlConfiguration config = YamlConfiguration.loadConfiguration(f);
|
||||
|
||||
config.set("storage.method", DbType.toString());
|
||||
try {
|
||||
config.save(f);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
Jobs.setDAO(dao);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user