1
1
mirror of https://github.com/geekfrog/PermissionsTime.git synced 2025-09-06 11:06:58 +00:00

支持跨服权限

This commit is contained in:
GeekFrog
2017-07-15 13:06:35 +08:00
parent 6b628c55cb
commit 56d0167386
15 changed files with 108 additions and 34 deletions

View File

@ -55,7 +55,7 @@ public class GiveCmd implements Runnable {
if (PluginCfg.IS_DEBUG) {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + uuid.toString() + "\n" + pack.toString() + "\n" + time + ""));
}
if (sm.giveTime(uuid.toString(), packageName, days)) {
if (sm.giveTime(((PluginCfg.USE_MYSQL && pack.getGlobal()) ? "g:" : "") + uuid.toString(), packageName, days)) {
if (player.isOnline()) {
Player p = player.getPlayer();
try {

View File

@ -108,10 +108,10 @@ public class MainCommand implements CommandExecutor {
sender.sendMessage(StrUtil.messageFormat("/" + pm.PLUGIN_NAME_LOWER_CASE + " set <playerName> <packageName> <time> \n - Set player package <time>day."));
}
if (!isPlayer || sender.isOp() || sender.hasPermission(pm.PLUGIN_NAME_LOWER_CASE + ".remove")) {
sender.sendMessage(StrUtil.messageFormat("/" + pm.PLUGIN_NAME_LOWER_CASE + " remove <playerName> <packageName> \n - Remove player package."));
sender.sendMessage(StrUtil.messageFormat("/" + pm.PLUGIN_NAME_LOWER_CASE + " remove <playerName> <packageName> [t/f delGlobal] \n - Remove player package."));
}
if (!isPlayer || sender.isOp() || sender.hasPermission(pm.PLUGIN_NAME_LOWER_CASE + ".removeall")) {
sender.sendMessage(StrUtil.messageFormat("/" + pm.PLUGIN_NAME_LOWER_CASE + " removeall <playerName> \n - Remove player all package."));
sender.sendMessage(StrUtil.messageFormat("/" + pm.PLUGIN_NAME_LOWER_CASE + " removeall <playerName> [t/f delGlobal] \n - Remove player all package."));
}
if (!isPlayer || sender.isOp() || sender.hasPermission(pm.PLUGIN_NAME_LOWER_CASE + ".reload")) {
sender.sendMessage(StrUtil.messageFormat("/" + pm.PLUGIN_NAME_LOWER_CASE + " reload \n -Reloads the config file."));

View File

@ -43,7 +43,7 @@ public class MeCmd implements Runnable {
PermissionPackageBean pc = PackagesCfg.PACKAGES.get(pdb.getPackageName());
if (pc != null) {
String expireString = StrUtil.timestampToString(pdb.getExpire());
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "权限包: {0}({1}), 到期时间: {2}", pc.getDisplayName(), pdb.getPackageName(), expireString));
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "{0}权限包: {1}({2}), 到期时间: {3}", pdb.getGlobal() ? "*" : "", pc.getDisplayName(), pdb.getPackageName(), expireString));
}
}
} else {

View File

@ -28,7 +28,7 @@ public class PackagesCmd implements Runnable {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "共有{0}种权限包", PackagesCfg.PACKAGES.size()));
for (Entry<String, PermissionPackageBean> e : PackagesCfg.PACKAGES.entrySet()) {
PermissionPackageBean p = e.getValue();
sender.sendMessage(StrUtil.messageFormat("PackgeName: {0}, DisplayName: {1}", e.getKey(), p.getDisplayName()));
sender.sendMessage(StrUtil.messageFormat("{0}PackgeName: {1}, DisplayName: {2}", p.getGlobal() ? "*" : "", e.getKey(), p.getDisplayName()));
}
} else if (args.length == 2) {
String packageName = args[1];

View File

@ -30,8 +30,12 @@ public class RemoveAllCmd implements Runnable {
@Override
public void run() {
if (args.length == 2) {
if (args.length == 2 || args.length == 3) {
String playerName = args[1];
boolean delGlobal = false;
if (args.length == 3 && "t".equalsIgnoreCase(args[2]) && PluginCfg.USE_MYSQL) {
delGlobal = true;
}
OfflinePlayer player = pm.getOfflinePlayer(playerName);
if (player != null) {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "执行中,请等待..."));
@ -39,7 +43,7 @@ public class RemoveAllCmd implements Runnable {
if (PluginCfg.IS_DEBUG) {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + uuid.toString()));
}
if (sm.removeAllTime(uuid.toString())) {
if (sm.removeAllTime((delGlobal ? "g:" : "") + uuid.toString())) {
if (player.isOnline()) {
Player p = player.getPlayer();
try {

View File

@ -31,9 +31,13 @@ public class RemoveCmd implements Runnable {
@Override
public void run() {
if (args.length == 3) {
if (args.length == 3 || args.length == 4) {
String playerName = args[1];
String packageName = args[2];
boolean delGlobal = false;
if (args.length == 4 && "t".equalsIgnoreCase(args[3]) && PluginCfg.USE_MYSQL) {
delGlobal = true;
}
PermissionPackageBean pack = PackagesCfg.PACKAGES.get(packageName);
if (pack != null) {
OfflinePlayer player = pm.getOfflinePlayer(playerName);
@ -43,7 +47,7 @@ public class RemoveCmd implements Runnable {
if (PluginCfg.IS_DEBUG) {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + uuid.toString() + "\n" + pack.toString()));
}
if (sm.removeTime(uuid.toString(), packageName)) {
if (sm.removeTime((delGlobal ? "g:" : "") + uuid.toString(), packageName)) {
if (player.isOnline()) {
Player p = player.getPlayer();
try {

View File

@ -55,7 +55,7 @@ public class SetCmd implements Runnable {
if (PluginCfg.IS_DEBUG) {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + uuid.toString() + "\n" + pack.toString() + "\n" + time + ""));
}
if (sm.setTime(uuid.toString(), packageName, days)) {
if (sm.setTime(((PluginCfg.USE_MYSQL && pack.getGlobal()) ? "g:" : "") + uuid.toString(), packageName, days)) {
if (player.isOnline()) {
Player p = player.getPlayer();
try {

View File

@ -23,8 +23,8 @@ public class LangCfg extends PluginConfig {
@Override
protected void loadToDo() {
NO_PERMISSION = setGetDefault("nopermission", "&4你没有权限这么做");
CONFIG_RELOADED = setGetDefault("configReloaded", "&a配置重载完成");
NO_PERMISSION = getConfig().getString("nopermission", "&4你没有权限这么做");
CONFIG_RELOADED = getConfig().getString("configReloaded", "&a配置重载完成");
}
}

View File

@ -16,6 +16,7 @@ public class PluginCfg extends PluginConfig {
public static boolean IS_DEBUG = false;
public static String LANG;
public static boolean USE_MYSQL = false;
public static String SQL_SERVER_ID;
public static String SQL_HOSTNAME;
public static int SQL_PORT;
public static String SQL_DATABASE;
@ -33,6 +34,7 @@ public class PluginCfg extends PluginConfig {
getConfig().set("metrics", true);
getConfig().set("debug", false);
getConfig().set("mysql.enable", false);
getConfig().set("mysql.serverId", "default");
getConfig().set("mysql.hostname", "localhost");
getConfig().set("mysql.port", 3306);
getConfig().set("mysql.database", "minecraft");
@ -49,6 +51,7 @@ public class PluginCfg extends PluginConfig {
LANG = setGetDefault("lang", "zh-cn");
USE_MYSQL = setGetDefault("mysql.enable", false);
if (USE_MYSQL) {
SQL_SERVER_ID = setGetDefault("mysql.serverId", "default");
SQL_HOSTNAME = setGetDefault("mysql.hostname", "localhost");
SQL_PORT = setGetDefault("mysql.port", 3306);
SQL_DATABASE = setGetDefault("mysql.database", "minecraft");

View File

@ -5,7 +5,7 @@ import java.util.List;
import gg.frog.mc.permissionstime.model.db.PlayerDataBean;
public interface IPlayerDataService {
public interface IPlayerDataDao {
static long TIME_UNIT = 24 * 60 * 60 * 1000L;// 一天

View File

@ -5,8 +5,8 @@ import java.util.List;
import gg.frog.mc.permissionstime.PluginMain;
import gg.frog.mc.permissionstime.config.PluginCfg;
import gg.frog.mc.permissionstime.database.impl.MySQLPlayerDataService;
import gg.frog.mc.permissionstime.database.impl.SqlitePlayerDataService;
import gg.frog.mc.permissionstime.database.impl.MySQLPlayerDataDao;
import gg.frog.mc.permissionstime.database.impl.SqlitePlayerDataDao;
import gg.frog.mc.permissionstime.model.db.PlayerDataBean;
import gg.frog.mc.permissionstime.utils.StrUtil;
import lib.PatPeter.SQLibrary.Database;
@ -17,7 +17,7 @@ public class SqlManager {
private PluginMain pm;
private Database db = null;
private IPlayerDataService pds = null;
private IPlayerDataDao pds = null;
public SqlManager(PluginMain pm) {
this.pm = pm;
@ -33,10 +33,10 @@ public class SqlManager {
}
if (PluginCfg.USE_MYSQL) {
db = new MySQL(PluginMain.LOG, "[" + pm.PLUGIN_NAME + "] ", PluginCfg.SQL_HOSTNAME, PluginCfg.SQL_PORT, PluginCfg.SQL_DATABASE, PluginCfg.SQL_USERNAME, PluginCfg.SQL_PASSWORD);
pds = new MySQLPlayerDataService(pm, this);
pds = new MySQLPlayerDataDao(pm, this);
} else {
db = new SQLite(PluginMain.LOG, "[" + pm.PLUGIN_NAME + "] ", pm.getDataFolder().getAbsolutePath(), "playerData", ".db");
pds = new SqlitePlayerDataService(pm, this);
pds = new SqlitePlayerDataDao(pm, this);
}
if(db.open()) {
try {

View File

@ -7,17 +7,17 @@ import java.util.List;
import gg.frog.mc.permissionstime.PluginMain;
import gg.frog.mc.permissionstime.config.PluginCfg;
import gg.frog.mc.permissionstime.database.IPlayerDataService;
import gg.frog.mc.permissionstime.database.IPlayerDataDao;
import gg.frog.mc.permissionstime.database.SqlManager;
import gg.frog.mc.permissionstime.model.db.PlayerDataBean;
import gg.frog.mc.permissionstime.utils.StrUtil;
import gg.frog.mc.permissionstime.utils.database.DatabaseUtil;
public class MySQLPlayerDataService extends DatabaseUtil implements IPlayerDataService {
public class MySQLPlayerDataDao extends DatabaseUtil implements IPlayerDataDao {
private PluginMain pm;
public MySQLPlayerDataService(PluginMain pm, SqlManager sm) {
public MySQLPlayerDataDao(PluginMain pm, SqlManager sm) {
super(sm);
this.pm = pm;
}
@ -41,7 +41,7 @@ public class MySQLPlayerDataService extends DatabaseUtil implements IPlayerDataS
@Override
public boolean creatTable() throws Exception {
String sql = "CREATE TABLE `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `uuid` VARCHAR (255) NOT NULL, `packageName` VARCHAR (255) NOT NULL, `expire` BIGINT NOT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `UUID_PACKAGE` (`uuid`, `packageName`));";
String sql = "CREATE TABLE `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `uuid` VARCHAR (255) NOT NULL, `packageName` VARCHAR (255) NOT NULL, `serverId` VARCHAR (255), `expire` BIGINT NOT NULL, PRIMARY KEY (`id`), UNIQUE INDEX `UUID_PACKAGE_SERVERID` (`uuid`, `packageName`, `serverId`));";
try {
getDB().query(sql);
return true;
@ -58,7 +58,11 @@ public class MySQLPlayerDataService extends DatabaseUtil implements IPlayerDataS
if (pdb.getId() != null) {
sql = "UPDATE `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` SET `uuid`='" + pdb.getUuid() + "', `packageName`='" + pdb.getPackageName() + "', `expire`='" + pdb.getExpire() + "' WHERE (`id`='" + pdb.getId() + "');";
} else {
sql = "INSERT INTO `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` (`uuid`, `packageName`, `expire`) VALUES ('" + pdb.getUuid() + "', '" + pdb.getPackageName() + "', " + pdb.getExpire() + ");";
if (bean.getGlobal()) {
sql = "INSERT INTO `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` (`uuid`, `packageName`, `serverId`, `expire`) VALUES ('" + pdb.getUuid() + "', '" + pdb.getPackageName() + "', NULL, " + pdb.getExpire() + ");";
} else {
sql = "INSERT INTO `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` (`uuid`, `packageName`, `serverId`, `expire`) VALUES ('" + pdb.getUuid() + "', '" + pdb.getPackageName() + "', '" + PluginCfg.SQL_SERVER_ID + "', " + pdb.getExpire() + ");";
}
}
try {
getDB().query(sql);
@ -71,31 +75,51 @@ public class MySQLPlayerDataService extends DatabaseUtil implements IPlayerDataS
@Override
public boolean setTime(String uuid, String packageName, int days) throws Exception {
boolean global = uuid.startsWith("g:") ? true : false;
if (global) {
uuid = uuid.substring(2);
}
long now = new Date().getTime();
long addTime = days * TIME_UNIT;
long expire = now + addTime;
PlayerDataBean pdb = queryPlayerData(uuid, packageName);
if (pdb == null) {
pdb = new PlayerDataBean(null, uuid, packageName, expire);
if (global) {
pdb.setGlobal(true);
}
return setPlayerData(pdb);
} else {
pdb.setExpire(expire);
if (global) {
pdb.setGlobal(true);
}
return setPlayerData(pdb);
}
}
@Override
public boolean addTime(String uuid, String packageName, int days) throws Exception {
boolean global = uuid.startsWith("g:") ? true : false;
if (global) {
uuid = uuid.substring(2);
}
long now = new Date().getTime();
long addTime = days * TIME_UNIT;
long expire = now + addTime;
PlayerDataBean pdb = queryPlayerData(uuid, packageName);
PlayerDataBean pdb = queryPlayerData((global ? "g:" : "") + uuid, packageName);
if (pdb == null) {
pdb = new PlayerDataBean(null, uuid, packageName, expire);
if (global) {
pdb.setGlobal(true);
}
return setPlayerData(pdb);
} else {
if (pdb.getExpire() < now) {
pdb.setExpire(expire);
if (global) {
pdb.setGlobal(true);
}
return setPlayerData(pdb);
} else {
String sql = "UPDATE `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` SET `expire`='" + addTime + "' WHERE (`id`='" + pdb.getId() + "');";
@ -112,7 +136,7 @@ public class MySQLPlayerDataService extends DatabaseUtil implements IPlayerDataS
@Override
public List<PlayerDataBean> queryPlayerData(String uuid) throws Exception {
String sql = "SELECT * FROM `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` where (`uuid`='" + uuid + "');";
String sql = "SELECT * FROM `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` where `uuid`='" + uuid + "' AND (`serverId`='" + PluginCfg.SQL_SERVER_ID + "' OR `serverId` IS NULL);";
try {
List<PlayerDataBean> pdbList = new ArrayList<>();
ResultSet rs = getDB().query(sql);
@ -120,8 +144,12 @@ public class MySQLPlayerDataService extends DatabaseUtil implements IPlayerDataS
long tid = rs.getLong("id");
String tuuid = rs.getString("uuid");
String tpackageName = rs.getString("packageName");
String tserverId = rs.getString("serverId");
long texpire = rs.getLong("expire");
PlayerDataBean tpd = new PlayerDataBean(tid, tuuid, tpackageName, texpire);
if (tserverId == null) {
tpd.setGlobal(true);
}
pdbList.add(tpd);
}
return pdbList;
@ -133,15 +161,23 @@ public class MySQLPlayerDataService extends DatabaseUtil implements IPlayerDataS
@Override
public PlayerDataBean queryPlayerData(String uuid, String packageName) throws Exception {
String sql = "SELECT * FROM `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` where (`uuid`='" + uuid + "' AND `packageName`='" + packageName + "');";
String sql = "SELECT * FROM `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` where `uuid`='" + uuid + "' AND `packageName`='" + packageName + "' AND `serverId`='" + PluginCfg.SQL_SERVER_ID + "';";
if (uuid.startsWith("g:")) {
uuid = uuid.substring(2);
sql = "SELECT * FROM `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` where `uuid`='" + uuid + "' AND `packageName`='" + packageName + "' AND `serverId` IS NULL;";
}
try {
ResultSet rs = getDB().query(sql);
while (rs.next()) {
long tid = rs.getLong("id");
String tuuid = rs.getString("uuid");
String tpackageName = rs.getString("packageName");
String tserverId = rs.getString("serverId");
long texpire = rs.getLong("expire");
PlayerDataBean tpd = new PlayerDataBean(tid, tuuid, tpackageName, texpire);
if (tserverId == null) {
tpd.setGlobal(true);
}
return tpd;
}
return null;
@ -154,7 +190,7 @@ public class MySQLPlayerDataService extends DatabaseUtil implements IPlayerDataS
@Override
public List<PlayerDataBean> queryNotExpirePlayerData(String uuid) throws Exception {
long now = new Date().getTime();
String sql = "SELECT * FROM `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` where (`uuid`='" + uuid + "' AND `expire` > " + now + ");";
String sql = "SELECT * FROM `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` where `uuid`='" + uuid + "' AND (`serverId`='" + PluginCfg.SQL_SERVER_ID + "' OR `serverId` IS NULL) AND `expire` > " + now + ";";
try {
List<PlayerDataBean> pdbList = new ArrayList<>();
ResultSet rs = getDB().query(sql);
@ -162,8 +198,12 @@ public class MySQLPlayerDataService extends DatabaseUtil implements IPlayerDataS
long tid = rs.getLong("id");
String tuuid = rs.getString("uuid");
String tpackageName = rs.getString("packageName");
String tserverId = rs.getString("serverId");
long texpire = rs.getLong("expire");
PlayerDataBean tpd = new PlayerDataBean(tid, tuuid, tpackageName, texpire);
if (tserverId == null) {
tpd.setGlobal(true);
}
pdbList.add(tpd);
}
return pdbList;
@ -175,7 +215,11 @@ public class MySQLPlayerDataService extends DatabaseUtil implements IPlayerDataS
@Override
public boolean delPlayData(String uuid) throws Exception {
String sql = "DELETE FROM `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` WHERE (`uuid`='" + uuid + "');";
String sql = "DELETE FROM `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` WHERE `uuid`='" + uuid + "' AND `serverId`='" + PluginCfg.SQL_SERVER_ID + "';";
if (uuid.startsWith("g:")) {
uuid = uuid.substring(2);
sql = "DELETE FROM `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` WHERE `uuid`='" + uuid + "' AND `serverId` IS NULL;";
}
try {
getDB().query(sql);
return true;
@ -187,7 +231,11 @@ public class MySQLPlayerDataService extends DatabaseUtil implements IPlayerDataS
@Override
public boolean delPlayData(String uuid, String packageName) throws Exception {
String sql = "DELETE FROM `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` WHERE (`uuid`='" + uuid + "' AND `packageName`='" + packageName + "');";
String sql = "DELETE FROM `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` WHERE `uuid`='" + uuid + "' AND `packageName`='" + packageName + "'AND `serverId`='" + PluginCfg.SQL_SERVER_ID + "';";
if (uuid.startsWith("g:")) {
uuid = uuid.substring(2);
sql = "DELETE FROM `" + PluginCfg.SQL_TABLE_PREFIX + "playerData` WHERE `uuid`='" + uuid + "' AND `packageName`='" + packageName + "'AND `serverId` IS NULL;";
}
try {
getDB().query(sql);
return true;

View File

@ -7,17 +7,17 @@ import java.util.List;
import gg.frog.mc.permissionstime.PluginMain;
import gg.frog.mc.permissionstime.config.PluginCfg;
import gg.frog.mc.permissionstime.database.IPlayerDataService;
import gg.frog.mc.permissionstime.database.IPlayerDataDao;
import gg.frog.mc.permissionstime.database.SqlManager;
import gg.frog.mc.permissionstime.model.db.PlayerDataBean;
import gg.frog.mc.permissionstime.utils.StrUtil;
import gg.frog.mc.permissionstime.utils.database.DatabaseUtil;
public class SqlitePlayerDataService extends DatabaseUtil implements IPlayerDataService {
public class SqlitePlayerDataDao extends DatabaseUtil implements IPlayerDataDao {
private PluginMain pm;
public SqlitePlayerDataService(PluginMain pm, SqlManager sm) {
public SqlitePlayerDataDao(PluginMain pm, SqlManager sm) {
super(sm);
this.pm = pm;
}

View File

@ -5,6 +5,7 @@ public class PlayerDataBean {
private Long id;
private String uuid;
private String packageName;
private Boolean global = false;
private Long expire;
public PlayerDataBean() {
@ -43,6 +44,14 @@ public class PlayerDataBean {
this.packageName = packageName;
}
public Boolean getGlobal() {
return global;
}
public void setGlobal(Boolean global) {
this.global = global;
}
public Long getExpire() {
return expire;
}
@ -53,6 +62,7 @@ public class PlayerDataBean {
@Override
public String toString() {
return "PlayerDataBean [id=" + id + ", uuid=" + uuid + ", packageName=" + packageName + ", expire=" + expire + "]";
return "PlayerDataBean [id=" + id + ", uuid=" + uuid + ", packageName=" + packageName + ", global=" + global + ", expire=" + expire + "]";
}
}