2015-08-21 15:10:08 +02:00
|
|
|
/**
|
|
|
|
* Jobs Plugin for Bukkit
|
|
|
|
* Copyright (C) 2011 Zak Ford <zak.j.ford@gmail.com>
|
|
|
|
*
|
|
|
|
* This program is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
|
|
* (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
|
|
|
|
package com.gamingmesh.jobs.dao;
|
|
|
|
|
|
|
|
import java.sql.PreparedStatement;
|
|
|
|
import java.sql.ResultSet;
|
|
|
|
import java.sql.SQLException;
|
|
|
|
import java.sql.Statement;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
2015-12-10 14:13:57 +01:00
|
|
|
import java.util.UUID;
|
2015-09-17 09:48:10 +02:00
|
|
|
import java.util.Map.Entry;
|
2015-08-21 15:10:08 +02:00
|
|
|
|
2015-10-13 12:13:22 +02:00
|
|
|
import org.bukkit.Bukkit;
|
2015-08-21 15:10:08 +02:00
|
|
|
import org.bukkit.OfflinePlayer;
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
|
|
|
|
import com.gamingmesh.jobs.Jobs;
|
|
|
|
import com.gamingmesh.jobs.container.Convert;
|
2016-01-09 13:58:33 +01:00
|
|
|
import com.gamingmesh.jobs.container.ExploreChunk;
|
|
|
|
import com.gamingmesh.jobs.container.ExploreRegion;
|
2015-08-21 15:10:08 +02:00
|
|
|
import com.gamingmesh.jobs.container.Job;
|
|
|
|
import com.gamingmesh.jobs.container.JobProgression;
|
|
|
|
import com.gamingmesh.jobs.container.JobsPlayer;
|
2015-09-17 09:48:10 +02:00
|
|
|
import com.gamingmesh.jobs.container.Log;
|
|
|
|
import com.gamingmesh.jobs.container.LogAmounts;
|
2016-03-30 15:42:36 +02:00
|
|
|
import com.gamingmesh.jobs.container.PlayerInfo;
|
|
|
|
import com.gamingmesh.jobs.container.PlayerPoints;
|
2015-08-21 15:10:08 +02:00
|
|
|
import com.gamingmesh.jobs.container.TopList;
|
2015-09-17 09:48:10 +02:00
|
|
|
import com.gamingmesh.jobs.stuff.Loging;
|
|
|
|
import com.gamingmesh.jobs.stuff.TimeManage;
|
2015-08-21 15:10:08 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Data Access Object interface for the Jobs plugin
|
|
|
|
*
|
|
|
|
* Interface that holds all methods that a DAO needs to have
|
|
|
|
* @author Alex
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public abstract class JobsDAO {
|
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
private JobsConnectionPool pool;
|
|
|
|
private String prefix;
|
2015-08-21 15:10:08 +02:00
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
protected JobsDAO(String driverName, String url, String username, String password, String prefix) {
|
|
|
|
this.prefix = prefix;
|
|
|
|
try {
|
|
|
|
pool = new JobsConnectionPool(driverName, url, username, password);
|
|
|
|
} catch (Exception e) {
|
|
|
|
e.printStackTrace();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public final synchronized void setUp() throws SQLException {
|
|
|
|
setupConfig();
|
|
|
|
int version = getSchemaVersion();
|
|
|
|
if (version == 0) {
|
|
|
|
Jobs.getPluginLogger().severe("Could not initialize database! Could not determine schema version!");
|
|
|
|
return;
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
try {
|
|
|
|
if (version <= 1)
|
2016-04-21 17:10:27 +02:00
|
|
|
checkUpdate();
|
|
|
|
else {
|
|
|
|
if (version <= 2)
|
|
|
|
checkUpdate2();
|
|
|
|
checkUpdate4();
|
|
|
|
checkUpdate5();
|
2016-06-09 17:35:24 +02:00
|
|
|
if (version <= 6)
|
|
|
|
checkUpdate6();
|
|
|
|
if (version <= 7)
|
|
|
|
checkUpdate7();
|
2016-04-21 17:10:27 +02:00
|
|
|
// creating explore database
|
|
|
|
checkUpdate8();
|
|
|
|
checkUpdate9();
|
|
|
|
}
|
2016-03-30 15:42:36 +02:00
|
|
|
|
|
|
|
version = 9;
|
2015-09-17 09:48:10 +02:00
|
|
|
updateSchemaVersion(version);
|
2016-03-10 13:48:15 +01:00
|
|
|
} finally {
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
protected abstract void setupConfig() throws SQLException;
|
|
|
|
|
2016-04-21 17:10:27 +02:00
|
|
|
protected abstract void checkUpdate() throws SQLException;
|
2015-09-17 09:48:10 +02:00
|
|
|
|
|
|
|
protected abstract void checkUpdate2() throws SQLException;
|
|
|
|
|
|
|
|
protected abstract void checkUpdate4() throws SQLException;
|
|
|
|
|
|
|
|
protected abstract void checkUpdate5() throws SQLException;
|
|
|
|
|
2015-11-25 16:14:48 +01:00
|
|
|
protected abstract void checkUpdate6() throws SQLException;
|
|
|
|
|
2015-12-10 14:13:57 +01:00
|
|
|
protected abstract void checkUpdate7() throws SQLException;
|
|
|
|
|
2016-01-09 13:58:33 +01:00
|
|
|
protected abstract void checkUpdate8() throws SQLException;
|
|
|
|
|
2016-03-30 15:42:36 +02:00
|
|
|
protected abstract void checkUpdate9() throws SQLException;
|
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
/**
|
|
|
|
* Gets the database prefix
|
|
|
|
* @return the prefix
|
|
|
|
*/
|
|
|
|
protected String getPrefix() {
|
|
|
|
return prefix;
|
|
|
|
}
|
|
|
|
|
2016-06-09 17:35:24 +02:00
|
|
|
public List<JobsDAOData> getAllJobs(OfflinePlayer player) {
|
2016-03-30 15:42:36 +02:00
|
|
|
return getAllJobs(player.getName(), player.getUniqueId());
|
|
|
|
}
|
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
/**
|
|
|
|
* Get all jobs the player is part of.
|
|
|
|
* @param playerUUID - the player being searched for
|
|
|
|
* @return list of all of the names of the jobs the players are part of.
|
|
|
|
*/
|
2016-06-09 17:35:24 +02:00
|
|
|
public List<JobsDAOData> getAllJobs(String playerName, UUID uuid) {
|
2016-03-30 15:42:36 +02:00
|
|
|
|
|
|
|
int id = -1;
|
2016-04-21 13:47:10 +02:00
|
|
|
PlayerInfo userData = null;
|
|
|
|
|
|
|
|
if (Jobs.getGCManager().MultiServerCompatability())
|
|
|
|
userData = loadPlayerData(uuid);
|
|
|
|
else
|
|
|
|
userData = Jobs.getPlayerManager().getPlayerMap().get(uuid.toString());
|
|
|
|
|
2016-06-10 17:25:40 +02:00
|
|
|
ArrayList<JobsDAOData> jobs = new ArrayList<JobsDAOData>();
|
|
|
|
|
2016-03-30 15:42:36 +02:00
|
|
|
if (userData == null) {
|
2016-06-10 17:25:40 +02:00
|
|
|
recordNewPlayer(playerName, uuid);
|
|
|
|
return jobs;
|
2016-03-30 15:42:36 +02:00
|
|
|
} else
|
|
|
|
id = userData.getID();
|
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return jobs;
|
|
|
|
try {
|
2016-03-30 15:42:36 +02:00
|
|
|
PreparedStatement prest = conn.prepareStatement("SELECT `job`, `level`, `experience` FROM `" + prefix + "jobs` WHERE `userid` = ?;");
|
|
|
|
prest.setInt(1, id);
|
2015-09-17 09:48:10 +02:00
|
|
|
ResultSet res = prest.executeQuery();
|
|
|
|
while (res.next()) {
|
2016-03-30 15:42:36 +02:00
|
|
|
jobs.add(new JobsDAOData(uuid, res.getString(1), res.getInt(2), res.getInt(3)));
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
return jobs;
|
|
|
|
}
|
|
|
|
|
2016-06-10 17:25:40 +02:00
|
|
|
public void recordNewPlayer(Player player) {
|
|
|
|
recordNewPlayer((OfflinePlayer) player);
|
2016-03-30 15:42:36 +02:00
|
|
|
}
|
|
|
|
|
2016-06-10 17:25:40 +02:00
|
|
|
public void recordNewPlayer(OfflinePlayer player) {
|
|
|
|
recordNewPlayer(player.getName(), player.getUniqueId());
|
2016-03-30 15:42:36 +02:00
|
|
|
}
|
|
|
|
|
2016-06-10 17:25:40 +02:00
|
|
|
public void recordNewPlayer(String playerName, UUID uuid) {
|
2016-03-30 15:42:36 +02:00
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
2016-06-10 17:25:40 +02:00
|
|
|
return;
|
2016-03-30 15:42:36 +02:00
|
|
|
try {
|
|
|
|
PreparedStatement prest = conn.prepareStatement("INSERT INTO `" + prefix + "users` (`player_uuid`, `username`) VALUES (?, ?);");
|
|
|
|
prest.setString(1, uuid.toString());
|
|
|
|
prest.setString(2, playerName);
|
|
|
|
prest.executeUpdate();
|
2016-06-10 17:25:40 +02:00
|
|
|
ResultSet keys = prest.getGeneratedKeys();
|
|
|
|
if (keys.next()) {
|
|
|
|
int id = keys.getInt(1);
|
|
|
|
Jobs.getPlayerManager().getPlayerMap().put(uuid.toString(), new PlayerInfo(playerName, id));
|
|
|
|
}
|
2016-03-30 15:42:36 +02:00
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
/**
|
|
|
|
* Get player count for a job.
|
|
|
|
* @param JobName - the job name
|
|
|
|
* @return amount of player currently working.
|
|
|
|
*/
|
|
|
|
public synchronized int getTotalPlayerAmountByJobName(String JobName) {
|
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return 0;
|
|
|
|
int count = 0;
|
|
|
|
try {
|
|
|
|
PreparedStatement prest = conn.prepareStatement("SELECT COUNT(*) FROM `" + prefix + "jobs` WHERE `job` = ?;");
|
|
|
|
prest.setString(1, JobName);
|
|
|
|
ResultSet res = prest.executeQuery();
|
|
|
|
while (res.next()) {
|
|
|
|
count = res.getInt(1);
|
|
|
|
}
|
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
return count;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get player count for a job.
|
|
|
|
* @return total amount of player currently working.
|
|
|
|
*/
|
|
|
|
public synchronized int getTotalPlayers() {
|
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return 0;
|
|
|
|
int count = 0;
|
|
|
|
try {
|
|
|
|
PreparedStatement prest = conn.prepareStatement("SELECT COUNT(*) FROM `" + prefix + "jobs`;");
|
|
|
|
ResultSet res = prest.executeQuery();
|
|
|
|
while (res.next()) {
|
|
|
|
count = res.getInt(1);
|
|
|
|
}
|
2015-11-25 16:14:48 +01:00
|
|
|
res.close();
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
return count;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get all jobs the player is part of.
|
|
|
|
* @param userName - the player being searched for
|
|
|
|
* @return list of all of the names of the jobs the players are part of.
|
|
|
|
*/
|
|
|
|
public synchronized List<JobsDAOData> getAllJobsOffline(String userName) {
|
2016-03-30 15:42:36 +02:00
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
ArrayList<JobsDAOData> jobs = new ArrayList<JobsDAOData>();
|
2016-03-30 15:42:36 +02:00
|
|
|
|
|
|
|
Entry<String, PlayerInfo> info = Jobs.getPlayerManager().getPlayerInfoByName(userName);
|
|
|
|
if (info == null)
|
|
|
|
return jobs;
|
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return jobs;
|
|
|
|
try {
|
2016-03-30 15:42:36 +02:00
|
|
|
PreparedStatement prest = conn.prepareStatement("SELECT `job`, `level`, `experience` FROM `" + prefix + "jobs` WHERE `userid` = ?;");
|
|
|
|
prest.setInt(1, info.getValue().getID());
|
2015-09-17 09:48:10 +02:00
|
|
|
ResultSet res = prest.executeQuery();
|
|
|
|
while (res.next()) {
|
2016-03-30 15:42:36 +02:00
|
|
|
jobs.add(new JobsDAOData(UUID.fromString(info.getKey()), res.getString(2), res.getInt(3), res.getInt(4)));
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
|
|
|
prest.close();
|
2015-11-25 16:14:48 +01:00
|
|
|
res.close();
|
2015-09-17 09:48:10 +02:00
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
return jobs;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 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 joinJob(JobsPlayer jPlayer, Job job) {
|
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return;
|
|
|
|
try {
|
|
|
|
int level = 1;
|
|
|
|
int exp = 0;
|
|
|
|
if (checkArchive(jPlayer, job).size() > 0) {
|
|
|
|
List<Integer> info = checkArchive(jPlayer, job);
|
|
|
|
level = info.get(0);
|
|
|
|
deleteArchive(jPlayer, job);
|
|
|
|
}
|
2016-03-30 15:42:36 +02:00
|
|
|
PreparedStatement prest = conn.prepareStatement("INSERT INTO `" + prefix + "jobs` (`userid`, `job`, `level`, `experience`) VALUES (?, ?, ?, ?);");
|
|
|
|
prest.setInt(1, jPlayer.getUserId());
|
|
|
|
prest.setString(2, job.getName());
|
|
|
|
prest.setInt(3, level);
|
|
|
|
prest.setInt(4, exp);
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.execute();
|
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
* @throws SQLException
|
|
|
|
*/
|
|
|
|
public List<Convert> convertDatabase(Player Player, String table) throws SQLException {
|
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return null;
|
|
|
|
|
|
|
|
List<Convert> list = new ArrayList<Convert>();
|
|
|
|
try {
|
|
|
|
PreparedStatement prest = conn.prepareStatement("SELECT * FROM `" + prefix + table + "`");
|
|
|
|
ResultSet res = prest.executeQuery();
|
|
|
|
while (res.next()) {
|
2016-03-30 15:42:36 +02:00
|
|
|
list.add(new Convert(res.getInt("id"), res.getInt("userid"), res.getString("job"), res.getInt("level"), res.getInt("experience")));
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
2015-11-25 16:14:48 +01:00
|
|
|
res.close();
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
try {
|
|
|
|
conn.closeConnection();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
return list;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void continueConvertions(List<Convert> list, String table) throws SQLException {
|
|
|
|
JobsConnection conns = this.getConnection();
|
|
|
|
if (conns == null)
|
|
|
|
return;
|
|
|
|
PreparedStatement insert = null;
|
|
|
|
int i = list.size();
|
|
|
|
try {
|
|
|
|
|
|
|
|
Statement statement = conns.createStatement();
|
2016-03-30 15:42:36 +02:00
|
|
|
if (Jobs.getGCManager().storageMethod.equalsIgnoreCase("sqlite")) {
|
2015-09-17 09:48:10 +02:00
|
|
|
statement.executeUpdate("TRUNCATE `" + getPrefix() + table + "`");
|
|
|
|
} else {
|
|
|
|
statement.executeUpdate("DELETE from `" + getPrefix() + table + "`");
|
|
|
|
}
|
|
|
|
|
2016-03-30 15:42:36 +02:00
|
|
|
insert = conns.prepareStatement("INSERT INTO `" + getPrefix() + table + "` (`userid`, `job`, `level`, `experience`) VALUES (?, ?, ?, ?);");
|
2015-09-17 09:48:10 +02:00
|
|
|
conns.setAutoCommit(false);
|
|
|
|
while (i > 0) {
|
|
|
|
i--;
|
|
|
|
Convert convertData = list.get(i);
|
2016-03-30 15:42:36 +02:00
|
|
|
insert.setInt(1, convertData.GetId());
|
|
|
|
insert.setString(2, convertData.GetJobName());
|
|
|
|
insert.setInt(3, convertData.GetLevel());
|
|
|
|
insert.setInt(4, convertData.GetExp());
|
2015-09-17 09:48:10 +02:00
|
|
|
insert.addBatch();
|
|
|
|
}
|
|
|
|
insert.executeBatch();
|
|
|
|
conns.commit();
|
|
|
|
conns.setAutoCommit(true);
|
2015-11-25 16:14:48 +01:00
|
|
|
statement.close();
|
2015-09-17 09:48:10 +02:00
|
|
|
} finally {
|
|
|
|
if (insert != null) {
|
2015-08-21 15:10:08 +02:00
|
|
|
try {
|
2015-09-17 09:48:10 +02:00
|
|
|
insert.close();
|
2015-08-21 15:10:08 +02:00
|
|
|
} catch (SQLException e) {
|
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Quit a job (delete player-job entry from storage)
|
|
|
|
* @param player - player that wishes to quit the job
|
|
|
|
* @param job - job that the player wishes to quit
|
|
|
|
*/
|
|
|
|
public synchronized void quitJob(JobsPlayer jPlayer, Job job) {
|
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return;
|
|
|
|
try {
|
2016-03-30 15:42:36 +02:00
|
|
|
PreparedStatement prest = conn.prepareStatement("DELETE FROM `" + prefix + "jobs` WHERE `userid` = ? AND `job` = ?;");
|
|
|
|
prest.setInt(1, jPlayer.getUserId());
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.setString(2, job.getName());
|
|
|
|
prest.execute();
|
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Record job to archive
|
|
|
|
* @param player - player that wishes to quit the job
|
|
|
|
* @param job - job that the player wishes to quit
|
|
|
|
*/
|
|
|
|
public void recordToArchive(JobsPlayer jPlayer, Job job) {
|
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return;
|
|
|
|
try {
|
|
|
|
int level = 1;
|
|
|
|
int exp = 0;
|
|
|
|
for (JobProgression progression : jPlayer.getJobProgression()) {
|
|
|
|
if (progression.getJob().getName().equalsIgnoreCase(job.getName())) {
|
|
|
|
level = progression.getLevel();
|
|
|
|
exp = (int) progression.getExperience();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
|
|
|
PreparedStatement prest = conn.prepareStatement("INSERT INTO `" + prefix
|
2016-03-30 15:42:36 +02:00
|
|
|
+ "archive` (`userid`, `job`, `level`, `experience`) VALUES (?, ?, ?, ?);");
|
|
|
|
prest.setInt(1, jPlayer.getUserId());
|
|
|
|
prest.setString(2, job.getName());
|
|
|
|
prest.setInt(3, level);
|
|
|
|
prest.setInt(4, exp);
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.execute();
|
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check job in archive
|
|
|
|
* @param player - player that wishes to quit the job
|
|
|
|
* @param job - job that the player wishes to quit
|
|
|
|
*/
|
|
|
|
public synchronized List<Integer> checkArchive(JobsPlayer jPlayer, Job job) {
|
|
|
|
JobsConnection conn = getConnection();
|
2016-03-30 15:42:36 +02:00
|
|
|
List<Integer> info = new ArrayList<Integer>();
|
2015-09-17 09:48:10 +02:00
|
|
|
if (conn == null)
|
2016-03-30 15:42:36 +02:00
|
|
|
return info;
|
2015-09-17 09:48:10 +02:00
|
|
|
try {
|
2016-03-30 15:42:36 +02:00
|
|
|
PreparedStatement prest = conn.prepareStatement("SELECT `level`, `experience` FROM `" + prefix + "archive` WHERE `userid` = ? AND `job` = ?;");
|
|
|
|
prest.setInt(1, jPlayer.getUserId());
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.setString(2, job.getName());
|
|
|
|
ResultSet res = prest.executeQuery();
|
|
|
|
if (res.next()) {
|
2016-03-30 15:42:36 +02:00
|
|
|
int level = (int) ((res.getInt(1) - (res.getInt(1) * (Jobs.getGCManager().levelLossPercentage / 100.0))));
|
2015-09-17 09:48:10 +02:00
|
|
|
if (level < 1)
|
|
|
|
level = 1;
|
|
|
|
|
|
|
|
int maxLevel = 0;
|
|
|
|
if (jPlayer.havePermission("jobs." + job.getName() + ".vipmaxlevel") && job.getVipMaxLevel() != 0)
|
|
|
|
maxLevel = job.getVipMaxLevel();
|
|
|
|
else
|
|
|
|
maxLevel = job.getMaxLevel();
|
|
|
|
|
2016-03-30 15:42:36 +02:00
|
|
|
if (Jobs.getGCManager().fixAtMaxLevel && res.getInt(1) == maxLevel)
|
2015-09-17 09:48:10 +02:00
|
|
|
level = res.getInt(1);
|
|
|
|
info.add(level);
|
|
|
|
info.add(res.getInt(2));
|
|
|
|
}
|
2015-11-25 16:14:48 +01:00
|
|
|
res.close();
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.close();
|
|
|
|
return info;
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2016-03-30 15:42:36 +02:00
|
|
|
return info;
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
2015-08-21 15:10:08 +02:00
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
public List<TopList> getGlobalTopList() {
|
|
|
|
return getGlobalTopList(0);
|
|
|
|
}
|
2015-08-21 15:10:08 +02:00
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
/**
|
|
|
|
* Get all jobs from archive by player
|
|
|
|
* @param player - targeted player
|
|
|
|
* @return info - information about jobs
|
|
|
|
*/
|
|
|
|
public List<TopList> getGlobalTopList(int start) {
|
|
|
|
JobsConnection conn = getConnection();
|
2015-08-21 15:10:08 +02:00
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
List<TopList> names = new ArrayList<TopList>();
|
2015-08-21 15:10:08 +02:00
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
if (conn == null)
|
|
|
|
return null;
|
|
|
|
try {
|
2015-08-21 15:10:08 +02:00
|
|
|
|
2016-03-30 15:42:36 +02:00
|
|
|
PreparedStatement prest = conn.prepareStatement("SELECT userid, COUNT(*) AS amount, sum(level) AS totallvl FROM `" + prefix
|
|
|
|
+ "jobs` GROUP BY userid ORDER BY totallvl DESC LIMIT " + start + ",20;");
|
2015-09-17 09:48:10 +02:00
|
|
|
ResultSet res = prest.executeQuery();
|
2015-08-21 15:10:08 +02:00
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
while (res.next()) {
|
2015-08-21 15:10:08 +02:00
|
|
|
|
2016-03-30 15:42:36 +02:00
|
|
|
Entry<String, PlayerInfo> info = Jobs.getPlayerManager().getPlayerInfoById(res.getInt(1));
|
|
|
|
|
|
|
|
if (info == null)
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if (info.getValue().getName() == null)
|
2016-03-13 15:35:23 +01:00
|
|
|
continue;
|
|
|
|
|
2016-03-30 15:42:36 +02:00
|
|
|
TopList top = new TopList(res.getInt("userid"), res.getInt("totallvl"), 0);
|
2015-08-21 15:10:08 +02:00
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
names.add(top);
|
|
|
|
}
|
2015-11-25 16:14:48 +01:00
|
|
|
res.close();
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.close();
|
|
|
|
return names;
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
return names;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get all jobs from archive by player
|
|
|
|
* @param player - targeted player
|
|
|
|
* @return info - information about jobs
|
|
|
|
*/
|
|
|
|
public synchronized List<String> getJobsFromArchive(JobsPlayer jPlayer) {
|
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return null;
|
|
|
|
try {
|
|
|
|
List<String> info = new ArrayList<String>();
|
2016-03-30 15:42:36 +02:00
|
|
|
PreparedStatement prest = conn.prepareStatement("SELECT `job`, `level`, `experience` FROM `" + prefix + "archive` WHERE `userid` = ?;");
|
|
|
|
prest.setInt(1, jPlayer.getUserId());
|
2015-09-17 09:48:10 +02:00
|
|
|
ResultSet res = prest.executeQuery();
|
|
|
|
while (res.next()) {
|
|
|
|
|
2016-03-30 15:42:36 +02:00
|
|
|
int level = (int) ((res.getInt(2) - (res.getInt(2) * (Jobs.getGCManager().levelLossPercentage / 100.0))));
|
2015-09-17 09:48:10 +02:00
|
|
|
if (level < 1)
|
|
|
|
level = 1;
|
|
|
|
|
|
|
|
int maxLevel = 0;
|
2016-04-21 13:47:10 +02:00
|
|
|
|
2016-04-05 14:42:48 +02:00
|
|
|
Job job = Jobs.getJob(res.getString(1));
|
2016-04-21 13:47:10 +02:00
|
|
|
|
2016-04-05 14:42:48 +02:00
|
|
|
if (job == null)
|
|
|
|
continue;
|
2016-04-21 13:47:10 +02:00
|
|
|
|
2016-04-05 14:42:48 +02:00
|
|
|
if (jPlayer.havePermission("jobs." + job.getName() + ".vipmaxlevel"))
|
|
|
|
maxLevel = job.getVipMaxLevel();
|
2015-09-17 09:48:10 +02:00
|
|
|
else
|
2016-04-05 14:42:48 +02:00
|
|
|
maxLevel = job.getMaxLevel();
|
2015-09-17 09:48:10 +02:00
|
|
|
|
2016-03-30 15:42:36 +02:00
|
|
|
if (Jobs.getGCManager().fixAtMaxLevel && res.getInt(2) == maxLevel)
|
2015-09-17 09:48:10 +02:00
|
|
|
level = res.getInt(2);
|
|
|
|
|
|
|
|
info.add(res.getString(1) + ":" + res.getInt(2) + ":" + level + ":" + res.getInt(3));
|
|
|
|
}
|
2015-11-25 16:14:48 +01:00
|
|
|
res.close();
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.close();
|
|
|
|
return info;
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2016-04-21 13:47:10 +02:00
|
|
|
public PlayerInfo loadPlayerData(UUID uuid) {
|
|
|
|
PlayerInfo pInfo = null;
|
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return pInfo;
|
|
|
|
PreparedStatement prest = null;
|
|
|
|
try {
|
|
|
|
prest = conn.prepareStatement("SELECT * FROM `" + prefix + "users` WHERE `player_uuid` = ?;");
|
|
|
|
prest.setString(1, uuid.toString());
|
|
|
|
ResultSet res = prest.executeQuery();
|
|
|
|
while (res.next()) {
|
|
|
|
pInfo = new PlayerInfo(res.getString("username"), res.getInt("id"));
|
|
|
|
Jobs.getPlayerManager().getPlayerMap().put(res.getString("player_uuid"), pInfo);
|
|
|
|
}
|
|
|
|
res.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
} finally {
|
|
|
|
if (prest != null)
|
|
|
|
try {
|
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return pInfo;
|
|
|
|
}
|
|
|
|
|
2016-03-30 15:42:36 +02:00
|
|
|
public void loadPlayerData() {
|
|
|
|
Jobs.getPlayerManager().getPlayerMap().clear();
|
2016-03-10 13:48:15 +01:00
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return;
|
2016-03-30 15:42:36 +02:00
|
|
|
PreparedStatement prest = null;
|
2016-03-10 13:48:15 +01:00
|
|
|
try {
|
2016-03-30 15:42:36 +02:00
|
|
|
prest = conn.prepareStatement("SELECT * FROM `" + prefix + "users`;");
|
2016-03-10 13:48:15 +01:00
|
|
|
ResultSet res = prest.executeQuery();
|
|
|
|
while (res.next()) {
|
2016-03-30 15:42:36 +02:00
|
|
|
Jobs.getPlayerManager().getPlayerMap().put(res.getString("player_uuid"), new PlayerInfo(res.getString("username"), res.getInt("id")));
|
2016-01-04 12:44:18 +01:00
|
|
|
}
|
2016-03-10 13:48:15 +01:00
|
|
|
res.close();
|
|
|
|
return;
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
2016-03-30 15:42:36 +02:00
|
|
|
} finally {
|
2016-03-10 13:48:15 +01:00
|
|
|
if (prest != null)
|
2016-03-30 15:42:36 +02:00
|
|
|
try {
|
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
2016-03-10 13:48:15 +01:00
|
|
|
}
|
2015-12-17 13:04:34 +01:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
/**
|
|
|
|
* Delete job from archive
|
|
|
|
* @param player - player that wishes to quit the job
|
|
|
|
* @param job - job that the player wishes to quit
|
|
|
|
*/
|
|
|
|
public synchronized void deleteArchive(JobsPlayer jPlayer, Job job) {
|
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return;
|
|
|
|
try {
|
2016-03-30 15:42:36 +02:00
|
|
|
PreparedStatement prest = conn.prepareStatement("DELETE FROM `" + prefix + "archive` WHERE `userid` = ? AND `job` = ?;");
|
|
|
|
prest.setInt(1, jPlayer.getUserId());
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.setString(2, job.getName());
|
|
|
|
prest.execute();
|
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Save player-job information
|
|
|
|
* @param jobInfo - the information getting saved
|
|
|
|
*/
|
2016-03-30 15:42:36 +02:00
|
|
|
public void save(JobsPlayer player) {
|
2015-09-17 09:48:10 +02:00
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return;
|
|
|
|
try {
|
2016-01-30 13:45:13 +01:00
|
|
|
PreparedStatement prest = conn.prepareStatement("UPDATE `" + prefix
|
2016-03-30 15:42:36 +02:00
|
|
|
+ "jobs` SET `level` = ?, `experience` = ? WHERE `userid` = ? AND `job` = ?;");
|
2015-09-17 09:48:10 +02:00
|
|
|
for (JobProgression progression : player.getJobProgression()) {
|
|
|
|
prest.setInt(1, progression.getLevel());
|
|
|
|
prest.setInt(2, (int) progression.getExperience());
|
2016-03-30 15:42:36 +02:00
|
|
|
prest.setInt(3, player.getUserId());
|
|
|
|
prest.setString(4, progression.getJob().getName());
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.execute();
|
|
|
|
}
|
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
|
|
|
|
2016-03-30 15:42:36 +02:00
|
|
|
public void savePoints(JobsPlayer player) {
|
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return;
|
|
|
|
try {
|
|
|
|
PlayerPoints pointInfo = Jobs.getPlayerManager().getPointsData().getPlayerPointsInfo(player.getPlayerUUID());
|
|
|
|
|
|
|
|
String req = "UPDATE `" + prefix + "points` SET `totalpoints` = ?, `currentpoints` = ? WHERE `userid` = ?;";
|
|
|
|
if (pointInfo.isNewEntry()) {
|
|
|
|
pointInfo.setNewEntry(false);
|
|
|
|
req = "INSERT INTO `" + prefix + "points` (`totalpoints`, `currentpoints`, `userid`) VALUES (?, ?, ?);";
|
|
|
|
}
|
|
|
|
|
|
|
|
PreparedStatement prest = conn.prepareStatement(req);
|
|
|
|
|
|
|
|
prest.setDouble(1, pointInfo.getTotalPoints());
|
|
|
|
prest.setDouble(2, pointInfo.getCurrentPoints());
|
|
|
|
prest.setInt(3, player.getUserId());
|
|
|
|
prest.execute();
|
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void loadPoints(JobsPlayer player) {
|
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return;
|
|
|
|
try {
|
|
|
|
PreparedStatement prest = conn.prepareStatement("SELECT `totalpoints`, `currentpoints` FROM `" + prefix + "points` WHERE `userid` = ?;");
|
|
|
|
prest.setInt(1, player.getUserId());
|
|
|
|
ResultSet res = prest.executeQuery();
|
|
|
|
|
|
|
|
if (res.next()) {
|
|
|
|
Jobs.getPlayerManager().getPointsData().addPlayer(player.getPlayerUUID(), res.getDouble("currentpoints"), res.getDouble("totalpoints"));
|
|
|
|
} else {
|
|
|
|
Jobs.getPlayerManager().getPointsData().addPlayer(player.getPlayerUUID());
|
|
|
|
}
|
|
|
|
res.close();
|
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
/**
|
|
|
|
* Save player-job information
|
|
|
|
* @param jobInfo - the information getting saved
|
|
|
|
*/
|
2016-01-22 13:42:25 +01:00
|
|
|
public void saveLog(JobsPlayer player) {
|
2015-09-17 09:48:10 +02:00
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return;
|
|
|
|
try {
|
|
|
|
|
|
|
|
PreparedStatement prest = conn.prepareStatement("UPDATE `" + prefix
|
2016-03-30 15:42:36 +02:00
|
|
|
+ "log` SET `count` = ?, `money` = ?, `exp` = ? WHERE `userid` = ? AND `time` = ? AND `action` = ? AND `itemname` = ?;");
|
2015-09-17 09:48:10 +02:00
|
|
|
for (Log log : player.getLog()) {
|
|
|
|
for (Entry<String, LogAmounts> one : log.getAmountList().entrySet()) {
|
|
|
|
if (one.getValue().isNewEntry())
|
|
|
|
continue;
|
|
|
|
|
|
|
|
prest.setInt(1, one.getValue().getCount());
|
|
|
|
prest.setDouble(2, one.getValue().getMoney());
|
|
|
|
prest.setDouble(3, one.getValue().getExp());
|
|
|
|
|
2016-03-30 15:42:36 +02:00
|
|
|
prest.setInt(4, player.getUserId());
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.setInt(5, log.getDate());
|
|
|
|
prest.setString(6, log.getActionType());
|
|
|
|
prest.setString(7, one.getKey());
|
|
|
|
prest.execute();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
|
|
|
prest = conn.prepareStatement("INSERT INTO `" + prefix
|
2016-03-30 15:42:36 +02:00
|
|
|
+ "log` (`userid`, `time`, `action`, `itemname`, `count`, `money`, `exp`) VALUES (?, ?, ?, ?, ?, ?, ?);");
|
2015-09-17 09:48:10 +02:00
|
|
|
for (Log log : player.getLog()) {
|
|
|
|
for (Entry<String, LogAmounts> one : log.getAmountList().entrySet()) {
|
|
|
|
|
|
|
|
if (!one.getValue().isNewEntry())
|
|
|
|
continue;
|
|
|
|
|
|
|
|
one.getValue().setNewEntry(false);
|
|
|
|
|
2016-03-30 15:42:36 +02:00
|
|
|
prest.setInt(1, player.getUserId());
|
|
|
|
prest.setInt(2, log.getDate());
|
|
|
|
prest.setString(3, log.getActionType());
|
|
|
|
prest.setString(4, one.getKey());
|
|
|
|
prest.setInt(5, one.getValue().getCount());
|
|
|
|
prest.setDouble(6, one.getValue().getMoney());
|
|
|
|
prest.setDouble(7, one.getValue().getExp());
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.execute();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Save player-job information
|
|
|
|
* @param jobInfo - the information getting saved
|
|
|
|
*/
|
|
|
|
public void loadLog(JobsPlayer player) {
|
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return;
|
|
|
|
try {
|
|
|
|
|
|
|
|
int time = TimeManage.timeInInt();
|
|
|
|
|
2016-03-30 15:42:36 +02:00
|
|
|
PreparedStatement prest = conn.prepareStatement("SELECT * FROM `" + prefix + "log` WHERE `userid` = ? AND `time` = ? ;");
|
|
|
|
prest.setInt(1, player.getUserId());
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.setInt(2, time);
|
|
|
|
ResultSet res = prest.executeQuery();
|
|
|
|
while (res.next()) {
|
|
|
|
Loging.loadToLog(player, res.getString("action"), res.getString("itemname"), res.getInt("count"), res.getDouble("money"), res.getDouble("exp"));
|
|
|
|
}
|
2015-09-17 17:28:23 +02:00
|
|
|
res.close();
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
|
|
|
|
2016-01-09 13:58:33 +01:00
|
|
|
/**
|
|
|
|
* Save player-explore information
|
|
|
|
* @param jobexplore - the information getting saved
|
|
|
|
*/
|
2016-01-22 13:42:25 +01:00
|
|
|
public void saveExplore() {
|
2016-01-09 13:58:33 +01:00
|
|
|
if (!Jobs.getExplore().isExploreEnabled())
|
|
|
|
return;
|
2016-01-11 10:19:09 +01:00
|
|
|
|
2016-01-09 13:58:33 +01:00
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return;
|
|
|
|
try {
|
2016-01-11 10:19:09 +01:00
|
|
|
|
|
|
|
PreparedStatement prest = null;
|
2016-03-30 15:42:36 +02:00
|
|
|
if (Jobs.getGCManager().storageMethod.equalsIgnoreCase("sqlite")) {
|
2016-01-11 10:19:09 +01:00
|
|
|
prest = conn.prepareStatement("DELETE from `" + prefix + "explore`;");
|
|
|
|
} else
|
|
|
|
prest = conn.prepareStatement("TRUNCATE TABLE `" + prefix + "explore`;");
|
|
|
|
|
2016-01-09 13:58:33 +01:00
|
|
|
prest.execute();
|
|
|
|
prest.close();
|
|
|
|
|
|
|
|
PreparedStatement prest2 = conn.prepareStatement("INSERT INTO `" + prefix + "explore` (`worldname`, `chunkX`, `chunkZ`, `playerName`) VALUES (?, ?, ?, ?);");
|
2016-01-30 13:45:13 +01:00
|
|
|
conn.setAutoCommit(false);
|
2016-01-09 13:58:33 +01:00
|
|
|
for (Entry<String, ExploreRegion> worlds : Jobs.getExplore().getWorlds().entrySet()) {
|
|
|
|
for (ExploreChunk oneChunk : worlds.getValue().getChunks()) {
|
|
|
|
for (String oneuser : oneChunk.getPlayers()) {
|
|
|
|
prest2.setString(1, worlds.getKey());
|
|
|
|
prest2.setInt(2, oneChunk.getX());
|
|
|
|
prest2.setInt(3, oneChunk.getZ());
|
|
|
|
prest2.setString(4, oneuser);
|
2016-01-30 13:45:13 +01:00
|
|
|
prest2.addBatch();
|
2016-01-09 13:58:33 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2016-01-30 13:45:13 +01:00
|
|
|
prest2.executeBatch();
|
|
|
|
conn.commit();
|
|
|
|
conn.setAutoCommit(true);
|
2016-01-09 13:58:33 +01:00
|
|
|
prest2.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Save player-explore information
|
|
|
|
* @param jobexplore - the information getting saved
|
|
|
|
*/
|
2016-01-22 13:42:25 +01:00
|
|
|
public void loadExplore() {
|
2016-01-09 13:58:33 +01:00
|
|
|
if (!Jobs.getExplore().isExploreEnabled())
|
|
|
|
return;
|
2016-01-11 10:19:09 +01:00
|
|
|
|
2016-01-09 13:58:33 +01:00
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return;
|
|
|
|
try {
|
|
|
|
|
|
|
|
PreparedStatement prest = conn.prepareStatement("SELECT * FROM `" + prefix + "explore`;");
|
|
|
|
ResultSet res = prest.executeQuery();
|
|
|
|
while (res.next()) {
|
|
|
|
Jobs.getExplore().ChunkRespond(res.getString("playerName"), res.getString("worldname"), res.getInt("chunkX"), res.getInt("chunkZ"));
|
|
|
|
}
|
|
|
|
res.close();
|
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-09-17 17:28:23 +02:00
|
|
|
/**
|
|
|
|
* Save player-job information
|
|
|
|
* @param jobInfo - the information getting saved
|
|
|
|
* @return
|
|
|
|
*/
|
2016-03-30 15:42:36 +02:00
|
|
|
public List<Integer> getLognameList(int fromtime, int untiltime) {
|
2015-09-17 17:28:23 +02:00
|
|
|
JobsConnection conn = getConnection();
|
2016-03-30 15:42:36 +02:00
|
|
|
List<Integer> nameList = new ArrayList<Integer>();
|
2015-09-17 17:28:23 +02:00
|
|
|
if (conn == null)
|
2016-03-30 15:42:36 +02:00
|
|
|
return nameList;
|
2015-09-17 17:28:23 +02:00
|
|
|
try {
|
|
|
|
|
2016-03-30 15:42:36 +02:00
|
|
|
PreparedStatement prest = conn.prepareStatement("SELECT `userid` FROM `" + prefix + "log` WHERE `time` >= ? AND `time` <= ? ;");
|
2015-09-17 17:28:23 +02:00
|
|
|
prest.setInt(1, fromtime);
|
|
|
|
prest.setInt(2, untiltime);
|
|
|
|
ResultSet res = prest.executeQuery();
|
|
|
|
while (res.next()) {
|
2016-03-30 15:42:36 +02:00
|
|
|
if (!nameList.contains(res.getInt("userid")))
|
|
|
|
nameList.add(res.getInt("userid"));
|
2015-09-17 17:28:23 +02:00
|
|
|
}
|
|
|
|
res.close();
|
|
|
|
prest.close();
|
|
|
|
return nameList;
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
2016-03-30 15:42:36 +02:00
|
|
|
return nameList;
|
2015-09-17 17:28:23 +02:00
|
|
|
}
|
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
/**
|
|
|
|
* Show top list
|
|
|
|
* @param toplist - toplist by jobs name
|
|
|
|
* @return
|
|
|
|
*/
|
2016-01-22 13:42:25 +01:00
|
|
|
public ArrayList<TopList> toplist(String jobsname, int limit) {
|
2015-09-17 09:48:10 +02:00
|
|
|
ArrayList<TopList> jobs = new ArrayList<TopList>();
|
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return jobs;
|
|
|
|
try {
|
2016-04-21 13:47:10 +02:00
|
|
|
PreparedStatement prest = conn.prepareStatement("SELECT DISTINCT(userid), `level`, `experience` FROM `" + prefix
|
|
|
|
+ "jobs` WHERE `job` LIKE ? ORDER BY `level` DESC, LOWER(experience) DESC LIMIT " + limit + ", 15;");
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.setString(1, jobsname);
|
|
|
|
ResultSet res = prest.executeQuery();
|
2016-03-13 15:35:23 +01:00
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
while (res.next()) {
|
2016-04-21 13:47:10 +02:00
|
|
|
Entry<String, PlayerInfo> info = Jobs.getPlayerManager().getPlayerInfoById(res.getInt("userid"));
|
2016-03-13 15:35:23 +01:00
|
|
|
|
2016-03-30 15:42:36 +02:00
|
|
|
if (info == null)
|
|
|
|
continue;
|
2015-12-17 13:04:34 +01:00
|
|
|
|
2016-03-30 15:42:36 +02:00
|
|
|
if (info.getValue().getName() == null)
|
2015-12-17 13:04:34 +01:00
|
|
|
continue;
|
|
|
|
|
2016-03-30 15:42:36 +02:00
|
|
|
String name = info.getValue().getName();
|
2015-12-17 13:04:34 +01:00
|
|
|
Player player = Bukkit.getPlayer(name);
|
2015-10-13 12:13:22 +02:00
|
|
|
if (player != null) {
|
|
|
|
|
|
|
|
JobsPlayer jobsinfo = Jobs.getPlayerManager().getJobsPlayer(player);
|
|
|
|
Job job = Jobs.getJob(jobsname);
|
2016-06-09 17:35:24 +02:00
|
|
|
if (job != null && jobsinfo != null) {
|
2015-10-13 12:13:22 +02:00
|
|
|
JobProgression prog = jobsinfo.getJobProgression(job);
|
2016-06-09 17:35:24 +02:00
|
|
|
if (prog != null)
|
|
|
|
jobs.add(new TopList(jobsinfo.getUserId(), prog.getLevel(), (int) prog.getExperience()));
|
2015-10-13 12:13:22 +02:00
|
|
|
}
|
2016-04-21 13:47:10 +02:00
|
|
|
} else {
|
|
|
|
jobs.add(new TopList(res.getInt("userid"), res.getInt("level"), res.getInt("experience")));
|
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
2015-11-25 16:14:48 +01:00
|
|
|
res.close();
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
return jobs;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the number of players that have a particular job
|
|
|
|
* @param job - the job
|
|
|
|
* @return the number of players that have a particular job
|
|
|
|
*/
|
|
|
|
public synchronized int getSlotsTaken(Job job) {
|
|
|
|
int slot = 0;
|
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return slot;
|
|
|
|
try {
|
|
|
|
PreparedStatement prest = conn.prepareStatement("SELECT COUNT(*) FROM `" + prefix + "jobs` WHERE `job` = ?;");
|
|
|
|
prest.setString(1, job.getName());
|
|
|
|
ResultSet res = prest.executeQuery();
|
|
|
|
if (res.next()) {
|
|
|
|
slot = res.getInt(1);
|
|
|
|
}
|
2015-11-25 16:14:48 +01:00
|
|
|
res.close();
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
}
|
|
|
|
return slot;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the current schema version
|
|
|
|
* @return schema version number
|
|
|
|
*/
|
|
|
|
protected int getSchemaVersion() {
|
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return 0;
|
|
|
|
PreparedStatement prest = null;
|
|
|
|
try {
|
|
|
|
prest = conn.prepareStatement("SELECT `value` FROM `" + prefix + "config` WHERE `key` = ?;");
|
|
|
|
prest.setString(1, "version");
|
|
|
|
ResultSet res = prest.executeQuery();
|
|
|
|
if (res.next()) {
|
|
|
|
return Integer.valueOf(res.getString(1));
|
|
|
|
}
|
2015-11-25 16:14:48 +01:00
|
|
|
res.close();
|
2015-09-17 09:48:10 +02:00
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
} catch (NumberFormatException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
} finally {
|
|
|
|
if (prest != null) {
|
2015-08-21 15:10:08 +02:00
|
|
|
try {
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.close();
|
|
|
|
} catch (SQLException e) {
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
|
|
|
|
2015-09-17 09:48:10 +02:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Updates schema to version number
|
|
|
|
* @param version
|
|
|
|
*/
|
|
|
|
protected void updateSchemaVersion(int version) {
|
|
|
|
updateSchemaConfig("version", Integer.toString(version));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Updates configuration value
|
|
|
|
* @param key - the configuration key
|
|
|
|
* @param value - the configuration value
|
|
|
|
*/
|
|
|
|
private void updateSchemaConfig(String key, String value) {
|
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
if (conn == null)
|
|
|
|
return;
|
|
|
|
PreparedStatement prest = null;
|
|
|
|
try {
|
|
|
|
prest = conn.prepareStatement("UPDATE `" + prefix + "config` SET `value` = ? WHERE `key` = ?;");
|
|
|
|
prest.setString(1, value);
|
|
|
|
prest.setString(2, key);
|
|
|
|
prest.execute();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
e.printStackTrace();
|
|
|
|
} finally {
|
|
|
|
if (prest != null) {
|
2015-08-21 15:10:08 +02:00
|
|
|
try {
|
2015-09-17 09:48:10 +02:00
|
|
|
prest.close();
|
2015-08-21 15:10:08 +02:00
|
|
|
} catch (SQLException e) {
|
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Executes an SQL query
|
|
|
|
* @param sql - The SQL
|
|
|
|
* @throws SQLException
|
|
|
|
*/
|
|
|
|
public void executeSQL(String sql) throws SQLException {
|
|
|
|
JobsConnection conn = getConnection();
|
|
|
|
Statement stmt = conn.createStatement();
|
|
|
|
try {
|
|
|
|
stmt.execute(sql);
|
|
|
|
} finally {
|
|
|
|
try {
|
|
|
|
stmt.close();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get a database connection
|
|
|
|
* @return JobsConnection object
|
|
|
|
* @throws SQLException
|
|
|
|
*/
|
|
|
|
protected JobsConnection getConnection() {
|
|
|
|
try {
|
|
|
|
return pool.getConnection();
|
|
|
|
} catch (SQLException e) {
|
|
|
|
Jobs.getPluginLogger().severe("Unable to connect to the database: " + e.getMessage());
|
|
|
|
return null;
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|
2015-09-17 09:48:10 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Close all active database handles
|
|
|
|
*/
|
|
|
|
public synchronized void closeConnections() {
|
|
|
|
pool.closeConnection();
|
|
|
|
}
|
2015-08-21 15:10:08 +02:00
|
|
|
}
|